Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also .

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also .
Choose a base branch
Choose a head branch
  • 3 commits
  • 3 files changed
  • 0 commit comments
  • 1 contributor
Showing with 82 additions and 20 deletions.
  1. +14 −7 conductor/blueprints/package/controllers.py
  2. +67 −12 tests/module/blueprints/package/test_controllers.py
  3. +1 −1 tox.ini
@@ -106,10 +106,9 @@ def toggle_publish(name, token, toggle=False, publish=False):
def update_params(name, token, params):
'''
Update package.defaultParams for the passed `name`. Only the owner can
update.
'''
"""
Update package.defaultParams for the passed `name`. Only owner can update.
"""
try:
token = jwt.decode(token.encode('ascii'),
PUBLIC_KEY,
@@ -121,12 +120,20 @@ def update_params(name, token, params):
except jwt.InvalidTokenError:
return None
_, _, datapackage, _, _, _, _, _ = package_registry.get_raw(name)
try:
_, _, datapackage, *_ = package_registry.get_raw(name)
except KeyError:
# Can't find package by `name`
return None
datapackage['defaultParams'] = params
package_registry.update_model(name, datapackage=datapackage)
# Clear the cached entry for this package
api_cache.clear(name)
# Clear the cached entry for this package is api_cache isn't None.
try:
api_cache.clear(name)
except AttributeError:
pass
return {'success': True}
@@ -7,7 +7,6 @@
from elasticsearch import Elasticsearch, NotFoundError
from os_package_registry import PackageRegistry
from ..config import LOCAL_ELASTICSEARCH
from werkzeug.exceptions import BadRequest, NotFound, Forbidden
try:
from unittest.mock import Mock, patch
@@ -21,7 +20,8 @@
Response = namedtuple('Response', ['status_code'])
_cache = {}
callback = 'http://conductor/callback'
token = jwt.encode({'userid': 'owner'}, PRIVATE_KEY, algorithm='RS256').decode('ascii')
token = jwt.encode({'userid': 'owner'},
PRIVATE_KEY, algorithm='RS256').decode('ascii')
def cache_get(key):
@@ -64,7 +64,8 @@ def assertResponse(self, ret, status=None, progress=None, error=None):
def test___load___good_request(self):
api_load = module.upload
self.requests.get = Mock(return_value=Response(200))
self.assertResponse(api_load('bla', callback, token, cache_set), 'queued', 0)
self.assertResponse(api_load('bla', callback, token, cache_set),
'queued', 0)
# def test___load___bad_request(self):
# api_load = module.upload
@@ -79,7 +80,8 @@ def test___load___good_request(self):
def test___callback___server_down(self):
api_load = module.upload
self.requests.get = Mock(return_value=Response(499))
self.assertResponse(api_load('bla', callback, token, cache_set), 'fail', error='HTTP 499')
self.assertResponse(api_load('bla', callback, token, cache_set),
'fail', error='HTTP 499')
def test___poll___good_request(self):
api_load = module.upload
@@ -100,47 +102,52 @@ def test___poll___nonexistent_request(self):
def test___callback___no_update(self):
# No parameters
api_callback = module.upload_status_update
self.assertEquals(api_callback('bla4', None, None, 0, cache_get, cache_set), None)
self.assertEquals(api_callback('bla4', None, None, 0, cache_get,
cache_set), None)
api_poll = module.upload_status
self.assertEquals(api_poll('bla4', cache_get), None)
def test___callback___just_status(self):
# No parameters
api_callback = module.upload_status_update
self.assertEquals(api_callback('bla5', 'status1', None, 0, cache_get, cache_set), None)
self.assertEquals(api_callback('bla5', 'status1', None, 0, cache_get,
cache_set), None)
api_poll = module.upload_status
self.assertResponse(api_poll('bla5', cache_get), 'status1', 0)
def test___callback___progress(self):
# No parameters
api_callback = module.upload_status_update
self.assertEquals(api_callback('bla6', 'status2', None, 123, cache_get, cache_set), None)
self.assertEquals(api_callback('bla6', 'status2', None, 123, cache_get,
cache_set), None)
api_poll = module.upload_status
self.assertResponse(api_poll('bla6', cache_get), 'status2', 123)
def test___callback___errormsg_wrong_status(self):
# No parameters
api_callback = module.upload_status_update
self.assertEquals(api_callback('bla7', 'status3', 'wtf', 123, cache_get, cache_set), None)
self.assertEquals(api_callback('bla7', 'status3', 'wtf', 123,
cache_get, cache_set), None)
api_poll = module.upload_status
self.assertResponse(api_poll('bla7', cache_get), 'status3', 123)
def test___callback___error_good_status(self):
# No parameters
api_callback = module.upload_status_update
self.assertEquals(api_callback('bla8', 'fail', 'wtf8', 0, cache_get, cache_set), None)
self.assertEquals(api_callback('bla8', 'fail', 'wtf8', 0, cache_get,
cache_set), None)
api_poll = module.upload_status
self.assertResponse(api_poll('bla8', cache_get), 'fail', 0, 'wtf8')
class PublishDeleteAPITests(unittest.TestCase):
DATASET_NAME='owner:datasetid'
DATASET_NAME = 'owner:datasetid'
def setUp(self):
# Clean index
@@ -154,7 +161,8 @@ def setUp(self):
time.sleep(1)
self.pr = PackageRegistry(es_connection_string=LOCAL_ELASTICSEARCH)
self.pr.save_model(self.DATASET_NAME, 'datapackage_url', {}, {}, 'dataset', 'author', '', True)
self.pr.save_model(self.DATASET_NAME, 'datapackage_url', {}, {},
'dataset', 'author', '', True)
def test__initial_value__none(self):
pkg = self.pr.get_package(self.DATASET_NAME)
@@ -206,7 +214,54 @@ def test__force_unpublish__correct(self):
assert(pkg.get('private') is True)
class UpdateDefaultParamsAPITests(unittest.TestCase):
DATASET_NAME = 'owner:datasetid'
DEFAULT_PARAMS = {'param1': True, 'param2': 'hello'}
def setUp(self):
# Clean index
self.es = Elasticsearch(hosts=[LOCAL_ELASTICSEARCH])
try:
self.es.indices.delete(index='users')
self.es.indices.delete(index='packages')
except NotFoundError:
pass
self.es.indices.create('users')
time.sleep(1)
self.pr = PackageRegistry(es_connection_string=LOCAL_ELASTICSEARCH)
self.pr.save_model(self.DATASET_NAME, 'datapackage_url', {}, {},
'dataset', 'author', '', True)
def test__initial_value__none(self):
pkg = self.pr.get_package(self.DATASET_NAME)
assert(pkg.get('defaultParams') is None)
def test__update_params__empty_params(self):
module.update_params('owner:datasetid', token, {})
pkg = self.pr.get_package(self.DATASET_NAME)
assert(pkg.get('defaultParams') == {})
def test__update_params__with_value(self):
module.update_params('owner:datasetid', token, self.DEFAULT_PARAMS)
pkg = self.pr.get_package(self.DATASET_NAME)
assert(pkg.get('defaultParams') == self.DEFAULT_PARAMS)
def test__update_params__bad_owner(self):
module.update_params('badowner:datasetid', token, self.DEFAULT_PARAMS)
pkg = self.pr.get_package(self.DATASET_NAME)
assert(pkg.get('defaultParams') is None)
def test__update_params__bad_package_id(self):
module.update_params('owner:baddatasetid', token, self.DEFAULT_PARAMS)
pkg = self.pr.get_package(self.DATASET_NAME)
assert(pkg.get('defaultParams') is None)
class StatsTests(unittest.TestCase):
def test__stats__delegates_to_package_registry(self):
with patch('conductor.blueprints.package.models.package_registry.get_stats') as get_stats_mock:
stats_path = \
'conductor.blueprints.package.models.package_registry.get_stats'
with patch(stats_path) as get_stats_mock:
assert module.stats() == get_stats_mock()
View
@@ -11,7 +11,7 @@ deps =
nose
coverage
commands =
nosetests tests \
nosetests -w tests \
{posargs} \
--with-coverage \
--cover-package conductor

No commit comments for this range