Changeset 1314:41b85535ff5d
- Timestamp:
- 07/13/09 17:50:37 (3 years ago)
- Branch:
- default
- Files:
-
- 10 added
- 5 edited
-
external-plugins/eric_the_fish/__init__.py (modified) (2 diffs)
-
external-plugins/eric_the_fish/database.py (added)
-
external-plugins/eric_the_fish/versions/001_Move_fortunes_to_the_database.py (added)
-
scripts/manage-database (added)
-
zine/_core.py (modified) (3 diffs)
-
zine/application.py (modified) (2 diffs)
-
zine/database.py (modified) (1 diff)
-
zine/models.py (modified) (3 diffs)
-
zine/templates/admin/perform_upgrade.html (added)
-
zine/upgrades/__init__.py (added)
-
zine/upgrades/customisation.py (added)
-
zine/upgrades/versions/001_split_tables.py (added)
-
zine/upgrades/versions/002_notification_subscriptions.py (added)
-
zine/upgrades/versions/__init__.py (added)
-
zine/upgrades/webapp.py (added)
Legend:
- Unmodified
- Added
- Removed
-
external-plugins/eric_the_fish/__init__.py
r1129 r1314 56 56 # here we do the same for the shared files (css, fish images and javascript) 57 57 SHARED_FILES = join(dirname(__file__), 'shared') 58 59 # here we do the same for our database upgrade's repository 60 UPGRADES_REPO = dirname(__file__) 58 61 59 62 # and that's just the list of skins we have. … … 119 122 return {'fortune': choice(FORTUNES)} 120 123 124 def register_repository(): 125 print 'registering eric repo' 126 get_application().register_upgrade_repository('eric_the_fish', UPGRADES_REPO) 121 127 122 128 def setup(app, plugin): 123 """This function is called by Zine in the application initiali zation129 """This function is called by Zine in the application initialisation 124 130 phase. Here we connect to the events and register our template paths, 125 131 url rules, views etc. 126 132 """ 133 134 # we need to register eric's database upgrades repository 135 # app.connect_event('register-upgrade-repository', register_repository) 136 app.register_upgrade_repository(plugin, UPGRADES_REPO) 127 137 128 138 # we want our fish to appear in the admin panel, so hook into the -
zine/_core.py
r1259 r1314 27 27 instance folder. 28 28 """ 29 30 class InstanceUpgradeRequired(RuntimeError): 31 """Zine requires a database upgrade""" 29 32 30 33 … … 60 63 try: 61 64 app.__init__(instance_folder) 65 app.upgrade_required 66 except InstanceUpgradeRequired: 67 from zine.upgrades.webapp import WebUpgrades 68 _application = app = WebUpgrades(app) 62 69 except: 63 70 # if an exception happened, tear down the application … … 92 99 if key not in preserve and not key.startswith('__'): 93 100 module.__dict__.pop(key, None) 94 elif name.startswith('zine.') and name != 'zine._core': 101 elif name.startswith('zine.') and name not in ( 102 'zine._core', 'zine.upgrades', 103 'zine.upgrades.customisation'): 95 104 # get rid of the module 96 105 sys.modules.pop(name, None) -
zine/application.py
r1259 r1314 638 638 self.__class__.__name__) 639 639 self.instance_folder = path.abspath(instance_folder) 640 self.upgrade_lockfile = path.join(instance_folder, 641 '.upgrade_in_progress') 640 642 641 643 # create the event manager, this is the first thing we have to … … 834 836 self.list_parsers() 835 837 838 # Register Zine's upgrade repository 839 from zine.upgrades import REPOSITORY_PATH 840 self.register_upgrade_repository('Zine', REPOSITORY_PATH) 841 # Allow plugins to register their upgrade's repositories 842 emit_event('register-upgrade-repository') 843 836 844 self.initialized = True 837 845 838 846 #! called after the application and all plugins are initialized 839 847 emit_event('application-setup-done') 848 849 def register_upgrade_repository(self, repo_id, repo_path): 850 """This function is responsible for adding upgrade repositories to the 851 database. 852 """ 853 from zine.models import SchemaVersion 854 from zine.pluginsystem import Plugin 855 from zine.upgrades.customisation import Repository 856 if isinstance(repo_id, Plugin): 857 repo_id = repo_id.metadata.get('name') 858 Repository(repo_path, repo_id) 859 try: 860 sv = SchemaVersion.query.filter_by(repository_id=repo_id).first() 861 if not sv: 862 db.session.add(SchemaVersion(Repository(repo_path, repo_id))) 863 db.session.commit() 864 except (SQLAlchemyError, AttributeError): 865 # The schema_versions table does not yet exist. Let's create it 866 db.session.rollback() 867 from zine.database import metadata, schema_versions 868 metadata.bind = self.database_engine 869 if not schema_versions.exists(): 870 schema_versions.create(self.database_engine) 871 db.session.add(SchemaVersion(Repository(repo_path, repo_id))) 872 db.session.commit() 873 874 875 @property 876 def upgrade_required(self): 877 from zine.models import SchemaVersion 878 from zine.upgrades.customisation import Repository 879 880 for sv in SchemaVersion.query.all(): 881 repository = Repository(sv.repository_path, sv.repository_id) 882 try: 883 self.repository_has_upgrade(repository, sv) 884 except _core.InstanceUpgradeRequired: 885 # Set Zine in maintenance mode 886 cfg = self.cfg.edit() 887 cfg['maintenance_mode'] = True 888 cfg.commit() 889 raise _core.InstanceUpgradeRequired() 890 891 # We got here, let's check for a bad upgrade lockfile left behind 892 if path.isfile(self.upgrade_lockfile): 893 remove(self.upgrade_lockfile) 894 895 def repository_has_upgrade(self, repository, schema_version): 896 try: 897 print repository.__dict__, schema_version.version, repository.latest 898 if schema_version.version < repository.latest: 899 raise _core.InstanceUpgradeRequired() 900 except (SQLAlchemyError, AttributeError): 901 print 'WE EVEN GOT HERE???' 902 # The schema_versions table does not yet exist. Let's create it 903 db.session.rollback() 904 from zine.database import metadata, schema_versions 905 metadata.bind = self.database_engine 906 if not schema_versions.exists(): 907 schema_versions.create(self.database_engine) 908 db.session.add(SchemaVersion(Repository(repo_path))) 909 db.session.commit() 910 raise _core.InstanceUpgradeRequired() 840 911 841 912 @property -
zine/database.py
r1081 r1314 251 251 metadata = db.MetaData() 252 252 253 schema_versions = db.Table('schema_versions', metadata, 254 db.Column('repository_id', db.String(255), primary_key=True), 255 db.Column('repository_path', db.Text), 256 db.Column('version', db.Integer) 257 ) 253 258 254 259 users = db.Table('users', metadata, -
zine/models.py
r1221 r1314 18 18 post_categories, post_tags, tags, comments, groups, group_users, \ 19 19 privileges, user_privileges, group_privileges, texts, \ 20 notification_subscriptions, db20 notification_subscriptions, schema_versions, db 21 21 from zine.utils import zeml 22 22 from zine.utils.text import gen_slug, gen_timestamped_slug, build_tag_uri, \ … … 177 177 def authors(self): 178 178 return self.filter_by(is_author=True) 179 180 181 class SchemaVersion(object): 182 """Represents a database schema version.""" 183 184 query = db.query_property(db.Query) 185 186 def __init__(self, repos, version=0): 187 self.repository_id = repos.config.get('repository_id') 188 self.repository_path = repos.path 189 self.version = version 179 190 180 191 … … 1256 1267 1257 1268 # connect the tables. 1269 db.mapper(SchemaVersion, schema_versions) 1258 1270 db.mapper(User, users, properties={ 1259 1271 'id': users.c.user_id,
Note: See TracChangeset
for help on using the changeset viewer.