Skip to content

Commit

Permalink
[#3229] Yet even more fixes and idiosyncrasies
Browse files Browse the repository at this point in the history
  • Loading branch information
amercader committed Sep 12, 2016
1 parent e4a3d1d commit 6d6a430
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 137 deletions.
96 changes: 0 additions & 96 deletions ckan/tests/legacy/functional/api/test_util.py
Expand Up @@ -17,81 +17,6 @@ def setup_class(cls):
def teardown_class(cls):
model.repo.rebuild_db()

def test_package_slug_invalid(self):

with self.app.flask_app.test_request_context():
url = url_for(controller='api', action='is_slug_valid', ver=2)

response = self.app.get(
url,
params={
'type': u'package',
'slug': u'edit',
},
status=200,
)
assert_equal(response.body, '{"valid": false}')
assert_equal(response.headers['Content-Type'], 'application/json;charset=utf-8')


with self.app.flask_app.test_request_context():
url = url_for(controller='api', action='is_slug_valid', ver=2)

response = self.app.get(
url,
params={
'type': u'package',
'slug': u'new',
},
status=200,
)
assert_equal(response.body, '{"valid": false}')
assert_equal(response.headers['Content-Type'], 'application/json;charset=utf-8')

def test_package_slug_valid(self):

with self.app.flask_app.test_request_context():
url = url_for(controller='api', action='is_slug_valid', ver=2)

response = self.app.get(
url,
params={
'type': u'package',
'slug': u'A New Title * With & Funny CHARacters',
},
status=200,
)
assert_equal(response.body, '{"valid": true}')
assert_equal(response.headers['Content-Type'], 'application/json;charset=utf-8')


with self.app.flask_app.test_request_context():
url = url_for(controller='api', action='is_slug_valid', ver=2)

response = self.app.get(
url,
params={
'type': u'package',
'slug': u'warandpeace',
},
status=200,
)
assert_equal(response.body, '{"valid": false}')
assert_equal(response.headers['Content-Type'], 'application/json;charset=utf-8')

def test_markdown(self):
markdown = '''##Title'''

with self.app.flask_app.test_request_context():
url = url_for(controller='api', action='markdown', ver=2)

response = self.app.get(
url,
params={'q': markdown},
status=200,
)
assert_equal(response.body, '"<h2>Title</h2>"')

def test_munge_package_name(self):

with self.app.flask_app.test_request_context():
Expand Down Expand Up @@ -127,24 +52,3 @@ def test_munge_tag(self):
status=200,
)
assert_equal(response.body, '"test-subject"')

def test_status(self):

with self.app.flask_app.test_request_context():
url = url_for(controller='api', action='status', ver=2)

response = self.app.get(
url,
params={},
status=200,
)
res = json.loads(response.body)
assert_equal(res['ckan_version'], __version__)
assert_equal(res['site_url'], 'http://test.ckan.net')
assert_equal(res['site_title'], 'CKAN')
assert_equal(res['site_description'], '')
assert_equal(res['locale_default'], 'en')

assert_equal(type(res['extensions']), list)
expected_extensions = set(('stats',))
assert_equal(set(res['extensions']), expected_extensions)
17 changes: 17 additions & 0 deletions ckan/tests/logic/action/test_get.py
Expand Up @@ -2,6 +2,7 @@

import nose.tools

from ckan import __version__
import ckan.logic as logic
import ckan.plugins as p
import ckan.tests.helpers as helpers
Expand Down Expand Up @@ -2087,3 +2088,19 @@ def test_followee_list_with_q(self):

eq(len(followee_list), 1)
eq(followee_list[0]['display_name'], 'Environment')


class TestStatusShow(helpers.FunctionalTestBase):

def test_status_show(self):

status = helpers.call_action(u'status_show')

eq(status[u'ckan_version'], __version__)
eq(status[u'site_url'], u'http://test.ckan.net')
eq(status[u'site_title'], u'CKAN')
eq(status[u'site_description'], u'')
eq(status[u'locale_default'], u'en')

eq(type(status[u'extensions']), list)
eq(status[u'extensions'], [u'stats'])
79 changes: 38 additions & 41 deletions ckan/views/api.py
Expand Up @@ -3,7 +3,6 @@
import os
import cgi
import logging
import urllib

from flask import Blueprint, make_response
from werkzeug.exceptions import BadRequest
Expand Down Expand Up @@ -563,9 +562,9 @@ def rest_delete(ver=API_REST_DEFAULT_VERSION, register=None, subregister=None,
return _finish(409, e.error_dict, content_type=u'json')


def util_dataset_autocomplete():
q = request.params.get(u'incomplete', u'')
limit = request.params.get(u'limit', 10)
def dataset_autocomplete(ver=API_REST_DEFAULT_VERSION):
q = request.args.get(u'incomplete', u'')
limit = request.args.get(u'limit', 10)
package_dicts = []
if q:
context = {u'model': model, u'session': model.Session,
Expand All @@ -580,10 +579,9 @@ def util_dataset_autocomplete():
return _finish_ok(resultSet)


def util_tag_autocomplete():
q = request.str_params.get(u'incomplete', u'')
q = unicode(urllib.unquote(q), u'utf-8')
limit = request.params.get(u'limit', 10)
def tag_autocomplete(ver=API_REST_DEFAULT_VERSION):
q = request.args.get(u'incomplete', u'')
limit = request.args.get(u'limit', 10)
tag_names = []
if q:
context = {u'model': model, u'session': model.Session,
Expand All @@ -601,9 +599,9 @@ def util_tag_autocomplete():
return _finish_ok(resultSet)


def util_format_autocomplete():
q = request.params.get(u'incomplete', u'')
limit = request.params.get(u'limit', 5)
def format_autocomplete(ver=API_REST_DEFAULT_VERSION):
q = request.args.get(u'incomplete', u'')
limit = request.args.get(u'limit', 5)
formats = []
if q:
context = {u'model': model, u'session': model.Session,
Expand All @@ -619,9 +617,9 @@ def util_format_autocomplete():
return _finish_ok(resultSet)


def util_user_autocomplete():
q = request.params.get(u'q', u'')
limit = request.params.get(u'limit', 20)
def user_autocomplete(ver=API_REST_DEFAULT_VERSION):
q = request.args.get(u'q', u'')
limit = request.args.get(u'limit', 20)
user_list = []
if q:
context = {u'model': model, u'session': model.Session,
Expand All @@ -630,43 +628,42 @@ def util_user_autocomplete():
data_dict = {u'q': q, u'limit': limit}

user_list = get_action(u'user_autocomplete')(context, data_dict)
return user_list
return _finish_ok(user_list)


def util_group_autocomplete():
q = request.params.get(u'q', u'')
limit = request.params.get(u'limit', 20)
def group_autocomplete(ver=API_REST_DEFAULT_VERSION):
q = request.args.get(u'q', u'')
limit = request.args.get(u'limit', 20)
group_list = []

if q:
context = {u'user': g.user, u'model': model}
data_dict = {u'q': q, u'limit': limit}
group_list = get_action(u'group_autocomplete')(context, data_dict)
return group_list
return _finish_ok(group_list)


def util_organization_autocomplete():
q = request.params.get(u'q', u'')
limit = request.params.get(u'limit', 20)
def organization_autocomplete(ver=API_REST_DEFAULT_VERSION):
q = request.args.get(u'q', u'')
limit = request.args.get(u'limit', 20)
organization_list = []

if q:
context = {u'user': g.user, u'model': model}
data_dict = {u'q': q, u'limit': limit}
organization_list = get_action(
u'organization_autocomplete')(context, data_dict)
return organization_list
return _finish_ok(organization_list)


def util_i18n_js_translations(lang):
def i18n_js_translations(lang, ver=API_REST_DEFAULT_VERSION):
ckan_path = os.path.join(os.path.dirname(__file__), u'..')
source = os.path.abspath(os.path.join(ckan_path, u'public',
u'base', u'i18n', u'{0}.js'.format(lang)))
headers = {u'Content-Type': CONTENT_TYPES[u'json']}
if not os.path.exists(source):
return u'{}'
translations = open(source, u'r').read()
return make_response((translations, 200, headers))
return _finish_ok(translations)


# Routing
Expand Down Expand Up @@ -704,7 +701,7 @@ def util_i18n_js_translations(lang):
u'activity',
]

rest_version_rule = u'/<int(min=1, max=2):ver>'
version_rule = u'/<int(min=1, max=2):ver>'
rest_root_rule = u'/rest/<any({allowed}):register>'.format(
allowed=u','.join(register_list))
rest_id_rule = rest_root_rule + u'/<id>'
Expand All @@ -729,21 +726,21 @@ def util_i18n_js_translations(lang):
# number at the start (eg /api/rest/package and /api/rest/2/package)
for rule, view_func, methods in rest_rules:
api.add_url_rule(rule, view_func=view_func, methods=methods)
api.add_url_rule(rest_version_rule + rule, view_func=view_func,
api.add_url_rule(version_rule + rule, view_func=view_func,
methods=methods)

# Util API

api.add_url_rule(u'/util/dataset/autocomplete',
view_func=util_dataset_autocomplete)
api.add_url_rule(u'/util/user/autocomplete',
view_func=util_user_autocomplete)
api.add_url_rule(u'/util/tag/autocomplete',
view_func=util_tag_autocomplete)
api.add_url_rule(u'/util/group/autocomplete',
view_func=util_group_autocomplete)
api.add_url_rule(u'/util/organization/autocomplete',
view_func=util_organization_autocomplete)
api.add_url_rule(u'/util/resource/format_autocomplete',
view_func=util_format_autocomplete)
api.add_url_rule(u'/i18n/<lang>', view_func=util_i18n_js_translations)
util_rules = [
(u'/util/dataset/autocomplete', dataset_autocomplete),
(u'/util/user/autocomplete', user_autocomplete),
(u'/util/tag/autocomplete', tag_autocomplete),
(u'/util/group/autocomplete', group_autocomplete),
(u'/util/organization/autocomplete', organization_autocomplete),
(u'/util/resource/format_autocomplete', format_autocomplete),
(u'/i18n/<lang>', i18n_js_translations),
]

for rule, view_func in util_rules:
api.add_url_rule(rule, view_func=view_func)
api.add_url_rule(version_rule + rule, view_func=view_func)

0 comments on commit 6d6a430

Please sign in to comment.