Browse Source

agregado método para manejar peticiones PUT o PATCH

robert2206 8 years ago
parent
commit
130c2f2583
3 changed files with 33 additions and 4 deletions
  1. 3 1
      README.md
  2. 30 3
      controllers/http_handler.py
  3. BIN
      controllers/http_handler.pyc

+ 3 - 1
README.md

@@ -1,3 +1,5 @@
 RESTFul Api for Odoo
 ===============================================================================
- RESTFul Api for Odoo based on JWT Authentication Engine
+RESTFul Api for Odoo based on JWT Authentication Engine
+
+Leer sobre JWT: https://jwt.io/

+ 30 - 3
controllers/http_handler.py

@@ -141,7 +141,7 @@ class ApiManager(http.Controller):
             return self.http_post(args)
 
         if http_verb == 'PUT' or http_verb == 'PATCH':
-            return json.dumps({'verb': 'PUT OR PATCH'})
+            return self.http_put_or_patch(args)
 
         if http_verb == 'DELETE':
             return self.http_delete(args)
@@ -188,14 +188,41 @@ class ApiManager(http.Controller):
 
             return self.make_response(result.id)
         except Exception, e:
-            return self.make_response(e)
+            return self.make_response({'response': False})
+
+    # --------------------------------------------------------------------------
+    # Manage PUT or PATCH request
+    # --------------------------------------------------------------------------
+    def http_put_or_patch(self, data):
+        if len(data) <= 2 or not 'uid' in data:
+            return self.make_response({'error': 'cannot be process request'}, 400) # bad request
+
+        uid = data['uid']
+        model, filters = self.resource_inflater(data['resource'])
+        data = self.digest_data(data)
+
+        try:
+            result = request.env[model].sudo().browse(uid)
+
+            if not result.exists():
+                return self.make_response({'error': 'cannot be updated'})
+
+            self.make_info_log('To update object')
+            return self.make_response({'response': result.sudo().write(data)})
+        except Exception, e:
+            return self.make_response({'response': False})
 
     # --------------------------------------------------------------------------
     # Digest data for POST request
     # --------------------------------------------------------------------------
     def digest_data(self, data):
         data = dict(data)
-        del data['resource']
+
+        if 'resource' in data:
+            del data['resource']
+
+        if 'uid' in data:
+            del data['uid']
 
         return data
 

BIN
controllers/http_handler.pyc