again, this change belongs with the addition of the builtin 'name' column for authorities
[sfa.git] / sfa / planetlab / pldriver.py
index 53f1256..896aeac 100644 (file)
@@ -23,7 +23,7 @@ from sfa.managers.driver import Driver
 from sfa.planetlab.plshell import PlShell
 from sfa.planetlab.plaggregate import PlAggregate
 from sfa.planetlab.plslices import PlSlices
-from sfa.planetlab.plxrn import PlXrn, slicename_to_hrn, hostname_to_hrn, hrn_to_pl_slicename, xrn_to_hostname, top_auth, hash_loginbase
+from sfa.planetlab.plxrn import PlXrn, slicename_to_hrn, hostname_to_hrn, hrn_to_pl_slicename, top_auth, hash_loginbase
 
 
 def list_to_dict(recs, key):
@@ -312,7 +312,7 @@ class PlDriver (Driver):
 
         elif type == "authority":
             pl_record["login_base"] = PlXrn(xrn=hrn,type='authority').pl_login_base()
-            if "name" not in sfa_record:
+            if "name" not in sfa_record or not sfa_record['name']:
                 pl_record["name"] = hrn
             if "abbreviated_name" not in sfa_record:
                 pl_record["abbreviated_name"] = hrn
@@ -692,17 +692,19 @@ class PlDriver (Driver):
         slivers = aggregate.get_slivers(urns)
         if not slivers:
             sliver_id_parts = Xrn(urns[0]).get_sliver_id_parts()
-            filter = {}
-            try:
-                filter['slice_id'] = int(sliver_id_parts[0])
-            except ValueError:
-                filter['name'] = sliver_id_parts[0]
-            slices = self.shell.GetSlices(filter,['hrn'])
-            if not slices:
-                raise Forbidden("Unable to locate slice record for sliver:  %s" % xrn)
-            slice = slices[0]
-            slice_urn = hrn_to_urn(slice['hrn'], type='slice')
-            urns = [slice_urn]          
+            # allow to be called with an empty rspec, meaning flush reservations
+            if sliver_id_parts:
+                filter = {}
+                try:
+                    filter['slice_id'] = int(sliver_id_parts[0])
+                except ValueError:
+                    filter['name'] = sliver_id_parts[0]
+                slices = self.shell.GetSlices(filter,['hrn'])
+                if not slices:
+                    raise Forbidden("Unable to locate slice record for sliver:  %s" % xrn)
+                slice = slices[0]
+                slice_urn = hrn_to_urn(slice['hrn'], type='slice')
+                urns = [slice_urn]          
         else:    
             slice_id = slivers[0]['slice_id']
             slice_hrn = self.shell.GetSliceHrn(slice_id)