[ckan-changes] [ckan/ckan] 2a340f: [#5137] [#5137] Fix Datapusher exceptions on 2.9

Sergey noreply at github.com
Wed Jan 29 23:32:39 UTC 2020

  Branch: refs/heads/master
  Home:   https://github.com/ckan/ckan
  Commit: 2a340f85a21e7e8c563deedba675f967040dfbb3
  Author: amercader <amercadero at gmail.com>
  Date:   2020-01-24 (Fri, 24 Jan 2020)

  Changed paths:
    M ckanext/datapusher/plugin.py
    M ckanext/datapusher/tests/test.py

  Log Message:
  [#5137] [#5137] Fix Datapusher exceptions on 2.9

Fixes #5137, #4751

This was originally reported in the issues above. On 2.9, enabling the
DataPusher causes an exception at the end of the dataset creation
process, when submitting the resources. The stack trace looks like this:

  File "/home/adria/dev/pyenvs/ckan/lib/python2.7/site-packages/flask/views.py", line 163, in dispatch_request
    return meth(*args, **kwargs)
  File "/home/adria/dev/pyenvs/ckan/src/ckan/ckan/views/resource.py", line 242, in post
    get_action(u'resource_create')(context, data)
  File "/home/adria/dev/pyenvs/ckan/src/ckan/ckan/logic/__init__.py", line 472, in wrapped
    result = _action(context, data_dict, **kw)
  File "/home/adria/dev/pyenvs/ckan/src/ckan/ckan/logic/action/create.py", line 330, in resource_create
  File "/home/adria/dev/pyenvs/ckan/lib/python2.7/site-packages/sqlalchemy/orm/scoping.py", line 162, in do
    return getattr(self.registry(), name)(*args, **kwargs)
  File "/home/adria/dev/pyenvs/ckan/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1027, in commit
  File "/home/adria/dev/pyenvs/ckan/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 494, in commit
  File "/home/adria/dev/pyenvs/ckan/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 464, in _prepare_impl
    stx = self.session.transaction
AttributeError: 'NoneType' object has no attribute 'transaction'

As with all SQLAlchemy session issues and DataPusher ones this one took
a while to track, but essentially it boiled down to what @davidread
explained [here](https://stackoverflow.com/a/56094135/235993)

The `datapusher` plugin used the `notify` hook to listen to resource
changes. This was fired from `resource_create` which had started a
transaction. The plugin then called `datapusher_submit` which in turns
calls `task_status_update`, which commits and clears the Session causing
troubles later on.

How this had been working up until 2.8 I don't know and I'm not keen on
finding out to be honest. This PR refactors the `datapusher` plugin to
use the `IResourceController.after_create` and
`IResourceUrlChange.notify` hooks, which are called after commit.

It adds two tests that failed before the patch as well.

  Commit: 4afed394881b6ef20daf07d3531832a4f4ab3af4
  Author: Sergey <tonnydexter at gmail.com>
  Date:   2020-01-30 (Thu, 30 Jan 2020)

  Changed paths:
    M ckanext/datapusher/plugin.py
    M ckanext/datapusher/tests/test.py

  Log Message:
  Merge pull request #5173 from ckan/5137-datapusher-errors-2.9

[#5137] Fix Datapusher exceptions on 2.9

Compare: https://github.com/ckan/ckan/compare/2eac9a2f9200...4afed394881b

More information about the ckan-changes mailing list