Wrap up steps for new table wizard

it actually works.. :)  needs more polish, but will let usage drive that
This commit is contained in:
Lance Edgar 2023-01-15 22:52:01 -06:00
parent 68ed5942e6
commit f4bc280da7
2 changed files with 258 additions and 29 deletions

View file

@ -32,6 +32,8 @@ import warnings
import six
from rattail.util import simple_error
import colander
from deform import widget as dfwidget
from webhelpers2.html import HTML
@ -111,6 +113,13 @@ class TableView(MasterView):
# row_count
g.sorters['row_count'] = g.make_simple_sorter('row_count')
def configure_form(self, f):
super(TableView, self).configure_form(f)
# TODO: should render this instead, by inspecting table
if not self.creating:
f.remove('versioned')
def get_instance(self):
from sqlalchemy_utils import get_mapper
@ -205,6 +214,37 @@ class TableView(MasterView):
return {'ok': True}
def write_revision_script(self):
data = self.request.json_body
script = self.db_handler.generate_revision_script(data['branch'],
message=data['message'])
return {'ok': True,
'script': script.path}
def upgrade_db(self):
self.db_handler.upgrade_db()
return {'ok': True}
def check_table(self):
model = self.model
data = self.request.json_body
table_name = data['table_name']
table = model.Base.metadata.tables.get(table_name)
if table is None:
return {'ok': True,
'problem': "Table does not exist in model metadata!"}
try:
count = self.Session.query(table).count()
except Exception as error:
return {'ok': True,
'problem': simple_error(error)}
url = self.request.route_url('{}.view'.format(self.get_route_prefix()),
table_name=table_name)
return {'ok': True, 'url': url}
def get_row_data(self, table):
data = []
for i, column in enumerate(table['table'].columns, 1):
@ -237,6 +277,7 @@ class TableView(MasterView):
g.sorters['nullable'] = g.make_simple_sorter('nullable')
g.set_renderer('description', self.render_column_description)
g.set_searchable('description')
def render_column_description(self, column, field):
text = column[field]
@ -287,6 +328,33 @@ class TableView(MasterView):
renderer='json',
permission='{}.create'.format(permission_prefix))
# generate revision script
config.add_route('{}.write_revision_script'.format(route_prefix),
'{}/write-revision-script'.format(url_prefix),
request_method='POST')
config.add_view(cls, attr='write_revision_script',
route_name='{}.write_revision_script'.format(route_prefix),
renderer='json',
permission='{}.create'.format(permission_prefix))
# upgrade db
config.add_route('{}.upgrade_db'.format(route_prefix),
'{}/upgrade-db'.format(url_prefix),
request_method='POST')
config.add_view(cls, attr='upgrade_db',
route_name='{}.upgrade_db'.format(route_prefix),
renderer='json',
permission='{}.create'.format(permission_prefix))
# check table
config.add_route('{}.check_table'.format(route_prefix),
'{}/check-table'.format(url_prefix),
request_method='POST')
config.add_view(cls, attr='check_table',
route_name='{}.check_table'.format(route_prefix),
renderer='json',
permission='{}.create'.format(permission_prefix))
class TablesView(TableView):