# $HeadURL$
from plc_config import PLCConfiguration
-import sys
+import sys, os
import resource
g_url = ""
global g_url
g_url = url
+# Get all currently registered roles
+g_role_names = [ role['name'] for role in GetRoles()]
+g_role_names.sort()
+
+def SetRole(level, role):
+ global g_role_names
+ if role not in g_role_names:
+ AddRole(level, role)
+ g_role_names.append(role)
+ g_role_names.sort()
+
# Get list of existing tag types
g_known_tag_types = [tag_type['tagname'] for tag_type in GetTagTypes()]
g_known_tag_types.sort()
def SetSlice(slice, tags):
# Create or Update slice
- slices = GetSlices([slice['name']])
+ slice_name = slice['name']
+ slices = GetSlices([slice_name])
if len(slices)==1:
slice_id = slices[0]['slice_id']
+ if slice.has_key('name'):
+ del slice['name']
UpdateSlice(slice_id, slice)
+ slice['name']=slice_name
else:
- AddSlice(slice)
+ expires = None
+ if slice.has_key('expires'):
+ expires = slice['expires']
+ del slice['expires']
+ slice_id = AddSlice(slice)
+ if expires <> None:
+ UpdateSlice(slice_id, {'expires':expires})
# Get slice structure with all fields
- slice = GetSlices([slice['name']])[0]
+ slice = GetSlices([slice_name])[0]
- # Create/update all tags
- slice_tags = {}
+ # Create/delete all tags
+ # NOTE: update is not needed, since unspecified tags are deleted,
+ # and new tags are added
+ slice_tags = []
if slice['slice_tag_ids']:
# Delete unknown attributes
for slice_tag in GetSliceTags(slice['slice_tag_ids']):
+ # ignore sliver tags, as those are custom/run-time values
+ if slice_tag['node_id'] <> None: continue
if (slice_tag['tagname'], slice_tag['value']) not in tags:
DeleteSliceTag(slice_tag['slice_tag_id'])
else:
- slice_tags[slice_tag['tagname']]=slice_tag['value']
+ slice_tags.append((slice_tag['tagname'],slice_tag['value']))
- # only update slice tags that have changed
+ # only add slice tags that are new
for (name, value) in tags:
- if name not in slice_tags:
- AddSliceTag(slice['name'], name, value)
- elif value <> slice_tags[name]:
- UpdateSliceTag(slice['name'],value)
+ if (name,value) not in slice_tags:
+ AddSliceTag(slice_name, name, value)
+ else:
+ # NOTE: this confirms that the user-specified tag is
+ # returned by GetSliceTags
+ pass
def SetMessage(message):
messages = GetMessages([message['message_id']])