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(a)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/msg04...
+
+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/msg04...
-
-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())
+