bd067720a25a00cdb981d9cd721664f969cf9774
[plcapi.git] / PLC / SFA.py
1 from types import StringTypes
2 import traceback
3 from types import StringTypes
4 import traceback
5
6 class SFA:
7     
8     def __init__(self):
9         try:
10             from sfa.plc.sfaImport import sfaImport
11             from sfa.plc.api import GeniAPI
12             from sfa.util.debug import log 
13             self.log = log
14             self.sfa = sfaImport()
15             geniapi = GeniAPI()
16             self.plcapi = geniapi.plshell
17             self.auth = geniapi.plauth
18         except:
19             traceback.print_exc(file = self.log)
20
21         if self.gimport.level1_auth:
22             self.authority = self.gimport.level1_auth
23         else:
24             self.authority = self.gimport.root_auth
25
26
27     def get_login_base(site_id):
28         sites = self.plcapi.GetSites(self.auth, [site_id], ['login_base'])
29         login_base = sites
30
31     def get_login_bases(self, object):
32         login_bases = []
33         site_ids = []
34         
35         # get the site_ids
36         if object.has_key('site_id') and object['site_id']:
37             site_ids.append(object['site_id'])
38         elif object.has_key('site_ids') and object['site_ids']:
39             site_ids.extend(object['site_ids'])
40         else:
41             raise Exception
42
43         # get the login bases
44         for site_id in site_ids:
45             login_bases.append(self.get_login_base(site_id))
46
47         return login_bases
48
49     def update_record(self, object, type, login_bases = None):
50         try:
51             # determine this objects site and login_base
52             if not login_bases:
53                 login_bases = self.get_login_bases(object)
54
55             if isinstance(login_bases, StringTypes):
56                 login_bases = [login_bases]
57
58             for login_base in login_bases:
59                 login_base = self.sfa.cleanup_string(login_base)
60                 parent_hrn = self.authority + "." + login_base
61                 if type in ['person']:
62                     self.sfa.import_person(parent_hrn, object)
63                 elif type in ['slice']:
64                     self.sfa.import_slice(parent_hrn, object)
65                 elif type in ['node']:
66                     self.sfa.import_node(parent_hrn, object)
67                 elif type in ['site']:
68                     self.sfa.import_site(self.authority, object)
69         except Exception, e:
70             id = None
71             keys = ['name', 'hostname', 'email', 'login_base']
72             for key in keys:
73                 if object.has_key(key):
74                     id = object[key]
75             traceback.print_exc(file = self.log)
76             print >> self.log, "Error importing %s record for %s into geni db: %s" % \
77                   (type, id, e.message)
78
79     def delete_record(self, object, type, login_base = None):
80         if not login_bases:
81             login_bases = get_login_bases(object)
82
83         for login_base in login_bases:
84             login_base = self.sfa.cleanup_string(login_base)
85             parent_hrn = self.authority + "." + login_base
86             self.sfa.delete_record(parent_hrn, object, type)
87
88     def update_site(self, site, login_base = None):
89         self.update_record(site, 'site', login_base)
90
91     def update_site(self, site, login_base = None):
92         self.update_record(site, 'site', login_base)
93
94     def update_node(self, node, login_base = None):
95         self.update_record(node, 'node', login_base)
96
97     def update_slice(self, slice, login_base = None):
98         self.update_record(slice, 'slice', login_base)
99
100     def update_person(self, person, login_base = None):
101         self.update_record(person, 'person', login_base)
102
103     def delete_site(self, site, login_base = None):
104         site_name = site['login_base']
105         hrn = parent_hrn + site_name
106         self.delete_record(site, 'site', login_base)
107
108     def delete_node(self, node, login_base = None):
109         self.delete_record(node, 'node', login_base)
110
111     def delete_slice(self, slice, login_base = None):
112         self.delete_record(slice, 'slice', login_base)
113
114     def delete_person(self, person, login_base = None):
115         self.delete_record(person, 'person', login_base)