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. >> > -- storm mailing list [email protected] Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/storm
