~mahfiaz/openlp/author-delete-button-not-active-in-edit-dialog

« back to all changes in this revision

Viewing changes to openlp/core/lib/db.py

  • Committer: Andreas Preikschat
  • Author(s): Raoul Snyman
  • Date: 2013-07-05 18:42:44 UTC
  • mfrom: (2225.2.11 alembic-only)
  • Revision ID: googol@lavabit.com-20130705184244-swbrahu3hm5uwdtm
 migration to Alembic.

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
from sqlalchemy.exc import SQLAlchemyError, InvalidRequestError, DBAPIError, OperationalError
39
39
from sqlalchemy.orm import scoped_session, sessionmaker, mapper
40
40
from sqlalchemy.pool import NullPool
 
41
from alembic.migration import MigrationContext
 
42
from alembic.operations import Operations
41
43
 
42
44
from openlp.core.lib import translate, Settings
43
45
from openlp.core.lib.ui import critical_error_message_box
65
67
    return session, metadata
66
68
 
67
69
 
 
70
def get_upgrade_op(session):
 
71
    """
 
72
    Create a migration context and an operations object for performing upgrades.
 
73
 
 
74
    ``session``
 
75
        The SQLAlchemy session object.
 
76
    """
 
77
    context = MigrationContext.configure(session.bind.connect())
 
78
    return Operations(context)
 
79
 
 
80
 
68
81
def upgrade_db(url, upgrade):
69
82
    """
70
83
    Upgrade a database.
82
95
        Provides a class for the metadata table.
83
96
        """
84
97
        pass
85
 
    load_changes = False
86
 
    tables = []
87
 
    try:
88
 
        tables = upgrade.upgrade_setup(metadata)
89
 
        load_changes = True
90
 
    except (SQLAlchemyError, DBAPIError):
91
 
        pass
 
98
 
92
99
    metadata_table = Table(u'metadata', metadata,
93
100
        Column(u'key', types.Unicode(64), primary_key=True),
94
101
        Column(u'value', types.UnicodeText(), default=None)
105
112
    if version > upgrade.__version__:
106
113
        return version, upgrade.__version__
107
114
    version += 1
108
 
    if load_changes:
 
115
    try:
109
116
        while hasattr(upgrade, u'upgrade_%d' % version):
110
117
            log.debug(u'Running upgrade_%d', version)
111
118
            try:
112
119
                upgrade_func = getattr(upgrade, u'upgrade_%d' % version)
113
 
                upgrade_func(session, metadata, tables)
 
120
                upgrade_func(session, metadata)
114
121
                session.commit()
115
122
                # Update the version number AFTER a commit so that we are sure the previous transaction happened
116
123
                version_meta.value = unicode(version)
117
124
                session.commit()
118
125
                version += 1
119
126
            except (SQLAlchemyError, DBAPIError):
120
 
                log.exception(u'Could not run database upgrade script '
121
 
                    '"upgrade_%s", upgrade process has been halted.', version)
 
127
                log.exception(u'Could not run database upgrade script "upgrade_%s", upgrade process has been halted.',
 
128
                              version)
122
129
                break
123
 
    else:
 
130
    except (SQLAlchemyError, DBAPIError):
124
131
        version_meta = Metadata.populate(key=u'version', value=int(upgrade.__version__))
125
132
        session.commit()
126
133
    return int(version_meta.value), upgrade.__version__