{22} Trac tickets (2647 matches)

Results (2101 - 2200 of 2647)

Id Type Owner Reporter Milestone Status Resolution Summary Description Posixtime Modifiedtime
#2312 enhancement ross ross ckan-future closed duplicate Analysis of how datasets could belong to users instead of Groups

DUPLICATE OF #2548

Currently datasets can only be part of a group but that is quite heavyweight when a single user wants to upload a single dataset. To resolve this it would be great if a dataset could be attached to a user directly - find out how.

1334663770000000 1340188765000000
#2322 enhancement ross rgrp ckan-sprint-2012-05-29 closed fixed Convenience offset on end of resource urls: /raw, /api, /viewer

Raw

/raw or /download (latter may be better)

/dataset/{id}/resource/{resource-id}/raw

=> redirects to resource url (download)

API

/dataset/{id}/resource/{resource-id}/api[/....]

=> either redirects or directly serves /api/data/{resource-id}

Viewer (Explorer?)

Do data viewer but without anything else showing (full-screen?). this would not be just the data explorer but other cases too (including iframe etc ...)

/dataset/{id}/resource/{resource-id}/viewer

Resource (pre)-viewer without anything else (perhaps include resource title)

Assigning for kindly for review.

These would take about 20m to implement and would be *very* convenient from my experience of using the data API.


Implementation at enhancement-2322-convenience-urls

1335236581000000 1344086640000000
#2323 enhancement ross ross ckan-backlog closed fixed Auto-complete in organizations

Apparently auto-complete in Organizations may not work. Check and fix.

See https://github.com/okfn/ckan/commit/5eca7d5e37c0ef392b768b8b3768b2c3f93448b5

1335274354000000 1340188400000000
#2349 enhancement ross ross ckan-sprint-2012-06-25 closed fixed Make sure semantic.datahub.io gets created

[x] Redeploy Sparql endpoint

Done at linkeddata.openlinksw.com/sparql

[x] Make sure it is available at datahub.io/sparql or semantic.datahub.io/sparql

[x] Generate daily dumps

[x] Make dumps available via web

[x] Notify Hugh once running

[x] Announce to LD guys

[x] Think about how we can apply this to publicdata.eu (can we do the same?) ... (being done elsewhere)

1335880412000000 1340356629000000
#2353 enhancement ross ross ckan-sprint-2012-05-15 closed fixed Provisional user stories for CMS + Blogging

Provide some provisional user stories for the CMS/Blogging feature. Should include some of the functionality from wordpresser but be more generic.

1335884700000000 1336566004000000
#2364 enhancement ross ross ckan-sprint-2012-05-15 closed fixed Investigation of payment gateways

Need to investigate alternative payment gateways

1335889757000000 1337077531000000
#2365 enhancement ross ross ckan-sprint-2012-06-25 closed fixed Investigation of multisite

What would as a multisite CKAN look like?

This is really part of the work around turnkey/hosted CKAN

1335889911000000 1340266964000000
#2366 enhancement ross amercader ckan-sprint-2012-06-25 closed fixed Remove Authorization Groups

1.7 will hide the link on the footer and put a deprecation notice on the related pages, but they should be completely removed on 1.8.

1335892563000000 1346316322000000
#2374 enhancement ross dread ckan-v1.8 closed worksforme tag search paging

Currently in the logic function tag_search you can specify limit and offset, but no count is returned. Therefore pagination is not possible for tag results. This is desired though.

1336154025000000 1340287976000000
#2379 enhancement ross ross ckan-sprint-2012-06-25 closed fixed RDF output, api/sparql

From: Pierre-Yves Vandenbussche

In my use case I need to fetch every sparql endpoint associated to a dataset. With the previous version of your endpoint, I was doing this query: SELECT DISTINCT ?dataset ?endpoint ?title ?identifier WHERE {

?dataset <http://www.w3.org/ns/dcat#distribution> ?distribution. ?distribution <http://purl.org/dc/terms/format> [ <http://moat-project.org/ns#taggedWithTag> [ <http://moat-project.org/ns#name> "api/sparql" ] ]. ?distribution <http://www.w3.org/ns/dcat#accessURL> ?endpoint. ?dataset <http://purl.org/dc/terms/title> ?title. ?dataset <http://purl.org/dc/terms/identifier> ?identifier.

} ORDER BY ?title

Using your new version,dcterms:title of a dataset is now a rdfs:label ... OK

Unfortunately, I don't have the information of "api/sparql" anymore. So I can not differentiate between a dump file and a SPARQL endpoint...

Add the required information to the RDF template.

1336735947000000 1340033026000000
#2380 enhancement ross ross opendatasuite 1 closed duplicate DataGM Upgrade

Provide a new test install of DataGM based on the ODS demo site being completed through June.

1337002144000000 1340627558000000
#2381 enhancement ross ross ckan-v1.8 closed fixed Related item count on ALL dataset pages

Make sure the related item count is available on all dataset pages (inc. follow) when it is enabled.

1337009133000000 1337011327000000
#2385 enhancement ross ross ckan-sprint-2012-05-29 closed fixed Specifying capacity in search api call

Currently you can specify the capacity in the API search, this should be stripped and default to public for now.

1337092899000000 1337102816000000
#2409 enhancement ross markw ckan-sprint-2012-05-29 closed fixed Accept headers not handled correctly

CKAN returns HTML when an Accept header should make it return RDF/XML:

http://lists.okfn.org/pipermail/ckan-dev/2012-May/002237.html

1337683898000000 1337856979000000
#2410 enhancement ross ross ckan-sprint-2012-05-29 closed wontfix New RDF serialization required VOID vocab for related datasets

Taken from http://lists.okfn.org/pipermail/ckan-dev/2012-May/002218.html


A few months ago, the RDF provided when dereferencing a dataset's URI was very useful. It described the datasets using many of the "right" RDF vocabularies (dcterms, void, etc).

The RDF that is returned now no longer has these nice descriptions. Instead, it seems to be a mindless transcription of the CKAN record.

For example, the older descriptions gave:

<http://thedatahub.org/dataset/farmers-markets-geographic-data-united-states>

void:subset [

void:target <http://thedatahub.org/dataset/farmers-markets-geographic-data-united-states>, <http://thedatahub.org/dataset/geonames-semantic-web> ; void:triples 50 ; a void:Linkset

], [

void:target <http://thedatahub.org/dataset/dbpedia>, <http://thedatahub.org/dataset/farmers-markets-geographic-data-united-states> ; void:triples 52 ; a void:Linkset

], [

void:target <http://thedatahub.org/dataset/farmers-markets-geographic-data-united-states>, <http://thedatahub.org/dataset/govtrack> ; void:triples 52 ; a void:Linkset

] ; void:triples 130005 ;

but now it's simply:

<http://thedatahub.org/dataset/farmers-markets-geographic-data-united-states>

dct:relation [

rdf:value "130005" ; rdfs:label "triples"

], [

rdf:value "52" ; rdfs:label "links:dbpedia"

], [

rdf:value "50" ; rdfs:label "links:geonames-semantic-web"

], [

rdf:value "52" ; rdfs:label "links:govtrack"

] ;

My old copies of the dataset descriptions mentioned a "GoLD CKAN 1.0" that was credited for the nicer modeling.

Where did that go? Can we get it back?

Thanks, Tim Lebo

<http://semantic.ckan.net/record/91d2c0de-75a4-4bb6-b260-bc2946e1be8b>

dc:source <http://ckan.net/> ; opmv:wasGeneratedBy [

opmv:used <http://ckan.net/api/rest/package/farmers-markets-geographic-data-united-states>, <http://ckan.net/api/rest/revision/9c2545b8-ebf1-42bf-ac92-633ff5ceba3f> ; opmv:wasControlledBy [

a foaf:Agent ; foaf:name "GoLD CKAN 1.0"

] ; opmv:wasPerformedAt [

a time:Instant ; time:inXSDDateTime "2012-01-31T05:34:32Z"^^xsd:dateTime

] ; a opmv:Process

] ; a dcat:CatalogRecord ; dcat:dataset <http://thedatahub.org/dataset/farmers-markets-geographic-data-united-states> ;

1337684531000000 1338193633000000
#2413 enhancement ross ross ckan-sprint-2012-05-29 closed fixed Replace/Fork autoneg

Take revelvant parts of autoneg ( https://github.com/wwaites/autoneg.git ) so that we can remove the dependency (just for two functions) and thereby remove flup as well.

1337761125000000 1337766546000000
#2414 enhancement ross ross ckan-sprint-2012-06-25 closed fixed Remove LXML as a dependency on core CKAN

Core CKAN currently has a dependency on LXML and it would be nice if we could remove it (although this *may* be indirectly through genshi).

1337761192000000 1338471374000000
#2423 enhancement ross seanh ckan-sprint-2012-05-29 closed duplicate Get rid of CKAN's lxml dependency 1337946234000000 1338193199000000
#2424 enhancement ross seanh ckan-sprint-2012-05-29 closed duplicate Get rid of CKAN's autoneg dependency 1337946279000000 1338193269000000
#2500 defect ross icmurray ckan-v1.8 closed fixed get_action should raise an exception if the action requested doesn't exist

Original bug report:

Hi CKAN devs,

Can I request that ckan.logic.get_action raises an exception if the action requested doesn't exist?

Two of us had a frustrating time tracking down an exception this morning. It's difficult when the exception is raised in python in a template because you don't get a line number. The problem was caused by a new logic function being added to another extension, and we hadn't updated the code there. So if get_action raised an proper exception rather than silently returning None then I think we'd have found the problem quicker.

I'd write the code for this, but as I understand that the new system would require a ticket, branch, pull request, code review, merge. It seems a lot to do for such a small thing.

Dave

1339072580000000 1340293636000000
#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
#2515 enhancement ross seanh closed fixed Related tab doesn't look selected when selected

The related tab on the dataset page doesn't change its appearance when selected like the other tabs do

1339578247000000 1340967971000000
#2519 enhancement ross ross ckan-v1.9 closed fixed Dataproxy (converters) enhancement

Whilst the error messages returned from the dataproxy are informative, they aren't particularly human readable. It isn't clear to the user whether they should retry, or whether the format of their data is causing the problem etc...

Would be lovely if the error messages returned contained a human readable version of the error.

1339584955000000 1345565215000000
#2545 requirement ross ross opendatasuite 1 closed fixed Need to build DataGM site based on ODS

Requirements

We need to clone the demo ODS site for DataGM as soon as we have a mostly working demo so that the DataGM team can try it out and comment/feedback on functionality.

Interface

None

User Stories

None

Tasks

[ ] Deploy demo DataGM site.

Estimates

1340016640000000 1344337973000000
#2549 enhancement ross ross ckan 2.0 closed wontfix Merge organization logic into groups

Requirements

Merge the organizations plugin into the core groups functionality. Most of this is templating and a small number of changes to the group controller.

Investigate the possibility of removing the Membership model and using FKs.

Interface

This is likely to consist of:

  • Updating the templates in templates/group/
  • Configuring whether we want to constrain datasets to a single group (as per organizations)
  • Implementing the separate user management (add users to group).
  • Checking the publisher auth to not necessarily rely on group type = 'organization'
  • Making sure that the changes still work with publisher auth.

User Stories

None

Tasks

[ ] Code

[ ] Configuration

[ ] Model/Migration?

[ ] Fix templates

[ ] Documentation

Estimates

1340017421000000 1350562037000000
#2577 enhancement ross ross ckan-v1.9 closed fixed Dataproxy raises 500 when it can't get CSV

When given a url parameter for a file it cannot fetch, the app raises a 500 instead of something useful.

Better error reporting in the JSON would be useful

1340207124000000 1346669735000000
#2601 defect ross seanh closed fixed 500 Server Error when editing datasets with organizations plugins enabled

Add the organizations and organizations_dataset plugins to ini file, run ckan, login, create an organization, create a dataset and put in organization, edit the dataset and set organization to none, try to edit the dataset again (you must be sysadmin to do this) and get a 500:

Error - <class 'genshi.template.eval.UndefinedError'>: [] has no member named "get"
URL: http://127.0.0.1:5000/dataset/edit/fooset
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/weberror/errormiddleware.py', line 162 in __call__
  app_iter = self.application(environ, sr_checker)
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/beaker/middleware.py', line 73 in __call__
  return self.app(environ, start_response)
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/beaker/middleware.py', line 155 in __call__
  return self.wrap_app(environ, session_start_response)
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/routes/middleware.py', line 130 in __call__
  response = self.app(environ, start_response)
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/pylons/wsgiapp.py', line 125 in __call__
  response = self.dispatch(controller, environ, start_response)
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/pylons/wsgiapp.py', line 324 in dispatch
  return controller(environ, start_response)
File '/home/seanh/Projects/ckan/ckan/ckan/lib/base.py', line 221 in __call__
  res = WSGIController.__call__(self, environ, start_response)
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/pylons/controllers/core.py', line 221 in __call__
  response = self._dispatch_call()
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/pylons/controllers/core.py', line 172 in _dispatch_call
  response = self._inspect_call(func)
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/pylons/controllers/core.py', line 107 in _inspect_call
  result = self._perform_call(func, args)
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/pylons/controllers/core.py', line 60 in _perform_call
  return func(**args)
File '/home/seanh/Projects/ckan/ckan/ckan/controllers/package.py', line 499 in edit
  extra_vars=vars)
File '/home/seanh/Projects/ckan/ckan/ckan/lib/base.py', line 148 in render
  return cached_template(template_name, render_template, loader_class=loader_class)
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/pylons/templating.py', line 249 in cached_template
  return render_func()
File '/home/seanh/Projects/ckan/ckan/ckan/lib/base.py', line 101 in render_template
  return literal(stream.render(method=method, encoding=None, strip_whitespace=True))
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/genshi/core.py', line 183 in render
  return encode(generator, method=method, encoding=encoding, out=out)
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/genshi/output.py', line 57 in encode
  return _encode(''.join(list(iterator)))
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/genshi/output.py', line 339 in __call__
  for kind, data, pos in stream:
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/genshi/output.py', line 670 in __call__
  for kind, data, pos in stream:
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/genshi/output.py', line 771 in __call__
  for kind, data, pos in chain(stream, [(None, None, None)]):
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/genshi/output.py', line 586 in __call__
  for ev in stream:
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/genshi/core.py', line 288 in _ensure
  for event in stream:
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/genshi/template/base.py', line 605 in _include
  for event in stream:
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/genshi/template/markup.py', line 327 in _match
  for event in stream:
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/genshi/template/base.py', line 545 in _flatten
  for kind, data, pos in stream:
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/genshi/template/directives.py', line 169 in _generate
  attrs = _eval_expr(self.expr, ctxt, vars)
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/genshi/template/base.py', line 277 in _eval_expr
  retval = expr.evaluate(ctxt)
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/genshi/template/eval.py', line 178 in evaluate
  return eval(self.code, _globals, {'__data__': data})
File '/home/seanh/Projects/ckan/ckan/ckanext/organizations/templates/organization_package_form.html', line 110 in <Expression u"{'selected':'selected'} if organization.get('id','') == group['id'] else {}">
  <option value="${group['id']}" py:attrs="{'selected':'selected'} if organization.get('id','') == group['id'] else {}">${group['title']}</option>
File '/home/seanh/Projects/ckan/ckan/ckan/config/environment.py', line 248 in genshi_lookup_attr
  val = cls.undefined(key, owner=obj)
File '/home/seanh/.virtualenvs/ckan/local/lib/python2.7/site-packages/genshi/template/eval.py', line 410 in undefined
  raise UndefinedError(key, owner=owner)
UndefinedError: [] has no member named "get"
1340722754000000 1341291379000000
#2605 enhancement ross ross ckan-v1.8 closed fixed Problem with user.get_groups

From DR at DGU

Basically get_groups() appears to cache its results, but this falls down when subsequent calls are in a different session. We get this when saving a dataset. get_groups() first gets called in the controller when it is trying to work out what permissions the user has. It later gets called, and by this time c.userobj is detached, so get_groups() fails.

I'm working around this by refreshing c.userobj (from c.user) before calling get_groups(), but I wonder if the get_groups caching could detect the detached session and bypass the cache in this case?

diff at https://gist.github.com/3003117

1340793006000000 1343127369000000
#2623 enhancement ross seanh closed invalid Organization join/authorization buttons weirdness

Enable the organizations and organizations_dataset plugins. Start CKAN. Login and create a new organization. Logout. Login with a different account that is a sysadmin. Go to the organization you just created with the other account. There are Edit and Join buttons. Click on the Edit button, and the Join button changes to Authorization.

It should probably be an Authorization button right from the start if you are a sysadmin.

1341220902000000 1341232433000000
#2624 enhancement ross seanh ckan-v1.8 closed fixed Organizations breaks dataset tag editing

Enable the organizations and organizations_dataset plugins, login to ckan, create a group, create a dataset and add it to the group. Edit the dataset, add some tags to it. The new tags are not saved when you submit.

Disable the organizations and organizations_dataset plugins and tag editing works again.

1341226411000000 1341831716000000
#2649 enhancement ross ross ckan-v1.8 closed fixed Description on resources not rendered as markdown

When a resource doesn't have a description, it is rendered as markdown from the description of the dataset.

If the resource does have a description it isn't rendered as markdown ..

See http://thedatahub.org/dataset/wikipedia-e3-timestamp-position-modification/resource/d883ab44-07f4-4992-800a-3e4bf5d53a96

1341923135000000 1342084280000000
#2650 enhancement ross ross ckan-v1.8 closed fixed Description on resources not rendered as markdown

When a resource doesn't have a description, it is rendered as markdown from the description of the dataset.

If the resource does have a description it isn't rendered as markdown ..

See http://thedatahub.org/dataset/wikipedia-e3-timestamp-position-modification/resource/d883ab44-07f4-4992-800a-3e4bf5d53a96

1341923137000000 1341943716000000
#2668 defect ross dread ckan-v1.9 closed fixed Permission for sysadmin to read a deleted publisher

As a sysadmin I should be able to view deleted groups/publishers (publisher profile) but I can't.

In addition, there don't seem to be tests for permissions of deleted publishers.

1342171453000000 1345565100000000
#2670 defect ross dread ckan-v1.8 closed fixed model.Group.get_children_groups returns deleted groups

I believe it should only return active ones. On DGU we see deleted publishers popping up.

1342175117000000 1342440953000000
#2736 enhancement ross ross ckan-v1.9 closed wontfix Archiver fixes

We need to check the archiver to make sure it works as we would expect after the changes in #2732:

  • Receive notification of a file that needs processing
  • Check the file's DB entry and upload the file to the configured remote service
  • Update the URL of the file (both in the file's DB entry and the resource)
  • Once we're sure the file is safely archived, we should mark the file as being archived

so that we know it can safely be deleted at some point.

Maybe this could/should be implemented as a service rather than a celery task?

1343121237000000 1346670097000000
#2865 enhancement ross ross closed fixed 1.8 unicode error

URL: http://thedatahub.org/el/tag/jutatt%C3%A1sok 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:155 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:131 in call << r'\1', oldpath)

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:239 in call << try:

res = WSGIController.call(self, environ, start_response)

finally:

model.Session.remove()

res = 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.environpylons.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.template:30 in view << """

try:

return render(url)

except TemplateNotFound?:

if url.endswith('.html'):

return render(url)

Module ckan.lib.base:153 in render << try:

return cached_template(template_name, render_template,

loader_class=loader_class)

except ckan.exceptions.CkanUrlException?, e:

raise

loader_class=loader_class)

Module pylons.templating:249 in cached_template << return content

else:

return render_func()

return render_func()

Module ckan.lib.base:95 in render_template << template = globsapp_globals?.genshi_loader.load(template_name,

cls=loader_class)

stream = template.generate(globs)

cls=loader_class)

Module genshi.template.loader:223 in load << loadfunc = directory(loadfunc)

try:

filepath, filename, fileobj, uptodate = loadfunc(filename)

except IOError:

continue

filepath, filename, fileobj, uptodate = loadfunc(filename)

Module genshi.template.loader:286 in _load_from_directory << def _load_from_directory(filename):

filepath = os.path.join(path, filename) fileobj = open(filepath, 'U') mtime = os.path.getmtime(filepath) def _uptodate():

fileobj = open(filepath, 'U')

UnicodeEncodeError?: 'ascii' codec can't encode character u'\xe1' in position 73: ordinal not in range(128) CGI Variables CKAN_CURRENT_URL '/el/tag/jutatt%C3%A1sok' CKAN_LANG 'en' CKAN_LANG_IS_DEFAULT True CKAN_PAGE_CACHABLE True CONTENT_TYPE '; charset=utf-8' DOCUMENT_ROOT '/etc/apache2/htdocs' GATEWAY_INTERFACE 'CGI/1.1' HTTP_ACCEPT '*/*' HTTP_ACCEPT_ENCODING 'gzip,deflate' HTTP_CONNECTION 'close' HTTP_FROM 'googlebot(at)googlebot.com' HTTP_HOST 'thedatahub.org' HTTP_USER_AGENT 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)' PATH_INFO '/el/tag/jutatt\xc3\xa1sok' PATH_TRANSLATED '/etc/ckan/datahub/apache.wsgi/el/tag/jutatt\xc3\xa1sok' REMOTE_ADDR '127.0.0.1' REMOTE_PORT '49520' REQUEST_METHOD 'GET' REQUEST_URI '/el/tag/jutatt%c3%a1sok' SCRIPT_FILENAME '/etc/ckan/datahub/apache.wsgi' SERVER_ADDR '127.0.0.1' SERVER_ADMIN '[no address given]' SERVER_NAME 'thedatahub.org' SERVER_PORT '80' SERVER_PROTOCOL 'HTTP/1.0' SERVER_SIGNATURE '<address>Apache/2.2.22 (Ubuntu) Server at thedatahub.org Port 80</address>\n' SERVER_SOFTWARE 'Apache/2.2.22 (Ubuntu)' WSGI Variables application <beaker.middleware.CacheMiddleware? object at 0x7f5312a51650> beaker.cache <beaker.cache.CacheManager? object at 0x7f5312a51790> beaker.get_session <bound method SessionMiddleware?._get_session of <beaker.middleware.SessionMiddleware? object at 0x7f5312a516d0>> beaker.session {'_accessed_time': 1345113298.778472, '_creation_time': 1345113298.778472} mod_wsgi.application_group 'ckan.net|' mod_wsgi.callable_object 'application' mod_wsgi.handler_script mod_wsgi.input_chunked '0' mod_wsgi.listener_host mod_wsgi.listener_port '8080' mod_wsgi.process_group 'datahub' mod_wsgi.request_handler 'wsgi-script' mod_wsgi.script_reloading '1' mod_wsgi.version (3, 3) paste.cookies (<SimpleCookie: >, ) paste.registry <paste.registry.Registry object at 0x7f5309add610> paste.throw_errors True pylons.action_method <bound method TemplateController?.view of <ckan.controllers.template.TemplateController? object at 0x7f52b0ea2d10>> pylons.controller <ckan.controllers.template.TemplateController? object at 0x7f52b0ea2d10> pylons.environ_config {'session': 'beaker.session', 'cache': 'beaker.cache'} pylons.pylons <pylons.util.PylonsContext? object at 0x7f52b0ea2b90> pylons.routes_dict {'url': u'el/tag/jutatt\xe1sok', 'action': u'view', 'controller': u'template'} repoze.who.logger <logging.Logger object at 0x7f53127b2b50> repoze.who.plugins {'openid': <OpenIdIdentificationPlugin? 139994769488336>, 'friendlyform': <FriendlyFormPlugin? 139994769488528>, 'ckan.lib.authenticator:UsernamePasswordAuthenticator': <ckan.lib.authenticator.UsernamePasswordAuthenticator? object at 0x7f5312d893d0>, 'auth_tkt': <AuthTktCookiePlugin? 139994771858704>, 'ckan.lib.authenticator:OpenIDAuthenticator': <ckan.lib.authenticator.OpenIDAuthenticator object at 0x7f5312d89350>} routes.route <routes.route.Route object at 0x7f531296ea10> routes.url <routes.util.URLGenerator object at 0x7f5309add810> webob._parsed_query_vars (GET([]), ) 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 0x7f52d4004990> wsgi.version (1, 1) wsgiorg.routing_args (<routes.util.URLGenerator object at 0x7f5309add810>, {'url': u'el/tag/jutatt\xe1sok', 'action': u'view', 'controller': u'template'})

1345114613000000 1346670331000000
#2866 enhancement ross ross closed fixed 1.8 template error

URL: http://thedatahub.org/user/reset/3086e91c-fe09-4a98-92e1-19de67a9ac9d?key%3Db4c2d03fa8 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:155 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:131 in call << r'\1', oldpath)

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:239 in call << try:

res = WSGIController.call(self, environ, start_response)

finally:

model.Session.remove()

res = 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.environpylons.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.user:409 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' CGI Variables CKAN_CURRENT_URL '/user/reset/3086e91c-fe09-4a98-92e1-19de67a9ac9d?key%253Db4c2d03fa8' CKAN_LANG 'it' CONTENT_TYPE '; charset=utf-8' DOCUMENT_ROOT '/etc/apache2/htdocs' GATEWAY_INTERFACE 'CGI/1.1' HTTP_ACCEPT '*/*' HTTP_ACCEPT_ENCODING 'gzip,deflate' HTTP_CONNECTION 'close' HTTP_FROM 'googlebot(at)googlebot.com' HTTP_HOST 'thedatahub.org' HTTP_USER_AGENT 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)' PATH_INFO '/user/reset/3086e91c-fe09-4a98-92e1-19de67a9ac9d' PATH_TRANSLATED '/etc/ckan/datahub/apache.wsgi/it/user/reset/3086e91c-fe09-4a98-92e1-19de67a9ac9d' QUERY_STRING 'key%3Db4c2d03fa8' REMOTE_ADDR '127.0.0.1' REMOTE_PORT '54634' REQUEST_METHOD 'GET' REQUEST_URI '/it/user/reset/3086e91c-fe09-4a98-92e1-19de67a9ac9d?key%3Db4c2d03fa8' SCRIPT_FILENAME '/etc/ckan/datahub/apache.wsgi' SERVER_ADDR '127.0.0.1' SERVER_ADMIN '[no address given]' SERVER_NAME 'thedatahub.org' SERVER_PORT '80' SERVER_PROTOCOL 'HTTP/1.0' SERVER_SIGNATURE '<address>Apache/2.2.22 (Ubuntu) Server at thedatahub.org Port 80</address>\n' SERVER_SOFTWARE 'Apache/2.2.22 (Ubuntu)' WSGI Variables application <beaker.middleware.CacheMiddleware? object at 0x7f5312a51650> beaker.cache <beaker.cache.CacheManager? object at 0x7f5312a51790> beaker.get_session <bound method SessionMiddleware?._get_session of <beaker.middleware.SessionMiddleware? object at 0x7f5312a516d0>> beaker.session {'_accessed_time': 1345066159.520708, '_creation_time': 1345066159.520708} mod_wsgi.application_group 'ckan.net|' mod_wsgi.callable_object 'application' mod_wsgi.handler_script mod_wsgi.input_chunked '0' mod_wsgi.listener_host mod_wsgi.listener_port '8080' mod_wsgi.process_group 'datahub' mod_wsgi.request_handler 'wsgi-script' mod_wsgi.script_reloading '1' mod_wsgi.version (3, 3) paste.cookies (<SimpleCookie: >, ) paste.parsed_dict_querystring (MultiDict?([('key=b4c2d03fa8', )]), 'key%3Db4c2d03fa8') paste.parsed_querystring ([('key=b4c2d03fa8', )], 'key%3Db4c2d03fa8') paste.registry <paste.registry.Registry object at 0x7f52eba637d0> paste.throw_errors True pylons.action_method <bound method UserController?.perform_reset of <ckan.controllers.user.UserController? object at 0x7f52e49f7a50>> pylons.controller <ckan.controllers.user.UserController? object at 0x7f52e49f7a50> pylons.environ_config {'session': 'beaker.session', 'cache': 'beaker.cache'} pylons.pylons <pylons.util.PylonsContext? object at 0x7f52f5649ad0> pylons.routes_dict {'action': u'perform_reset', 'controller': u'user', 'id': u'3086e91c-fe09-4a98-92e1-19de67a9ac9d'} repoze.who.logger <logging.Logger object at 0x7f53127b2b50> repoze.who.plugins {'openid': <OpenIdIdentificationPlugin? 139994769488336>, 'friendlyform': <FriendlyFormPlugin? 139994769488528>, 'ckan.lib.authenticator:UsernamePasswordAuthenticator': <ckan.lib.authenticator.UsernamePasswordAuthenticator? object at 0x7f5312d893d0>, 'auth_tkt': <AuthTktCookiePlugin? 139994771858704>, 'ckan.lib.authenticator:OpenIDAuthenticator': <ckan.lib.authenticator.OpenIDAuthenticator object at 0x7f5312d89350>} routes.route <routes.route.Route object at 0x7f5312961ad0> routes.url <routes.util.URLGenerator object at 0x7f52de7f6390> webob._parsed_query_vars (GET([('key=b4c2d03fa8', )]), 'key%3Db4c2d03fa8') 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 0x7f52fc4f1a08> wsgi.version (1, 1) wsgiorg.routing_args (<routes.util.URLGenerator object at 0x7f52de7f6390>, {'action': u'perform_reset', 'controller': u'user', 'id': u'3086e91c-fe09-4a98-92e1-19de67a9ac9d'})

1345114641000000 1346670324000000
#2868 enhancement ross ross closed fixed 1.8 SOLR error

From: <thedatahub.org@…> Date: Wed, Aug 15, 2012 at 8:34 AM Subject: WebApp? Error: <class 'ckan.lib.search.common.SearchError?'>: SOLR returned an error running query: {'sort': 'metadata_modified desc', 'fq': u'groups:"welcome" capacity:"public" +site_id:"www.ckan.net" +state:active', 'facet.mincount': 1, 'rows': 21, 'facet.limit': '50', 'facet': 'true', 'q': '*:*', 'start': -20, 'wt': 'json', 'fl': 'id data_dict'} Error: "'start' parameter cannot be negative" To: ckan-sysadmin@…, kindly@…

URL: http://thedatahub.org/feeds/group/welcome.atom?page=0 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:155 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:131 in call << r'\1', oldpath)

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:239 in call << try:

res = WSGIController.call(self, environ, start_response)

finally:

model.Session.remove()

res = 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.environpylons.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.feed:180 in group << data_dictfq? = 'groups:"%s"' % id

item_count, results = _package_search(data_dict)

navigation_urls = self._navigation_urls(params,

item_count, results = _package_search(data_dict)

Module ckan.controllers.feed:57 in _package_search << # package_search action modifies the data_dict, so keep our copy intact.

query = get_action('package_search')(context, data_dict.copy())

return querycount?, queryresults?

query = get_action('package_search')(context, data_dict.copy())

Module ckan.logic.action.get:1130 in package_search << query = search.query_for(model.Package)

query.run(data_dict)

for package in query.results:

query.run(data_dict)

Module ckan.lib.search.query:350 in run << except SolrException?, e:

raise SearchError?('SOLR returned an error running query: %r Error: %r' %

(query, e.reason))

try:

data = json.loads(solr_response)

(query, e.reason))

SearchError?: SOLR returned an error running query: {'sort': 'metadata_modified desc', 'fq': u'groups:"welcome" capacity:"public" +site_id:"www.ckan.net" +state:active', 'facet.mincount': 1, 'rows': 21, 'facet.limit': '50', 'facet': 'true', 'q': '*:*', 'start': -20, 'wt': 'json', 'fl': 'id data_dict'} Error: "'start' parameter cannot be negative" CGI Variables CKAN_CURRENT_URL '/feeds/group/welcome.atom?page%3D0' CKAN_LANG 'ja' CONTENT_TYPE '; charset=utf-8' DOCUMENT_ROOT '/etc/apache2/htdocs' GATEWAY_INTERFACE 'CGI/1.1' HTTP_ACCEPT '*/*' HTTP_ACCEPT_ENCODING 'gzip,deflate' HTTP_CONNECTION 'close' HTTP_FROM 'googlebot(at)googlebot.com' HTTP_HOST 'thedatahub.org' HTTP_USER_AGENT 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)' PATH_INFO '/feeds/group/welcome.atom' PATH_TRANSLATED '/etc/ckan/datahub/apache.wsgi/ja/feeds/group/welcome.atom' QUERY_STRING 'page=0' REMOTE_ADDR '127.0.0.1' REMOTE_PORT '33139' REQUEST_METHOD 'GET' REQUEST_URI '/ja/feeds/group/welcome.atom?page=0' SCRIPT_FILENAME '/etc/ckan/datahub/apache.wsgi' SERVER_ADDR '127.0.0.1' SERVER_ADMIN '[no address given]' SERVER_NAME 'thedatahub.org' SERVER_PORT '80' SERVER_PROTOCOL 'HTTP/1.0' SERVER_SIGNATURE '<address>Apache/2.2.22 (Ubuntu) Server at thedatahub.org Port 80</address>\n' SERVER_SOFTWARE 'Apache/2.2.22 (Ubuntu)' WSGI Variables application <beaker.middleware.CacheMiddleware? object at 0x7f5312a51650> beaker.cache <beaker.cache.CacheManager? object at 0x7f5312a51790> beaker.get_session <bound method SessionMiddleware?._get_session of <beaker.middleware.SessionMiddleware? object at 0x7f5312a516d0>> beaker.session {'_accessed_time': 1345016040.884951, '_creation_time': 1345016040.884951} mod_wsgi.application_group 'ckan.net|' mod_wsgi.callable_object 'application' mod_wsgi.handler_script mod_wsgi.input_chunked '0' mod_wsgi.listener_host mod_wsgi.listener_port '8080' mod_wsgi.process_group 'datahub' mod_wsgi.request_handler 'wsgi-script' mod_wsgi.script_reloading '1' mod_wsgi.version (3, 3) paste.cookies (<SimpleCookie: >, ) paste.parsed_dict_querystring (MultiDict?([('page', '0')]), 'page=0') paste.parsed_querystring ([('page', '0')], 'page=0') paste.registry <paste.registry.Registry object at 0x7f5302eef7d0> paste.throw_errors True pylons.action_method <bound method FeedController?.group of <ckan.controllers.feed.FeedController? object at 0x7f52f0341750>> pylons.controller <ckan.controllers.feed.FeedController? object at 0x7f52f0341750> pylons.environ_config {'session': 'beaker.session', 'cache': 'beaker.cache'} pylons.pylons <pylons.util.PylonsContext? object at 0x7f52f0341450> pylons.routes_dict {'action': u'group', 'controller': u'feed', 'id': u'welcome'} repoze.who.logger <logging.Logger object at 0x7f53127b2b50> repoze.who.plugins {'openid': <OpenIdIdentificationPlugin? 139994769488336>, 'friendlyform': <FriendlyFormPlugin? 139994769488528>, 'ckan.lib.authenticator:UsernamePasswordAuthenticator': <ckan.lib.authenticator.UsernamePasswordAuthenticator? object at 0x7f5312d893d0>, 'auth_tkt': <AuthTktCookiePlugin? 139994771858704>, 'ckan.lib.authenticator:OpenIDAuthenticator': <ckan.lib.authenticator.OpenIDAuthenticator object at 0x7f5312d89350>} routes.route <routes.route.Route object at 0x7f5312961e90> routes.url <routes.util.URLGenerator object at 0x7f52f0341210> webob._parsed_query_vars (GET([('page', '0')]), 'page=0') 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 0x7f52ed4873f0> wsgi.version (1, 1) wsgiorg.routing_args (<routes.util.URLGenerator object at 0x7f52f0341210>, {'action': u'group', 'controller': u'feed', 'id': u'welcome'})

1345114696000000 1345124503000000
#2879 enhancement ross ross ckan 2.0 closed wontfix Datasets (Package) should have a 'public' field

The Package model should have a boolean field added to it describing its visibility beyond that supplied via auth.

The related permission for viewing packages where public is set to False would be package.view (show, whatever), and *never* visible for unauthenticated users.

1345466389000000 1350562096000000
#1096 defect rufuspollock pudo ckan-future new [super] CKAN Hosted

Many users of CKAN want to have their own instance without much effort. Setting these up in separate places is a maintenance nightmare, we should much rather have some tenant separation in core CKAN. Some ideas:

  • introduce model.Site and c.site
    • site has: custom CSS, extra_template_path, title, languages list, package_form, group_form (all configured via web UI)
  • Subdomain detector to activate sites.
  • use site in Authorizer instead of System, have a NullSite? for global things
  • allow cross-site search
  • packages are in a list of sites, m:n rather than 1:n
    • list of sites is string-based, can contain sites not in site table to express harvested external material which is not editable locally.
1303235062000000 1339774484000000
#1299 enhancement seanh kindly ckan-sprint-2012-01-23 closed fixed Activity streams table migration

Migrate tables for activity streams

1314696635000000 1327322739000000
#1413 enhancement seanh shevski ckan-backlog closed fixed Ask users to 'add email address' when logged in

I'd like us to display a one-off banner that prompts users who log into thedatahub.org to go and update & their profile & fill in their email address (if we could do it just for those who don't have an email address, then even better) That is, once they log in, they see a banner which says: Please update your profile [here] and add your email address, so you can receive notifications, be able to reset your password and get updates

Then when we build notifications or if we decide to survey people, we can actually contact them. Email address should be required as standard

DR: Also, mention their Full Name too - v. useful for selecting correct user in group curation

1319453108000000 1330020486000000
#1434 enhancement seanh dread ckan-v1.8 closed fixed Add i18n strings from extensions

Decide which extensions are important.

1320145648000000 1341245889000000
#1471 enhancement seanh dread ckan-v1.8 closed fixed Be compatible with new ubuntu release in April

Nils flagged up that Ubuntu launches another LTS in April which we should probably move to. This ticket is to get the ball rolling with what we do. We can always include in our package the exact package versions of deps that we want, but it is good to be in line with the release if possible.

Here's how to see the packages included with it: http://packages.ubuntu.com/search?keywords=python-pylons&searchon=names&suite=all&section=all

Pylons 0.9.7 -> 1.0-2 Requires a small amount of work SQLAlchemy 0.7.3-2 OK Babel 0.9.6-1 OK Genshi 0.6-2 Perfect

Another alternative is to move to another web framework, especially minding that Pylons is not being further developed.

1321552345000000 1340810270000000
#1486 defect seanh seanh closed fixed "allow_partial_update" option does not work with resource lists of packages
  1. Call ckan.logic.action.update:package_update()
  2. Pass in a context dict with "allow_partial_update":True
  3. Pass in a partial data dict containing only the package's ID and those fields that you want to update (e.g. title).

=> All of the package's resource will have their statuses changed to "deleted".

The "allow_partial_update" option should apply to the resource lists of packages, but it does not.

1322061318000000 1323172027000000
#1491 defect seanh dread closed fixed Visible strings need internationalisation

Sean spotted that some strings need internationalising, such as flash messages. Generally all strings that appear on the web front-end should be internationalised.

Particular places that need i18n:

  • ckan/controllers/admin
  • ckan/lib/base

Note: there are some exceptions, such as in i18n.py, very obscure error messages and stuff that only appears on the API.

NB: there is a cost in making a string internationalisable (all our volunteers have to translate it), so we should not be too zealous. We should also look at the i18n/ckan.pot to see if any of the existing strings can be reused.

1322481000000000 1330020630000000
#1494 enhancement seanh seanh ckan-sprint-2012-01-09 closed wontfix API call for getting a user's public activity stream as rendered rtext

This could be implemented as a separate API call, or the rendered text versions of the activities could be added into the JSON returned by the existing API call.

This requires setting up templates for rendering activity streams items and detail items as nice, human-readable text.

There are some open questions, e.g.: Do we want the entire activity stream rendered as a block of plain text? As HTML? Or do we want a list of JSON objects, where each object contains its textual and/or HTML representations as fields?

Activity stream items and their related detail items are separate objects that each have their own textual representations.

For a mockup of the kind of text messages we want, see:

http://datahub.pudo.org/pudo

but note that this ticket is just for creating the text snippets themselves, not rendering then in an HTML page or RSS feed. Also the mockup only show activity items and not their detail items.

1322495447000000 1326109757000000
#1496 enhancement seanh seanh ckan-v1.7 closed fixed Render a user's activity stream on her user page 1322495588000000 1334582338000000
#1510 enhancement seanh seanh ckan-v1.7 closed wontfix Migrate existing data into activity streams database tables

See '### Task 2' in this etherpad: http://ckan.okfnpad.org/notifications

I have no idea yet about how to do this or how long it might take me.

1323093901000000 1339677620000000
#1515 enhancement seanh seanh ckan-v1.7 closed fixed [super] Activity Streams

We want to add "activity streams" (chronological lists of activities) to CKAN.

Activity streams standard: http://activitystrea.ms/

Super branch where the feature was initially developed (this has now been merged into master): https://github.com/okfn/ckan/tree/feature-1515-activity-streams

Etherpad: http://ckan.okfnpad.org/notifications (most relevant parts inlined here)

Friedrich's mockup: http://datahub.pudo.org/pudo

Tasks

Strikethrough means the task is done.

  • Migrate existing data into activity streams model [3.5d] #1510
  • Generate activities when objects are saved [4d] #1298
  • Get the activity stream for a given user as a JSONifiable list of dictionaries [1d] #1511
  • API call for getting a user's public activity stream as JSON [0.5d] #1495
  • API call for getting a user's public activity stream as rendered text, HTML, etc. [5d] #1494
  • Render a user's activity stream on her user page [3d] #1496 (needs review/page design work)
  • Generate activities for other types of objects besides users (e.g. packages, groups, tags, extras, and save them in the database.
  • Logic functions for getting activity streams for packages, groups, and users.
  • API calls for getting activity streams of packages, groups, and users as JSON.
  • Rendering activity streams for packages and groups etc. into their pages. (done but disabled pending page design work)
  • API calls for inserting events into activity streams. (Still need to handle activity details in the API, ticketed).
  • Conform to activitystrea.ms standard
  • Enable users to subscribe to and unsubscribe from activity streams, see an aggregated activity stream on their dashboard page.
  • Generate aggregated activity streams for arbitrary sets of multiple activity sources/streams
  • Email notifications
  • Extension point for extensions to register themselves as renderers for different types of activity
  • Deploy to UAT [0.5d]
  • Docs and announce [1d]
1323105048000000 1338204149000000
#1621 defect seanh seanh closed fixed UnicodeDecodeError when validating user password

A test case is currently failing for me on master:

ERROR: ckan.tests.functional.test_user.TestUserController.test_user_create_unicode
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/seanh/pyenv/lib/python2.6/site-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
  File "/home/seanh/pyenv/src/ckan/ckan/tests/functional/test_user.py", line 342, in test_user_create_unicode
    res = res.follow()
  File "/usr/lib/pymodules/python2.6/paste/fixture.py", line 603, in follow
    return self.test_app.get(location, **kw)
  File "/usr/lib/pymodules/python2.6/paste/fixture.py", line 208, in get
    return self.do_request(req, status=status)
  File "/usr/lib/pymodules/python2.6/paste/fixture.py", line 389, in do_request
    **req.environ)
  File "/usr/lib/pymodules/python2.6/paste/wsgilib.py", line 343, in raw_interactive
    app_iter = application(basic_environ, start_response)
  File "/usr/lib/pymodules/python2.6/paste/lint.py", line 170, in lint_app
    iterator = application(environ, start_response_wrapper)
  File "/usr/lib/pymodules/python2.6/paste/cascade.py", line 130, in __call__
    return self.apps[-1](environ, start_response)
  File "/usr/lib/pymodules/python2.6/paste/registry.py", line 350, in __call__
    app_iter = self.application(environ, start_response)
  File "/usr/lib/pymodules/python2.6/repoze/who/middleware.py", line 69, in __call__
    auth_ids = self.authenticate(environ, classification, ids)
  File "/usr/lib/pymodules/python2.6/repoze/who/middleware.py", line 201, in authenticate
    userid = plugin.authenticate(environ, identity)
  File "/home/seanh/pyenv/src/ckan/ckan/lib/authenticator.py", line 29, in authenticate
    if user.validate_password(identity.get('password')):
  File "/home/seanh/pyenv/src/ckan/ckan/model/user.py", line 113, in validate_password
    hashed_pass = sha1(password_8bit + self.password[:40])
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 12: ordinal not in range(128)

1326105806000000 1335878161000000
#1625 enhancement seanh seanh ckan-sprint-2012-01-23 closed fixed Add activity stream events for new/changed users

This requires adding a logic function for emitting an activity stream event, and then editing the logic functions for creating or updating users and making them call the new emit event function. This same emit event function can later be used to emit activity stream events for other types of object as well.

1326187794000000 1326736328000000
#1631 enhancement seanh seanh ckan-sprint-2012-01-23 closed fixed Add activity stream events for new/changed groups 1326304020000000 1326736381000000
#1632 enhancement seanh seanh ckan-v1.7 closed wontfix Render a group's activity stream on its' page

Add logic functions for getting the activity stream for a group in JSON and rendered HTML formats, add HTML activity stream into group page.

1326304199000000 1335877871000000
#1633 enhancement seanh seanh ckan-v1.7 closed wontfix Render a dataset's activity stream on its' page

Add logic functions for getting the activity stream for a dataset in JSON and rendered HTML formats, add HTML activity stream into dataset page.

1326304298000000 1335877927000000
#1634 enhancement seanh seanh ckan-v1.7 closed duplicate Allow users to follow/unfollow activity streams of other users, datasets and groups

This is a fairly big feature to add. Analysis: http://ckan.okfnpad.org/27

This ticket is related to #1635 (email notifications for activity streams) which is about managing a list of activity streams for which the user receives email notifications. There are decisions to be made about how the two will work together.

1326304542000000 1334587390000000
#1635 enhancement seanh seanh ckan-backlog new Email notifications (e.g. for activity streams)

CKAN should be able to send email notifications to users.

Maybe have a notifications table in the db, and a server-side job that runs periodically and consumes rows from this table, mailing them to the users.

One thing that we may want to send users notifications of is activity stream events. So the activity streams code would have to add rows to the notifications table for the mailer job to consume. But remember that email notifications feature is separate from activity streams - we may want to send notifications of other things as well.

Need to implement (at least some of) #1634 before this can be implemented, in order to have something to send notifications about.

Analysis here: http://ckan.okfnpad.org/27

1326304587000000 1355141157000000
#1636 enhancement seanh seanh ckan-v1.7 closed wontfix Purge items from activity streams when object (package etc.) purged from CKAN 1326304754000000 1338204258000000
#1637 enhancement seanh seanh ckan-v1.6 closed fixed API call for getting the list of activity detail items for a given activty stream item

(and add test cases for it)

1326304817000000 1326737169000000
#1638 enhancement seanh seanh ckan-sprint-2012-01-23 closed wontfix Don't use JsonType in activity streams

Dump and load JSON explicitly instead.

1326304935000000 1326305570000000
#1639 enhancement seanh seanh ckan-sprint-2012-02-06 closed fixed Move activity streams CSS into external file

The HTML and CSS for the activity streams templates needs to be tidied up. Currently the CSS is inlined in the templates themselves, and there is much unnecessary repetition of CSS.

Perhaps put this one in hold until there has been some design discussion about how the activity streams and the user, dataset and group pages with activity streams should look?

1326305019000000 1328526779000000
#1663 enhancement seanh seanh ckan-sprint-2012-02-06 closed fixed API call for creating an activity streams event

The create_activity() logic function already exists, but validation and authorization need to be added before it's hooked up to an API call.

1326794844000000 1328013153000000
#1664 enhancement seanh seanh ckan-future closed fixed Smarter group activity streams

We already have simple activity streams for groups that have new group or group updated events (see #1631). Smarter/more useful group activity streams would also contain the events for things related to the group: users, datasets, other groups, etc.

This should just mean using a more complex SQL query in the group_activity_list() logic function.

Things might get tricky when a user or dataset joins a group, this may show up as two events (the user or dataset was modified, and the group was modified). We may want to have two separate events for this (one to go in the user or dataset activity stream and one for the group), or maybe we just want one 'user/dataset joined group' event.

1326795654000000 1351863437000000
#1665 task seanh seanh closed fixed Begin doing research into eurovoc

How big is it? How are we going to store it? etc.

1326795828000000 1329742600000000
#1666 enhancement seanh seanh ckan-sprint-2012-02-06 closed fixed Add activity stream events for tags

...and show them on the tag pages.

This means adding tag_activity_list() and tag_activity_list_html() logic functions, adding the templating to render tags as HTML, and adding the tag HTML into the tag pages.

What exactly should go into a tag's activity stream? As with datasets we may want a more complex SQL query, where events from objects related to the tag (datasets, users, etc.) appear in the tag's stream.

1326795985000000 1328527113000000
#1667 enhancement seanh seanh ckan-future new Add an extension point for rendering activity streams

Currently rendering of activity stream events to HTML works by looking up a rendering function in a dictionary that maps activity types ('new package', 'changed group', etc.) to rendering functions that take an activity stream event and return the rendered HTML.

There needs to be an extension point where extensions can register their own rendering functions for particular activity types.

1326796151000000 1338204295000000
#1686 enhancement seanh seanh ckan-sprint-2012-02-06 closed fixed Add activity events for when a dataset is added to or removed from a group 1326993692000000 1328527370000000
#1694 enhancement seanh seanh ckan-sprint-2012-02-06 closed fixed Add quick functional test(s) for activity streams HTML rendering

The activity streams feature is already thoroughly tested via the logic layer and API calls, but there needs to be a quick test of the rendering code, e.g. fetch a user's page (thus testing that ckan doesn't crash while rendering it) and then assert that the expected activity streams HTML is in the fetched HTML.

1327322248000000 1328465254000000
#1698 enhancement seanh seanh ckan-v1.7 closed fixed [super] Tag Taxonomies

Add drupal-like "taxonomies" to CKAN.

Etherpad with user stories, feature list, design and implementation discussion:

http://ckan.okfnpad.org/22

Branch where this is being developed is feature-1698-tag-taxonomies:

https://github.com/okfn/ckan/compare/master...feature-1698-tag-taxonomies

Tickets related to this have keyword taxonomies.

1327415756000000 1338204433000000
#1705 enhancement seanh seanh ckan-sprint-2012-02-20 closed fixed Implement Vocabularies domain model and API

Add Vocabulary domain class, add logic functions for creating, updating, listing, getting, deleting vocabularies, add tests.

1327427254000000 1329131067000000
#1706 enhancement seanh seanh ckan-sprint-2012-02-06 closed duplicate Tag taxonomies package schema

Enable ckanext's to add new vocabularies to default_package_schema(), use the new vocabularies in templates for dataset view, create, edit pages, helper function for extensions to create a vocabulary schema for a given vocabulary name (must match a vocab already in the db) and add it to default package schema.

1327427938000000 1329131079000000
#1722 enhancement seanh seanh ckan-sprint-2012-02-20 closed fixed Update the package model for vocabularies

See the etherpad for notes: http://ckan.okfnpad.org/22

1327950373000000 1329303197000000
#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
#1724 enhancement seanh seanh ckan-sprint-2012-02-20 closed fixed Update logic action functions for vocabularies

ckan/logic/action/get.py:tag_list() Currently (I think) just returns all tags in the CKAN instance that the user has access to. Needs an optional argument to get only tags from a particular vocabulary? When called with no argument, should only return free tags? Also add an optional dataset argument, so you can get tags for a given dataset and/or vocabulary?

ckan/logic/action/get.py:tag_autocomplete() Add optional argument to get only tags for a given vocab? When called with no argument, should get only free tags?

ckan/logic/action/get.py:tag_search() Again, optional arguments for restricting by vocabulary and/or dataset.

1327950761000000 1329302302000000
#1743 defect seanh seanh ckan-v1.6 closed wontfix Activity streams still link to deleted things

For example, after deleting a dataset old activity stream events will still hyperlink to that dataset.

1328212016000000 1328527086000000
#1748 enhancement seanh seanh ckan-future new Make activity streams conform to http://activitystrea.ms/ standard

At the very least we should make our JSON output conform to their spec:

http://activitystrea.ms/

1328450784000000 1338204337000000
#1754 enhancement seanh seanh ckan-sprint-2012-02-06 closed fixed Add activities for extras

When an extra is added to or removed from a dataset or is updated, an activity should go in the dataset's and user's activity streams.

1328528318000000 1328528330000000
#1763 enhancement seanh seanh ckan-v1.7 closed wontfix Add some simple model-level tests for activity streams 1328536285000000 1338204708000000
#1764 enhancement seanh seanh ckan-v1.7 closed wontfix Move activity streams API tests into tests/logic

Which is where the other API tests have now been moved.

1328536499000000 1335878051000000
#1765 enhancement seanh seanh ckan-sprint-2012-02-20 closed fixed Enhance Tag and Package models with vocabularies

Add a vocabulary column to the tags database table, change tags to have unique (tag_name, vocabulary_id) instrad of unique tag name, update methods in the Tag and Package classes to deal with the fact that tags may belong to vocabularies and that tag names are no longer unique.

1328537061000000 1329131124000000
#1775 enhancement seanh seanh ckan-sprint-2012-03-05 closed fixed Enable adding many tags at once to controlled vocabularies via API

We already have API calls for adding one tag or removing one tag at a time to/from a vocab. Want more convenient ways to add or remove many in one call, or just pass in a list of tags to completely replace a vocab's current list.

  • Add tags_create() function that calls the existing tag_create() many times?
  • Also tags_delete()?
  • Or just let tag_create() and tag_delete() accept a list?
  • Add tags argument to vocabulary_update() to pass in a list of tags to replace the vocab's current tags? (But it should still be possible to simply rename a vocab without changing its tags and without having to pass in the tag list.)
1328541056000000 1329754459000000
#1776 enhancement seanh seanh ckan-sprint-2012-02-20 closed fixed Granular editing of vocabulary tags

Add API calls for adding one or more tags to and removing one or more tags from a vocabulary, without affecting the other tags in that vocabulary and without having to pass the full list of the vocabulary's tags.

1328541213000000 1329302364000000
#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
#1784 enhancement seanh seanh ckan-v1.7 closed wontfix Links to renamed objects break

The HTML templates for some activity stream activities link to objects (packages, resources, etc.) by their names, e.g. /dataset/foo, but if the object has since been renamed then the link will be broken.

Possible solutions are to use the object ID to find its current name at rendering time and link to that, or link to the object by ID rather than by name.

Linking by ID is both simpler to implement and better. Links by ID are ugly, but they are permanent and don't break when an object is renamed. We should be using links by ID everywhere on CKAN, so that when third-party sites copy-paste our URLs and link to us, their links don't break later.

Fixing this means fixing the dataset_link(), resource_link(), group_link() etc. functions in ckan/lib/helpers.py which will change the links everywhere in CKAN where those functions are used to link to objects (which should be everywhere where we link to an object).

If we want to have nice looking by-name URLs and what them to be permanent, then we need to change CKAN so that objects cannot be renamed.

1328613555000000 1338204797000000
#1785 enhancement seanh seanh ckan-v1.9 accepted Replace 'Revisions' page with site-wide activity stream

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?

1328632458000000 1340724312000000
#1807 enhancement seanh seanh ckan-sprint-2012-03-05 closed fixed Recently added/updated datasets for EC portal

For EC Portal need a page (or HTML snippet embedded in the front page?) listing recently added or updated datasets.

  • Could be generated from the activity streams
  • Should it list datasets only, or other activities as well?
  • May be related to #1785 (Replace 'Revisions' page with site-wide activity stream)
1329742326000000 1330809641000000
#1808 enhancement seanh seanh ckan-sprint-2012-03-19 closed fixed Translation of content on dataset view pages

All data is that is translatable should be translated when viewed.

This includes tag names will be ID codes. When viewing a dataset page, look up the current language of the interface (ckan_lang or something in the environs) and display the string for the tag in that language.

Related to the dataset view extension points for translation, recently added by kindly/=.

1329742530000000 1331146804000000
#1825 enhancement seanh seanh ckan-sprint-2012-03-05 closed fixed Write docs for vocabularies API

Done on branch feature-1698-tag-taxonomies

1329845122000000 1330807330000000
#2199 enhancement seanh seanh ckan-sprint-2012-03-19 closed fixed Translation of content on dataset search pages 1330440107000000 1331146832000000
#2200 enhancement seanh seanh ckan-future new Add vocabulary_id option to tag_show() logic action function

Currently tag_show() only works with free tags, it's not possible to get a tag_show for a vocabulary tag.

1330533678000000 1338204900000000
#2207 defect seanh seanh ckan-sprint-2012-03-19 closed invalid Fix recently changed datasets activity stream on exportal site

Apparently it's working when developers run it locally but not on the demo site.

1330961739000000 1332154835000000
#2208 enhancement seanh seanh ckan-sprint-2012-06-25 closed fixed Export strings from ckan and ckanext-ecportal to combined pot file

All strings from the ckanext-ecportal extension (and from CKAN core) need to be exported to a pot file to send to tenforce.

1330961806000000 1339596371000000
#2214 enhancement seanh seanh ckan-sprint-2012-03-19 closed fixed Translation of content on group view pages 1331146864000000 1331147119000000
#2215 enhancement seanh seanh ckan-sprint-2012-03-19 closed fixed Translation of content on group list page 1331148579000000 1331653117000000
#2216 enhancement seanh seanh ckan-sprint-2012-04-02 closed fixed Translation of selected facets on search pages 1331148648000000 1332956791000000
#2217 enhancement seanh seanh ckan-sprint-2012-03-19 closed fixed Translation of content on tag list page 1331148704000000 1331652833000000
#2218 enhancement seanh seanh ckan-sprint-2012-03-19 closed fixed Translation of content on tag pages 1331148734000000 1331747842000000
#2219 enhancement seanh seanh ckan-sprint-2012-03-19 closed fixed Translation of datasets and tags on user pages

User names and descriptions are not translated.

1331148895000000 1331750370000000
#2238 enhancement seanh seanh ckan-future closed duplicate Deploy some test vocabs and publishers on test.ckan.net, check tutorial-style instructions for these 1332165311000000 1343392681000000
#2241 refactor seanh seanh ckan-sprint-2012-04-02 closed fixed Look into making test_activity.py faster

...but only if it can be done reasonably quickly.

1332172354000000 1332426423000000
Note: See TracReports for help on using and creating reports.