You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.7 KiB
96 lines
2.7 KiB
""" Classes for acessing a datastore """ |
|
|
|
import abc |
|
|
|
from . import models |
|
|
|
|
|
class AbstractOrderRepository(abc.ABC): |
|
""" Abstract base class for a datastore """ |
|
|
|
def __init__(self, session): |
|
self.session = session |
|
|
|
def add_order(self, order): |
|
""" add an order to the datastore """ |
|
|
|
@abc.abstractmethod |
|
def get_order(self, reference): |
|
""" get an order from the datastore by primary key """ |
|
|
|
@abc.abstractmethod |
|
def list_orders(self): |
|
""" list orders orderd by date, descending """ |
|
|
|
@abc.abstractmethod |
|
def add_user(self, user): |
|
""" add a user to the datastore """ |
|
|
|
@abc.abstractmethod |
|
def get_user(self, reference): |
|
""" get a user from the datastore by primary key """ |
|
|
|
@abc.abstractmethod |
|
def get_user_by_username(self, reference): |
|
""" get a user from the datastore by username """ |
|
|
|
@abc.abstractmethod |
|
def get_user_by_email(self, reference): |
|
""" get a user from the datastore by email """ |
|
|
|
@abc.abstractmethod |
|
def list_users(self): |
|
""" list users orderd by username """ |
|
|
|
|
|
class SqlAlchemyRepository(AbstractOrderRepository): |
|
""" Repository implementation for SQLAlchemy """ |
|
|
|
def _add_item_to_db(self, item): |
|
""" add any item to the database """ |
|
self.session.add(item) |
|
self.session.flush() |
|
|
|
def add_order(self, order): |
|
""" add an order to the database """ |
|
self._add_item_to_db(order) |
|
|
|
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() |
|
) |
|
|
|
def list_orders(self): |
|
""" list orders orderd by date, descending """ |
|
return ( |
|
self.session.query(models.OrderItem) |
|
.order_by(models.OrderItem.created_on.desc()) |
|
.all() |
|
) |
|
|
|
def add_user(self, user): |
|
""" add a user to the database """ |
|
self._add_item_to_db(user) |
|
|
|
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() |
|
|
|
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() |
|
) |
|
|
|
def get_user_by_email(self, reference): |
|
""" get a user from the database by email """ |
|
return self.session.query(models.User).filter_by(email=reference).one() |
|
|
|
def list_users(self): |
|
""" list users orderd by username """ |
|
return ( |
|
self.session.query(models.User) |
|
.order_by(models.User.username) |
|
.all() |
|
)
|
|
|