user_ext.py 2.57 KB
import colander
from datatables import (ColumnDT, DataTables, )
from deform import (widget, )
from opensipkd.tools.buttons import btn_close, btn_delete, btn_view
from pyramid.i18n import TranslationStringFactory
from pyramid.view import view_config

from . import BaseView
from ..models import (DBSession, User, ExternalIdentity)

_ = TranslationStringFactory('user')


class AddSchema(colander.Schema):
    external_user_name = colander.SchemaNode(
        colander.String(), title=_('User Name'))
    provider_name = (colander.SchemaNode(colander.String(), title=_('Provider')))
    local_user_id = (colander.SchemaNode(colander.String(), title=_('User ID')))


class EditSchema(AddSchema):
    external_id = colander.SchemaNode(colander.String(),
                                      widget=widget.TextInputWidget(readonly=True),
                                      missing=colander.drop)


class ListSchema(colander.Schema):
    id = colander.SchemaNode(colander.String(), field="external_id")
    external_user_name = colander.SchemaNode(
        colander.String(), title=_('User Name'))
    provider_name = (colander.SchemaNode(colander.String(), title=_('Provider')))
    local_user_id = (colander.SchemaNode(colander.String(), title=_('User ID')))


class UserExt(BaseView):
    def __init__(self, request):
        super(UserExt, self).__init__(request)
        self.edit_schema = EditSchema
        self.list_schema = ListSchema
        self.list_route = "user-ext"
        self.list_buttons = (btn_view, btn_delete, btn_close)
        self.table = ExternalIdentity

    @view_config(
        route_name='user-ext', renderer='templates/table.pt',
        permission='user-view')
    def view_list(self):
        form = super(UserExt, self).view_list()
        return form

    @view_config(
        route_name='user-ext-view', renderer='templates/form_input.pt',
        permission='user-view')
    def view_view(self):
        return super(UserExt, self).view_view()

    @view_config(
        route_name='user-ext-delete', renderer='templates/form_input.pt',
        permission='user-edit')
    def view_delete(self):
        return super(UserExt, self).view_delete()

    @view_config(
        route_name='user-ext-act', renderer='json', permission='user-view')
    def view_act(self):
        return super(UserExt, self).view_act()

    def delete_msg(self, row):
        return f'Data ID {row.external_id} sudah dihapus.'

    def query_id(self):
        return DBSession.query(ExternalIdentity).filter_by(external_id=self.req.matchdict["id"])