server/mirrormanager/schema_updates/__init__.py | 75 ++++++++++++++++++-- server/mirrormanager/schema_updates/oldtables.py | 35 +++++++++ server/mirrormanager/schema_updates/update_1_4_0.py | 65 ----------------- server/update-schema | 40 ++++++++++ 4 files changed, 144 insertions(+), 71 deletions(-)
New commits: commit ab0e395a5a4c8a124acfc0165905ed8772f1513c Author: Matt Domsch Matt_Domsch@dell.com Date: Tue Apr 26 18:05:21 2011 -0500
fix schema updates, add update-schema tool
diff --git a/server/mirrormanager/schema_updates/__init__.py b/server/mirrormanager/schema_updates/__init__.py index a072a7b..a8141f9 100644 --- a/server/mirrormanager/schema_updates/__init__.py +++ b/server/mirrormanager/schema_updates/__init__.py @@ -1,11 +1,74 @@ -import update_1_2_10 -import update_1_3_2 -import update_1_4_0 +from sqlobject import * +from sqlobject.sqlbuilder import * +from turbogears import identity, config +from mirrormanager.model import * +from sqlobject import SQLObject, BoolCol, IntCol +from oldtables import * + +from turbogears.database import PackageHub +hub = PackageHub("mirrormanager") +__connection__ = hub + +changes = {} + +def change_tables(): + Location.createTable(ifNotExists=True) + FileGroup.createTable(ifNotExists=True) + + if 'emailOnDrop' not in OldSite.sqlmeta.columns and \ + 'emailOnAdd' not in OldSite.sqlmeta.columns: + OldSite.sqlmeta.addColumn(BoolCol("emailOnDrop", default=False), changeSchema=True) + OldSite.sqlmeta.addColumn(BoolCol("emailOnAdd", default=False), changeSchema=True) + changes['site.email_on_drop_add'] = True + + + if 'dnsCountryHost' not in OldHost.sqlmeta.columns: + OldHost.sqlmeta.addColumn(BoolCol("dnsCountryHost", default=False), changeSchema=True) + changes['host.dns_country_host'] = True + + if 'sortorder' not in OldVersion.sqlmeta.columns and \ + 'codename' not in OldVersion.sqlmeta.columns: + OldVersion.sqlmeta.addColumn(IntCol("sortorder", default=0), changeSchema=True) + OldVersion.sqlmeta.addColumn(UnicodeCol("codename", default=None), changeSchema=True) + changes['version.sortorder_codename'] = True + + if 'publiclist' not in OldProduct.sqlmeta.columns: + OldProduct.sqlmeta.addColumn(BoolCol("publiclist", default=True), changeSchema=True) + changes['product.publiclist'] = True + + if 'geoDnsDomain' not in OldCategory.sqlmeta.columns: + OldCategory.sqlmeta.addColumn(UnicodeCol("GeoDNSDomain", default=None), changeSchema=True) + changes['category.geo_dns_domain'] = True + +def fill_columns(): + if changes.get('site.email_on_drop_add'): + for s in Site.select(): + s.emailOnDrop=False + s.emailOnAdd=False + + if changes.get('host.dns_country_host'): + for h in Host.select(): + h.dnsCountryHost = False + + if changes.get('version.sortorder_codename'): + for v in Version.select(): + v.sortorder = 0 + v.codename = None + + if changes.get('product.publiclist'): + for p in Product.select(): + p.publiclist = True + + if changes.get('category.geo_dns_domain'): + for c in Category.select(): + c.GeoDNSDomain = None + + +
def update(): """Fills newly created database columns with information. Run this after using tg-admin sql upgrade. """ - update_1_2_10.update() - update_1_3_2.update() - update_1_4_0.update() + change_tables() + fill_columns() diff --git a/server/mirrormanager/schema_updates/oldtables.py b/server/mirrormanager/schema_updates/oldtables.py new file mode 100644 index 0000000..b7779f3 --- /dev/null +++ b/server/mirrormanager/schema_updates/oldtables.py @@ -0,0 +1,35 @@ +from sqlobject import * + +from turbogears.database import PackageHub +hub = PackageHub("mirrormanager") +__connection__ = hub + +# upgrade methodology borrowed from +# http://www.mail-archive.com/sqlobject-discuss@lists.sourceforge.net/msg04714... + +class OldSite(SQLObject): + class sqlmeta: + fromDatabase = True + table = 'site' + +class OldHost(SQLObject): + class sqlmeta: + fromDatabase = True + table = 'host' + +class OldVersion(SQLObject): + class sqlmeta: + fromDatabase = True + table = 'version' + +class OldProduct(SQLObject): + class sqlmeta: + fromDatabase = True + table = 'product' + +class OldCategory(SQLObject): + class sqlmeta: + fromDatabase = True + table = 'category' + + diff --git a/server/mirrormanager/schema_updates/update_1_4_0.py b/server/mirrormanager/schema_updates/update_1_4_0.py deleted file mode 100644 index a5629b5..0000000 --- a/server/mirrormanager/schema_updates/update_1_4_0.py +++ /dev/null @@ -1,65 +0,0 @@ -from mirrormanager.model import Location, FileGroup -from sqlobject import SQLObject, BoolCol, IntCol - -# upgrade methodology borrowed from -# http://www.mail-archive.com/sqlobject-discuss@lists.sourceforge.net/msg04714... - -class OldSite(SQLObject): - class sqlmeta: - fromDatabase = True - table = 'site' - -class OldHost(SQLObject): - class sqlmeta: - fromDatabase = True - table = 'host' - -class OldVersion(SQLObject): - class sqlmeta: - fromDatabase = True - table = 'version' - -class OldProduct(SQLObject): - class sqlmeta: - fromDatabase = True - table = 'product' - -class OldCategory(SQLObject): - class sqlmeta: - fromDatabase = True - table = 'category' - -def update(): - Location.createTable(ifNotExists=True) - FileGroup.createTable(ifNotExists=True) - - if 'email_on_drop' not in OldSite.sqlmeta.columns and \ - 'email_on_add' not in OldSite.sqlmeta.columns: - OldSite.addColumn(BoolCol("emailOnDrop", default=False), changeSchema=True) - OldSite.addColumn(BoolCol("emailOnAdd", default=False), changeSchema=True) - for s in OldSite.select(): - s.emailOnDrop=False - s.emailOnAdd=False - - if 'dns_country_host' not in OldHost.sqlmeta.columns: - OldHost.addColumn(BoolCol("dnsCountryHost", default=False), changeSchema=True) - for h in OldHost.select(): - h.dnsCountryHost = False - - if 'sortorder' not in OldVersion.sqlmeta.columns and \ - 'codename' not in OldVersion.sqlmeta.columns: - OldVersion.addColumn(IntCol("sortorder", default=0, changeSchema=True)) - OldVersion.addColumn(UnicodeCol("codename", default=None), changeSchema=True) - for v in OldVersion.select(): - v.sortorder = 0 - v.codename = None - - if 'publiclist' not in OldProduct.sqlmeta.columns: - OldProduct.addColumn(BoolCol("publiclist", default=True), changeSchema=True) - for p in OldProduct.select(): - p.publiclist = True - - if 'geo_dns_domain' not in OldCategory.sqlmeta.columns: - OldCategory.addColumn(UnicodeCol("GeoDNSDomain", default=None), changeSchema=True) - for c in OldCategory.select(): - c.GeoDNSDomain = None diff --git a/server/update-schema b/server/update-schema new file mode 100755 index 0000000..ca421cc --- /dev/null +++ b/server/update-schema @@ -0,0 +1,40 @@ +#!/usr/bin/python +__requires__ = 'TurboGears[future]' +import pkg_resources +pkg_resources.require("TurboGears") + +from optparse import OptionParser +import sys +from sqlobject import * +import turbogears +from mirrormanager.model import * + +from turbogears.database import PackageHub +hub = __connection__ = None + +options = None + + +def main(): + global options + parser = OptionParser(usage=sys.argv[0] + " [options]") + parser.add_option("-c", "--config", + dest="config", default='/etc/mirrormanager/prod.cfg', + help="TurboGears config file to use (default=/etc/mirrormanager/prod.cfg)") + + (options, args) = parser.parse_args() + + turbogears.update_config(configfile=options.config, + modulename="mirrormanager.config") + global hub + global __connection__ + hub = PackageHub("mirrormanager") + __connection__ = hub + + import mirrormanager.schema_updates + mirrormanager.schema_updates.update() + return 0 + +if __name__ == "__main__": + sys.exit(main()) +
mirrormanager-commits@lists.fedorahosted.org