1 from types import StringTypes
3 packages_imported = False
6 def wrap_exception(method):
7 def wrap(*args, **kwds):
9 return method(*args, **kwds)
19 from sfa.plc.sfaImport import sfaImport, cleanup_string
20 from sfa.plc.api import GeniAPI
21 from sfa.util.debug import log
22 packages_imported = True
24 packages_imported = False
27 self.cleanup_string = cleanup_string
29 self.sfa = sfaImport()
31 self.plcapi = geniapi.plshell
32 self.auth = geniapi.plauth
34 if self.sfa.level1_auth:
35 self.authority = self.sfa.level1_auth
37 self.authority = self.sfa.root_auth
40 def get_login_base(self, site_id):
41 sites = self.plcapi.GetSites(self.auth, [site_id], ['login_base'])
42 login_base = sites[0]['login_base']
46 def get_login_bases(self, object):
51 if object.has_key('site_id') and object['site_id']:
52 site_ids.append(object['site_id'])
53 elif object.has_key('site_ids') and object['site_ids']:
54 site_ids.extend(object['site_ids'])
59 for site_id in site_ids:
60 login_bases.append(self.get_login_base(site_id))
65 def update_record(self, object, type, login_bases = None):
67 # determine this objects site and login_base
69 login_bases = self.get_login_bases(object)
71 if isinstance(login_bases, StringTypes):
72 login_bases = [login_bases]
74 for login_base in login_bases:
75 login_base = self.cleanup_string(login_base)
76 parent_hrn = self.authority + "." + login_base
77 if type in ['person']:
78 self.sfa.import_person(parent_hrn, object)
79 elif type in ['slice']:
80 self.sfa.import_slice(parent_hrn, object)
81 elif type in ['node']:
82 self.sfa.import_node(parent_hrn, object)
83 elif type in ['site']:
84 self.sfa.import_site(self.authority, object)
87 keys = ['name', 'hostname', 'email', 'login_base']
89 if object.has_key(key):
91 traceback.print_exc(file = self.log)
92 print >> self.log, "Error importing %s record for %s into geni db: %s" % \
96 def delete_record(self, object, type, login_base = None):
99 login_bases = self.get_login_bases(object)
101 login_bases = [login_base]
103 for login_base in login_bases:
104 login_base = self.cleanup_string(login_base)
105 parent_hrn = self.authority + "." + login_base
106 self.sfa.delete_record(parent_hrn, object, type)
108 def update_site(self, site, login_base = None):
109 self.update_record(site, 'site', login_base)
111 def update_node(self, node, login_base = None):
112 self.update_record(node, 'node', login_base)
114 def update_slice(self, slice, login_base = None):
115 self.update_record(slice, 'slice', login_base)
117 def update_person(self, person, login_base = None):
118 self.update_record(person, 'person', login_base)
120 def delete_site(self, site, login_base = None):
121 site_name = site['login_base']
122 hrn = parent_hrn + site_name
123 self.delete_record(site, 'site', login_base)
125 def delete_node(self, node, login_base = None):
126 self.delete_record(node, 'node', login_base)
128 def delete_slice(self, slice, login_base = None):
129 self.delete_record(slice, 'slice', login_base)
131 def delete_person(self, person, login_base = None):
132 self.delete_record(person, 'person', login_base)