Browse Source

endpoints automáticos a partir del archivo de recursos

robert2206 8 years ago
parent
commit
11d0866efa
5 changed files with 100 additions and 17 deletions
  1. 18 4
      controllers/http_handler.py
  2. BIN
      controllers/http_handler.pyc
  3. 11 1
      controllers/resources.json
  4. 71 12
      models/models.py
  5. BIN
      models/models.pyc

+ 18 - 4
controllers/http_handler.py

@@ -3,6 +3,7 @@ from openerp import http
 from openerp.http import request
 from passlib.context import CryptContext
 from werkzeug.wrappers import Response
+from string import Template
 
 import os
 import jwt
@@ -115,13 +116,26 @@ class Auth(http.Controller):
 '''
 class ApiManager(http.Controller):
 
+    # --------------------------------------------------------------------------
+    # Generate routes from resources
+    # --------------------------------------------------------------------------
+    def routify():
+        url_tmpl = Template('/api/<any($resources):resource>$uid')
+        resources = '';
+        uid_posfix = '/<int:uid>'
+
+        for resource in dict(RESOURCES_MAP):
+            resources += str(resource) + ','
+
+        return [
+            url_tmpl.substitute({ 'resources': resources[:-1], 'uid': '' }),
+            url_tmpl.substitute({ 'resources': resources[:-1], 'uid': uid_posfix })
+        ]
+
     # --------------------------------------------------------------------------
     # Restify your request
     # --------------------------------------------------------------------------
-    @http.route([
-                    '/api/<any(customer, lead, opportunity, product, product_template, product_attribute_line, product_attribute_value, user, partner):resource>',
-                    '/api/<any(customer, lead, opportunity, product, product_template, product_attribute_line, product_attribute_value, user, partner):resource>/<int:uid>'
-                ],
+    @http.route(routify(),
                 type = 'http',
                 auth = 'none',
                 cors = '*')

BIN
controllers/http_handler.pyc


+ 11 - 1
controllers/resources.json

@@ -7,7 +7,7 @@
 		],
 		"module": "sale"
 	},
-	"product": {
+	"product_product": {
 		"model": "product.product",
 		"filters": [
 			["active", "=", true]
@@ -19,6 +19,16 @@
 		"filters": [],
 		"module": "sale"
 	},
+	"product_attribute": {
+		"model": "product.attribute",
+		"filters": [],
+		"module": "sale"
+	},
+	"product_attribute_price": {
+		"model": "product.attribute.price",
+		"filters": [],
+		"module": "sale"
+	},
 	"product_attribute_value": {
 		"model": "product.attribute.value",
 		"filters": [],

+ 71 - 12
models/models.py

@@ -1,5 +1,6 @@
 # -*- coding: utf-8 -*-
 from openerp import models, fields
+import inspect
 
 '''
     Users class with token field for manage authentication
@@ -91,24 +92,36 @@ class product_template(models.Model):
 
     def dump(self):
         return {
-            'id': self.id,
-            'company_id': self.company_id.id if self.company_id.id else None,
+            'active': self.active,
+            'alternative_product_ids': [alt.id for alt in self.alternative_product_ids] if self.alternative_product_ids else [],
             'attribute_line_ids': [line.id for line in self.attribute_line_ids] if self.attribute_line_ids else [],
+            'color': self.color,
+            'company_id': self.company_id.id if self.company_id.id else None,
+            'categ_id': self.categ_id.id if self.categ_id.id else None,
             'default_code': self.default_code if self.default_code else None,
             'description': self.description if self.description else None,
+            'display_name': self.display_name,
             'ean13': self.ean13 if self.ean13 else None,
+            'factory_barcode': self.factory_barcode if self.factory_reference else None,
+            'factory_reference': self.factory_reference if self.factory_reference else None,
+            'flip_image': self.flip_image if hasattr(self, 'flip_image') else None,
             'image_medium': self.image_medium,
             'image_small': self.image_small,
-            'name': self.name,
+            'is_flip_image': self.is_flip_image if hasattr(self, 'is_flip_image') else False,
+            'is_product_variant': self.is_product_variant,
             'list_price': self.list_price,
-            'purchase_ok': self.purchase_ok,
-            'qty_available': self.qty_available,
-            'rental': self.rental,
-            'sale_ok': self.sale_ok,
-            'standard_price': self.standard_price,
-            'type': self.type,
-            'website_published': self.website_published,
-            'create_date': self.create_date
+            'mes_type': self.mes_type,
+            'multiple_image': self.multiple_image if hasattr(self, 'multiple_image') else False,
+            'name': self.name,
+            'price': self.price,
+            'product_variant_count': self.product_variant_count,
+            'product_variant_ids': [variant.id for variant in self.product_variant_ids] if self.product_variant_ids else [],
+            'purchase_ok': self.purchase_ok if hasattr(self, 'purchase_ok') else False,
+            'qty_available': self.qty_available if hasattr(self, 'qty_available') else 0,
+            'rental': self.rental if hasattr(self, 'rental') else False,
+            'sale_ok': self.sale_ok if hasattr(self, 'sale_ok') else False,
+            'type': self.type if hasattr(self, 'type') else None,
+            'website_published': self.website_published if hasattr(self, 'website_published') else False
         }
 
 '''
@@ -126,6 +139,36 @@ class product_attribute_line(models.Model):
             'value_ids': [value.id for value in self.value_ids] if self.value_ids else []
         }
 
+'''
+'''
+class product_attribute(models.Model):
+    _inherit = 'product.attribute'
+
+    def dump(self):
+        return {
+            'active': self.active,
+            'create_date': self.create_date,
+            'display_name': self.display_name,
+            'id': self.id,
+            'name': self.name,
+            'type': self.type,
+            'value_ids': [value.id for value in self.value_ids] if self.value_ids else []
+        }
+
+'''
+'''
+class product_attribute_price(models.Model):
+    _inherit = 'product.attribute.price'
+
+    def dump(self):
+        attributes = inspect(self, lambda a:not(isroutine(a)))
+        print '----------------------------------------------------------------'
+        print attributes
+        print '----------------------------------------------------------------'
+        
+        return {
+            'response': 'ok'
+        }
 
 '''
 '''
@@ -154,13 +197,29 @@ class product_product(models.Model):
         return {
             'active': self.active,
             'alternative_product_ids': [alternative.id for alternative in self.alternative_product_ids] if self.alternative_product_ids else [],
+            'attribute_line_ids': [alt.id for alt in self.attribute_line_ids] if self.attribute_line_ids else [],
+            'attribute_value_ids': [value.id for value in self.attribute_value_ids] if self.attribute_value_ids else [],
+            'categ_id': self.categ_id.id if self.categ_id else None,
+            'code': self.code,
+            'company_id': self.company_id.id if self.company_id else None,
+            'create_date': self.create_date,
+            'default_code': self.default_code if self.default_code else None,
             'description': self.description if self.description else None,
             'display_name': self.display_name,
             'ean13': self.ean13 if self.ean13 else None,
+            'factory_barcode': self.factory_barcode if self.factory_barcode else None,
+            'factory_reference': self.factory_reference if self.factory_reference else None,
+            'image_medium': self.image_medium,
+            'image_small': self.image_small,
+            'image_variant': self.image_variant,
             'id': self.id,
             'is_product_variant': self.is_product_variant,
             'list_price': self.list_price,
             'name': self.name,
+            'name_template': self.name_template,
             'price': self.price,
-            'price_extra': self.price_extra
+            'price_extra': self.price_extra,
+            'product_tmpl_id': self.product_tmpl_id.id if self.product_tmpl_id else None,
+            'product_variant_count': self.product_variant_count,
+            'product_variant_ids': [variant.id for variant in self.product_variant_ids] if self.product_variant_ids else []
         }

BIN
models/models.pyc