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 jetfactory.service import DatabaseService
from jetfactory.exceptions import JetfactoryException

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 JetfactoryException('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

class jetfactory.service.DatabaseService[source]

Service class providing an interface with common database operations

Variables:
  • __model__ – Peewee.Model
  • db_manager – Jetfactory database manager (peewee-async)
count(expression=None, **kwargs)[source]

Return the number of records the given query would yield

Parameters:
  • expression – peewee.Expression (optional)
  • kwargs – kwargs to pass along to _get_query_filtered
Returns:

count (int)

create(item: dict)[source]

Creates new record, returning the record upon success

Parameters:item – item to be inserted
Returns:peewee.Model
delete(record_id: int)[source]

Deletes a record by id

Parameters:record_id – record id
Returns:{‘deleted’: True|False}
get_by_pk(record_id: int)[source]

Returns the matching record or raises an exception

Parameters:record_id – the record to query for
Returns:peewee.Model
get_many(expression=None, **kwargs)[source]

Returns a list of zero or more records

Parameters:
  • expression – peewee.Expression (optional)
  • kwargs – kwargs to pass along to _get_query_filtered
Returns:

[peewee.Model]

get_one(*args, **kwargs)[source]

Get exactly one record or raise an exception

Parameters:
  • args – peewee.Expression (optional)
  • kwargs – kwargs to pass along to _get_query_filtered
Returns:

peewee.Model

get_or_create(item: dict)[source]

Get an object or create it with the provided defaults

Parameters:item – item to be fetched or inserted
Returns:peewee.Model
model

Return service model or raise an exception

Returns:peewee.Model
classmethod register(pkg, mgr)[source]

Class method used internally by the Jetfactory manager to register a Service

Parameters:
update(record, payload)[source]

Updates a record in the database

Parameters:
  • record – peewee.Model or PK
  • payload – update payload
Returns:

updated record

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)