Skip to content

Commit

Permalink
[merge]
Browse files Browse the repository at this point in the history
  • Loading branch information
David Read committed Feb 23, 2012
2 parents ea2d824 + 3f7e5f0 commit 1ecdfda
Show file tree
Hide file tree
Showing 136 changed files with 10,828 additions and 1,322 deletions.
2 changes: 1 addition & 1 deletion ckan/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
__version__ = '1.5.2a'
__version__ = '1.6.1a'
__description__ = 'Comprehensive Knowledge Archive Network (CKAN) Software'
__long_description__ = \
'''CKAN software provides a hub for datasets. The flagship site running CKAN
Expand Down
4 changes: 2 additions & 2 deletions ckan/config/deployment.ini_tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@ who.log_file = %(cache_dir)s/who_log.ini
# Location of RDF versions of datasets
#rdf_packages = http://semantic.ckan.net/record/

# Location of licenses group (defaults to local Python licenses dataset)
#licenses_group_url = http://licenses.opendefinition.org/2.0/ckan_original
# Location of licenses group (defaults to cached local version of ckan group)
#licenses_group_url = http://licenses.opendefinition.org/licenses/groups/ckan.json

# Dataset form to use
package_form = standard
Expand Down
45 changes: 44 additions & 1 deletion ckan/config/middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from repoze.who.middleware import PluggableAuthenticationMiddleware
from ckan.plugins import PluginImplementations
from ckan.plugins.interfaces import IMiddleware
from ckan.lib.i18n import get_locales

from ckan.config.environment import load_environment

Expand Down Expand Up @@ -52,9 +53,9 @@ def make_app(global_conf, full_stack=True, static_files=True, **app_conf):
# Routing/Session/Cache Middleware
app = RoutesMiddleware(app, config['routes.map'])
app = SessionMiddleware(app, config)
app = I18nMiddleware(app, config)
app = CacheMiddleware(app, config)


# CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares)
#app = QueueLogMiddleware(app)

Expand Down Expand Up @@ -123,3 +124,45 @@ def make_app(global_conf, full_stack=True, static_files=True, **app_conf):
app = Cascade(extra_static_parsers+static_parsers)

return app

class I18nMiddleware(object):
"""I18n Middleware selects the language based on the url
eg /fr/home is French"""
def __init__(self, app, config):
self.app = app
self.default_locale = config.get('ckan.locale_default', 'en')
self.local_list = get_locales()

def __call__(self, environ, start_response):
# strip the language selector from the requested url
# and set environ variables for the language selected
# CKAN_LANG is the language code eg en, fr
# CKAN_LANG_IS_DEFAULT is set to True or False
# CKAN_CURRENT_URL is set to the current application url

# We only update once for a request so we can keep
# the language and original url which helps with 404 pages etc
if 'CKAN_LANG' not in environ:
path_parts = environ['PATH_INFO'].split('/')
if len(path_parts) > 1 and path_parts[1] in self.local_list:
environ['CKAN_LANG'] = path_parts[1]
environ['CKAN_LANG_IS_DEFAULT'] = False
# rewrite url
if len(path_parts) > 2:
environ['PATH_INFO'] = '/'.join([''] + path_parts[2:])
else:
environ['PATH_INFO'] = '/'
else:
# use default language from config
environ['CKAN_LANG'] = self.default_locale
environ['CKAN_LANG_IS_DEFAULT'] = True

# Current application url
path_info = environ['PATH_INFO']
qs = environ.get('QUERY_STRING')
if qs:
environ['CKAN_CURRENT_URL'] = '%s?%s' % (path_info, qs)
else:
environ['CKAN_CURRENT_URL'] = path_info

return self.app(environ, start_response)
48 changes: 25 additions & 23 deletions ckan/config/routing.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@

def make_map():
"""Create, configure and return the routes Mapper"""
# import controllers here rather than at root level because
# import controllers here rather than at root level because
# pylons config is initialised by this point.
from ckan.controllers.package import register_pluggable_behaviour as register_package_behaviour
from ckan.controllers.group import register_pluggable_behaviour as register_group_behaviour

map = Mapper(directory=config['pylons.paths']['controllers'],
always_scan=config['debug'])
map.minimization = False
Expand All @@ -36,7 +36,6 @@ def make_map():
map = plugin.before_map(map)

map.connect('home', '/', controller='home', action='index')
map.connect('/locale', controller='home', action='locale')
map.connect('about', '/about', controller='home', action='about')

# CKAN API versioned.
Expand All @@ -49,7 +48,9 @@ def make_map():
'authorizationgroup',
'revision',
'licenses',
'rating'
'rating',
'user',
'activity'
]
register_list_str = '|'.join(register_list)

Expand Down Expand Up @@ -114,7 +115,7 @@ def make_map():

map.connect('/api/search/{register}', controller='api', action='search')
map.connect('/api/tag_counts', controller='api', action='tag_counts')

map.connect('/api/rest', controller='api', action='index')

map.connect('/api/action/{logic_function}', controller='api', action='action',
Expand Down Expand Up @@ -180,6 +181,7 @@ def make_map():

map.connect('/api/2/util/authorizationgroup/autocomplete', controller='api',
action='authorizationgroup_autocomplete')
map.connect('/api/2/util/group/autocomplete', controller='api', action='group_autocomplete')

map.connect('/api/util/markdown', controller='api', action='markdown')
map.connect('/api/util/dataset/munge_name', controller='api', action='munge_package_name')
Expand All @@ -190,7 +192,7 @@ def make_map():
###########
## /END API
###########

map.redirect("/packages", "/dataset")
map.redirect("/packages/{url:.*}", "/dataset/{url}")
map.redirect("/package", "/dataset")
Expand Down Expand Up @@ -229,7 +231,7 @@ def make_map():
]))
)
map.connect('/dataset/{id}', controller='package', action='read')
map.connect('/dataset/{id}/resource/{resource_id}',
map.connect('/dataset/{id}/resource/{resource_id}',
controller='package', action="resource_read"
)

Expand All @@ -241,11 +243,11 @@ def make_map():
##map.connect('/group/new', controller='group_formalchemy', action='new')
##map.connect('/group/edit/{id}', controller='group_formalchemy', action='edit')

# These named routes are used for custom group forms which will use the
# These named routes are used for custom group forms which will use the
# names below based on the group.type (dataset_group is the default type)
map.connect('group_index', '/group', controller='group', action='index')
map.connect('group_list', '/group/list', controller='group', action='list')
map.connect('group_new', '/group/new', controller='group', action='new')
map.connect('group_new', '/group/new', controller='group', action='new')
map.connect('group_action', '/group/{action}/{id}', controller='group',
requirements=dict(action='|'.join([
'edit',
Expand All @@ -255,10 +257,10 @@ def make_map():
)
map.connect('group_read', '/group/{id}', controller='group', action='read')


register_package_behaviour(map)
register_group_behaviour(map)

register_group_behaviour(map)


# authz group
map.redirect("/authorizationgroups", "/authorizationgroup")
map.redirect("/authorizationgroups/{url:.*}", "/authorizationgroup/{url}")
Expand Down Expand Up @@ -299,17 +301,17 @@ def make_map():

map.connect('ckanadmin_index', '/ckan-admin', controller='admin', action='index')
map.connect('ckanadmin', '/ckan-admin/{action}', controller='admin')

# Storage routes
map.connect('storage_api', "/api/storage",
controller='ckan.controllers.storage:StorageAPIController',
map.connect('storage_api', "/api/storage",
controller='ckan.controllers.storage:StorageAPIController',
action='index')
map.connect('storage_api_set_metadata', '/api/storage/metadata/{label:.*}',
controller='ckan.controllers.storage:StorageAPIController',
map.connect('storage_api_set_metadata', '/api/storage/metadata/{label:.*}',
controller='ckan.controllers.storage:StorageAPIController',
action='set_metadata',
conditions={'method': ['PUT','POST']})
map.connect('storage_api_get_metadata', '/api/storage/metadata/{label:.*}',
controller='ckan.controllers.storage:StorageAPIController',
map.connect('storage_api_get_metadata', '/api/storage/metadata/{label:.*}',
controller='ckan.controllers.storage:StorageAPIController',
action='get_metadata',
conditions={'method': ['GET']})
map.connect('storage_api_auth_request',
Expand All @@ -335,12 +337,12 @@ def make_map():
map.connect('storage_file', '/storage/f/{label:.*}',
controller='ckan.controllers.storage:StorageController',
action='file')


for plugin in routing_plugins:
map = plugin.after_map(map)


map.redirect('/*(url)/', '/{url}',
_redirect_code='301 Moved Permanently')
map.connect('/*url', controller='template', action='view')
Expand Down

0 comments on commit 1ecdfda

Please sign in to comment.