Browse Source

raising custom exceptions

funding-tag
Holger Frey 5 years ago
parent
commit
695959cdc3
  1. 31
      ordr3/repo.py

31
ordr3/repo.py

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

Loading…
Cancel
Save