added support for urn name format. urn is the default name format used over the wire
[sfa.git] / sfa / methods / get_gid.py
index b3d7c6f..630221d 100644 (file)
@@ -6,6 +6,7 @@
 #            raise ConnectionKeyGIDMismatch(gid.get_subject())
 
 from sfa.util.faults import *
+from sfa.util.namespace import *
 from sfa.util.method import Method
 from sfa.util.parameter import Parameter, Mixed
 from sfa.trust.auth import Auth
@@ -17,6 +18,8 @@ class get_gid(Method):
     Returns the client's gid if one exists      
 
     @param cert certificate string 
+    @param xrn human readable name (hrn or urn)  
+    @param type object type 
     @return client gid  
     """
 
@@ -24,14 +27,20 @@ class get_gid(Method):
     
     accepts = [
         Parameter(str, "Certificate string"),
-        Parameter(str, "Human readable name (hrn)"), 
+        Parameter(str, "Human readable name (hrn or urn)"), 
         Parameter(str, "Object type") 
         ]
 
     returns = Parameter(str, "GID string")
     
-    def call(self, cert, hrn, type):
-      
+    def call(self, cert, xrn, type):
+     
+        # convert xrn to hrn     
+        if type:
+            hrn = urn_to_hrn(xrn)[0]
+        else:
+            hrn, type = urn_to_hrn(xrn)
         self.api.auth.verify_object_belongs_to_me(hrn)
 
         # resolve the record
@@ -39,7 +48,7 @@ class get_gid(Method):
         mgr_type = self.api.config.SFA_REGISTRY_TYPE
         manager_module = manager_base + ".registry_manager_%s" % mgr_type
         manager = __import__(manager_module, fromlist=[manager_base])
-        records = manager.resolve(self.api, hrn, type, origin_hrn=hrn)
+        records = manager.resolve(self.api, xrn, type, origin_hrn=hrn)
         if not records:
             raise RecordNotFound(hrn)
         record = records[0]