Quickstart

Flask

Frink is designed to be used with the Application Factory pattern in Flask.

from frink.connection import RethinkDB

db = RethinkDB()

Then in your application factory, call init_app on the DB object.

def create_app():
    ...
    db.init_app(app)

Flask-Security

Frink includes FrinkDatastore and FrinkUserDatastore for Flask-Security compatibility.

Define your User and Role models.

import datetime
from schematics.types.base import (
    StringType, BooleanType, DateTimeType, IntType
)

from schematics.types.compound import (
    ListType, ModelType
)

from flask.ext.security import UserMixin, RoleMixin

from frink.base import BaseModel
from frink.orm import ORMMeta


class Role(BaseModel, RoleMixin):

    __metaclass__ = ORMMeta

    name = StringType()
    description = StringType()


class User(BaseModel, UserMixin):

    __metaclass__ = ORMMeta

    email = StringType()
    password = StringType()
    active = BooleanType(default=True)
    confirmed_at = DateTimeType()
    last_login_at = DateTimeType(default=datetime.datetime.now)
    current_login_at = DateTimeType(default=datetime.datetime.now)
    registered_at = DateTimeType()
    last_login_ip = StringType()
    current_login_ip = StringType()
    login_count = IntType()

    roles = ListType(ModelType(Role))

Then in your application factory, initialise this...

from frink.datastore import FrinkUserDatastore
from .users.models import User, Role

def create_app():
    ...
    user_datastore = FrinkUserDatastore(db, User, Role)
    security.init_app(app, user_datastore)
    app.user_datastore = user_datastore