DatabaseService

The built-in DatabaseService inherits from BaseService and provides an interface for interacting with MySQL and PostgreSQL databases using the peewee-async manager.

Example

from facture.service import DatabaseService
from facture.exceptions import FactureException

from jet_guestbook.model import VisitModel

class VisitService(DatabaseService):
    __model__ = VisitModel

    async def get_authored(self, visit_id, remote_addr):
        visit = await self.get_by_pk(visit_id)
        if visit.visitor.ip_addr != remote_addr:
            raise FactureException('Not allowed from your IP', 403)

        return visit

    async def visit_count(self, ip_addr):
        return await self.count(VisitModel.visitor.ip_addr == ip_addr)

API

Important

The __model__ class attribute must be set for Services implementing the DatabaseService.

Models

Models are implemented using Peewee.Model.

Example

from datetime import datetime
from peewee import Model, ForeignKeyField, CharField, DateTimeField
from .visitor import VisitorModel


class VisitModel(Model):
    class Meta:
        table_name = 'visit'

    created_on = DateTimeField(default=datetime.now)
    message = CharField(null=False)
    visitor = ForeignKeyField(VisitorModel)

    @classmethod
    def extended(cls, *fields):
        return cls.select(VisitModel, VisitorModel, *fields).join(VisitorModel)