[storm] python properties and storm properties...
Jamu Kakar
jamshed.kakar at canonical.com
Sun Mar 23 19:54:15 GMT 2008
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.
More information about the storm
mailing list