Bladeren bron

mejorado la obtención de datos por inspección de objetos

robert2206 8 jaren geleden
bovenliggende
commit
6e5444f53f
5 gewijzigde bestanden met toevoegingen van 51 en 94 verwijderingen
  1. 5 5
      controllers/http_handler.py
  2. BIN
      controllers/http_handler.pyc
  3. 11 11
      controllers/resources.json
  4. 35 78
      models/models.py
  5. BIN
      models/models.pyc

+ 5 - 5
controllers/http_handler.py

@@ -171,7 +171,7 @@ class ApiManager(http.Controller):
             return self.make_response({ 'error': 'cannot be process request' }, 400) # bad request
 
         resource = data['resource']
-        model, filters, blacklist = self.resource_inflater(resource)
+        model, filters, exclude = self.resource_inflater(resource)
 
         response_data = []
 
@@ -181,10 +181,10 @@ class ApiManager(http.Controller):
         result = request.env[model].sudo().search(filters)
 
         for item in result:
-            response_data.append(item.dump(blacklist))
+            response_data.append(item.serialize(exclude))
 
         self.make_info_log('To send data response')
-        return self.make_response(response_data);
+        return self.make_response(response_data)
 
     # --------------------------------------------------------------------------
     # Manage POST request
@@ -341,10 +341,10 @@ class ApiManager(http.Controller):
         try:
             model = str(RESOURCES_MAP[resource]['model'])
             filters = [tuple(f) for f in list(RESOURCES_MAP[resource]['filters'])]
-            blacklist = list(RESOURCES_MAP[resource]['blacklist'])
+            exclude = list(RESOURCES_MAP[resource]['exclude'])
 
             self.make_info_log('Successfully resource inflated')
-            return (model, filters, blacklist)
+            return (model, filters, exclude)
         except Exception, e:
             self.make_error_log('Cannot inflate resource')
             return (None, None, None)

BIN
controllers/http_handler.pyc


+ 11 - 11
controllers/resources.json

@@ -5,7 +5,7 @@
 			["sale_ok", "=", true],
 			["active", "=", true]
 		],
-		"blacklist": [],
+		"exclude": [],
 		"module": "sale"
 	},
 	"product_product": {
@@ -13,31 +13,31 @@
 		"filters": [
 			["active", "=", true]
 		],
-		"blacklist": [],
+		"exclude": [],
 		"module": "sale"
 	},
 	"product_attribute_line": {
 		"model": "product.attribute.line",
 		"filters": [],
-		"blacklist": [],
+		"exclude": [],
 		"module": "sale"
 	},
 	"product_attribute": {
 		"model": "product.attribute",
 		"filters": [],
-		"blacklist": [],
+		"exclude": [],
 		"module": "sale"
 	},
 	"product_attribute_price": {
 		"model": "product.attribute.price",
 		"filters": [],
-		"blacklist": [],
+		"exclude": [],
 		"module": "sale"
 	},
 	"product_attribute_value": {
 		"model": "product.attribute.value",
 		"filters": [],
-		"blacklist": [],
+		"exclude": [],
 		"module": "sale"
 	},
 	"customer": {
@@ -46,7 +46,7 @@
 			["customer", "=", true],
 			["active", "=", true]
 		],
-		"blacklist": [],
+		"exclude": [],
 		"module": "sale"
 	},
 	"lead": {
@@ -55,7 +55,7 @@
 	    	["type", "=", "lead"],
 	    	["active", "=", "active"]
 		],
-		"blacklist": [],
+		"exclude": [],
 		"module": "crm"
 	},
 	"opportunity": {
@@ -64,7 +64,7 @@
 			["type", "=", "opportunity"],
 			["active", "=", true]
 		],
-		"blacklist": [],
+		"exclude": [],
 		"module": "crm"
 	},
   "user": {
@@ -73,7 +73,7 @@
       ["active", "=", true],
 			["jwt_token", "!=", false]
     ],
-		"blacklist": [
+		"exclude": [
 			"property_account_position",
 			"ref_companies",
 			"alias_defaults",
@@ -100,7 +100,7 @@
     "filters": [
       ["active", "=", true]
     ],
-		"blacklist": [],
+		"exclude": [],
     "module": "sale"
   }
 }

+ 35 - 78
models/models.py

@@ -2,98 +2,55 @@
 from openerp import models, fields
 import inspect
 
-DEFAULT_BLACKLIST = ['create_uid', '__last_update', 'sequence', 'write_uid', 'write_date']
-
-'''
-'''
-def serialize(obj, blacklist = []):
-    attributes = [a for a in inspect.getmembers(obj, lambda a:not(inspect.isroutine(a))) if a[0] == '_fields']
+DEFAULT_FIELDS_EXCLUDED = [
+    'self',
+    'function',
+    'create_uid',
+    '__last_update',
+    'sequence',
+    'write_uid',
+    'write_date',
+    'tz',
+    'lang'
+]
+
+'''
+'''
+def serialize(self, exclude = []):
+    fields = self.fields_get()
     data = {}
 
-    for field in dict(attributes[0][1]):
-        if field in blacklist:
+    for field in fields:
+        if field in (exclude + DEFAULT_FIELDS_EXCLUDED):
             continue
 
-        obj_value = getattr(obj, field)
+        definition = fields[field]
 
-        if 'class' in str(type(obj_value)):
-            data[field] = [o.id for o in obj_value] if obj_value else []
+        if 'exportable' in definition or definition['readonly']:
             continue
 
-        data[field] = getattr(obj, field)
-
-    return data
-
-'''
-    Users class with token field for manage authentication
-'''
-class res_users(models.Model):
-    _inherit = 'res.users'
-
-    jwt_token = fields.Char(string = 'JWT Authentication Token');
-
-    def dump(self, blacklist = []):
-        return serialize(self, blacklist + DEFAULT_BLACKLIST)
-
-'''
-'''
-class res_partner(models.Model):
-    _inherit = 'res.partner'
-
-    def dump(self, blacklist = []):
-        return serialize(self, blacklist + DEFAULT_BLACKLIST)
-
-'''
-'''
-class crm_lead(models.Model):
-    _inherit = 'crm.lead'
-
-    def dump(self, blacklist = []):
-        return serialize(self, blacklist + DEFAULT_BLACKLIST)
-'''
-'''
-class product_template(models.Model):
-    _inherit = 'product.template'
-
-    def dump(self, blacklist = []):
-        return serialize(self, blacklist + DEFAULT_BLACKLIST)
+        value = getattr(self, field)
 
-'''
-'''
-class product_attribute_line(models.Model):
-    _inherit = 'product.attribute.line'
-
-    def dump(self, blacklist = []):
-        return serialize(self, blacklist + DEFAULT_BLACKLIST)
-
-'''
-'''
-class product_attribute(models.Model):
-    _inherit = 'product.attribute'
+        if definition['type'] in ('char', 'text', 'html', 'date', 'datetime'):
+            data[field] = value if type(value) is not bool else None
 
-    def dump(self, blacklist = []):
-        return serialize(self, blacklist + DEFAULT_BLACKLIST)
+        if definition['type'] in ('many2one'):
+            data[field] = value.id if value.id else None
 
-'''
-'''
-class product_attribute_price(models.Model):
-    _inherit = 'product.attribute.price'
+        if definition['type'] in ('one2many', 'many2many'):
+            data[field] = [obj.id for obj in value] if value else []
 
-    def dump(self, blacklist = []):
-        return serialize(self, blacklist + DEFAULT_BLACKLIST)
+        if definition['type'] in ('integer', 'float', 'boolean', 'selection', 'binary'):
+            data[field] = value
 
-'''
-'''
-class product_attribute_value(models.Model):
-    _inherit = 'product.attribute.value'
+    return data
 
-    def dump(self, blacklist = []):
-        return serialize(self, blacklist + DEFAULT_BLACKLIST)
+models.Model.serialize = serialize
 
 '''
+    Users class with token field for manage authentication
 '''
-class product_product(models.Model):
-    _inherit = 'product.product'
+class res_users(models.Model):
+    _inherit = 'res.users'
 
-    def dump(self, blacklist = []):
-        return serialize(self, blacklist, DEFAULT_BLACKLIST)
+    jwt_token = fields.Char(string = 'JWT Authentication Token');

BIN
models/models.pyc