diff --git a/ckan/logic/action/update.py b/ckan/logic/action/update.py index 461f0810175..5bd99b8bc94 100644 --- a/ckan/logic/action/update.py +++ b/ckan/logic/action/update.py @@ -366,6 +366,9 @@ def user_update(context, data_dict): def task_status_update(context, data_dict): model = context['model'] + session = model.meta.create_local_session() + context['session'] = session + user = context['user'] id = data_dict.get("id") schema = context.get('schema') or default_task_status_schema() @@ -382,13 +385,13 @@ def task_status_update(context, data_dict): data, errors = validate(data_dict, schema, context) if errors: - model.Session.rollback() + session.rollback() raise ValidationError(errors, task_status_error_summary(errors)) task_status = task_status_dict_save(data, context) - if not context.get('defer_commit'): - model.Session.commit() + session.commit() + session.close() return task_status_dictize(task_status, context) def task_status_update_many(context, data_dict): diff --git a/ckan/model/__init__.py b/ckan/model/__init__.py index 58246c54b2b..c7ee014e40c 100644 --- a/ckan/model/__init__.py +++ b/ckan/model/__init__.py @@ -36,6 +36,7 @@ def init_model(engine): '''Call me before using any of the tables or classes in the model''' meta.Session.remove() meta.Session.configure(bind=engine) + meta.create_local_session.configure(bind=engine) meta.engine = engine meta.metadata.bind = engine # sqlalchemy migrate version table @@ -45,7 +46,7 @@ def init_model(engine): except sqlalchemy.exc.NoSuchTableError: pass - + class Repository(vdm.sqlalchemy.Repository): migrate_repository = ckan.migration.__path__[0] diff --git a/ckan/model/meta.py b/ckan/model/meta.py index 8e48e595a34..2872e8f1133 100644 --- a/ckan/model/meta.py +++ b/ckan/model/meta.py @@ -90,22 +90,19 @@ def after_rollback(self, session): # SQLAlchemy database engine. Updated by model.init_model() engine = None -if sqav.startswith("0.4"): - # SQLAlchemy session manager. Updated by model.init_model() - Session = scoped_session(sessionmaker( - autoflush=False, - transactional=True, - extension=[CkanSessionExtension(), - extension.PluginSessionExtension()], - )) -else: - Session = scoped_session(sessionmaker( - autoflush=False, - autocommit=False, - expire_on_commit=False, - extension=[CkanSessionExtension(), - extension.PluginSessionExtension()], - )) +Session = scoped_session(sessionmaker( + autoflush=False, + autocommit=False, + expire_on_commit=False, + extension=[CkanSessionExtension(), extension.PluginSessionExtension()], +)) + +create_local_session = sessionmaker( + autoflush=False, + autocommit=False, + expire_on_commit=False, + extension=[CkanSessionExtension(), extension.PluginSessionExtension()], +) #mapper = Session.mapper mapper = orm.mapper