Show basic column info as row grid when viewing Table
This commit is contained in:
parent
38f88407ff
commit
fb7368993c
|
@ -2,7 +2,7 @@
|
||||||
################################################################################
|
################################################################################
|
||||||
#
|
#
|
||||||
# Rattail -- Retail Software Framework
|
# Rattail -- Retail Software Framework
|
||||||
# Copyright © 2010-2022 Lance Edgar
|
# Copyright © 2010-2023 Lance Edgar
|
||||||
#
|
#
|
||||||
# This file is part of Rattail.
|
# This file is part of Rattail.
|
||||||
#
|
#
|
||||||
|
@ -29,8 +29,11 @@ from __future__ import unicode_literals, absolute_import
|
||||||
import sys
|
import sys
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
|
import six
|
||||||
|
|
||||||
import colander
|
import colander
|
||||||
from deform import widget as dfwidget
|
from deform import widget as dfwidget
|
||||||
|
from webhelpers2.html import HTML
|
||||||
|
|
||||||
from tailbone.views import MasterView
|
from tailbone.views import MasterView
|
||||||
|
|
||||||
|
@ -60,6 +63,19 @@ class TableView(MasterView):
|
||||||
'row_count',
|
'row_count',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
has_rows = True
|
||||||
|
rows_pageable = False
|
||||||
|
rows_filterable = False
|
||||||
|
rows_viewable = False
|
||||||
|
|
||||||
|
row_grid_columns = [
|
||||||
|
'sequence',
|
||||||
|
'column_name',
|
||||||
|
'data_type',
|
||||||
|
'nullable',
|
||||||
|
'description',
|
||||||
|
]
|
||||||
|
|
||||||
def __init__(self, request):
|
def __init__(self, request):
|
||||||
super(TableView, self).__init__(request)
|
super(TableView, self).__init__(request)
|
||||||
app = self.get_rattail_app()
|
app = self.get_rattail_app()
|
||||||
|
@ -117,6 +133,7 @@ class TableView(MasterView):
|
||||||
}
|
}
|
||||||
|
|
||||||
table = model.Base.metadata.tables.get(table_name)
|
table = model.Base.metadata.tables.get(table_name)
|
||||||
|
data['table'] = table
|
||||||
if table is not None:
|
if table is not None:
|
||||||
try:
|
try:
|
||||||
mapper = get_mapper(table)
|
mapper = get_mapper(table)
|
||||||
|
@ -198,6 +215,52 @@ class TableView(MasterView):
|
||||||
# def save_create_form(self, form):
|
# def save_create_form(self, form):
|
||||||
# return form.validated
|
# return form.validated
|
||||||
|
|
||||||
|
def get_row_data(self, table):
|
||||||
|
data = []
|
||||||
|
for i, column in enumerate(table['table'].columns, 1):
|
||||||
|
|
||||||
|
data.append({
|
||||||
|
'column': column,
|
||||||
|
'sequence': i,
|
||||||
|
'column_name': column.name,
|
||||||
|
'data_type': six.text_type(repr(column.type)),
|
||||||
|
'nullable': column.nullable,
|
||||||
|
'description': column.doc,
|
||||||
|
})
|
||||||
|
return data
|
||||||
|
|
||||||
|
def configure_row_grid(self, g):
|
||||||
|
super(TableView, self).configure_row_grid(g)
|
||||||
|
|
||||||
|
g.sorters['sequence'] = g.make_simple_sorter('sequence')
|
||||||
|
g.set_sort_defaults('sequence')
|
||||||
|
g.set_label('sequence', "Seq.")
|
||||||
|
|
||||||
|
g.sorters['column_name'] = g.make_simple_sorter('column_name',
|
||||||
|
foldcase=True)
|
||||||
|
g.set_searchable('column_name')
|
||||||
|
|
||||||
|
g.sorters['data_type'] = g.make_simple_sorter('data_type',
|
||||||
|
foldcase=True)
|
||||||
|
g.set_searchable('data_type')
|
||||||
|
|
||||||
|
g.set_type('nullable', 'boolean')
|
||||||
|
g.sorters['nullable'] = g.make_simple_sorter('nullable')
|
||||||
|
|
||||||
|
g.set_renderer('description', self.render_column_description)
|
||||||
|
|
||||||
|
def render_column_description(self, column, field):
|
||||||
|
text = column[field]
|
||||||
|
if not text:
|
||||||
|
return
|
||||||
|
|
||||||
|
max_length = 80
|
||||||
|
|
||||||
|
if len(text) < max_length:
|
||||||
|
return text
|
||||||
|
|
||||||
|
return HTML.tag('span', title=text, c="{} ...".format(text[:max_length]))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def defaults(cls, config):
|
def defaults(cls, config):
|
||||||
rattail_config = config.registry.settings.get('rattail_config')
|
rattail_config = config.registry.settings.get('rattail_config')
|
||||||
|
|
Loading…
Reference in a new issue