[#97] Persitent endpoint for datasets harvest objects
Contrary to `/harvest/object/xxx`, this endpoint is passed the dataset id, thus it not depends on a particular object but the most recent one.
This commit is contained in:
parent
040984d4ec
commit
43f1d08255
|
@ -88,11 +88,14 @@ class ViewController(BaseController):
|
||||||
|
|
||||||
redirect(h.url_for('{0}_admin'.format(DATASET_TYPE_NAME), id=id))
|
redirect(h.url_for('{0}_admin'.format(DATASET_TYPE_NAME), id=id))
|
||||||
|
|
||||||
def show_object(self,id):
|
def show_object(self, id, ref_type='object'):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
context = {'model':model, 'user':c.user}
|
context = {'model':model, 'user':c.user}
|
||||||
obj = p.toolkit.get_action('harvest_object_show')(context, {'id':id})
|
if ref_type == 'object':
|
||||||
|
obj = p.toolkit.get_action('harvest_object_show')(context, {'id': id})
|
||||||
|
elif ref_type == 'dataset':
|
||||||
|
obj = p.toolkit.get_action('harvest_object_show')(context, {'dataset_id': id})
|
||||||
|
|
||||||
# Check content type. It will probably be either XML or JSON
|
# Check content type. It will probably be either XML or JSON
|
||||||
try:
|
try:
|
||||||
|
@ -119,8 +122,8 @@ class ViewController(BaseController):
|
||||||
|
|
||||||
response.headers['Content-Length'] = len(content)
|
response.headers['Content-Length'] = len(content)
|
||||||
return content.encode('utf-8')
|
return content.encode('utf-8')
|
||||||
except p.toolkit.ObjectNotFound:
|
except p.toolkit.ObjectNotFound, e:
|
||||||
abort(404,_('Harvest object not found'))
|
abort(404,_(str(e)))
|
||||||
except p.toolkit.NotAuthorized:
|
except p.toolkit.NotAuthorized:
|
||||||
abort(401,self.not_auth_message)
|
abort(401,self.not_auth_message)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
|
|
|
@ -249,15 +249,34 @@ def harvest_job_list(context,data_dict):
|
||||||
@side_effect_free
|
@side_effect_free
|
||||||
def harvest_object_show(context,data_dict):
|
def harvest_object_show(context,data_dict):
|
||||||
|
|
||||||
check_access('harvest_object_show',context,data_dict)
|
p.toolkit.check_access('harvest_object_show', context, data_dict)
|
||||||
|
|
||||||
id = data_dict.get('id')
|
id = data_dict.get('id')
|
||||||
attr = data_dict.get('attr',None)
|
dataset_id = data_dict.get('dataset_id')
|
||||||
obj = HarvestObject.get(id,attr=attr)
|
|
||||||
if not obj:
|
|
||||||
raise NotFound
|
|
||||||
|
|
||||||
return harvest_object_dictize(obj,context)
|
if id:
|
||||||
|
attr = data_dict.get('attr',None)
|
||||||
|
obj = HarvestObject.get(id,attr=attr)
|
||||||
|
elif dataset_id:
|
||||||
|
model = context['model']
|
||||||
|
|
||||||
|
pkg = model.Package.get(dataset_id)
|
||||||
|
if not pkg:
|
||||||
|
raise p.toolkit.ObjectNotFound('Dataset not found')
|
||||||
|
|
||||||
|
obj = model.Session.query(HarvestObject) \
|
||||||
|
.filter(HarvestObject.package_id == pkg.id) \
|
||||||
|
.filter(HarvestObject.current == True) \
|
||||||
|
.first()
|
||||||
|
else:
|
||||||
|
raise p.toolkit.ValidationError(
|
||||||
|
'Please provide either an "id" or a "dataset_id" parameter')
|
||||||
|
|
||||||
|
if not obj:
|
||||||
|
raise p.toolkit.ObjectNotFound('Harvest object not found')
|
||||||
|
|
||||||
|
|
||||||
|
return harvest_object_dictize(obj, context)
|
||||||
|
|
||||||
@side_effect_free
|
@side_effect_free
|
||||||
def harvest_object_list(context,data_dict):
|
def harvest_object_list(context,data_dict):
|
||||||
|
|
|
@ -210,6 +210,7 @@ class Harvest(p.SingletonPlugin, DefaultDatasetForm):
|
||||||
map.connect('harvest_job_show', '/' + DATASET_TYPE_NAME + '/{source}/job/{id}', controller=controller, action='show_job')
|
map.connect('harvest_job_show', '/' + DATASET_TYPE_NAME + '/{source}/job/{id}', controller=controller, action='show_job')
|
||||||
|
|
||||||
map.connect('harvest_object_show', '/' + DATASET_TYPE_NAME + '/object/:id', controller=controller, action='show_object')
|
map.connect('harvest_object_show', '/' + DATASET_TYPE_NAME + '/object/:id', controller=controller, action='show_object')
|
||||||
|
map.connect('harvest_object_for_dataset_show', '/dataset/harvest_object/:id', controller=controller, action='show_object', ref_type='dataset')
|
||||||
|
|
||||||
org_controller = 'ckanext.harvest.controllers.organization:OrganizationController'
|
org_controller = 'ckanext.harvest.controllers.organization:OrganizationController'
|
||||||
map.connect('{0}_org_list'.format(DATASET_TYPE_NAME), '/organization/' + DATASET_TYPE_NAME + '/' + '{id}', controller=org_controller, action='source_list')
|
map.connect('{0}_org_list'.format(DATASET_TYPE_NAME), '/organization/' + DATASET_TYPE_NAME + '/' + '{id}', controller=org_controller, action='source_list')
|
||||||
|
|
Loading…
Reference in New Issue