From acc6c3bb39e76e5b1dfb5640605c231025152d71 Mon Sep 17 00:00:00 2001 From: Mark Huang Date: Thu, 7 Sep 2006 23:46:32 +0000 Subject: [PATCH] - fix recursive import problem - add add_person and remove_person functions - use login_base in site nodegroup description to avoid overflowing the field - fix ambiguous field spec in sql --- PLC/Sites.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 53 insertions(+), 4 deletions(-) diff --git a/PLC/Sites.py b/PLC/Sites.py index d3d4dcd..fadc5b6 100644 --- a/PLC/Sites.py +++ b/PLC/Sites.py @@ -5,11 +5,11 @@ from PLC.Faults import * from PLC.Parameter import Parameter from PLC.Debug import profile from PLC.Table import Row, Table -from PLC.Persons import Person, Persons from PLC.Slices import Slice, Slices from PLC.PCUs import PCU, PCUs from PLC.Nodes import Node, Nodes from PLC.NodeGroups import NodeGroup, NodeGroups +import PLC.Persons class Site(Row): """ @@ -120,6 +120,55 @@ class Site(Row): return nodegroup_id + def add_person(self, person, commit = True): + """ + Add person to existing site. + """ + + assert 'site_id' in self + assert isinstance(person, PLC.Persons.Person) + assert 'person_id' in person + + site_id = self['site_id'] + person_id = person['person_id'] + self.api.db.do("INSERT INTO person_site (person_id, site_id)" \ + " VALUES(%(person_id)d, %(site_id)d)", + locals()) + + if commit: + self.api.db.commit() + + if 'person_ids' in self and person_id not in self['person_ids']: + self['person_ids'].append(person_id) + + if 'site_ids' in person and site_id not in person['site_ids']: + person['site_ids'].append(site_id) + + def remove_person(self, person, commit = True): + """ + Remove person from existing site. + """ + + assert 'site_id' in self + assert isinstance(person, PLC.Persons.Person) + assert 'person_id' in person + + site_id = self['site_id'] + person_id = person['person_id'] + self.api.db.do("DELETE FROM person_site" \ + " WHERE person_id = %(person_id)d" \ + " AND site_id = %(site_id)d", + locals()) + + if commit: + self.api.db.commit() + + if 'person_ids' in self and person_id in self['person_ids']: + self['person_ids'].remove(person_id) + + if 'site_ids' in person and site_id in person['site_ids']: + person['site_ids'].remove(site_id) + def flush(self, commit = True): """ Flush changes back to the database. @@ -155,7 +204,7 @@ class Site(Row): nodegroup_id = self['nodegroup_id'] # XXX Needs a unique name because we cannot delete site node groups yet name = self['login_base'] + str(self['site_id']) - description = "Nodes at " + self['name'] + description = "Nodes at " + self['login_base'] is_custom = False self.api.db.do("INSERT INTO nodegroups (nodegroup_id, name, description, is_custom)" \ " VALUES (%(nodegroup_id)d, %(name)s, %(description)s, %(is_custom)s)", @@ -216,7 +265,7 @@ class Site(Row): # Delete accounts of all people at the site who are not # members of at least one other non-deleted site. - persons = Persons(self.api, self['person_ids']) + persons = PLC.Persons.Persons(self.api, self['person_ids']) for person_id, person in persons.iteritems(): delete = True @@ -299,7 +348,7 @@ class Sites(Table): if extra_tables: sql += " LEFT JOIN " + " LEFT JOIN ".join(extra_tables) - sql += " WHERE deleted IS False" + sql += " WHERE sites.deleted IS False" if site_id_or_login_base_list: # Separate the list into integers and strings -- 2.43.0