|
|
|
@ -3,10 +3,17 @@
@@ -3,10 +3,17 @@
|
|
|
|
|
import abc |
|
|
|
|
|
|
|
|
|
from sqlalchemy import func |
|
|
|
|
from sqlalchemy.orm.exc import NoResultFound |
|
|
|
|
|
|
|
|
|
from . import models |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class RepoItemNotFound(StopIteration): |
|
|
|
|
""" repo error for a not found item """ |
|
|
|
|
|
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AbstractOrderRepository(abc.ABC): |
|
|
|
|
""" Abstract base class for a datastore """ |
|
|
|
|
|
|
|
|
@ -63,9 +70,14 @@ class SqlAlchemyRepository(AbstractOrderRepository):
@@ -63,9 +70,14 @@ class SqlAlchemyRepository(AbstractOrderRepository):
|
|
|
|
|
|
|
|
|
|
def get_order(self, reference): |
|
|
|
|
""" get an order from the database by primary key """ |
|
|
|
|
return ( |
|
|
|
|
self.session.query(models.OrderItem).filter_by(id=reference).one() |
|
|
|
|
) |
|
|
|
|
try: |
|
|
|
|
return ( |
|
|
|
|
self.session.query(models.OrderItem) |
|
|
|
|
.filter_by(id=reference) |
|
|
|
|
.one() |
|
|
|
|
) |
|
|
|
|
except NoResultFound as exc: |
|
|
|
|
raise RepoItemNotFound from exc |
|
|
|
|
|
|
|
|
|
def list_orders(self): |
|
|
|
|
""" list orders orderd by date, descending """ |
|
|
|
@ -81,21 +93,34 @@ class SqlAlchemyRepository(AbstractOrderRepository):
@@ -81,21 +93,34 @@ class SqlAlchemyRepository(AbstractOrderRepository):
|
|
|
|
|
|
|
|
|
|
def get_user(self, reference): |
|
|
|
|
""" get a user from the database by primary key """ |
|
|
|
|
return self.session.query(models.User).filter_by(id=reference).one() |
|
|
|
|
try: |
|
|
|
|
return ( |
|
|
|
|
self.session.query(models.User).filter_by(id=reference).one() |
|
|
|
|
) |
|
|
|
|
except NoResultFound as exc: |
|
|
|
|
raise RepoItemNotFound from exc |
|
|
|
|
|
|
|
|
|
def get_user_by_username(self, reference): |
|
|
|
|
""" get a user from the database by username """ |
|
|
|
|
return ( |
|
|
|
|
self.session.query(models.User).filter_by(username=reference).one() |
|
|
|
|
) |
|
|
|
|
try: |
|
|
|
|
return ( |
|
|
|
|
self.session.query(models.User) |
|
|
|
|
.filter_by(username=reference) |
|
|
|
|
.one() |
|
|
|
|
) |
|
|
|
|
except NoResultFound as exc: |
|
|
|
|
raise RepoItemNotFound from exc |
|
|
|
|
|
|
|
|
|
def get_user_by_email(self, reference): |
|
|
|
|
""" get a user from the database by email """ |
|
|
|
|
return ( |
|
|
|
|
self.session.query(models.User) |
|
|
|
|
.filter(func.lower(models.User.email) == func.lower(reference)) |
|
|
|
|
.one() |
|
|
|
|
) |
|
|
|
|
try: |
|
|
|
|
return ( |
|
|
|
|
self.session.query(models.User) |
|
|
|
|
.filter(func.lower(models.User.email) == func.lower(reference)) |
|
|
|
|
.one() |
|
|
|
|
) |
|
|
|
|
except NoResultFound as exc: |
|
|
|
|
raise RepoItemNotFound from exc |
|
|
|
|
|
|
|
|
|
def list_users(self): |
|
|
|
|
""" list users orderd by username """ |
|
|
|
|