2 from types import StringTypes
3 from PLC.Sites import Sites
5 from sfa.plc.sfaImport import sfaImport, cleanup_string
6 from sfa.util.debug import log
7 packages_imported = True
9 packages_imported = False
12 def wrap_exception(method):
13 def wrap(*args, **kwds):
15 return method(*args, **kwds)
18 #traceback.print_exc()
21 def required_packages_imported(method):
22 def wrap(*args, **kwds):
24 return method(*args, **kwds)
32 @required_packages_imported
33 def __init__(self, api):
36 self.sfa = sfaImport()
38 if self.sfa.level1_auth:
39 self.authority = self.sfa.level1_auth
41 self.authority = self.sfa.root_auth
44 def get_login_base(self, site_id):
45 sites = Sites(self.api, [site_id], ['login_base'])
46 login_base = sites[0]['login_base']
50 def get_login_bases(self, object):
55 if object.has_key('site_id') and object['site_id']:
56 site_ids.append(object['site_id'])
57 elif object.has_key('site_ids') and object['site_ids']:
58 site_ids.extend(object['site_ids'])
63 for site_id in site_ids:
64 login_bases.append(self.get_login_base(site_id))
69 @required_packages_imported
70 def update_record(self, object, type, login_bases = None):
72 # determine this objects site and login_base
74 login_bases = self.get_login_bases(object)
76 if isinstance(login_bases, StringTypes):
77 login_bases = [login_bases]
79 for login_base in login_bases:
80 login_base = cleanup_string(login_base)
81 parent_hrn = self.authority + "." + login_base
82 if type in ['person']:
83 self.sfa.import_person(parent_hrn, object)
84 elif type in ['slice']:
85 self.sfa.import_slice(parent_hrn, object)
86 elif type in ['node']:
87 self.sfa.import_node(parent_hrn, object)
88 elif type in ['site']:
89 self.sfa.import_site(self.authority, object)
92 keys = ['name', 'hostname', 'email', 'login_base']
94 if object.has_key(key):
96 traceback.print_exc(file = log)
97 print >> log, "Error importing %s record for %s into geni db: %s" % \
101 @required_packages_imported
102 def delete_record(self, object, type, login_base = None):
105 login_bases = self.get_login_bases(object)
107 login_bases = [login_base]
109 for login_base in login_bases:
110 login_base = cleanup_string(login_base)
111 parent_hrn = self.authority + "." + login_base
112 self.sfa.delete_record(parent_hrn, object, type)
114 def update_site(self, site, login_base = None):
115 self.update_record(site, 'site', login_base)
117 def update_node(self, node, login_base = None):
118 self.update_record(node, 'node', login_base)
120 def update_slice(self, slice, login_base = None):
121 self.update_record(slice, 'slice', login_base)
123 def update_person(self, person, login_base = None):
124 self.update_record(person, 'person', login_base)
126 def delete_site(self, site, login_base = None):
127 site_name = site['login_base']
128 hrn = parent_hrn + site_name
129 self.delete_record(site, 'site', login_base)
131 def delete_node(self, node, login_base = None):
132 self.delete_record(node, 'node', login_base)
134 def delete_slice(self, slice, login_base = None):
135 self.delete_record(slice, 'slice', login_base)
137 def delete_person(self, person, login_base = None):
138 self.delete_record(person, 'person', login_base)