[ckan-changes] [okfn/ckan] 61aacc: [#362][s]: remove controller, routing and test cod...

GitHub noreply at github.com
Sat Feb 16 07:28:20 UTC 2013

  Branch: refs/heads/362-remove-old-datastore
  Home:   https://github.com/okfn/ckan
  Commit: 61aacc8f106b13e65f48a1759e9aded019359555
  Author: Rufus Pollock <rufus.pollock at okfn.org>
  Date:   2013-02-15 (Fri, 15 Feb 2013)

  Changed paths:
    M ckan/config/routing.py
    R ckan/controllers/datastore.py
    R ckan/tests/functional/test_datastore.py

  Log Message:
  [#362][s]: remove controller, routing and test code related to old (ES) datastore.

Note, have not removed (and will not remove) references to old datastore in:

* templates_legacy (assume these will get removed anyway)
* i18n (assume this will get rebuilt prior to release)

  Commit: 27361b88e1b8fe2167f83bd9cb5cf70e953ce052
  Author: Rufus Pollock <rufus.pollock at okfn.org>
  Date:   2013-02-15 (Fri, 15 Feb 2013)

  Changed paths:
    M ckan/controllers/package.py
    R ckan/templates/package/resource_api_data.html
    M ckan/templates/package/snippets/data_api_button.html

  Log Message:
  [#362,bugfix][s]: remove remaining reference to routing for old datastore (by removing api_data method in package controller).

The ultimate change was reasonably substantial - removal of an entire method on
a controller and associated template. It began simply with the need to
remove/update reference this routing call in api_data method on package

    url = h.url_for('datastore_read', id=id, qualified=True)

I spent about half an hour trying to understand if this method was used at all.

I ultimately determined that we had a setup where clicking on the Data API
button in the resource view had 2 possible effect routes:

* Via href={url} => package.py/api_data method =>
  template/package/resource_api_data.html =>
* Via JS intercept of click => api/snippets controller =>

But there was a subtle difference: the first route (which is *not* normally
followed since JS is usally enabled) still uses the old datastore URL (this is
why I'd started this investigation!).

(Aside: this was hard to debug through the interface as JS is enabled and I
note we do not have resource view tests so the non AJAX route is not tested).

I first tried to correct this by setting the URL to the correct datastore API
but then discovered other parameters were missing - it seems the signature of
the call to ajax_snippets template has changed but that the relevant code in
package/resource_data_api.html has not been updated:

    {% snippet 'ajax_snippets/api_info.html', datastore_root_url=datastore_root_url, embedded=true %}

Rather than continue fixing I decided at this point to remove this non-AJAX
fallback code in its entirety.

Comment: this was a subtle bug that has crept in because there are now 2 ways to do
something and one of these routes (the non-AJAX route) is almost never used ...

I wonder whether it is necessary always to have both options (AJAX and
non-AJAX) as it likely to multiply code complexity and, hence, these sort of bugs.

Compare: https://github.com/okfn/ckan/compare/61aacc8f106b^...27361b88e1b8

More information about the ckan-changes mailing list