feat: add basic views for Alembic Migrations, Dashboard
can see all "known" migration revisions (per alembic config), and migrate the DB arbitrarily via alembic upgrade/downgrade
This commit is contained in:
parent
6791abe96f
commit
3e7aa1fa0b
15 changed files with 1151 additions and 8 deletions
|
|
@ -432,3 +432,98 @@ class TestBatchIdWidget(WebTestCase):
|
|||
|
||||
result = widget.serialize(field, 42)
|
||||
self.assertEqual(result, "00000042")
|
||||
|
||||
|
||||
class TestAlembicRevisionWidget(WebTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.pyramid_config.add_route(
|
||||
"alembic.migrations.view", "/alembic/migrations/{revision}"
|
||||
)
|
||||
|
||||
def make_field(self, node, **kwargs):
|
||||
# TODO: not sure why default renderer is in use even though
|
||||
# pyramid_deform was included in setup? but this works..
|
||||
kwargs.setdefault("renderer", deform.Form.default_renderer)
|
||||
return deform.Field(node, **kwargs)
|
||||
|
||||
def make_widget(self, **kwargs):
|
||||
return mod.AlembicRevisionWidget(self.request, **kwargs)
|
||||
|
||||
def test_serialize(self):
|
||||
node = colander.SchemaNode(colander.String())
|
||||
field = self.make_field(node)
|
||||
widget = self.make_widget()
|
||||
|
||||
html = widget.serialize(field, colander.null)
|
||||
self.assertIs(html, colander.null)
|
||||
html = widget.serialize(field, None)
|
||||
self.assertIs(html, colander.null)
|
||||
html = widget.serialize(field, "")
|
||||
self.assertIs(html, colander.null)
|
||||
|
||||
html = widget.serialize(field, "fc3a3bcaa069")
|
||||
self.assertEqual(
|
||||
html,
|
||||
'<a href="http://example.com/alembic/migrations/fc3a3bcaa069">fc3a3bcaa069</a>',
|
||||
)
|
||||
|
||||
def test_deserialize(self):
|
||||
node = colander.SchemaNode(colander.String())
|
||||
field = self.make_field(node)
|
||||
widget = self.make_widget()
|
||||
self.assertRaises(
|
||||
NotImplementedError, widget.deserialize, field, "fc3a3bcaa069"
|
||||
)
|
||||
|
||||
|
||||
class TestAlembicRevisionsWidget(WebTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.pyramid_config.add_route(
|
||||
"alembic.migrations.view", "/alembic/migrations/{revision}"
|
||||
)
|
||||
|
||||
def make_field(self, node, **kwargs):
|
||||
# TODO: not sure why default renderer is in use even though
|
||||
# pyramid_deform was included in setup? but this works..
|
||||
kwargs.setdefault("renderer", deform.Form.default_renderer)
|
||||
return deform.Field(node, **kwargs)
|
||||
|
||||
def make_widget(self, **kwargs):
|
||||
return mod.AlembicRevisionsWidget(self.request, **kwargs)
|
||||
|
||||
def test_serialize(self):
|
||||
node = colander.SchemaNode(colander.String())
|
||||
field = self.make_field(node)
|
||||
widget = self.make_widget()
|
||||
|
||||
html = widget.serialize(field, colander.null)
|
||||
self.assertIs(html, colander.null)
|
||||
html = widget.serialize(field, None)
|
||||
self.assertIs(html, colander.null)
|
||||
html = widget.serialize(field, "")
|
||||
self.assertIs(html, colander.null)
|
||||
|
||||
html = widget.serialize(field, "fc3a3bcaa069")
|
||||
self.assertEqual(
|
||||
html,
|
||||
'<a href="http://example.com/alembic/migrations/fc3a3bcaa069">fc3a3bcaa069</a>',
|
||||
)
|
||||
|
||||
html = widget.serialize(field, "fc3a3bcaa069, d686f7abe3e0")
|
||||
self.assertEqual(
|
||||
html,
|
||||
'<a href="http://example.com/alembic/migrations/fc3a3bcaa069">fc3a3bcaa069</a>, '
|
||||
'<a href="http://example.com/alembic/migrations/d686f7abe3e0">d686f7abe3e0</a>',
|
||||
)
|
||||
|
||||
def test_deserialize(self):
|
||||
node = colander.SchemaNode(colander.String())
|
||||
field = self.make_field(node)
|
||||
widget = self.make_widget()
|
||||
self.assertRaises(
|
||||
NotImplementedError, widget.deserialize, field, "fc3a3bcaa069"
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue