How do I avoid wrapper classes? - Here is a fully working; self-contained example using only Python's stdlib and python-stdnet:
from stdnet.odm import SymbolField, CharField, StdModel, Router
from uuid import uuid4
from hashlib import sha512
class EmailField(SymbolField):
def to_python(self, value, backend=None):
value = super(EmailField, self).to_python(value, backend)
assert '@' in value
return value
class UserWrapper(object):
def __init__(self, models_obj):
self.models_obj = models_obj
def login(self, email, password):
found_user = self.models_obj.user.filter(email=email)
if not found_user:
pass
elif found_user[0].password == sha512(found_user[0].salt + password).hexdigest():
return {'successful_login': True}
return {'successful_login': False}
def register(self, email, password):
salt = uuid4().hex
hashed_password = sha512(salt + password).hexdigest()
self.models_obj.user.new(email=email, password=hashed_password, salt=salt)
return {'successful_registration': True}
class User(StdModel):
email = EmailField(primary_key=True, unique=True)
password = CharField()
salt = CharField()
if __name__ == '__main__':
models = Router('redis://localhost:6379?db=3')
models.register(User)
user_wrapper_obj = UserWrapper(models_obj=models)
email_and_pass = 'f...@bar.com', 'passwd'
assert user_wrapper_obj.register(*email_and_pass) == {'successful_registration': True}
assert user_wrapper_obj.login(*email_and_pass) == {'successful_login': True}