{22} Trac tickets (2647 matches)
Results (1201 - 1300 of 2647)
Id | Type | Owner | Reporter | Milestone | Status | Resolution | Summary | Description | Posixtime | Modifiedtime | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
#1329 | defect | dread | amercader | ckan-sprint-2011-10-28 | closed | fixed | i18n poor in some templates - missing i18n tags |
Just a tip for developers regarding translations:
i18:msg attribute, otherwise the messages don't get extracted properly. Good: https://bitbucket.org/okfn/ckan/src/1996b0439e81/ckan/templates/home/about.html#cl-40 <p i18n:msg="">More about CKAN, and the background to its creation can be found in <a href="http://m.okfn.org/files/talks/opentech_20080705/">these slides</a>.</p> gives this: https://bitbucket.org/okfn/ckan/src/1996b0439e81/ckan/i18n/ca/LC_MESSAGES/ckan.po#cl-1238 <p class="hints"> <strong>Important:</strong> By submitting content, you agree to release your contributions under the <a href="http://opendatacommons.org/licenses/odbl/1.0/">Open Database License</a>. Please <strong>refrain</strong> from editing this page if you are <strong>not</strong> happy to do this. </p> gives this: https://bitbucket.org/okfn/ckan/src/1996b0439e81/ckan/i18n/ca/LC_MESSAGES/ckan.po#cl-1384 The message is split in different parts that not necessarily match the grammar or syntax of the translated language. |
1315824288000000 | 1317404566000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#3016 | enhancement | johnmartin | johnmartin | ckan 2.0 | new | CKAN 2.0 template tweaks |
Just a ticket to keep track of a few suggested template changes. |
1352813417000000 | 1352813417000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1344 | enhancement | kindly | kindly | ckan-sprint-2011-10-10 | closed | fixed | datetime error json conversion on search |
Json decoding error on search, due to date in resources. |
1316020195000000 | 1317211299000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#450 | task | dread | closed | fixed | Assist with proxying of static media for forms |
John did this a while ago. |
1282299573000000 | 1287997487000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2527 | enhancement | aron.carroll | aron.carroll | ckan-sprint-2012-06-25 | closed | wontfix | Implement a method of loading templates into the demo site |
JavaScript? needs to be able to insert html templates into the document. There are three common solutions to templating at the moment.
It makes sense to keep these with the other templates so that we can take advantage of localisation where possible. This indicates 1 or 2. |
1339682884000000 | 1340116130000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1661 | defect | dread | ckan-backlog | assigned | Wrong Routes version installed by CKAN package |
Jaakko Louhio reported that the wrong Routes version got installed during CKAN's package install. He is using Ubuntu 10.04 and he believes it install Routes 1.12.3 instead of what we use which is 1.11. |
1326718061000000 | 1339773949000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1614 | enhancement | kindly | kindly | ckan-sprint-2012-01-09 | closed | fixed | remove po files from git diff |
Its a pain to see the difference between branches as there are normally a lot of po file transaction. Make the default be see that they have changed without actually show the diffs themselves. |
1325686639000000 | 1325689136000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1740 | enhancement | seanh | ckan-future | new | Get rid of `from module import ...` |
It's really bad to do from module import * and CKAN has a lot of them. I suggest a three-pronged approach:
We should also get rid of most or all of the from module import foo and from module import foo, bar statements. I think the right thing to do is just import module and then use module.foo in your code. But if you find yourself doing module.foo.bar then you may have a code smell. |
1328094369000000 | 1328094884000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#990 | defect | rene.kapusta | closed | fixed | umlauts in title / text |
It's not possible to use umlauts (like "CKAN Österreich") in the title / text. |
1297801036000000 | 1311180850000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1042 | task | dread | dread | closed | fixed | 'Ckanext' split-up |
It's not good to have ckanext doing lots of different things with different dependencies. Split it off into:
etc. And then deprecate the ckanext repo itself. |
1300293907000000 | 1300969865000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2514 | enhancement | ross | seanh | closed | wontfix | Follow/unfollow button looks weird |
It's in the tab bar (maybe not the right place for a button? but I wanted it to be next to the follower tab and count) and doesn't like very much like a button |
1339578189000000 | 1340959787000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1548 | enhancement | dread | dread | ckan-sprint-2011-12-19 | closed | fixed | Simplfy inheritance in functional tests |
It's hard to understand what's going on with the functional tests because there is so much going on in inherited classes. Would be better to be explicit in constructors, even if it involves cut & paste. |
1323859687000000 | 1323888271000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1026 | enhancement | dread | dread | ckan-v1.4-sprint-3 | closed | fixed | cli for creating users |
It's handy to be able to create users using the cli (e.g. dgu migration) |
1299604652000000 | 1299605128000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#662 | defect | sebbacon | johnbywater | ckan-v1.4 | closed | fixed | Can't put entity that is returned by posting to package register |
It's because Package carries several out-of-band values, which are snagged on the way back out. Entity get response also can't be posted. However, post response can be re-posted (because it isn't the same as the register-post/entity-get responses. An issue for CKAN too. Sub-ticket of #961 (form, validation, model sync meta-ticket) and depends on that work. |
1285410546000000 | 1301076463000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1499 | enhancement | dread | dread | ckan-sprint-2011-12-05 | closed | fixed | list/read/delete packages on the command-line |
It would be useful to be able to manipulate packages using the paster command-line interface. In particular listing, reading and deleting packages. Seeing which packages were deleted too. |
1322591656000000 | 1322591888000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2390 | enhancement | dread | dread | ckan-sprint-2012-05-29 | closed | fixed | create_test_data for multiple users, rights |
It would be useful (well for DGU, but no doubt for core too) to have be able to create multiple users with full properties using one commit. Also to be able to create rights (UserObjectRoles?). |
1337098459000000 | 1337100788000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1549 | enhancement | ross | ckan-backlog | closed | wontfix | [super] Short link tool |
It would be great to have a CKAN extension that allowed users (or CKAN itself) to generate short links to other URIs (both internal and external). Once created, shortlinks made by CKAN should be changeable. This would allow uploaded content to be moved without the user's link changing at all. The tool itself might also be of use as a general link-shortener to users other than the CKAN system itself. Another useful feature would be for this to also collect some simple analytics such as the referrer and client IP for future reference. I'm not yet sure what we would do with the analytics other than some sort of popularity metric. Questions:
|
1324036998000000 | 1325474219000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1072 | enhancement | dread | dread | ckan-v1.4-sprint-5 | closed | fixed | Add filters to authztool |
It takes several minutes to print the 'rights' on DGU, which is annoying when you only want to grep for a few lines. Much quicker than grepping is to filter in the query. |
1302106311000000 | 1302106474000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2521 | defect | seanh | seanh | ckan-sprint-2012-06-25 | closed | fixed | synchronous_search plugin missing from deployment.ini_tmpl |
It still contains the old build_search_index_synchronously which no longer works |
1339595361000000 | 1339595469000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2542 | enhancement | seanh | seanh | ckanbuild | accepted | Create jenkins job to run ckanbuild, and run tests |
It should run the script to create the debian package, boot a VM, install the debian package on the VM, boot a CKAN instance, then run the tests. |
1339775888000000 | 1340639863000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1550 | enhancement | ross | ckan-backlog | assigned | Allow simple auth via the API |
It should be possible to pass userid/username and api key and obtain a response from CKAN for external services that use CKAN auth. Those services shouldn't be talking to the DB directly. |
1324049369000000 | 1346670055000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1261 | defect | pudo | ckan-backlog | new | Investigate dots in extras search |
It seems that searching for extras_foo:value works with solr, but extras_foo.bar:value doesn't. No theory on why. |
1312366768000000 | 1312366768000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#668 | defect | thejimmyg | Colin Calnan | closed | invalid | Caching issues on API v1 |
It seems like the API v1 on CKAN metastable (cset:ec21f8e1c87e) has some caching issues. Steps to test:
|
1285953542000000 | 1311176649000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#942 | defect | pudo | pudo | ckan-v1.4-sprint-1 | closed | fixed | Fix SERP pager argument passing |
It only passes "q", but the whole query must be serialized. |
1296469490000000 | 1297074807000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2892 | defect | seanh | ckan-v1.8.1 | new | IDatasetForm's form_to_db_schema() breaks API? |
It looks like when an IDatasetForm plugin with a form_to_db_schema() method is active, then the posted data dict is validated against the schema even if the user is posting to an API endpoint like /api/action/package_update etc. This breaks the API, for example 'name' and 'title' are optional keys for package_update (you can supply only the 'id'), but the schema validation will fail if either are not present in the posted dict. It may be we need different schema for package create and package update, currently IDatasetForm has just the one form_to_db_schema() method. |
1346154125000000 | 1346154163000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1320 | enhancement | zephod | rgrp | ckan-sprint-2011-10-10 | closed | fixed | Extend basic markdown to support normal http / https links |
It is very annoying that you have to wrap links in <...> and most people don't bother. Extend h.markdown in code and markdown in js to fix this. (We should also support 'package' links etc in javascript?) *ADDITIONAL*
|
1315422000000000 | 1318164603000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1738 | enhancement | kindly | kindly | ckan-sprint-2012-02-06 | closed | fixed | Add extension point to search index, so can modify dataset dict before index. |
It is useful for extensions to add or change items that go into the search index. Add an extension point for this. |
1328031572000000 | 1330086105000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#994 | defect | kindly | kindly | ckan-v1.4-sprint-3 | closed | fixed | document a new migration methodology |
It is too easy to make a mistake with the migrations at the moment. A more systematic way of doing them is needed and this needs to be documented. |
1298281192000000 | 1298912842000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1122 | enhancement | pudo | dread | closed | wontfix | JSON Extra data not searchable |
It is possible to use the CKAN API to insert JSON format data into package extra values, but this data is not found on searching. Full text from Pascal: we encountered a Problem concerning accessing Arrays/Lists. curl -XGET 'http://ckan.net/api/rest/package/hbz_unioncatalog' will get you amongst others: "extras": {"publishingInstitution": "[u'http://lobid.org/organisation/DE-605', u'http://lobid.org/organisation/DE-290', u'http://lobid.org/organisation/DE-38M', u'http://lobid.org/organisation/DE-98', u'http://lobid.org/organisation/DE-38', u'http://lobid.org/organisation/DE-Kn41', u'http://lobid.org/organisation/DE-82', u'http://lobid.org/organisation/DE-107', u'http://lobid.org/organisation/DE-929', u'http://lobid.org/organisation/DE-Zw1', u'http://lobid.org/organisation/DE-832']"} but if I try to query this: wget 'http://ckan.net/api/search/package?q=lobid&publishingInstitution="http://lobid.org/organisation/DE-605"' I get only two packages, among the package "hbz_unioncatalog" is missing. (These two packages have only one value for "publishingInstitution"). The "extra/publishingInstitution"-Array was uploaded through a "curl -XPUT ... "extras": { "publishingInstitution":[ "http://lobid.org/organisation/DE-605", "http://lobid.org/organisation/DE-290", "http://lobid.org/organisation/DE-38M", "http://lobid.org/organisation/DE-98", "http://lobid.org/organisation/DE-38", "http://lobid.org/organisation/DE-Kn41", "http://lobid.org/organisation/DE-82", "http://lobid.org/organisation/DE-107", "http://lobid.org/organisation/DE-929", "http://lobid.org/organisation/DE-Zw1", "http://lobid.org/organisation/DE-832" ] }, ... |
1304367510000000 | 1306747714000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1121 | enhancement | dread | closed | wontfix | JSON extras appear in package edit form mangled |
It is possible to use the CKAN API to insert JSON format data into package extra values, but this data is displayed in the package edit form. Example: Package http://ckan.net/package/hbz_unioncatalog in the API the extra value as a list: "extras": {"publishingInstitution": ["http://lobid.org/organisation/DE-605", "http://lobid.org/organisation/DE-290"... yet when you edit the package it loses all the quotes and brackets: http://ckan.net/package/edit/hbz_unioncatalog {{{http://lobid.org/organisation/DE-605http://lobid.org/organisation/DE-290... }}} so when you save the package, the list is mangled into a bad string. |
1304367504000000 | 1307358426000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1742 | enhancement | ross | ross | ckan-sprint-2012-03-19 | closed | fixed | Naming of a new package/group can clash with a route |
It is possible to create a group or a dataset called new, or edit, which will then be inaccessible as it is blocked by the existing routes with those names. We should maintain a list of invalid names in the verification that happens behind the scenes in the UI. |
1328116317000000 | 1331555193000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1381 | enhancement | amercader | pudo | ckan-sprint-2011-10-24 | closed | fixed | Managing groups via package entity API |
It is not currently possible to assign or remove groups by adding or removing their group name from the "groups" list on the REST API. This should be allowed, as it is easier than first adding a package and then editing each group it must belong to. |
1318266706000000 | 1324037815000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2210 | enhancement | ross | ross | ckan-sprint-2012-03-19 | closed | fixed | Add method to group for adding members |
It is necessary to add a helper method to Group for adding members to that group so that
|
1331028470000000 | 1331549369000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#65 | enhancement | rgrp | rgrp | v0.9 | closed | fixed | Add version attribute to package |
It is essential packages have a version attribute to assist in tracking releases etc (and to allow compatibility with other packaging systems e.g. distutils which is being used by datapkg). cost: 2h |
1245262864000000 | 1246434569000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2756 | enhancement | seanh | seanh | ckan-v1.8 | closed | fixed | Fix handling of extras in group read |
It doesn't pass extras_as_string |
1343231514000000 | 1343232429000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1160 | enhancement | amercader | amercader | pdeu-1 | closed | wontfix | Havest CSW servers on PDEU |
It could be interesting for the publicdata.eu project to add some CSW datasources. Thanks to the INSPIRE directive, there are quite a few national catalogs of geodata that could be worth harvesting. Work on this should include:
First point is being performed in this GDoc: https://spreadsheets.google.com/spreadsheet/ccc?key=0Atp3cZFjuIOAdDBVQWRINnlfN1d0b2lleHVEdjBSb2c&authkey=CNu4hsEB&hl=en_US#gid=0 |
1306407271000000 | 1309804038000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1133 | defect | johnlawrenceaspden | closed | worksforme | command line rights manipulation doesn't work |
It appears that the command $ paster rights add russianfan admin warandpeace has no effect, even though $ paster rights remove russianfan admin warandpeace works fine. This may be specific to something I've done, could someone confirm? If it's the case more generally, then I'm assuming this behaviour is untested? Tests should probably be added. |
1305054948000000 | 1324057072000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#770 | defect | thejimmyg | johnbywater | ckan-v1.3 | closed | wontfix | Improve the paster harvester help command |
Issue 1. Help command without arguments fails: $paster help --plugin ckan --config development.ini gives: EITHER Command help not recognized OR paster help: error: no such option: --plugin Issue 2: Harvester command with arguments fails. $ paster harvester Traceback (most recent call last): ...
IndexError?: list index out of range |
1288190220000000 | 1296593925000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#285 | enhancement | rgrp | assigned | Paginate list of packages on tag read page |
Is this worth doing? On hmg.ckan.net start to have a lot of packages with a given tag ... |
1270664606000000 | 1340631923000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1570 | enhancement | David Raznik | jilly mathews | ckan-future | closed | invalid | Integrated file Storage |
Is this ready for release? What needs to be done? |
1324294142000000 | 1324314741000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2837 | enhancement | aron.carroll | toby | demo phase 3 | closed | fixed | checkbox styling |
Is this done I know checkboxes are a pain but it looks a bit out of place compared to the other items. |
1344605993000000 | 1344851271000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#925 | defect | dread | ckan-backlog | closed | fixed | Change the search box icon to remove the down arrow |
Is there a good reason why the search box has a 'down arrow' icon when there is no drop-down menu? Or can this be usefully removed? |
1295867593000000 | 1323168588000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1565 | enhancement | Rufus Pollock | jilly mathews | ckan-future | new | Admin dashboard finished? |
Is testing complete and ready for release? |
1324293092000000 | 1324293092000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#463 | defect | dread | ckan-v1.3 | closed | worksforme | package diff exception |
Investigate exception: URL: http://ckan.net/revision/diff/dbtune-audioscrobbler?diff=66a47b9e-232a-4838-8674-66fa1a5c76e1&oldid=a99c98be-767a-4e49-9025-2472b2d18b9c Module weberror.errormiddleware:162 in __call__ << __traceback_supplement__ = Supplement, self, environ sr_checker = ResponseStartChecker(start_response) app_iter = self.application(environ, sr_checker) return self.make_catching_iter(app_iter, environ, sr_checker) except: >> app_iter = self.application(environ, sr_checker) Module beaker.middleware:73 in __call__ << self.cache_manager) environ[self.environ_key] = self.cache_manager return self.app(environ, start_response) >> return self.app(environ, start_response) Module beaker.middleware:152 in __call__ << headers.append(('Set-cookie', cookie)) return start_response(status, headers, exc_info) return self.wrap_app(environ, session_start_response) def _get_session(self): >> return self.wrap_app(environ, session_start_response) Module routes.middleware:130 in __call__ << environ['SCRIPT_NAME'] = environ['SCRIPT_NAME'][:-1] response = self.app(environ, start_response) # Wrapped in try as in rare cases the attribute will be gone already >> response = self.app(environ, start_response) Module pylons.wsgiapp:125 in __call__ << controller = self.resolve(environ, start_response) response = self.dispatch(controller, environ, start_response) if 'paste.testing_variables' in environ and hasattr(response, >> response = self.dispatch(controller, environ, start_response) Module pylons.wsgiapp:324 in dispatch << if log_debug: log.debug("Calling controller class with WSGI interface") return controller(environ, start_response) def load_test_env(self, environ): >> return controller(environ, start_response) Module ckan.lib.base:73 in __call__ << # available in environ['pylons.routes_dict'] try: return WSGIController.__call__(self, environ, start_response) finally: model.Session.remove() >> return WSGIController.__call__(self, environ, start_response) Module pylons.controllers.core:221 in __call__ << return response(environ, self.start_response) response = self._dispatch_call() if not start_response_called: self.start_response = start_response >> response = self._dispatch_call() Module pylons.controllers.core:172 in _dispatch_call << req.environ['pylons.action_method'] = func response = self._inspect_call(func) else: if log_debug: >> response = self._inspect_call(func) Module pylons.controllers.core:107 in _inspect_call << func.__name__, args) try: result = self._perform_call(func, args) except HTTPException, httpe: if log_debug: >> result = self._perform_call(func, args) Module pylons.controllers.core:60 in _perform_call << """Hide the traceback for everything above this method""" __traceback_hide__ = 'before_and_this' return func(**args) def _inspect_call(self, func): >> return func(**args) Module ckan.controllers.revision:119 in diff << c.revision_to = model.Session.query(model.Revision).get( request.params.getone('diff')) diff = pkg.diff(c.revision_to, c.revision_from) c.diff = diff.items() c.diff.sort() >> diff = pkg.diff(c.revision_to, c.revision_from) Module ckan.model.package:340 in diff << display_id = to_obj_rev.tag.name elif obj_class.__name__ == 'PackageExtra': display_id = to_obj_rev.key else: display_id = related_obj_id[:4] >> display_id = to_obj_rev.key AttributeError: 'NoneType' object has no attribute 'key' CGI Variables AUTH_TYPE 'cookie' DOCUMENT_ROOT '/htdocs' GATEWAY_INTERFACE 'CGI/1.1' HTTP_ACCEPT 'application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5' HTTP_ACCEPT_CHARSET 'ISO-8859-1,utf-8;q=0.7,*;q=0.3' HTTP_ACCEPT_ENCODING 'gzip' HTTP_ACCEPT_LANGUAGE 'en-US,en;q=0.8' HTTP_CACHE_CONTROL 'max-age=0' HTTP_COOKIE '__utmz=27730403.1281000628.1.6.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=ckan; auth_tkt="e919c7bb40f890a0184ed7be95465e1a4c6d130bhttp://pudo.org/!"; auth_tkt="e919c7bb40f890a0184ed7be95465e1a4c6d130bhttp://pudo.org/!"; __utma=27730403.1381387877.1281962773.1282248244.1282250173.11; __utmc=27730403; __utmb=27730403.6.10.1282250173' HTTP_HOST 'ckan.net' HTTP_REFERER 'http://ckan.net/package/history/dbtune-audioscrobbler' HTTP_USER_AGENT 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.6 (KHTML, like Gecko) Chrome/6.0.490.1 Safari/534.6' PATH '/usr/local/bin:/usr/bin:/bin' PATH_INFO '/revision/diff/dbtune-audioscrobbler' PATH_TRANSLATED '/home/okfn/var/srvc/ckan.net/pyenv/bin/ckan.net.py/revision/diff/dbtune-audioscrobbler' QUERY_STRING 'diff=66a47b9e-232a-4838-8674-66fa1a5c76e1&oldid=a99c98be-767a-4e49-9025-2472b2d18b9c' REMOTE_ADDR '92.226.62.168' REMOTE_PORT '55102' REMOTE_USER 'http://pudo.org/' REMOTE_USER_TOKENS [''] REQUEST_METHOD 'GET' REQUEST_URI '/revision/diff/dbtune-audioscrobbler?diff=66a47b9e-232a-4838-8674-66fa1a5c76e1&oldid=a99c98be-767a-4e49-9025-2472b2d18b9c' SCRIPT_FILENAME '/home/okfn/var/srvc/ckan.net/pyenv/bin/ckan.net.py' SCRIPT_URI 'http://ckan.net/revision/diff/dbtune-audioscrobbler' SCRIPT_URL '/revision/diff/dbtune-audioscrobbler' SERVER_ADDR '10.226.226.118' SERVER_ADMIN '[no address given]' SERVER_NAME 'ckan.net' SERVER_PORT '80' SERVER_PROTOCOL 'HTTP/1.1' SERVER_SIGNATURE '<address>Apache/2.2.9 (Debian) mod_wsgi/2.5 Python/2.5.2 Server at ckan.net Port 80</address>\n' SERVER_SOFTWARE 'Apache/2.2.9 (Debian) mod_wsgi/2.5 Python/2.5.2' WSGI Variables application <beaker.middleware.CacheMiddleware object at 0xbb528cc> beaker.cache <beaker.cache.CacheManager object at 0xbb528ec> beaker.get_session <bound method SessionMiddleware._get_session of <beaker.middleware.SessionMiddleware object at 0xbb5286c>> beaker.session {'_accessed_time': 1282252047.603267, '_creation_time': 1282252047.603267} mod_wsgi.application_group 'ckan.net|' mod_wsgi.callable_object 'application' mod_wsgi.listener_host '' mod_wsgi.listener_port '80' mod_wsgi.process_group '' mod_wsgi.reload_mechanism '0' mod_wsgi.script_reloading '1' mod_wsgi.version (2, 5) paste.cookies (<SimpleCookie: __utma='27730403.1381387877.1281962773.1282248244.1282250173.11' __utmb='27730403.6.10.1282250173' __utmc='27730403' __utmz='27730403.1281000628.1.6.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=ckan' auth_tkt='e919c7bb40f890a0184ed7be95465e1a4c6d130bhttp://pudo.org/!'>, '__utmz=27730403.1281000628.1.6.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=ckan; auth_tkt="e919c7bb40f890a0184ed7be95465e1a4c6d130bhttp://pudo.org/!"; auth_tkt="e919c7bb40f890a0184ed7be95465e1a4c6d130bhttp://pudo.org/!"; __utma=27730403.1381387877.1281962773.1282248244.1282250173.11; __utmc=27730403; __utmb=27730403.6.10.1282250173') paste.parsed_querystring ([('diff', '66a47b9e-232a-4838-8674-66fa1a5c76e1'), ('oldid', 'a99c98be-767a-4e49-9025-2472b2d18b9c')], 'diff=66a47b9e-232a-4838-8674-66fa1a5c76e1&oldid=a99c98be-767a-4e49-9025-2472b2d18b9c') paste.registry <paste.registry.Registry object at 0xf702aec> paste.throw_errors True pylons.action_method <bound method RevisionController.diff of <ckan.controllers.revision.RevisionController object at 0xf6eaf0c>> pylons.controller <ckan.controllers.revision.RevisionController object at 0xf6eaf0c> pylons.environ_config {'session': 'beaker.session', 'cache': 'beaker.cache'} pylons.pylons <pylons.util.PylonsContext object at 0xf6eaa8c> pylons.routes_dict {'action': u'diff', 'controller': u'revision', 'id': u'dbtune-audioscrobbler'} repoze.who.identity <repoze.who identity (hidden, dict-like) at 280815340> repoze.who.logger <logging.Logger instance at 0xbcdfccc> repoze.who.plugins {'openid': <OpenIdIdentificationPlugin 196612236>, 'auth_tkt': <AuthTktCookiePlugin 198048140>} routes.route <routes.route.Route object at 0xbbc44cc> routes.url <routes.util.URLGenerator object at 0xf5e55ec> webob._parsed_query_vars (GET([('diff', '66a47b9e-232a-4838-8674-66fa1a5c76e1'), ('oldid', 'a99c98be-767a-4e49-9025-2472b2d18b9c')]), 'diff=66a47b9e-232a-4838-8674-66fa1a5c76e1&oldid=a99c98be-767a-4e49-9025-2472b2d18b9c') webob.adhoc_attrs {'language': 'en-us'} wsgi process 'Multi process AND threads (?)' wsgi.file_wrapper <built-in method file_wrapper of mod_wsgi.Adapter object at 0xfe0b0b0> wsgiorg.routing_args (<routes.util.URLGenerator object at 0xf5e55ec>, {'action': u'diff', 'controller': u'revision', 'id': u'dbtune-audioscrobbler'}) |
1282306037000000 | 1294916148000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#500 | defect | dread | ckan-v1.2 | closed | duplicate | Exception from diff |
Investigate exception occured occasionally in last couple of days on ckan.net: WebApp Error: <type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'key' URL: http://ckan.net/revision/diff/dbtune-audioscrobbler?diff=66a47b9e-232a-4838-8674-66fa1a5c76e1&oldid=a99c98be-767a-4e49-9025-2472b2d18b9c Module weberror.errormiddleware:162 in __call__ << __traceback_supplement__ = Supplement, self, environ sr_checker = ResponseStartChecker(start_response) app_iter = self.application(environ, sr_checker) return self.make_catching_iter(app_iter, environ, sr_checker) except: >> app_iter = self.application(environ, sr_checker) Module beaker.middleware:73 in __call__ << self.cache_manager) environ[self.environ_key] = self.cache_manager return self.app(environ, start_response) >> return self.app(environ, start_response) Module beaker.middleware:152 in __call__ << headers.append(('Set-cookie', cookie)) return start_response(status, headers, exc_info) return self.wrap_app(environ, session_start_response) def _get_session(self): >> return self.wrap_app(environ, session_start_response) Module routes.middleware:130 in __call__ << environ['SCRIPT_NAME'] = environ['SCRIPT_NAME'][:-1] response = self.app(environ, start_response) # Wrapped in try as in rare cases the attribute will be gone already >> response = self.app(environ, start_response) Module pylons.wsgiapp:125 in __call__ << controller = self.resolve(environ, start_response) response = self.dispatch(controller, environ, start_response) if 'paste.testing_variables' in environ and hasattr(response, >> response = self.dispatch(controller, environ, start_response) Module pylons.wsgiapp:324 in dispatch << if log_debug: log.debug("Calling controller class with WSGI interface") return controller(environ, start_response) def load_test_env(self, environ): >> return controller(environ, start_response) Module ckan.lib.base:73 in __call__ << # available in environ['pylons.routes_dict'] try: return WSGIController.__call__(self, environ, start_response) finally: model.Session.remove() >> return WSGIController.__call__(self, environ, start_response) Module pylons.controllers.core:221 in __call__ << return response(environ, self.start_response) response = self._dispatch_call() if not start_response_called: self.start_response = start_response >> response = self._dispatch_call() Module pylons.controllers.core:172 in _dispatch_call << req.environ['pylons.action_method'] = func response = self._inspect_call(func) else: if log_debug: >> response = self._inspect_call(func) Module pylons.controllers.core:107 in _inspect_call << func.__name__, args) try: result = self._perform_call(func, args) except HTTPException, httpe: if log_debug: >> result = self._perform_call(func, args) Module pylons.controllers.core:60 in _perform_call << """Hide the traceback for everything above this method""" __traceback_hide__ = 'before_and_this' return func(**args) def _inspect_call(self, func): >> return func(**args) Module ckan.controllers.revision:119 in diff << c.revision_to = model.Session.query(model.Revision).get( request.params.getone('diff')) diff = pkg.diff(c.revision_to, c.revision_from) c.diff = diff.items() c.diff.sort() >> diff = pkg.diff(c.revision_to, c.revision_from) Module ckan.model.package:340 in diff << display_id = to_obj_rev.tag.name elif obj_class.__name__ == 'PackageExtra': display_id = to_obj_rev.key else: display_id = related_obj_id[:4] >> display_id = to_obj_rev.key AttributeError: 'NoneType' object has no attribute 'key' CGI Variables DOCUMENT_ROOT '/htdocs' GATEWAY_INTERFACE 'CGI/1.1' HTTP_ACCEPT '*/*' HTTP_ACCEPT_ENCODING 'gzip' HTTP_ACCEPT_LANGUAGE 'zh-cn,zh-tw' HTTP_CONNECTION 'close' HTTP_HOST 'ckan.net' HTTP_USER_AGENT 'Baiduspider+(+http://www.baidu.com/search/spider.htm)' PATH '/usr/local/bin:/usr/bin:/bin' PATH_INFO '/revision/diff/dbtune-audioscrobbler' PATH_TRANSLATED '/home/okfn/var/srvc/ckan.net/pyenv/bin/ckan.net.py/revision/diff/dbtune-audioscrobbler' QUERY_STRING 'diff=66a47b9e-232a-4838-8674-66fa1a5c76e1&oldid=a99c98be-767a-4e49-9025-2472b2d18b9c' REMOTE_ADDR '123.125.66.32' REMOTE_PORT '63767' REQUEST_METHOD 'GET' REQUEST_URI '/revision/diff/dbtune-audioscrobbler?diff=66a47b9e-232a-4838-8674-66fa1a5c76e1&oldid=a99c98be-767a-4e49-9025-2472b2d18b9c' SCRIPT_FILENAME '/home/okfn/var/srvc/ckan.net/pyenv/bin/ckan.net.py' SCRIPT_URI 'http://ckan.net/revision/diff/dbtune-audioscrobbler' SCRIPT_URL '/revision/diff/dbtune-audioscrobbler' SERVER_ADDR '10.226.226.118' SERVER_ADMIN '[no address given]' SERVER_NAME 'ckan.net' SERVER_PORT '80' SERVER_PROTOCOL 'HTTP/1.1' SERVER_SIGNATURE '<address>Apache/2.2.9 (Debian) mod_wsgi/2.5 Python/2.5.2 Server at ckan.net Port 80</address>\n' SERVER_SOFTWARE 'Apache/2.2.9 (Debian) mod_wsgi/2.5 Python/2.5.2' WSGI Variables application <beaker.middleware.CacheMiddleware object at 0x9f603ec> beaker.cache <beaker.cache.CacheManager object at 0x9f6042c> beaker.get_session <bound method SessionMiddleware._get_session of <beaker.middleware.SessionMiddleware object at 0x9f602ac>> beaker.session {'_accessed_time': 1282385101.4243281, '_creation_time': 1282385101.4243281} mod_wsgi.application_group 'ckan.net|' mod_wsgi.callable_object 'application' mod_wsgi.listener_host '' mod_wsgi.listener_port '80' mod_wsgi.process_group '' mod_wsgi.reload_mechanism '0' mod_wsgi.script_reloading '1' mod_wsgi.version (2, 5) paste.cookies (<SimpleCookie: >, '') paste.parsed_querystring ([('diff', '66a47b9e-232a-4838-8674-66fa1a5c76e1'), ('oldid', 'a99c98be-767a-4e49-9025-2472b2d18b9c')], 'diff=66a47b9e-232a-4838-8674-66fa1a5c76e1&oldid=a99c98be-767a-4e49-9025-2472b2d18b9c') paste.registry <paste.registry.Registry object at 0x104552ec> paste.throw_errors True pylons.action_method <bound method RevisionController.diff of <ckan.controllers.revision.RevisionController object at 0xfb17aec>> pylons.controller <ckan.controllers.revision.RevisionController object at 0xfb17aec> pylons.environ_config {'session': 'beaker.session', 'cache': 'beaker.cache'} pylons.pylons <pylons.util.PylonsContext object at 0x10286d4c> pylons.routes_dict {'action': u'diff', 'controller': u'revision', 'id': u'dbtune-audioscrobbler'} repoze.who.logger <logging.Logger instance at 0xa16e0cc> repoze.who.plugins {'openid': <OpenIdIdentificationPlugin 167584972>, 'auth_tkt': <AuthTktCookiePlugin 169253516>} routes.route <routes.route.Route object at 0x9f3690c> routes.url <routes.util.URLGenerator object at 0xfd8d7cc> webob._parsed_query_vars (GET([('diff', '66a47b9e-232a-4838-8674-66fa1a5c76e1'), ('oldid', 'a99c98be-767a-4e49-9025-2472b2d18b9c')]), 'diff=66a47b9e-232a-4838-8674-66fa1a5c76e1&oldid=a99c98be-767a-4e49-9025-2472b2d18b9c') webob.adhoc_attrs {'language': 'en-us'} wsgi process 'Multi process AND threads (?)' wsgi.file_wrapper <built-in method file_wrapper of mod_wsgi.Adapter object at 0x103a5bf0> wsgiorg.routing_args (<routes.util.URLGenerator object at 0xfd8d7cc>, {'action': u'diff', 'controller': u'revision', 'id': u'dbtune-audioscrobbler'}) |
1282553033000000 | 1287747652000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#206 | enhancement | nickstenning | nickstenning | v1.0 | closed | fixed | UI review |
Investigate and list (on the wiki at wiki:UiReviewNotes) CKAN's UI issues, in particular:
Est cost: 2 hrs. |
1260199941000000 | 1260881123000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#827 | defect | rgrp | dread | closed | fixed | metadata_created_and_modified error |
Intermittent failure on ckan default branch. Looks like brittle test. ====================================================================== FAIL: ckan.tests.models.test_package.TestPackageRevisions.test_02_metadata_created_and_modified ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/buildslave/okfn/full/build/buildandsmoke/pyenv/lib/python2.6/site-packages/nose/case.py", line 186, in runTest self.test(*self.arg) File "/home/buildslave/okfn/full/build/buildandsmoke/pyenv/src/ckan/ckan/tests/models/test_package.py", line 250, in test_02_metadata_created_and_modified assert out == exp, (out, exp) AssertionError: (datetime.datetime(2010, 11, 25, 4, 37, 52, 949380), datetime.datetime(2010, 11, 25, 4, 37, 52, 94938)) http://buildbot.okfn.org/builders/builder-ckan/builds/589/steps/shell/logs/stdio |
1290678624000000 | 1290766239000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#304 | defect | johnbywater | johnbywater | v1.0 | closed | fixed | Previewing package with resource with missing url is broken |
Intended outcome: See resource url validation error when previewing package with a resources that has no url. Recurring Error: URL: http://127.0.0.1:5000/package/new File 'pyenv-ckan/lib/python2.5/site-packages/weberror/evalexception.py', line 431 in respond app_iter = self.application(environ, detect_start_response) File 'pyenv-ckan/lib/python2.5/site-packages/repoze/who/middleware.py', line 107 in __call__ app_iter = app(environ, wrapper.wrap_start_response) File 'pyenv-ckan/lib/python2.5/site-packages/beaker/middleware.py', line 73 in __call__ return self.app(environ, start_response) File 'pyenv-ckan/lib/python2.5/site-packages/beaker/middleware.py', line 152 in __call__ return self.wrap_app(environ, session_start_response) File 'pyenv-ckan/lib/python2.5/site-packages/Routes-1.10.3-py2.5.egg/routes/middleware.py', line 130 in __call__ response = self.app(environ, start_response) File 'pyenv-ckan/lib/python2.5/site-packages/Pylons-0.9.7-py2.5.egg/pylons/wsgiapp.py', line 125 in __call__ response = self.dispatch(controller, environ, start_response) File 'pyenv-ckan/lib/python2.5/site-packages/Pylons-0.9.7-py2.5.egg/pylons/wsgiapp.py', line 324 in dispatch return controller(environ, start_response) File 'pyenv-ckan/src/ckan/ckan/lib/base.py', line 50 in __call__ return WSGIController.__call__(self, environ, start_response) File 'pyenv-ckan/lib/python2.5/site-packages/Pylons-0.9.7-py2.5.egg/pylons/controllers/core.py', line 221 in __call__ response = self._dispatch_call() File 'pyenv-ckan/lib/python2.5/site-packages/Pylons-0.9.7-py2.5.egg/pylons/controllers/core.py', line 172 in _dispatch_call response = self._inspect_call(func) File 'pyenv-ckan/lib/python2.5/site-packages/Pylons-0.9.7-py2.5.egg/pylons/controllers/core.py', line 107 in _inspect_call result = self._perform_call(func, args) File 'pyenv-ckan/lib/python2.5/site-packages/Pylons-0.9.7-py2.5.egg/pylons/controllers/core.py', line 60 in _perform_call return func(**args) File 'pyenv-ckan/src/ckan/ckan/controllers/package.py', line 216 in new clear_session=True) File 'pyenv-ckan/src/ckan/ckan/controllers/package.py', line 357 in _render_edit_form edit_form_html = fs.render() File 'pyenv-ckan/src/ckan/ckan/forms/builder.py', line 13 in render return render(self.form_template) File 'pyenv-ckan/lib/python2.5/site-packages/Pylons-0.9.7-py2.5.egg/pylons/templating.py', line 663 in render format=format, namespace=kargs, **cache_args) File 'pyenv-ckan/lib/python2.5/site-packages/Pylons-0.9.7-py2.5.egg/pylons/templating.py', line 546 in render **options) File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/plugin.py', line 110 in render File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/core.py', line 179 in render File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/output.py', line 60 in encode File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/output.py', line 425 in __call__ File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/output.py', line 592 in __call__ File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/output.py', line 698 in __call__ File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/output.py', line 532 in __call__ File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/core.py', line 283 in _ensure File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py', line 569 in _include File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/markup.py', line 245 in _match File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py', line 543 in _exec File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py', line 533 in _eval File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py', line 520 in _eval File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py', line 286 in _eval_expr File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/eval.py', line 180 in evaluate File 'pyenv-ckan/src/ckan/ckan/templates/package/form_fields.html', line 52 in <Expression u'h.literal(field.render())'> ${h.literal(field.render())} File 'pyenv-ckan/lib/python2.5/site-packages/FormAlchemy-1.3.4-py2.5.egg/formalchemy/fields.py', line 1217 in render return self.renderer.render(**opts) File 'pyenv-ckan/src/ckan/ckan/forms/common.py', line 311 in render return render('package/form_resources') File 'pyenv-ckan/lib/python2.5/site-packages/Pylons-0.9.7-py2.5.egg/pylons/templating.py', line 663 in render format=format, namespace=kargs, **cache_args) File 'pyenv-ckan/lib/python2.5/site-packages/Pylons-0.9.7-py2.5.egg/pylons/templating.py', line 546 in render **options) File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/plugin.py', line 110 in render File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/core.py', line 179 in render File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/output.py', line 60 in encode File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/output.py', line 425 in __call__ File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/output.py', line 592 in __call__ File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/output.py', line 698 in __call__ File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/output.py', line 532 in __call__ File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/core.py', line 283 in _ensure File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py', line 569 in _include File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/markup.py', line 245 in _match File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py', line 543 in _exec File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py', line 510 in _eval File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py', line 520 in _eval File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py', line 286 in _eval_expr File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/eval.py', line 180 in evaluate File 'pyenv-ckan/src/ckan/ckan/templates/package/form_resources.html', line 14 in <Expression u"res['id'] if res else ''"> <td><input name="${c.id}-${i}-id" type="hidden" value="${res['id'] if res else ''}" /></td> File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/eval.py', line 335 in lookup_item File 'pyenv-ckan/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/eval.py', line 405 in undefined UndefinedError: {'url': u'a', 'hash': u'a', 'description': u'a', 'format': u'a'} has no member named "id" How to reproduce:
|
1272379550000000 | 1272447296000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1377 | defect | zephod | zephod | ckan-sprint-2011-10-10 | closed | fixed | Ckan admin repair |
Integrating ckanext-admin into core has thrown up a number of problems:
|
1318240018000000 | 1318245795000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#239 | task | dread | dread | v1.0 | closed | fixed | Test migrate scripts |
Integrate new test upgrade into testmigrate stuff. New "migrate.ini" config file programmed with the db to be used for migrate tests and a param saying where the db dump is. |
1264439926000000 | 1265286521000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#72 | enhancement | rgrp | rgrp | v0.10 | closed | fixed | Integrate new logo |
Integrate new logo from http://wiki.okfn.org/ckan/logo into site:
Also can do favicon (separate ticket:48) Cost: 1h |
1246441021000000 | 1251451954000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1337 | defect | amercader | amercader | ckan-sprint-2011-10-28 | closed | fixed | Group extras are JSON endoded in the REST API responses |
Instead of this: extras: { type: ""Primary source"" license_id: ""localauth-withrights"" publisher_frequency: ""2Pre\u00f1o \u20ac $ \u00e0dri\u00e0"" } we should return this: extras: { type: "Primary source", license_id: "localauth-withrights", publisher_frequency: "2Preño € $ àdrià", } |
1315924727000000 | 1316951259000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2745 | defect | amercader | ckan-v1.9 | new | Password reset returns an exception if the key parameter is missing |
Instead of showing a notice, the password reset page throws an exception if the key parameter is missing: Module ckan.controllers.user:329 in perform_reset c.reset_key = request.params.get('key') if not mailer.verify_reset_link(user_obj, c.reset_key): h.flash_error(_('Invalid reset key. Please try again.')) abort(403) if not mailer.verify_reset_link(user_obj, c.reset_key): Module ckan.lib.mailer:100 in verify_reset_link if not user.reset_key or len(user.reset_key) < 5: return False return key.strip() == user.reset_key return key.strip() == user.reset_key AttributeError: 'NoneType' object has no attribute 'strip' Apart from the obvious fix of checking for the 'key' parameter, it seems like is quite common to get these reset urls without the key parameter, so I suspect some email clients might strip the query params when building the links. We could avoid this problem by making the key part of the url instead of a param: http://thedatahub.org/en/user/reset/3086e91c-fe09-4a98-92e1-19de67a9ac9d/b4c2d03fa8 instead of: http://thedatahub.org/en/user/reset/3086e91c-fe09-4a98-92e1-19de67a9ac9d?key=b4c2d03fa8 |
1343145931000000 | 1343145931000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2510 | enhancement | aron.carroll | aron.carroll | ckan-sprint-2012-06-25 | closed | fixed | Demo tag lists should link to the search page |
Instead of pointing to /tags/{tagname} all tag links should just point to a dataset search filtered by that tag. Examples are on the homepage and the dataset pages. |
1339513217000000 | 1339670520000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1644 | enhancement | shevski | ckan-backlog | new | Order default dataset page by most downloaded resources on thedatahub |
Instead of alphabetically as we do currently, alternatively by most viewed datasets |
1326393542000000 | 1326393542000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2351 | enhancement | icmurray | icmurray | ckan-ecportal | closed | fixed | Install EC Portal on CentOS |
Install and document (step-by-step) CKAN (and dependencies, and extensions) onto VM on s031.okserver.org which has CentOS 6.2 installed. Paying particular attention to the fact that we won't have root access on the staging nor production servers, and so a) anything that requires root access must be documented carefully; and b) we want to be able to perform maintenance without being root. MaintenanceWe want to have non-root access to:
CKAN and Dependencies
Extra configuration
Things to remember
|
1335883455000000 | 1340615641000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1251 | enhancement | rgrp | rgrp | ckan-backlog | closed | fixed | Rename wiki.ckan.net to wiki.ckan.org |
Inline with general naming policy going forward. |
1311965147000000 | 1317315159000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1732 | enhancement | johnglover | seanh | ckan-v1.8 | closed | fixed | Update CKAN's search for taxonomies |
Initially we'll just add all tags from all vocabularies into the existing tags search facet (this should happen automatically). Later we want to enable templates to use separate search facets for different vocabularies. Also need to make sure that search terms are matched against the texts of the tag names themselves (should happen already) and maybe also against the texts of the vocabulary names? |
1328008169000000 | 1341224357000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1226 | defect | dread | closed | worksforme | Genshi stream exception |
IndexError? exception in genshi.filters.i18n keeps popping up daily. e.g. ... Module ckan.controllers.authorization_group:28 in index << items_per_page=20 ) return render('authorization_group/index.html') def read(self, id): >> return render('authorization_group/index.html') Module ckan.lib.base:74 in render << return cached_template(template_name, render_template, cache_key=cache_key, cache_type=cache_type, cache_expire=cache_expire) #, ns_options=('method'), method=method) >> cache_type=cache_type, cache_expire=cache_expire) Module pylons.templating:249 in cached_template << return content else: return render_func() >> return render_func() Module ckan.lib.base:63 in render_template << stream = item.filter(stream) return literal(stream.render(method=method, encoding=None)) if 'Pragma' in response.headers: >> return literal(stream.render(method=method, encoding=None)) Module genshi.core:183 in render << method = self.serializer or 'xml' generator = self.serialize(method=method, **kwargs) return encode(generator, method=method, encoding=encoding, out=out) def select(self, path, namespaces=None, variables=None): >> return encode(generator, method=method, encoding=encoding, out=out) Module genshi.output:57 in encode << _encode = lambda string: string if out is None: return _encode(''.join(list(iterator))) for chunk in iterator: out.write(_encode(chunk)) >> return _encode(''.join(list(iterator))) Module genshi.output:339 in __call__ << for filter_ in self.filters: stream = filter_(stream) for kind, data, pos in stream: cached = cache_get((kind, data)) if cached is not None: >> for kind, data, pos in stream: Module genshi.output:670 in __call__ << _gen_prefix = _gen_prefix().next for kind, data, pos in stream: output = cache_get((kind, data)) if output is not None: >> for kind, data, pos in stream: Module genshi.output:771 in __call__ << push_text = textbuf.append pop_text = textbuf.pop for kind, data, pos in chain(stream, [(None, None, None)]): if kind is TEXT: >> for kind, data, pos in chain(stream, [(None, None, None)]): Module genshi.output:586 in __call__ << def __call__(self, stream): prev = (None, None, None) for ev in stream: if prev[0] is START: if ev[0] is END: >> for ev in stream: Module genshi.core:288 in _ensure << # unchanged yield event for event in stream: yield event >> for event in stream: Module genshi.core:288 in _ensure << # unchanged yield event for event in stream: yield event >> for event in stream: Module genshi.filters.transform:686 in _unmark << def _unmark(self, stream): for mark, event in stream: kind = event[0] if not (kind is None or kind is ATTR or kind is BREAK): >> for mark, event in stream: Module genshi.filters.transform:1145 in __call__ << :param stream: The marked event stream to filter """ for mark, event in stream: yield mark, event if mark is ENTER: >> for mark, event in stream: Module genshi.filters.transform:714 in __call__ << stream = iter(stream) next = stream.next for mark, event in stream: if mark is None: yield mark, event >> for mark, event in stream: Module genshi.filters.transform:682 in _mark << def _mark(self, stream): for event in stream: yield OUTSIDE, event >> for event in stream: Module genshi.core:288 in _ensure << # unchanged yield event for event in stream: yield event >> for event in stream: Module genshi.filters.transform:686 in _unmark << def _unmark(self, stream): for mark, event in stream: kind = event[0] if not (kind is None or kind is ATTR or kind is BREAK): >> for mark, event in stream: Module ckanext.googleanalytics.plugin:62 in download_adder << (downloaded %s times)</span>''' count = None for mark, (kind, data, pos) in stream: if mark and kind == START: href = data[1].get('href') >> for mark, (kind, data, pos) in stream: Module genshi.filters.transform:714 in __call__ << stream = iter(stream) next = stream.next for mark, event in stream: if mark is None: yield mark, event >> for mark, event in stream: Module genshi.filters.transform:682 in _mark << def _mark(self, stream): for event in stream: yield OUTSIDE, event >> for event in stream: Module genshi.core:288 in _ensure << # unchanged yield event for event in stream: yield event >> for event in stream: Module genshi.filters.transform:686 in _unmark << def _unmark(self, stream): for mark, event in stream: kind = event[0] if not (kind is None or kind is ATTR or kind is BREAK): >> for mark, event in stream: Module genshi.filters.transform:1175 in __call__ << """ callable_value = hasattr(self.value, '__call__') for mark, (kind, data, pos) in stream: if mark is ENTER: if callable_value: >> for mark, (kind, data, pos) in stream: Module genshi.filters.transform:714 in __call__ << stream = iter(stream) next = stream.next for mark, event in stream: if mark is None: yield mark, event >> for mark, event in stream: Module genshi.filters.transform:682 in _mark << def _mark(self, stream): for event in stream: yield OUTSIDE, event >> for event in stream: Module genshi.core:288 in _ensure << # unchanged yield event for event in stream: yield event >> for event in stream: Module genshi.filters.transform:686 in _unmark << def _unmark(self, stream): for mark, event in stream: kind = event[0] if not (kind is None or kind is ATTR or kind is BREAK): >> for mark, event in stream: Module genshi.filters.transform:1145 in __call__ << :param stream: The marked event stream to filter """ for mark, event in stream: yield mark, event if mark is ENTER: >> for mark, event in stream: Module genshi.filters.transform:714 in __call__ << stream = iter(stream) next = stream.next for mark, event in stream: if mark is None: yield mark, event >> for mark, event in stream: Module genshi.filters.transform:682 in _mark << def _mark(self, stream): for event in stream: yield OUTSIDE, event >> for event in stream: Module genshi.template.base:618 in _include << tmpl = self.loader.load(href, relative_to=event[2][0], cls=cls or self.__class__) for event in tmpl.generate(ctxt, **vars): yield event except TemplateNotFound: >> for event in tmpl.generate(ctxt, **vars): Module genshi.template.base:618 in _include << tmpl = self.loader.load(href, relative_to=event[2][0], cls=cls or self.__class__) for event in tmpl.generate(ctxt, **vars): yield event except TemplateNotFound: >> for event in tmpl.generate(ctxt, **vars): Module genshi.template.base:618 in _include << tmpl = self.loader.load(href, relative_to=event[2][0], cls=cls or self.__class__) for event in tmpl.generate(ctxt, **vars): yield event except TemplateNotFound: >> for event in tmpl.generate(ctxt, **vars): Module genshi.template.base:605 in _include << from genshi.template.loader import TemplateNotFound for event in stream: if event[0] is INCLUDE: href, cls, fallback = event[1] >> for event in stream: Module genshi.template.markup:378 in _match << for event in self._match(self._flatten(template, ctxt, **vars), ctxt, start=idx + 1, **vars): yield event >> ctxt, start=idx + 1, **vars): Module genshi.template.markup:327 in _match << break for event in stream: # We (currently) only care about start and end events for matching >> for event in stream: Module genshi.template.base:545 in _flatten << while 1: for kind, data, pos in stream: if kind is START and data[1]: >> for kind, data, pos in stream: Module genshi.filters.i18n:177 in _generate << msgbuf.append(*previous) previous = None for event in msgbuf.translate(gettext(msgbuf.format())): yield event if previous: >> for event in msgbuf.translate(gettext(msgbuf.format())): Module genshi.filters.i18n:1029 in translate << ) parts = parse_msg(string) parts_counter = {} for order, string in parts: >> parts = parse_msg(string) Module genshi.filters.i18n:1143 in parse_msg << if string: parts.append((stack[-1], string)) return parts >> parts.append((stack[-1], string)) IndexError: list index out of range |
1311008861000000 | 1314029434000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2697 | enhancement | johnmartin | shevski | demo phase 5 | assigned | create dataset validation |
Includes: missing fields, existing field checks (i.e. whether a name/dataset already exists with that name) during input (i.e. no need to submit form to check) |
1342620035000000 | 1346235925000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1227 | enhancement | timmcnamara | ckan-backlog | new | Display packages' tags in search results |
In when displaying search results, it would be useful to also display the tags of a package. Sometimes it's difficult to infer the scope of what the package does from the title and the first sentence of the description. Tags are quite concise way to display rich information. ENV=datacatalos.org, with CKAN 1.4.2a |
1311034262000000 | 1339774147000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#203 | enhancement | dread | dread | v0.11 | closed | fixed | show package counts for groups in WUI |
In two places in the WUI
Cost: 1h |
1260187690000000 | 1265891080000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1651 | enhancement | johnglover | dread | closed | fixed | Explicit link mapper |
In this commit https://github.com/okfn/ckan/commit/1772a5c John Glover set map.explicit=True in ckan/config/routing.py. The reason this was done was to avoid links collecting parameters. e.g. if you were on page /dataset/{id}/resource/{resource_id} then by default all the links on that page generated by url_for (Routes) would include the id and resource_id parameters as well. To avoid this, you had to go through all the links and add id=None and resource_id=None to the url_for parameters. When map.explicit was changed to True, the value of the controller, action, id and any parameters were no longer automatically carried over into the generated links for the page. So previously links within the same controller didn't need to specify the controller (for example), but now they did. So when we did this we also had to fix up links that weren't explicit:
John made the config change on 5/11/2011 which was merged to master https://github.com/okfn/ckan/commit/5a01e67 21/11/2011. The related fixes mentioned were in within the same week. This all went into release 1.5.1. The requirement |
1326709852000000 | 1326711005000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1723 | enhancement | seanh | seanh | ckan-sprint-2012-02-20 | closed | wontfix | Update tests for taxonomies |
In the tag-taxonomies branch tags now (optionally) belong to vocabularies and where tags previously had unique names, a CKAN instance can now have two tags with the same name as long as they belong to different vocabularies. The tests for the tags model should probably be updated to reflect this. Other tests might also need to be updated. |
1327950494000000 | 1329131103000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1202 | enhancement | rgrp | rolf | closed | invalid | Links to datapkg utility don't lead to info about it |
In the presentation of data packages, the link in "The information on this page and the downloads / resources are also available using the datapkg command line utility." (http://knowledgeforge.net/ckan/doc/datapkg/install.html) ends up at the home page of ckan.org Perhaps link it to https://bitbucket.org/okfn/datapkg/overview for now, to save some searching for people who want to find out more? |
1309263613000000 | 1315821804000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2611 | enhancement | aron.carroll | shevski | demo phase 1 | closed | fixed | Text / link changes |
In the footer: Change 'Powered by CityData?' to Powered by DataSuite? (with link to ckan.org/datasuite) Links in left hand side of footer should change to a link to ckan.org, link to OKFN, link to ckan.org/datasuite/about and link to Pricing Page (on ckan.org .. will be /datasuite/solutions) In create dataset form, prefilled tag examples should include one example with a space, e.g. "mental health" Change 'Groups' to 'Publishers' everywhere Homepage copy/images (Ira to supply?) |
1340810740000000 | 1342008509000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2610 | enhancement | aron.carroll | shevski | demo phase 1 | closed | duplicate | Text / link changes |
In the footer: Change 'Powered by CityData?' to Powered by DataSuite? (with link to ckan.org/datasuite) Links in left hand side of footer should change to a link to ckan.org, link to OKFN, link to ckan.org/datasuite/about and link to Pricing Page (on ckan.org .. will be /datasuite/solutions) In create dataset form, prefilled tag examples should include one example with a space, e.g. "mental health" |
1340810738000000 | 1341501424000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1647 | enhancement | shevski | ckan-backlog | new | add links to ckan discuss & dev to thedatahub |
In the footer as well as more clearly & directly on the About page |
1326673852000000 | 1326707383000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1536 | defect | dread | dread | ckan-sprint-2011-12-19 | closed | fixed | Group deletion doesn't work |
In the Web interface and API, an administrator can set the 'state' field of a group to 'deleted' but this change is ignored in the save/submit and it doesn't get deleted. |
1323346766000000 | 1330020599000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2232 | defect | amercader | amercader | ckan-sprint-2012-04-02 | closed | fixed | Unicode Exception when rebuilding the search index |
In some cases this exception is fired when building the search index. As explained in #1616 this makes the whole process stop. File "/var/lib/ckan/pdeu/pyenv/lib/python2.6/site-packages/solr/core.py", line 326, in wrapper return self._update(content, query) File "/var/lib/ckan/pdeu/pyenv/lib/python2.6/site-packages/solr/core.py", line 550, in _update rsp = self._post(selector, request, self.xmlheaders) File "/var/lib/ckan/pdeu/pyenv/lib/python2.6/site-packages/solr/core.py", line 639, in _post return check_response_status(self.conn.getresponse()) File "/var/lib/ckan/pdeu/pyenv/lib/python2.6/site-packages/solr/core.py", line 1096, in check_response_status raise ex SolrException: HTTP code=400, reason=ParseError at [row,col]:[1,2354] Message: An invalid XML character (Unicode: 0x1) was found in the element content of the document. Traceback (most recent call last): File "/var/lib/ckan/pdeu/pyenv/bin/paster", line 9, in <module> load_entry_point('PasteScript==1.7.3', 'console_scripts', 'paster')() File "/var/lib/ckan/pdeu/pyenv/lib/python2.6/site-packages/paste/script/command.py", line 84, in run invoke(command, command_name, options, args[1:]) File "/var/lib/ckan/pdeu/pyenv/lib/python2.6/site-packages/paste/script/command.py", line 123, in invoke exit_code = runner.run(args) File "/var/lib/ckan/pdeu/pyenv/lib/python2.6/site-packages/paste/script/command.py", line 218, in run result = self.command() File "/var/lib/ckan/pdeu/pyenv/src/ckan/ckan/lib/cli.py", line 298, in command rebuild() File "/var/lib/ckan/pdeu/pyenv/src/ckan/ckan/lib/search/__init__.py", line 134, in rebuild {'id': pkg.id} File "/var/lib/ckan/pdeu/pyenv/src/ckan/ckan/lib/search/index.py", line 54, in insert_dict return self.update_dict(data) File "/var/lib/ckan/pdeu/pyenv/src/ckan/ckan/lib/search/index.py", line 79, in update_dict self.index_package(pkg_dict) File "/var/lib/ckan/pdeu/pyenv/src/ckan/ckan/lib/search/index.py", line 153, in index_package raise SearchIndexError(e) ckan.lib.search.common.SearchIndexError: HTTP code=400, reason=ParseError at [row,col]:[1,2354] Message: An invalid XML character (Unicode: 0x1) was found in the element content of the document. |
1331816582000000 | 1332331660000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2920 | defect | seanh | ckan 2.0 | new | Genshi text template message extractor no longer needed? |
In setup.py, do we still need:
in message_extractors? Doesn't like there are any txt files in there anymore. |
1347530249000000 | 1347530249000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2877 | enhancement | kindly | rgrp | assigned | Bugs with datastore v2 |
In progress
Multiple query valuesTry a query such as: "second UK" and you will get 500 error: ProgrammingError: (ProgrammingError) syntax error in tsquery: "second UK" 'select "_id", "id", "date", "x", "y", "z", "country", "title", "lat", "lon", count(*) over() as "_full_count"\n from "4f1299ab-a100-4e5f-ba81-e6d234a2f3bd" where _full_text @@ to_tsquery(%s) limit 100 offset 0' (u'second UK',) SuggestionsFilter support: should think in more detail about this (may want to follow recline style) Simple filters in query parameters would be nice too ... |
1345250002000000 | 1346320395000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1317 | defect | dread | ckan-backlog | assigned | password reset - improve user search |
In password reset, it gets confused if you have two similar users. This is because with the string the user provides, it searches several fields, not just name but also fullname and email address, allowing you to search for these. But only name is unique. Specific problem: Ira searches for "Irina" then it finds both: <User name=irina fullname=Irina [email protected] ] and <User name=shevski fullname=Ira email=> (I think) Maybe need to choose which field it searches? |
1315415539000000 | 1340191221000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#965 | enhancement | kindly | kindly | ckan-v1.4 | closed | fixed | make migration testing plugin to nose |
In order to test migrations properly, we need to test the upgraded database against *all* the tests. To do this a special flag to nosetests should be added. nosetests --migrations This flag will make sure that the database is recreated from scratch each time using the migrate repository, bypassing init_db. |
1297213492000000 | 1298280637000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1258 | enhancement | kindly | kindly | ckan-sprint-2011-10-28 | closed | fixed | Bring purge revision into ckan repo from vdm |
In order to make purge revision work correctly with the moderated edits we need to modify purge revision in vdm. This is best modified in ckan so we will override the vdm one in the reposotory. |
1312289539000000 | 1319812452000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1778 | enhancement | seanh | seanh | ckan-future | assigned | Replace classmethod's with module-level functions |
In many places we have @classmethods where simple module-level functions would do (and would be more idiomatic in Python), e.g. the get() classmethods in the model/ classes. Doing it with module functions lets us type module.function() instead of module.Class.method(). In many cases we're importing classes directly with from module import Class and then doing Class.method(), but from module import foo is bad style: http://docs.python.org/dev/howto/doanddont.html |
1328543614000000 | 1340623743000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#964 | enhancement | rgrp | rgrp | datapkg-0.8 | closed | fixed | Create Resource Downloader and make it pluggable |
In downloading packages we need to download resources and we need a ResourceDownloader? object for this. these should be pluggable so that we can add support for different types of resources. |
1297211004000000 | 1297211237000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2313 | enhancement | icmurray | icmurray | ckan-v1.8 | closed | fixed | Deprecate old facet data structures and related functions. |
In branch feature-1821-multilingual-extension, a new faceting datastructure was introduced. This makes the old one and related functions obsolete. These have been marked as deprecated for the 1.7 release, and should be removed for the 1.8 release.
|
1334677916000000 | 1343124732000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#906 | enhancement | thejimmyg | Stiivi | ckan-sprint-2012-03-05 | closed | fixed | Ability to search without accents for accented words |
In Slovakia users are expecting from sites to be able to search without typing accents, for example if they do not have SK keyboard, just US. For example searching for: 'Obyvateľstvo' and 'obyvatelstvo' (population) or 'štatistika' and 'statistika' (statistics) should yield same results. This should work the other way around as well, as some people might enter entries without accents into CKAN instance and others might search with accents. For SK language simple ASCII transliteration for searched term and indexed words is sufficient (iconv ASCIITRANSLIT). |
1294939588000000 | 1330990400000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#295 | enhancement | dread | dread | v1.0 | closed | fixed | Add multiple packages when editing a group |
In Group edit page, you can only add one package at a time. It would be better to use some scripting to allow adding more than one at once, to make it easier and quicker when you have a long list to add. Ticket is split off from ticket:221 See also ticket:155 (duplicate). |
1271756713000000 | 1272384758000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1417 | defect | dread | dread | ckan-sprint-2011-10-24 | closed | fixed | Browser language detection doesn't work |
In Firefox:
|
1319539010000000 | 1319651617000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#360 | defect | rgrp | rgrp | datapkg-0.7 | closed | fixed | New sqlite-based DB index |
In 0.5 and 0.6 have been more oriented to getting file indexes working to support the convenience of using packages on disk directly. However we now need to go back to having a better central/default index and the best model for this is a simple db index using sqlite (which is now supported in the standard library). NB: this is a retrospective ticket (been working on this for a couple of months) |
1277803174000000 | 1288004891000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2362 | enhancement | toby | kindly | ckan-v1.9 | accepted | Improve plugin documentaion, including examples. |
Improve documentation for plugins and add examples. Could use ckanext-example as a base. |
1335888791000000 | 1342085420000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#205 | enhancement | rgrp | dread | closed | wontfix | Custom package importer |
Importer function is exposed to logged in users. Alongside specifying file to import, user chooses between 'form schemas' - 'basic' and 'government'.
All fields should be in step with the government custom input form. For fields which have suggested values but the user can input his own value, this is achieved in the spreadsheet with two columns - the first being a drop-down and the second free text. Estimate: |
1260197819000000 | 1297068450000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1156 | enhancement | pudo | pudo | pdeu-1 | closed | fixed | Scraping harvesters for Paris and Vienna Catalogues |
Import metadata from both sources into PDEU via the Harvesting framework but by scraping their respective catalogue pages. |
1306337428000000 | 1306855111000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#801 | enhancement | wwaites | johnbywater | ckan-v1.4-sprint-3 | closed | duplicate | Get/Set last harvested time for a given harvest source |
Implies that last harvested time must be stored on source by harvesting job (see #802). |
1289483546000000 | 1300196714000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2526 | enhancement | aron.carroll | aron.carroll | demo phase 5 | closed | fixed | Demo theme new custom form fields should be created when needed |
Implementation: |
1339680105000000 | 1343924205000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2528 | enhancement | aron.carroll | aron.carroll | demo phase 1 | closed | fixed | Create demo edit dataset page |
Implementation: http://s031.okserver.org:2375/dataset/edit/5b451cab-8671-4513-91c4-257784c1f484 |
1339686982000000 | 1340617176000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1669 | enhancement | ross | ross | ckan-v1.7 | closed | fixed | [super] Publisher profile |
Implement the necessary backend changes to build profile for publishers using the group refactor. See http://ckan.okfnpad.org/publisherprofiles Subtickets are at: |
1326802473000000 | 1338204071000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2239 | enhancement | ross | ross | ckan-sprint-2012-04-30 | closed | fixed | EC ODP RDF/N3 templates |
Implement the EC/ODP template for RDF to match the requested schemas. Using the previous work on allowing for templatised RDF representations we should implement the proposed schema for EC/ODP. We also agreed to allow upload of RDF as an extra (raised to top level in package schema) which will instead be used for the RDF template. On insertion extra CKAN triples will be added... initially this is just owl:sameAs although we're awaiting EC/ODP agreement on which triples we should add to show the CKAN link. |
1332169703000000 | 1335516499000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1658 | enhancement | ross | ross | closed | wontfix | Implement proxy caching |
Implement proxy caching for performance gains
|
1326712354000000 | 1338206622000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1378 | enhancement | zephod | zephod | ckan-sprint-2011-10-24 | closed | fixed | New to TheDataHub? - StackOverflow style banner |
Implement a banner across the top of the screen giving newbies a link to the about page, and making them feel welcome. See stackoverflow for reference? |
1318247329000000 | 1324047835000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1115 | defect | johnlawrenceaspden | closed | wontfix | can have two authzgroups with the same name |
If you've got edit permission on an authzgroup, then you can change its name to be the same as another existing authzgroup. This causes some strange UI effects at worst, and probably causes worse problems somewhere else. Is there any reason why changing the names of existing authzgroups should be allowed? And if so, name collisions should presumably be guarded against in both the name-changing and creation functions |
1304085120000000 | 1324054704000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2600 | defect | seanh | seanh | ckan-v1.8 | closed | fixed | Replace broken "Login to Add an Organization" button |
If you're not logged in and you click this button, it takes you to the add group page not the login page. Anyway, the default behaviour everywhere else in CKAN is to hide buttons that you don't have permission to use (e.g. add dataset, edit dataset, etc.) |
1340721718000000 | 1340791910000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1725 | defect | dread | dread | ckan-sprint-2012-02-06 | closed | fixed | Tag autocompletion and commas don't mix |
If you use tag autocompletion, it automatically adds a comma after the tag. This is fine if you are going to add another tag, but not fine if it is the last one. If you don't manually remove the final comma than you get form validation error "Tag string: Tag "" length is less than minimum 2" Affects only version 1.5.2a. |
1328006709000000 | 1328204489000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1442 | defect | dread | dread | ckan-sprint-2011-11-07 | closed | fixed | You can't GET then POST a dataset as new |
If you try to GET a dataset, purge it then POST it again, it fails checking authz for the group: Module ckan.controllers.api:278 in create << (register, subregister)) try: response_data = action(context, data_dict) location = None if "id" in data_dict: >> response_data = action(context, data_dict) Module ckan.logic.action.create:240 in package_create_rest << api = context.get('api_version') or '1' check_access('package_create_rest', context, data_dict) dictized_package = package_api_to_dict(data_dict, context) >> check_access('package_create_rest', context, data_dict) Module ckan.logic:129 in check_access << # log.debug('Valid API key needed to make changes') # raise NotAuthorized logic_authorization = new_authz.is_authorized(action, context, data_dict) if not logic_authorization['success']: msg = logic_authorization.get('msg','') >> logic_authorization = new_authz.is_authorized(action, context, data_dict) Module ckan.new_authz:16 in is_authorized << auth_function = _get_auth_function(action) if auth_function: return auth_function(context, data_dict) else: raise ValueError(_('Authorization function not found: %s' % action)) >> return auth_function(context, data_dict) Module ckan.logic.auth.create:115 in package_create_rest << return {'success': False, 'msg': _('Valid API key needed to create a package')} return package_create(context, data_dict) def group_create_rest(context, data_dict): >> return package_create(context, data_dict) Module ckan.logic.auth.create:15 in package_create << else: check2 = check_group_auth(context,data_dict) if not check2: return {'success': False, 'msg': _('User %s not authorized to edit these groups') % str(user)} >> check2 = check_group_auth(context,data_dict) Module ckan.logic.auth.create:90 in check_group_auth << groups = set() for group_dict in group_dicts: id = group_dict.get('id') if not id: continue >> id = group_dict.get('id') AttributeError: 'unicode' object has no attribute 'get' (using RESTful Model API) The reason is the POST is expecting the group to be expressed as a dict, not the list of names that GET returns. |
1320263318000000 | 1320275623000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2318 | enhancement | seanh | rgrp | ckan-sprint-2012-04-30 | closed | fixed | Bug with Portugese translation and Javascript |
If you switch to Portugese and try to add a resource on dataset edit it will fail. This is because there is a string translation in js_strings.html that has quotes in it. When this is inserted into the file this causes a js exception which then prevents any further js processing. Specifically: CKAN.Strings.youHaveUnsavedChanges = "Você tem alterações não salvas. Certifique-se de ter clicado "Salvar Alterações" abaixo antes de sair desta página."; Uncaught SyntaxError: Unexpected identifier To fix is simple i imagine: need to escape " correctly in js_strings.html (or translations used). I have temporarily patched this live in order to allow the hackday here to continue. |
1335033889000000 | 1335774178000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1659 | defect | dread | dread | ckan-sprint-2012-01-23 | closed | fixed | Cannot logout if CKAN mounted at non-root url |
If you set WSGIScriptAlias to mount CKAN at a URL other than / then you cannot logout without adjusting the OpenID logged_out_url to match in who.ini config. e.g.
Note: all the other URLs in who.ini should not have the /sub/dir/ - it is just this one that doesn't take account of the mounting point. The solution is to fix-up the repoze.who OpenID plugin to take account of the mounting point. |
1326716302000000 | 1326747205000000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#316 | defect | rgrp | dread | closed | fixed | Search URL escaping |
If you search for unescaped characters such as '`' (backtick) in the URL in Chrome then you get a 500 error. e.g. http://www.ckan.net/package/search?q=fjdkf2B%C2%B4gfhgfkgf{gpk fjdkf2B´gfhgfkgf{gpk returns this exception: URL: http://www.ckan.net/package/search?q=fjdkf%2B%C2%B4gfhgfkgf%7Bg%C2%B4pk&search=Search+Packages+%C2%BB Module weberror.errormiddleware:162 in __call__ << __traceback_supplement__ = Supplement, self, environ sr_checker = ResponseStartChecker(start_response) app_iter = self.application(environ, sr_checker) return self.make_catching_iter(app_iter, environ, sr_checker) except: >> app_iter = self.application(environ, sr_checker) Module repoze.who.middleware:107 in __call__ << wrapper = StartResponseWrapper(start_response) app_iter = app(environ, wrapper.wrap_start_response) # The challenge decider almost(?) always needs information from the >> app_iter = app(environ, wrapper.wrap_start_response) Module beaker.middleware:73 in __call__ << self.cache_manager) environ[self.environ_key] = self.cache_manager return self.app(environ, start_response) >> return self.app(environ, start_response) Module beaker.middleware:152 in __call__ << headers.append(('Set-cookie', cookie)) return start_response(status, headers, exc_info) return self.wrap_app(environ, session_start_response) def _get_session(self): >> return self.wrap_app(environ, session_start_response) Module routes.middleware:130 in __call__ << environ['SCRIPT_NAME'] = environ['SCRIPT_NAME'][:-1] response = self.app(environ, start_response) # Wrapped in try as in rare cases the attribute will be gone already >> response = self.app(environ, start_response) Module pylons.wsgiapp:125 in __call__ << controller = self.resolve(environ, start_response) response = self.dispatch(controller, environ, start_response) if 'paste.testing_variables' in environ and hasattr(response, >> response = self.dispatch(controller, environ, start_response) Module pylons.wsgiapp:324 in dispatch << if log_debug: log.debug("Calling controller class with WSGI interface") return controller(environ, start_response) def load_test_env(self, environ): >> return controller(environ, start_response) Module ckan.lib.base:50 in __call__ << # available in environ['pylons.routes_dict'] try: return WSGIController.__call__(self, environ, start_response) finally: model.Session.remove() >> return WSGIController.__call__(self, environ, start_response) Module pylons.controllers.core:221 in __call__ << return response(environ, self.start_response) response = self._dispatch_call() if not start_response_called: self.start_response = start_response >> response = self._dispatch_call() Module pylons.controllers.core:172 in _dispatch_call << req.environ['pylons.action_method'] = func response = self._inspect_call(func) else: if log_debug: >> response = self._inspect_call(func) Module pylons.controllers.core:107 in _inspect_call << func.__name__, args) try: result = self._perform_call(func, args) except HTTPException, httpe: if log_debug: >> result = self._perform_call(func, args) Module pylons.controllers.core:60 in _perform_call << """Hide the traceback for everything above this method""" __traceback_hide__ = 'before_and_this' return func(**args) def _inspect_call(self, func): >> return func(**args) Module ckan.controllers.package:52 in search << collection=query, page=request.params.get('page', 1), items_per_page=50 ) # filter out ranks from the query result >> items_per_page=50 Module webhelpers.paginate:333 in __init__ << self.item_count = item_count else: self.item_count = len(self.collection) # Compute the number of the first and last available page >> self.item_count = len(self.collection) Module webhelpers.paginate:204 in __len__ << def __len__(self): return self.obj.count() # Since the items on a page are mainly a list we subclass the "list" type >> return self.obj.count() Module sqlalchemy.orm.query:1094 in count << q = q.params(params) q = q._legacy_select_kwargs(**kwargs) return q._count() def _count(self): >> return q._count() Module sqlalchemy.orm.query:1103 in _count << """ return self._col_aggregate(sql.literal_column('1'), sql.func.count, nested_cols=list(self.mapper.primary_key)) def _col_aggregate(self, col, func, nested_cols=None): >> return self._col_aggregate(sql.literal_column('1'), sql.func.count, nested_cols=list(self.mapper.primary_key)) Module sqlalchemy.orm.query:1125 in _col_aggregate << if self._autoflush and not self._populate_existing: self.session._autoflush() return self.session.scalar(s, params=self._params, mapper=self.mapper) def compile(self): >> return self.session.scalar(s, params=self._params, mapper=self.mapper) Module sqlalchemy.orm.session:635 in scalar << engine = self.get_bind(mapper, clause=clause, instance=instance) return self.__connection(engine, close_with_result=True).scalar(clause, params or {}) def close(self): >> return self.__connection(engine, close_with_result=True).scalar(clause, params or {}) Module sqlalchemy.engine.base:834 in scalar << """ return self.execute(object, *multiparams, **params).scalar() def statement_compiler(self, statement, **kwargs): >> return self.execute(object, *multiparams, **params).scalar() Module sqlalchemy.engine.base:844 in execute << for c in type(object).__mro__: if c in Connection.executors: return Connection.executors[c](self, object, multiparams, params) else: raise exceptions.InvalidRequestError("Unexecutable object type: " + str(type(object))) >> return Connection.executors[c](self, object, multiparams, params) Module sqlalchemy.engine.base:895 in execute_clauseelement << else: keys = None return self._execute_compiled(elem.compile(dialect=self.dialect, column_keys=keys, inline=len(params) > 1), distilled_params=params) def _execute_compiled(self, compiled, multiparams=None, params=None, distilled_params=None): >> return self._execute_compiled(elem.compile(dialect=self.dialect, column_keys=keys, inline=len(params) > 1), distilled_params=params) Module sqlalchemy.engine.base:907 in _execute_compiled << context.pre_execution() self.__execute_raw(context) context.post_execution() self._autocommit(context) >> self.__execute_raw(context) Module sqlalchemy.engine.base:916 in __execute_raw << self._cursor_executemany(context.cursor, context.statement, context.parameters, context=context) else: self._cursor_execute(context.cursor, context.statement, context.parameters[0], context=context) def _execute_ddl(self, ddl, params, multiparams): >> self._cursor_execute(context.cursor, context.statement, context.parameters[0], context=context) Module sqlalchemy.engine.base:958 in _cursor_execute << self.engine.logger.info(repr(parameters)) try: self.dialect.do_execute(cursor, statement, parameters, context=context) except Exception, e: self._handle_dbapi_exception(e, statement, parameters, cursor) >> self.dialect.do_execute(cursor, statement, parameters, context=context) Module sqlalchemy.engine.default:133 in do_execute << def do_execute(self, cursor, statement, parameters, context=None): cursor.execute(statement, parameters) def is_disconnect(self, e): >> cursor.execute(statement, parameters) UnicodeEncodeError: 'ascii' codec can't encode character u'\xb4' in position 6: ordinal not in range(128) |
1274265928000000 | 1291831177000000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#1512 | defect | ross | rgrp | ckan-v1.8 | closed | fixed | Modifying user name makes you semi-log-out |
If you modify your user name, it looks like you are logged out, but you are actually logged in and therefore can't login. (Reported by Pablo) As a work around, you need to logout and log back in. implementation
|
1323100214000000 | 1342781122000000 |