working toward full support for sliver urns in the aggregate and registry
[sfa.git] / sfa / managers / registry_manager.py
index 5cc0ca8..f6277ed 100644 (file)
@@ -42,7 +42,13 @@ class RegistryManager:
             hrn = urn_to_hrn(xrn)[0]
         else:
             hrn, type = urn_to_hrn(xrn)
-            
+
+        # Slivers don't have credentials but users should be able to 
+        # specify a sliver xrn and receive the slice's credential
+        if type == 'sliver' or '-' in Xrn(hrn).leaf:
+            slice_xrn = self.driver.sliver_to_slice_xrn(hrn)
+            hrn = slice_xrn.hrn 
+  
         # Is this a root or sub authority
         auth_hrn = api.auth.get_authority(hrn)
         if not auth_hrn or hrn == api.config.SFA_INTERFACE_HRN:
@@ -311,6 +317,7 @@ class RegistryManager:
                 api.auth.hierarchy.create_auth(hrn_to_urn(hrn,'authority'))
     
             # get the GID from the newly created authority
+            auth_info = api.auth.get_auth_info(hrn)
             gid = auth_info.get_gid_object()
             record.gid=gid.save_to_string(save_parents=True)
 
@@ -382,12 +389,19 @@ class RegistryManager:
         if isinstance (record, RegSlice):
             researcher_hrns = getattr(new_record,'researcher',None)
             if researcher_hrns is not None: record.update_researchers (researcher_hrns)
+            dbsession.commit()
 
         elif isinstance (record, RegAuthority):
             pi_hrns = getattr(new_record,'pi',None)
             if pi_hrns is not None: record.update_pis (pi_hrns)
+            dbsession.commit()
         
         # update the PLC information that was specified with the record
+        # xxx oddly enough, without this useless statement, 
+        # record.__dict__ as received by the driver seems to be off
+        # anyway the driver should receive an object 
+        # (and then extract __dict__ itself if needed)
+        print "DO NOT REMOVE ME before driver.update, record=%s"%record
         if not self.driver.update (record.__dict__, new_record.__dict__, hrn, new_key):
             logger.warning("driver.update failed")