This was a very simple ticket actually. I created a list called FOUNDATIONS in

mediagoblin/db/models.py. This list holds all of the information about rows that
should be created at database initialization. Read the documentation near the
FOUNDATIONS list to understand the proper format for this list.

All of the work is done through a new method on MigrationManager in
mediagoblin/db/migrations_tools.py. This method, `populate_table_foundations`
parses the FOUNDATIONS list and creates the foundations based on the data incl-
uded. This only ever happens when the database is initialized. Migrations to
releases with new Foundations should be very easy just using the basic
database functionality.
This commit is contained in:
tilly-Q 2013-07-29 16:36:06 -04:00
parent 130b85f81a
commit f2b2008da5
2 changed files with 30 additions and 1 deletions

View File

@ -140,6 +140,18 @@ class MigrationManager(object):
self.session.bind,
tables=[model.__table__ for model in self.models])
def populate_table_foundations(self):
"""
Create the table foundations (default rows) as layed out in FOUNDATIONS
in mediagoblin.db.models
"""
from mediagoblin.db.models import FOUNDATIONS as MAIN_FOUNDATIONS
for Model, rows in MAIN_FOUNDATIONS.items():
print u'\n--> Laying foundations for %s table' % Model.__name__
for parameters in rows:
row = Model(**parameters)
row.save()
def create_new_migration_record(self):
"""
Create a new migration record for this migration set
@ -202,7 +214,9 @@ class MigrationManager(object):
self.init_tables()
# auto-set at latest migration number
self.create_new_migration_record()
self.create_new_migration_record()
if self.name==u'__main__':
self.populate_table_foundations()
self.printer(u"done.\n")
self.set_current_migration()

View File

@ -585,6 +585,21 @@ MODELS = [
Notification, CommentNotification, ProcessingNotification,
CommentSubscription]
"""
Foundations are the default rows that are created immediately after the tables
are initialized. Each entry to this dictionary should be in the format of:
ModelConstructorObject:List of Dictionaries
(Each Dictionary represents a row on the Table to be created, containing each
of the columns' names as a key string, and each of the columns' values as a
value)
ex. [NOTE THIS IS NOT BASED OFF OF OUR USER TABLE]
user_foundations = [{'name':u'Joanna', 'age':24},
{'name':u'Andrea', 'age':41}]
FOUNDATIONS = {User:user_foundations}
"""
FOUNDATIONS = {}
######################################################
# Special, migrations-tracking table