ticket,summary,component,version,milestone,type,owner,status,created,_changetime,_description,_reporter 2430,Look into marking tickets as dependent on other tickets in trac,ckan,,ckan-v1.9,enhancement,seanh,accepted,2012-05-25T11:58:06Z,2012-07-02T13:05:46Z,,seanh 2431,Trac git integration,ckan,,ckan-v1.9,enhancement,seanh,accepted,2012-05-25T11:58:48Z,2012-07-02T13:06:02Z,,seanh 2466,Fix spam handling on trac,ckan,,ckan-v1.9,task,seanh,accepted,2012-05-28T13:51:43Z,2012-07-02T13:08:59Z,,seanh 2357,Create build script for front-end resources,ckan,,demo phase 5,enhancement,aron.carroll,accepted,2012-05-01T15:29:41Z,2012-07-25T12:48:44Z,Should minify and concatenate JavaScript and CSS as part of #2354,aron.carroll 2341,Fix Jenkins issue when testing branches that contain model changes,ckan,,ckan-v1.9,enhancement,seanh,accepted,2012-05-01T12:46:36Z,2012-06-25T15:51:12Z,,seanh 2342,Fix Jenkins issue when testing branches with different solr schema versions,ckan,,ckan-v1.9,enhancement,seanh,accepted,2012-05-01T12:47:25Z,2012-06-25T15:51:34Z,,seanh 2336,Move Jenkins' install script into ckan core so it can be versioned,ckan,,ckanbuild,enhancement,seanh,accepted,2012-04-30T13:35:14Z,2012-06-25T15:53:57Z,,seanh 2416,Normalise resource/data types,ckan,,demo phase 5,enhancement,toby,accepted,2012-05-23T17:09:06Z,2012-07-18T13:23:22Z,"Currently we have far too many types that are essentially the same format. The new demo theme is using icons for common types. So we need to normalise the common formats into pretty strings. e.g. application/json, JSON, .json and json all should be output as “json” See the following Basecamp thread for UI examples and discussion. https://okfn.basecamphq.com/projects/9558659-demo-ckan-front-end/posts/61906351/comments#comment_179681056",aron.carroll 2493,Demo site 404 needs some love,ckan,,demo phase 5,enhancement,aron.carroll,accepted,2012-06-06T12:34:41Z,2012-07-24T13:16:55Z,"templates/error_document_template.html I've converted the 404 page to the new style but we probably want to serve this as a 'full page' ie content is 100% page width not sidebar and primary content just go to a non-existant url to see Discusion: https://okfn.basecamphq.com/projects/9558659-demo-ckan-front-end/posts/63374042/ Implementation: http://s031.okserver.org:2375/404",toby 3021,Logout doesn't work without JS,ckan,,,enhancement,johnmartin,accepted,2012-11-20T11:19:10Z,2012-11-20T11:46:08Z,"Essentially, the functionality should be as follows: - Add logout link that has `.js-hide` attached to it within the header that isn't hidden within a dropdown See http://plus.google.com/ (when logged in) with and without JS to see an example of the actual sign-out working without JS",johnmartin 1785,Replace 'Revisions' page with site-wide activity stream,ckan,,ckan-v1.9,enhancement,seanh,accepted,2012-02-07T16:34:18Z,2012-06-26T15:25:12Z,Replace the /revision page with a /activity page showing a site-wide activity stream of all activities in the site. Or perhaps the site-wide activity stream can go somewhere on the front page of the site instead?,seanh 2475,Upgrade trac.ckan.org to trac 0.12.3,ckan,,ckan-v1.9,enhancement,seanh,accepted,2012-05-29T18:46:16Z,2012-07-02T13:09:24Z,"This is not trivial, requires a database upgrade. But 0.12.3 has some nice new features (multiple vcs repository support, ticket comment editing and nicer preview) and the latest spam filter plugin requires 0.12. http://trac.edgewall.org/wiki/ChangeLog",seanh 2477,Add extensions section to readthedocs,ckan,,ckan-v1.9,enhancement,seanh,accepted,2012-05-30T15:54:04Z,2012-07-24T10:02:03Z,Need a central up to date place for currently supported extensions (closest we have is http://wiki.ckan.org/List_of_Extensions) & their documentation. I suggest this gets added to a dedicated section of docs.ckan.org,shevski 2478,Get NeverNotifyUpdaterPlugin installed on trac.ckan.org,ckan,,ckan-v1.9,enhancement,seanh,accepted,2012-05-30T16:52:14Z,2012-07-02T13:09:51Z,,seanh 2516,Make 'Assign to:' field on trac.ckan.org into a dropdown list,ckan,,ckan-v1.9,enhancement,seanh,accepted,2012-06-13T09:07:22Z,2012-07-02T13:13:42Z,there's a setting for this,seanh 2537,Test and document ckanbuild,ckan,,ckanbuild,enhancement,seanh,accepted,2012-06-15T15:48:48Z,2012-06-25T15:57:10Z,"https://github.com/okfn/ckanbuild Verify that what's there so far still works, write a README explaining how it works",seanh 2538,Add multiple-instance support to ckanbuild,ckan,,ckanbuild,enhancement,seanh,accepted,2012-06-15T15:51:39Z,2012-06-25T15:57:16Z,"Probably use ansible to do this. To create an instance, create a dir at /etc/ckan/MYSITE, and put MYSITE.wsgi, MYSITE.ini and who.ini files in it. Also put a MYSITE file in /etc/apache2/sites-available. See the example files already present in ckanbuild. Booting a new site should be a single command. May not handle the postgres/solr/elastic-search side of things yet, could just require the user to set these up herself first and then pass them as args to the create-instance command.",seanh 2539,Investigate the existing ckan debian package for ckanbuild,ckan,,ckanbuild,enhancement,seanh,accepted,2012-06-15T15:54:21Z,2012-06-25T15:57:25Z,Do we want to build on top of the existing debian packaging code? Or throw it away and start fresh?,seanh 2540,Implement a way of upgrading ckan sites using ckanbuild,ckan,,ckanbuild,enhancement,seanh,accepted,2012-06-15T15:55:40Z,2012-06-25T15:57:30Z,"When there are multiple ckan sites installed on a single server via ckanbuild, there needs to be some way of upgrading them all to a new ckan version at once.",seanh 2541,Add non-core extensions to ckanbuild,ckan,,ckanbuild,enhancement,seanh,accepted,2012-06-15T15:57:06Z,2012-06-25T15:57:36Z,We want some extensions from outside of CKAN core to be included in ckanbuild. These would be pip installed into the virtualenv before packaging the debian package. Decide which extensions to include.,seanh 2542,"Create jenkins job to run ckanbuild, and run tests",ckan,,ckanbuild,enhancement,seanh,accepted,2012-06-15T15:58:08Z,2012-06-25T15:57:43Z,"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.",seanh 2362,"Improve plugin documentaion, including examples.",ckan,,ckan-v1.9,enhancement,toby,accepted,2012-05-01T16:13:11Z,2012-07-12T09:30:20Z,Improve documentation for plugins and add examples. Could use ckanext-example as a base.,kindly 2859,Fix the build,ckan,,ckan-v1.8,defect,icmurray,new,2012-08-16T09:26:57Z,2012-08-16T09:26:57Z,"The requires files have been removed. These were required by buildkit. We've lost the information regarding which packages were already in ubuntu repos, which conflicted and which were missing. But perhaps we can just package everything up.",icmurray 2582,Do not hide notes / readme on dataset pages,ckan,,ckan-v1.9,enhancement,,new,2012-06-21T20:59:00Z,2012-06-25T11:50:09Z,"Current we hide most of readme and then let users reveal it. Stop doing this and if necessary add a quick link down to resources section. (Maybe also rename resources to Data and Resources ...?) Aside: believe I have mentioned this somewhere a month + ago but could not find the ticket.",rgrp 1198,Publisher hierarchy,ckan,,ckan-backlog,enhancement,,new,2011-06-23T09:16:32Z,2012-06-15T15:30:00Z,"'Publisher' entities in the model. They are hierarchical. 'User-Publisher' connections with one or more roles (e.g. drafter, moderator). Authorization settings can control who can set what values in a 'published by' type field. Publishers and User-Publishers available to read in the API. Future tickets will provide: * API to write Publishers and User-Publishers * UI to edit Publishers and User-Publishers (This feature deprecates authorization groups)",dread 1466,Need to support https login for multiple instances as part of the CKAN package install,ckan,,ckan-backlog,enhancement,,new,2011-11-15T16:52:58Z,2012-02-06T11:51:02Z,,thejimmyg 2751,check translations for full demo site,ckan,,demo phase 5,enhancement,toby,new,2012-07-25T11:40:43Z,2012-08-06T08:50:46Z,need to check everything gets translated - sean did this before so will have info,toby 2949,Reenable Data API button on the new theme,ckan,,,defect,amercader,new,2012-10-01T16:04:24Z,2012-10-01T16:04:24Z,The checks to show or not the button need to be updated for the latest datastore version,amercader 2635,Non-destructive SOLR reindex,ckan,,,enhancement,,new,2012-07-09T10:23:14Z,2012-07-09T10:23:14Z,"You can't run the search-index reindex on a live server because it will give us bad results for 2 to 3 hours while it runs. Can there be an option that doesn't delete the entire index at the start? Instead it could just delete any items that don't exist any more, then delete them and regenerate them one by one. So the total number of datasets doesn't change much.",dread 3019,Cannot delete dataset extras,ckan,,ckan 2.0,defect,,new,2012-11-14T18:44:38Z,2012-11-14T18:44:38Z,Deleting extras in the web interface is broken,seanh 3011,Recline fixes and updates for CKAN 2.0,ckan,,ckan 2.0,enhancement,johnglover,new,2012-11-07T11:40:55Z,2012-11-07T11:40:55Z,Fixes and updates to Recline / Datapreview for CKAN 2.0.,johnglover 3017,New stable branch for the demo server,ckan,,ckan 2.0,enhancement,johnglover,new,2012-11-13T15:04:48Z,2012-11-13T15:04:48Z,,johnglover 1134,CREP0003: Description and Configuration of Harvesters,ckan,,ckan-backlog,CREP,,new,2011-05-11T10:14:28Z,2012-06-15T15:35:54Z,"'''Proposer''': Adrià Mercader == Abstract == The new harvester interface allows to create harvesters for different sources, but right now harvesters don't have many ways to describe and configure themselves. We need a way of allowing them to: * Expose their type and other details so they can be used internally and on the UI. * Define configuration settings for particular harvester instances. == The Problem == === Harvester description === The current UI for adding and editing harvest sources is the same used in ckanext-dgu, and thus the 3 harvester types used in DGU to harvest various GEMINI realted sources are hardcoded in the form. The form will be migrated to a DGU-independent one, so we need the harvesters to provide all the necessary data. There is a current {{{get_type}}} method that returns the harvester type, but for make it compatible with the DGU forms, it returns a machine-readable string (e.g. ""CSW Server""), making it error prone. === Arbitrary configuration === In the current implementation, when the harvest process is started, ckanext-harvest looks for all the available plugins that implement the {{{IHarvester}}} interface and calls the appropiate methods for the current stage ({{{gather_stage}}},{{{fetch_stage}}},{{{import_stage}}}). At these stages, harvesters have no way of applying arbitrary configuration options, so all harvesters of the same type behave on the same way. For instance, the CKAN harvester needs a way to define the API version to use when harvesting remote instances (Right now, the version 2 is hardcoded on the code). == Specification == === Harvester description === Harvesters will need to provide the following information so the UI form can be built: * name: machine-readable name (e.g. ""waf""). This will be the value stored in the database, and the one used by ckanext-harvest to call the appropiate harvester. * title: human-readable name (e.g. ""Web Accessible Folder (WAF)""). This will appear in the form's select box. * description: a description of what the harvester does (e.g. ""A Web Accessible Folder (WAF) displaying a list of GEMINI 2.1 documents""). This will appear on the form as a guidance to the user. The way to provide it will be an {{{info}}} method that all harvesters must implement, which will return a dictionary with the previous elements: {{{ { 'name': 'csw', 'title': 'CSW Server', 'description': 'A server that implements OGC's Catalog Service for the Web (CSW) standard' } }}} === Arbitrary configuration === As different harvesters will have very different needs, we need to provide a way to persist arbitrary configuration flags for each harvest source. The more flexible way given the current architecture in my opinion would be to store the configuration options as a JSON encoded object as a property of the harvest source (There already is an unused DB field called {{{config}}} in the database) (Maybe using JsonType?). This will mean adding an extra field in the harvest source form to allow entering the configuration. This could be just a simple text field where users enter the JSON encoded object or a more clever mechanism (i.e an ""Add a configuration flag"" link that adds two new text fields for the key and value for each flag, and a mechanism to later build the JSON object). In any case, this should probably be hidden in an ""Advance options"" section. == Why do it this way == === Harvester description === The {{{info}}} method would provide a single point to get all the information related to the harvester, and future properties could be added to the dictionary returned without having to modify the interface. === Arbitrary configuration === There is an already existing {{{config}}} field in the database, so we won't need to change the model. Harvesters could access the config object at any of the stages. Of course they could provide default values in their implementations so users don't need to enter them everytime. == Implementation plan == === Deliverables === === Risks and mitigations === The highest risk on the harvesters {{{info}}} method side is that harvester implementation don't offer one of the necessary properties (namely name and title). This could fire a warning when showing the UI form or using the CLI. === Participants === Adrià Mercader to do it. === Progress === None yet.",amercader 1577,Can't upload file with foreign chars in filename,ckan,,ckan-backlog,defect,rgrp,new,2011-12-19T18:00:59Z,2012-01-02T03:06:04Z,"Looks like uploading a file with foreign characters fails due to encoding reasons. {{{ URL: http://thedatahub.org/api/storage/auth/form/2011-12-19T124447/Ministerstvo-financ%C3%AD-%C4%8Cesk%C3%A9-republiky-_-P%C5%99%C3%ADprava-rozpo%C4%8Dtu.pdf 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:123 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 ckanext.storage.controller:2 in auth_form Module ckan.lib.jsonp:26 in jsonpify << Very much modelled after pylons.decorators.jsonify . """""" data = func(*args, **kwargs) return to_jsonp(data) >> data = func(*args, **kwargs) Module ckanext.storage.controller:301 in auth_form << method = 'POST' authorize(method, bucket, label, c.userobj, self.ofs) data = self._get_form_data(label) return data >> authorize(method, bucket, label, c.userobj, self.ofs) Module ckanext.storage.controller:79 in authorize << if method != 'GET': # do not allow overwriting if ofs.exists(bucket, key): abort(409) # now check user stuff >> if ofs.exists(bucket, key): Module ofs.remote.botostore:53 in exists << if bucket is None: return False return (label is None) or (label in bucket) def claim_bucket(self, bucket): >> return (label is None) or (label in bucket) Module boto.s3.bucket:87 in __contains__ << def __contains__(self, key_name): return not (self.get_key(key_name) is None) def startElement(self, name, attrs, connection): >> return not (self.get_key(key_name) is None) Module boto.s3.bucket:144 in get_key << response = self.connection.make_request('HEAD', self.name, key_name, headers=headers, query_args=query_args) # Allow any success status (2xx) - for example this lets us # support Range gets, which return status 206: >> query_args=query_args) Module boto.s3.connection:388 in make_request << if isinstance(key, Key): key = key.name path = self.calling_format.build_path_base(bucket, key) boto.log.debug('path=%s' % path) auth_path = self.calling_format.build_auth_path(bucket, key) >> path = self.calling_format.build_path_base(bucket, key) Module boto.s3.connection:88 in build_path_base << def build_path_base(self, bucket, key=''): return '/%s' % urllib.quote(key) class SubdomainCallingFormat(_CallingFormat): >> return '/%s' % urllib.quote(key) Module urllib:1222 in quote << safe_map[c] = (c in safe) and c or ('%%%02X' % i) _safemaps[cachekey] = safe_map res = map(safe_map.__getitem__, s) return ''.join(res) >> res = map(safe_map.__getitem__, s) KeyError: u'\xed' CGI Variables AUTH_TYPE 'cookie' CONTENT_TYPE '; charset=utf-8' DOCUMENT_ROOT '/htdocs' GATEWAY_INTERFACE 'CGI/1.1' HTTP_ACCEPT '*/*' HTTP_ACCEPT_CHARSET 'ISO-8859-1,utf-8;q=0.7,*;q=0.3' HTTP_ACCEPT_ENCODING 'gzip,deflate,sdch' HTTP_ACCEPT_LANGUAGE 'en-US,en;q=0.8' HTTP_CACHE_CONTROL 'max-age=259200' HTTP_CONNECTION 'keep-alive' HTTP_COOKIE 'thedatahub_net=27a7f095fcca1ea6b36df996d595e3278b16f4538862bf7f88d49e2000b9246547c8fd0e; auth_tkt=""f9c6ab2b0d9fcd71c4c2408bc12fab544eef1c45elenaibp!userid_type:unicode""; auth_tkt=""f9c6ab2b0d9fcd71c4c2408bc12fab544eef1c45elenaibp!userid_type:unicode""; ckan_user=elenaibp; ckan_display_name=""Elena Mondo""; ckan_apikey=decd48b1-49ee-4250-bff4-98ccca9c02a5; hide_welcome_message=1; __utma=119670349.1809834699.1323782464.1324293066.1324298316.4; __utmb=119670349.3.10.1324298316; __utmc=119670349; __utmz=119670349.1323782464.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)' HTTP_HOST 'thedatahub.org' HTTP_REFERER 'http://thedatahub.org/dataset/edit/budget-library-czeck-republic' HTTP_USER_AGENT 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7' HTTP_VIA '1.1 localhost (squid/3.0.STABLE19)' HTTP_X_FORWARDED_FOR '87.114.74.190' HTTP_X_REQUESTED_WITH 'XMLHttpRequest' PATH '/usr/local/bin:/usr/bin:/bin' PATH_INFO '/api/storage/auth/form/2011-12-19T124447/Ministerstvo-financ\xc3\xad-\xc4\x8cesk\xc3\xa9-republiky-_-P\xc5\x99\xc3\xadprava-rozpo\xc4\x8dtu.pdf' PATH_TRANSLATED '/home/okfn/var/srvc/ckan.net/pyenv/bin/ckan.net.py/api/storage/auth/form/2011-12-19T124447/Ministerstvo-financ\xc3\xad-\xc4\x8cesk\xc3\xa9-republiky-_-P\xc5\x99\xc3\xadprava-rozpo\xc4\x8dtu.pdf' REMOTE_ADDR '193.34.146.142' REMOTE_PORT '55419' REMOTE_USER u'elenaibp' REMOTE_USER_DATA 'userid_type:unicode' REMOTE_USER_TOKENS [''] REQUEST_METHOD 'GET' REQUEST_URI '/api/storage/auth/form/2011-12-19T124447/Ministerstvo-financ%C3%AD-%C4%8Cesk%C3%A9-republiky-_-P%C5%99%C3%ADprava-rozpo%C4%8Dtu.pdf' SCRIPT_FILENAME '/home/okfn/var/srvc/ckan.net/pyenv/bin/ckan.net.py' SCRIPT_URI 'http://thedatahub.org/api/storage/auth/form/2011-12-19T124447/Ministerstvo-financ\xc3\xad-\xc4\x8cesk\xc3\xa9-republiky-_-P\xc5\x99\xc3\xadprava-rozpo\xc4\x8dtu.pdf' SCRIPT_URL '/api/storage/auth/form/2011-12-19T124447/Ministerstvo-financ\xc3\xad-\xc4\x8cesk\xc3\xa9-republiky-_-P\xc5\x99\xc3\xadprava-rozpo\xc4\x8dtu.pdf' SERVER_ADDR '193.34.146.146' SERVER_ADMIN '[no address given]' SERVER_NAME 'thedatahub.org' SERVER_PORT '80' SERVER_PROTOCOL 'HTTP/1.0' SERVER_SIGNATURE '
Apache/2.2.14 (Ubuntu) Server at thedatahub.org Port 80\n' SERVER_SOFTWARE 'Apache/2.2.14 (Ubuntu)' WSGI Variables application tag.
Creating the package edit form: placed into