cleanup in the federica area
authorThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Mon, 13 Feb 2012 19:01:40 +0000 (20:01 +0100)
committerThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Mon, 13 Feb 2012 19:01:40 +0000 (20:01 +0100)
sfa/federica/fddriver.py
sfa/federica/fdshell.py
sfa/storage/migrations/versions/001_slice_researchers.py [new file with mode: 0644]

index cac050c..6e48284 100644 (file)
@@ -10,6 +10,17 @@ from sfa.federica.fdshell import FdShell
 # this could/should be obtained by issuing getRSpecVersion
 federica_version_string="RSpecV2"
 
+#### avail. methods on the federica side as of 2012/02/13
+# listAvailableResources(String credentials, String rspecVersion) 
+# listSliceResources(String credentials, String rspecVersion, String sliceUrn) 
+# createSlice(String credentials, String sliceUrn, String rspecVersion, String rspecString) 
+# deleteSlice(String credentials, String sliceUrn) 
+# listSlices() 
+# getRSpecVersion()
+##### all return
+# Result: {'code': 0, 'value': RSpec} if success
+#      {'code': code_id, 'output': Error message} if error
+
 class FdDriver (PlDriver):
 
     def __init__ (self,config): 
@@ -31,7 +42,13 @@ class FdDriver (PlDriver):
             return from_xmlrpc
 
     def aggregate_version (self):
-        return { 'federica_version_string' : federica_version_string, }
+        result=[]
+        federica_version_string_api = self.shell.getRSpecVersion()
+        result ['federica_version_string_api']=federica_version_string_api
+        if federica_version_string_api != federica_version_string:
+            result['WARNING']="hard-wired rspec version %d differs from what the API currently exposes"%\
+                        federica_version_string
+        return result
 
     def testbed_name (self):
         return "federica"
@@ -57,7 +74,8 @@ class FdDriver (PlDriver):
                     logger.debug("FdDriver.ListResources: returning cached advertisement")
                     return self.response(rspec)
             # otherwise, need to get it
-            rspec = self.shell.listAvailableResources (federica_version_string)
+            rspec = self.shell.listAvailableResources (creds, federica_version_string)
+#            rspec = self.shell.listAvailableResources (federica_version_string)
             # cache it for future use
             if self.cache:
                 logger.debug("FdDriver.ListResources: stores advertisement in cache")
@@ -65,25 +83,13 @@ class FdDriver (PlDriver):
             return self.response(rspec)
         # about a given slice : don't cache
         else:
-# that's what the final version would look like
-            return self.response(self.shell.listSliceResources(federica_version_string, slice_urn))
-# # just to see how the ad shows up in sface
-# # caching it for convenience as it's the ad anyways
-#             if cached_requested and self.cache:
-#                 rspec = self.cache.get(federica_version_string)
-#                 if rspec:
-#                     logger.debug("FdDriver.ListResources: returning cached advertisement")
-#                     return rspec 
-#             
-#             return self.shell.listAvailableResources(federica_version_string)
+            return self.response(self.shell.listSliceResources(creds, federica_version_string, slice_urn))
 
-#String createSlice(String credentials, String sliceUrn, String rspecVersion, String rspecString):
     def create_sliver (self, slice_urn, slice_hrn, creds, rspec_string, users, options):
         # right now version_string is ignored on the federica side
         # we normally derive it from options
         return self.response(self.shell.createSlice(creds, slice_urn, federica_version_string, rspec_string))
 
-#String deleteSlice(String credentials, String sliceUrn):
     def delete_sliver (self, slice_urn, slice_hrn, creds, options):
         # right now version_string is ignored on the federica side
         # we normally derive it from options
index d362c7f..7195b56 100644 (file)
@@ -13,6 +13,8 @@ class FdShell:
                      'listSliceResources',
                      'createSlice',
                      'deleteSlice',
+                     'getRSpecVersion',
+                     'listSlices',
                     ]
 
     def __init__ ( self, config ) :
diff --git a/sfa/storage/migrations/versions/001_slice_researchers.py b/sfa/storage/migrations/versions/001_slice_researchers.py
new file mode 100644 (file)
index 0000000..eb1d3b7
--- /dev/null
@@ -0,0 +1,28 @@
+# this move is about adding a slice x users many to many relation ship for modelling 
+# regular "membership" of users in a slice
+
+from sqlalchemy import Table, MetaData, Column, ForeignKey
+from sqlalchemy import Integer, String
+
+metadata=MetaData()
+
+# this is needed my migrate so it can locate 'records.record_id'
+records = \
+    Table ( 'records', metadata,
+            Column ('record_id', Integer, primary_key=True),
+            )
+
+# slice x user (researchers) association
+slice_researcher_table = \
+    Table ( 'slice_researcher', metadata,
+            Column ('slice_id', Integer, ForeignKey ('records.record_id'), primary_key=True),
+            Column ('researcher_id', Integer, ForeignKey ('records.record_id'), primary_key=True),
+            )
+
+def upgrade(migrate_engine):
+    metadata.bind = migrate_engine
+    slice_researcher_table.create()
+
+def downgrade(migrate_engine):
+    metadata.bind = migrate_engine
+    slice_researcher_table.drop()