avoid as much as possible accessing logger through class instances, whenever that...
[sfa.git] / sfa / methods / Update.py
index dcc5c70..5daeb65 100644 (file)
@@ -1,51 +1,44 @@
-### $Id: update.py 16477 2010-01-05 16:31:37Z thierry $
-### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/update.py $
-
-import time
-from sfa.util.faults import *
 from sfa.util.method import Method
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter, Mixed
-from sfa.util.debug import log
+from sfa.util.sfalogging import logger
+
 from sfa.trust.credential import Credential
 
 from sfa.trust.credential import Credential
 
-class update(Method):
+from sfa.storage.parameter import Parameter
+
+
+class Update(Method):
     """
     Update an object in the registry. Currently, this only updates the
     PLC information associated with the record. The SFA fields (name, type,
     GID) are fixed.
     """
     Update an object in the registry. Currently, this only updates the
     PLC information associated with the record. The SFA fields (name, type,
     GID) are fixed.
-    
+
     @param cred credential string specifying rights of the caller
     @param record a record dictionary to be updated
 
     @param cred credential string specifying rights of the caller
     @param record a record dictionary to be updated
 
-    @return 1 if successful, faults otherwise 
+    @return 1 if successful, faults otherwise
     """
 
     interfaces = ['registry']
     """
 
     interfaces = ['registry']
-    
+
     accepts = [
     accepts = [
-        Parameter(str, "Credential string"),
         Parameter(dict, "Record dictionary to be updated"),
         Parameter(dict, "Record dictionary to be updated"),
-        Mixed(Parameter(str, "Human readable name of the original caller"),
-              Parameter(None, "Origin hrn not specified"))
-        ]
+        Parameter(str, "Credential string"),
+    ]
 
     returns = Parameter(int, "1 if successful")
 
     returns = Parameter(int, "1 if successful")
-    
-    def call(self, cred, record_dict, origin_hrn=None):
-        user_cred = Credential(string=cred)
-    
-           #log the call
-        if not origin_hrn:
-            origin_hrn = user_cred.get_gid_caller().get_hrn()
-        self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, None, self.name))
-        
+
+    def call(self, record_dict, creds):
         # validate the cred
         # validate the cred
-        self.api.auth.check(cred, "update")
-        
-        # send the call to the right manager
-        manager_base = 'sfa.managers'
-        mgr_type = self.api.config.SFA_REGISTRY_TYPE
-        manager_module = manager_base + ".registry_manager_%s" % mgr_type
-        manager = __import__(manager_module, fromlist=[manager_base])
-        return manager.update(self.api, record_dict)
+        valid_creds = self.api.auth.checkCredentials(creds, "update")
+
+        # verify permissions
+        hrn = record_dict.get('hrn', '')
+        self.api.auth.verify_object_permission(hrn)
+
+        # log
+        origin_hrn = Credential(
+            string=valid_creds[0]).get_gid_caller().get_hrn()
+        logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s" %
+                    (self.api.interface, origin_hrn, hrn, self.name))
 
 
+        return self.api.manager.Update(self.api, record_dict)