From efb79be86f5d7bc465497a476133d9a99f0157a2 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Sat, 9 Mar 2013 21:26:29 -0500 Subject: [PATCH] fix return_fields filtering --- PLC/Persons.py | 19 ++++++++++++++++++- PLC/Storage/AlchemyObject.py | 4 ++-- PLC/Storage/Record.py | 13 +++++++++---- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/PLC/Persons.py b/PLC/Persons.py index a990099..0e9c79c 100644 --- a/PLC/Persons.py +++ b/PLC/Persons.py @@ -92,6 +92,23 @@ class Person(AlchemyObj): return email + def validate_password(self, password): + """ + Encrypt password if necessary before committing to the + database. + """ + + magic = "$1$" + + if len(password) > len(magic) and \ + password[0:len(magic)] == magic: + return password + else: + # Generate a somewhat unique 8 character salt string + salt = str(time.time()) + str(Random().random()) + salt = md5(salt).hexdigest()[:8] + return crypt.crypt(password.encode(self.api.encoding), magic + salt + "$") + def can_update(self, person): """ Returns true if we can update the specified person. We can @@ -257,7 +274,7 @@ class Persons(list): raise PLCInvalidArgument, "Wrong person filter %r"%person_filter for person in persons: - person = Person(self.api, object=person) + person = Person(self.api, object=person, columns=columns) keystone_user = self.api.client_shell.keystone.users.find(id=person['keystone_id']) if not columns or 'site_ids' in columns: site_persons = SitePerson().select(filter={'person_id': person['person_id']}) diff --git a/PLC/Storage/AlchemyObject.py b/PLC/Storage/AlchemyObject.py index d99a227..ed9eca8 100644 --- a/PLC/Storage/AlchemyObject.py +++ b/PLC/Storage/AlchemyObject.py @@ -16,8 +16,8 @@ from PLC.Logger import logger class AlchemyObj(Record): - def __init__(self, api=None, fields = {}, object=None): - Record.__init__(self, dict=fields, object=object) + def __init__(self, api=None, fields = {}, object=None, columns=None): + Record.__init__(self, dict=fields, object=object, columns=columns) self.api=api def __iter__(self): diff --git a/PLC/Storage/Record.py b/PLC/Storage/Record.py index eca606e..347004e 100644 --- a/PLC/Storage/Record.py +++ b/PLC/Storage/Record.py @@ -6,20 +6,25 @@ class Record(dict): fields = {} tags = {} - def __init__(self, dict=None, object=None): + def __init__(self, dict=None, object=None, columns=None): self.object = object if dict: + if columns: + for column in columns: + if dict.has_key(column): + del dict[column] self.update(dict) if self.object: - self.update_fields() + self.update_fields(columns) def get_field(self, field): return self.__dict__.get(field, None) - def update_fields(self): + def update_fields(self, columns=None): for field in self.fields: if hasattr(self.object, field): - self[field] = getattr(self.object, field) + if not columns or field in columns: + self[field] = getattr(self.object, field) # xxx fixme # turns out the date_created field is received by the client as a 'created' int -- 2.43.0