Thought I had. Must've hit reply rather than reply-all by mistake...
Jamu Kakar wrote: > Hi Jason, > > Please CC the list when you respond to messages so that everyone can > see the complete thread. > > Thanks, > J. > > Jason R Briggs wrote: >> Thanks for that. I'd already come up with the former solution, but >> decided it wasn't the right answer since it then requires the column >> name to be changed -- thus the column is different from the actual >> property. Not a big deal, but I figured there might be a more >> elegant way. Your second solution might be the answer, thanks. >> >> Jamu Kakar wrote: >>> Hi Jason, >>> >>> Jason R Briggs wrote: >>> > This might be a bit of a dumb question, but I have to admit I'm >>> > struggling to find the right answer. >>> >>> The only dumb question is the one you don't ask. :) >>> >>> > Is there a way to use a Storm property in a similar way to a python >>> > property? For example, in a normal class I can define a setter and >>> > getter and then a property which uses those methods: >>> > >>> > def set_password(self, password): >>> > self._password = encrypt_password(self.username, password) >>> > >>> > def get_password(self): >>> > return self._password >>> > >>> > password = property(get_password, set_password) >>> > >>> > Can I do something similar with a storm property? >>> >>> You can do this: >>> >>> class Person(Storm): >>> >>> __storm_table__ = "person" >>> >>> id = Int(primary=True) >>> password_hash = RawStr(allow_none=False) >>> >>> def set_password(self, password): >>> self.password_hash = encrypt_password(self.username, password) >>> >>> def get_password(self): >>> return self.password_hash >>> >>> password = property(get_password, set_password) >>> >>> Another option is to create a custom property to do what you want >>> (useful if you need the behaviour in more than one place and don't >>> want to repeat the set/get property boilerplate): >>> >>> from storm.variables import RawStrVariable >>> from storm.properties import SimpleProperty >>> >>> class PasswordVariable(RawStrVariable): >>> >>> def parse_set(self, value, from_db): >>> return super(PasswordVariable, >>> self).parse_set(encrypt_password(value), >>> from_db) >>> >>> class Password(SimpleProperty): >>> >>> variable_class = PasswordVariable >>> >>> And then do: >>> >>> class Person(Storm): >>> >>> __storm_table__ = "person" >>> >>> id = Int(primary=True) >>> password = Password(allow_none=False) >>> >>> I haven't tested either of these solutions, but I believe they will >>> both work. >>> >>> Thanks, >>> J. >>> >> > -- Jason R Briggs [e] [EMAIL PROTECTED] [m] +44 7914 641406 [w] http://www.domyinvoice.com [b] http://www.briggs.net.nz/log -- storm mailing list [email protected] Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/storm
