From ee2413a85a3ac1f1a8f7a26a80cf5b69ddf90534 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Sat, 9 Mar 2013 21:00:33 -0500 Subject: [PATCH] fix person bugs --- PLC/Methods/AddPerson.py | 5 +++-- PLC/Persons.py | 25 +++++++++++++++++++++---- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/PLC/Methods/AddPerson.py b/PLC/Methods/AddPerson.py index fba00c3c..ebf9ea9c 100644 --- a/PLC/Methods/AddPerson.py +++ b/PLC/Methods/AddPerson.py @@ -5,7 +5,8 @@ from PLC.Persons import Person, Persons from PLC.Auth import Auth can_update = lambda (field, value): field in \ - ['name', 'email', 'password', 'enabled'] + ['first_name', 'last_name', 'email', 'password', \ + 'enabled', 'title', 'url', 'bio', 'phone'] class AddPerson(Method): """ @@ -35,4 +36,4 @@ class AddPerson(Method): person = Person(self.api, person_fields) person.sync() - return person.id + return person['person_id'] diff --git a/PLC/Persons.py b/PLC/Persons.py index 742afd91..a9900990 100644 --- a/PLC/Persons.py +++ b/PLC/Persons.py @@ -32,6 +32,7 @@ class Person(AlchemyObj): tablename = 'persons' + self.refresh(api) fields = { 'person_id': Parameter(int, "User identifier", primary_key=True), 'keystone_id': Parameter(str, "Keystone User identifier"), @@ -77,6 +78,18 @@ class Person(AlchemyObj): if not email_re.match(email): raise invalid_email + # check only against users on the same peer + if 'peer_id' in self: + namespace_peer_id = self['peer_id'] + else: + namespace_peer_id = None + + conflicts = Person().select(filter={'email':email,'peer_id':namespace_peer_id}) + + for person in conflicts: + if 'person_id' not in self or self['person_id'] != person.person_id: + raise PLCInvalidArgument, "E-mail address already in use" + return email def can_update(self, person): @@ -92,7 +105,7 @@ class Person(AlchemyObj): assert isinstance(person, Person) - if self.person_id == person.person_id: + if self['person_id'] == person['person_id']: return True if 'admin' in self['roles']: @@ -195,6 +208,8 @@ class Person(AlchemyObj): self.object = users[0] self['keystone_id'] = self.object.id AlchemyObj.insert(self, dict(self)) + person = AlchemyObj.select(self, filter={'keystone_id': self['keystone_id']})[0] + self['person_id'] = person.person_id else: self.object = self.api.client_shell.keystone.users.update(self['person_id'], nova_person) AlchemyObj.update(self, {'person_id': self['person_id']}, dict(self)) @@ -209,10 +224,11 @@ class Person(AlchemyObj): self.api.client_shell.keystone.users.delete(nova_user) # delete relationships - SlicePerson().delete.filter({'person_id': self['person_id']}) + for slice_person in SlicePerson().select(filter={'person_id': self['person_id']}): + slice_person.delete() # delete person - AlchemyObj.delete(self, dict(self)) + AlchemyObj.delete(self, filter={'person_id': self['person_id']}) class Persons(list): @@ -260,4 +276,5 @@ class Persons(list): if not columns or 'slice_ids' in columns: person_slices = SlicePerson().select(filter={'person_id': person['person_id']}) person['slice_ids'] = [rec.slice_id for rec in person_slices] - self.append(person) + self.append(person) + -- 2.47.0