Fix slice tags
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Mon, 11 Mar 2013 12:36:54 +0000 (08:36 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Mon, 11 Mar 2013 12:36:54 +0000 (08:36 -0400)
PLC/Methods/AddSliceTag.py
PLC/SliceTags.py
PLC/TagTypes.py

index ef78fa6..6d6b1e0 100644 (file)
@@ -76,6 +76,10 @@ class AddSliceTag(Method):
         slice_tag = SliceTag(self.api)
         slice_tag['slice_id'] = slice['slice_id']
         slice_tag['tag_type_id'] = tag_type['tag_type_id']
+        slice_tag['name'] = slice['name']
+        slice_tag['tagname'] = tag_type['tagname']
+        slice_tag['category'] = tag_type['category']
+        slice_tag['description'] = tag_type['description']
         slice_tag['value'] = unicode(value)
 
         # Sliver attribute if node is specified
index b629772..793fe33 100644 (file)
@@ -41,6 +41,8 @@ class SliceTag(AlchemyObj):
         """
         AlchemyObj.sync(self, commit, validate)
         AlchemyObj.insert(self, dict(self))
+        slice_tag = AlchemyObj.select(self, dict(self))[0]
+        self['slice_tag_id'] = slice_tag['slice_tag_id']
 
     def delete(self, commit = True):
         """
@@ -58,12 +60,19 @@ class SliceTags(list):
     def __init__(self, api, filter = None, columns = None):
          
         # the view that we're selecting upon: start with view_slices
-        if not filter:
-            slice_tags = SliceTags().select()
-        elif isinstance(filter, dict):
-            slices_tags = SliceTags().select(filter=filter)
+        if not tag_filter:
+            slice_tags = SliceTag().select()
+        elif isinstance(tag_filter, dict):
+            slice_tags = SliceTag().select(filter=tag_filter)
+        elif isinstance(tag_filter, int):
+            slice_tags = SliceTag().select(filter={'slice_tag_id': tag_filter})
+        elif isinstance(tag_filter, (list, tuple, set)):
+            ints = filter(lambda x: isinstance(x, (int, long)), tag_filter)
+            strs = filter(lambda x: isinstance(x, StringTypes), tag_filter)
+            tag_filter = {'slice_tag_id': ints}
+            slice_tags = SliceTag().select(filter=tag_filter)
         else:
-            raise PLCInvalidArgument, "Wrong slice_tag filter %r"%filter
+            raise PLCInvalidArgument, "Wrong slice_tag filter %r"%tag_filter
 
         for slice_tag in slice_tags:
-            self.append(slice_tag)
+            self.append(SliceTag(api, object=slice_tag, columns=columns))
index 78cc56f..30553e7 100644 (file)
@@ -48,7 +48,7 @@ class TagType (AlchemyObj):
         if insert == True or 'tag_type_id' not in self:
             AlchemyObj.insert(self, dict(self))
             tag_type = AlchemyObj.select(self, filter={'tagname': self['tagname']})
-            self['tag_type_id'] = tag_type['tag_type_id']
+            self['tag_type_id'] = tag_type.tag_type_id
         else:
             AlchemyObj.update(self, dict(self))