user.py 1.68 KB
import colander
from sqlalchemy import (
    cast,
    Text,
    )
from pyramid.i18n import TranslationStringFactory
from pyramid.view import view_config
from datatables import (
    ColumnDT,
    DataTables,
    )
from detable import DeTable
from opensipkd.tools.buttons import (
    btn_view,
    btn_add,
    btn_edit,
    btn_delete,
    btn_close,
    )
from ...models import DBSession
from ...models.ziggurat import User


_ = TranslationStringFactory('user')


columns = [
        ColumnDT(User.id, mData='id'),
        ColumnDT(User.user_name, mData='user_name'),
        ColumnDT(User.email, mData='email'),
        ColumnDT(User.status, mData='status'),
        ColumnDT(cast(User.last_login_date, Text), mData='last_login_date')]


@view_config(
    route_name='theme2-user-act', renderer='json', permission='user-edit')
def view_act(request):
    if request.matchdict['act'] == 'grid':
        q = DBSession.query().select_from(User)
        dt = DataTables(request.GET, q, columns)
        return dt.output_result()


class ListSchema(colander.Schema):
    id = colander.SchemaNode(colander.Integer())
    user_name = colander.SchemaNode(colander.String(), width='100pt')
    email = colander.SchemaNode(colander.String())
    status = colander.SchemaNode(colander.String())
    last_login_date = colander.SchemaNode(colander.String())


@view_config(
    route_name='theme2-user', renderer='templates/user/list.pt',
    permission='user-edit')
def view_list(request):
    url = request.route_url('home') + 'theme2/user'
    table = DeTable(
            ListSchema(), action=url,
            buttons=(btn_view, btn_add, btn_edit, btn_delete, btn_close))
    return dict(table=table.render(), title=_('Users'))