Add after_show extension point

We hook into the package_show extension point in order to:

1. For harvest_source type datasets, add extra information about the
source, jobs, etc (calling harvest_source_show_status)
2. For normal datasets, check if they were harvested, and if so, add a
reference to the harvest object and harvest source.
This commit is contained in:
amercader 2012-12-12 11:49:55 +00:00
parent 2557636994
commit b567e562f4
1 changed files with 43 additions and 1 deletions

View File

@ -3,12 +3,15 @@ from logging import getLogger
from pylons import config
from ckan import logic
from ckan import model
import ckan.plugins as p
from ckan.lib.plugins import DefaultDatasetForm
from ckan.lib.navl import dictization_functions
from ckanext.harvest import logic as harvest_logic
from ckanext.harvest.model import setup as model_setup
from ckanext.harvest.model import HarvestSource, HarvestJob
from ckanext.harvest.model import HarvestSource, HarvestJob, HarvestObject
from ckanext.harvest.model import UPDATE_FREQUENCIES
@ -41,6 +44,45 @@ class Harvest(p.SingletonPlugin, DefaultDatasetForm):
# Edit the actual HarvestSource object
_update_harvest_source_object(data_dict)
def after_show(self, context, data_dict):
def add_extra(data_dict, key, value):
if not 'extras' in data_dict:
data_dict['extras'] = []
data_dict['extras'].append({
'key': key, 'value': '"{0}"'.format(value), 'state': u'active'
})
if 'type' in data_dict and data_dict['type'] == DATASET_TYPE_NAME:
# This is a harvest source dataset, add extra info from the
# HarvestSource object
source = HarvestSource.get(data_dict['id'])
if not source:
log.error('Harvest source not found for dataset {0}'.format(data_dict['id']))
return data_dict
data_dict['status'] = harvest_logic.action.get.harvest_source_show_status(context, {'id': source.id})
elif not 'type' in data_dict or data_dict['type'] != DATASET_TYPE_NAME:
# This is a normal dataset, check if it was harvested and if so, add
# info about the HarvestObject and HarvestSource
harvest_object = model.Session.query(HarvestObject) \
.filter(HarvestObject.package_id==data_dict['id']) \
.filter(HarvestObject.current==True) \
.first()
if harvest_object:
for key, value in [
('harvest_object_id', harvest_object.id),
('harvest_source_id', harvest_object.source.id),
('harvest_source_title', harvest_object.source.title),
]:
add_extra(data_dict, key, value)
return data_dict
## IDatasetForm
def is_fallback(self):