Our custom ordering system
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

""" 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()
)