1 import logging
2
3 import sqlalchemy.sql.operators
4
6 return sqlalchemy.sql.operators.like_op(column, '%%%s%%'%string)
7
9 """Decorator for methods on an entity, to make them transactional"""
10
11 logger = logging.getLogger('camelot.core.sql.transaction')
12
13 def decorated_function(cls, *args, **kwargs):
14 session = cls.query.session
15 session.begin()
16 try:
17 result = original_function(cls, *args, **kwargs)
18 session.commit()
19 except Exception, e:
20 logger.error('Unhandled exception, rolling back transaction', exc_info=e)
21 session.rollback()
22 raise e
23 return result
24
25 return decorated_function
26
28 """Do some introspection on the model and add missing columns in the database
29
30 this function can be ran in setup_model after setup_all(create_tables=True)
31 """
32 import settings
33 migrate_engine = settings.ENGINE()
34 migrate_connection = migrate_engine.connect()
35
36 from camelot.model import metadata
37 from migrate.versioning.schemadiff import SchemaDiff
38 from migrate.changeset import create_column
39 schema_diff = SchemaDiff(metadata, migrate_connection)
40
41 for table_with_diff in schema_diff.tablesWithDiff:
42 missingInDatabase, _missingInModel, _diffDecl = schema_diff.colDiffs[table_with_diff.name]
43 for col in missingInDatabase:
44 create_column(col, table_with_diff)
45