use blueprint instead of controllers
This commit is contained in:
parent
e37a17838d
commit
ec62dc0c76
|
@ -1,5 +1,6 @@
|
||||||
import logging
|
#import logging
|
||||||
from ckan.controllers.home import HomeController
|
#from ckan.controllers.home import HomeController
|
||||||
|
from flask import Blueprint, render_template, g
|
||||||
import ckan.plugins as p
|
import ckan.plugins as p
|
||||||
from ckan.common import OrderedDict, _, g, c
|
from ckan.common import OrderedDict, _, g, c
|
||||||
import ckan.lib.search as search
|
import ckan.lib.search as search
|
||||||
|
@ -9,63 +10,65 @@ import ckan.lib.maintain as maintain
|
||||||
import ckan.lib.base as base
|
import ckan.lib.base as base
|
||||||
import ckan.lib.helpers as h
|
import ckan.lib.helpers as h
|
||||||
|
|
||||||
class d4SHomeController():
|
#blueprint definition
|
||||||
|
d4science_home = Blueprint("d4science_home", __name__)
|
||||||
|
|
||||||
#Overriding controllers.HomeController.index method
|
#@d4science_home.route("/catalog")
|
||||||
def index(self):
|
@d4science_home.route("/")
|
||||||
try:
|
def index():
|
||||||
# package search
|
try:
|
||||||
context = {'model': model, 'session': model.Session,'user': c.user, 'auth_user_obj': c.userobj}
|
# package search
|
||||||
|
context = {'model': model, 'session': model.Session,'user': g.user, 'auth_user_obj': g.userobj}
|
||||||
|
|
||||||
facets = OrderedDict()
|
facets = OrderedDict()
|
||||||
|
|
||||||
default_facet_titles = {
|
default_facet_titles = {
|
||||||
'organization': _('Organizations'),
|
'organization': _('Organizations'),
|
||||||
'groups': _('Groups'),
|
'groups': _('Groups'),
|
||||||
'tags': _('Tags'),
|
'tags': _('Tags'),
|
||||||
'res_format': _('Formats'),
|
'res_format': _('Formats'),
|
||||||
'license_id': _('Licenses'),
|
'license_id': _('Licenses'),
|
||||||
}
|
|
||||||
|
|
||||||
for facet in g.facets:
|
|
||||||
if facet in default_facet_titles:
|
|
||||||
facets[facet] = default_facet_titles[facet]
|
|
||||||
else:
|
|
||||||
facets[facet] = facet
|
|
||||||
|
|
||||||
# Facet titles
|
|
||||||
for plugin in p.PluginImplementations(p.IFacets):
|
|
||||||
facets = plugin.dataset_facets(facets, 'dataset')
|
|
||||||
|
|
||||||
c.facet_titles = facets
|
|
||||||
|
|
||||||
data_dict = {
|
|
||||||
'q': '*:*',
|
|
||||||
'facet.field': list(facets.keys()),
|
|
||||||
'rows': 4,
|
|
||||||
'start': 0,
|
|
||||||
'sort': 'views_recent desc',
|
|
||||||
'fq': 'capacity:"public"'
|
|
||||||
}
|
}
|
||||||
query = logic.get_action('package_search')(context, data_dict)
|
|
||||||
c.search_facets = query['search_facets']
|
|
||||||
c.package_count = query['count']
|
|
||||||
c.datasets = query['results']
|
|
||||||
|
|
||||||
#print "c.search_facets: "
|
|
||||||
#print " ".join(c.search_facets)
|
|
||||||
|
|
||||||
except search.SearchError:
|
|
||||||
c.package_count = 0
|
|
||||||
|
|
||||||
if c.userobj and not c.userobj.email:
|
for facet in g.facets:
|
||||||
url = h.url_for(controller='user', action='edit')
|
if facet in default_facet_titles:
|
||||||
msg = _('Please <a href="%s">update your profile</a>'
|
facets[facet] = default_facet_titles[facet]
|
||||||
' and add your email address. ') % url + \
|
else:
|
||||||
_('%s uses your email address'
|
facets[facet] = facet
|
||||||
' if you need to reset your password.') \
|
|
||||||
% g.site_title
|
|
||||||
h.flash_notice(msg, allow_html=True)
|
|
||||||
|
|
||||||
return base.render('home/index.html', cache_force=True)
|
# gestion filtri/facets
|
||||||
|
for plugin in p.PluginImplementations(p.IFacets):
|
||||||
|
facets = plugin.dataset_facets(facets, 'dataset')
|
||||||
|
|
||||||
|
g.facet_titles = facets
|
||||||
|
|
||||||
|
data_dict = {
|
||||||
|
'q': '*:*',
|
||||||
|
'facet.field': list(facets.keys()),
|
||||||
|
'rows': 4,
|
||||||
|
'start': 0,
|
||||||
|
'sort': 'views_recent desc',
|
||||||
|
'fq': 'capacity:"public"'
|
||||||
|
}
|
||||||
|
query = logic.get_action('package_search')(context, data_dict)
|
||||||
|
g.search_facets = query['search_facets']
|
||||||
|
g.package_count = query['count']
|
||||||
|
g.datasets = query['results']
|
||||||
|
|
||||||
|
#print "c.search_facets: "
|
||||||
|
#print " ".join(c.search_facets)
|
||||||
|
|
||||||
|
except search.SearchError:
|
||||||
|
g.package_count = 0
|
||||||
|
|
||||||
|
if g.userobj and not g.userobj.email:
|
||||||
|
url = h.url_for('user.edit')
|
||||||
|
msg = _('Please <a href="%s">update your profile</a>'
|
||||||
|
' and add your email address. ') % url + \
|
||||||
|
_('%s uses your email address'
|
||||||
|
' if you need to reset your password.') \
|
||||||
|
% g.site_title
|
||||||
|
h.flash_notice(msg, allow_html=True)
|
||||||
|
|
||||||
|
return render_template('home/index.html', cache_force=True)
|
||||||
|
|
||||||
|
|
|
@ -1,135 +1,118 @@
|
||||||
# encoding: utf-8
|
# encoding: utf-8
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
import ckan.controllers.group as group
|
|
||||||
import ckan.plugins as plugins
|
|
||||||
import logging
|
import logging
|
||||||
import datetime
|
from flask import Blueprint, g, request, abort, render_template
|
||||||
from urllib.parse import urlencode
|
|
||||||
|
|
||||||
from pylons.i18n import get_lang
|
|
||||||
|
|
||||||
import ckan.lib.base as base
|
|
||||||
import ckan.lib.helpers as h
|
|
||||||
import ckan.lib.maintain as maintain
|
|
||||||
import ckan.lib.navl.dictization_functions as dict_fns
|
|
||||||
import ckan.logic as logic
|
|
||||||
import ckan.lib.search as search
|
|
||||||
import ckan.model as model
|
|
||||||
import ckan.authz as authz
|
|
||||||
import ckan.lib.plugins
|
|
||||||
import ckan.plugins as plugins
|
import ckan.plugins as plugins
|
||||||
from ckan.common import OrderedDict, c, g, request, _
|
import ckan.logic as logic
|
||||||
|
import ckan.model as model
|
||||||
|
import ckan.lib.helpers as h
|
||||||
|
import ckan.lib.search as search
|
||||||
|
from ckan.common import OrderedDict, _, NotAuthorized, NotFound
|
||||||
|
|
||||||
|
organization_vre = Blueprint("organization_vre", __name__)
|
||||||
|
|
||||||
|
''' The organization controller is for Organizations, which are implemented
|
||||||
|
as Groups with is_organization=True and group_type='organization'. It works
|
||||||
|
the same as the group controller apart from:
|
||||||
|
* templates and logic action/auth functions are sometimes customized
|
||||||
|
(switched using _replace_group_org)
|
||||||
|
* 'bulk_process' action only works for organizations
|
||||||
|
|
||||||
|
Nearly all the code for both is in the GroupController (for historical
|
||||||
|
reasons).
|
||||||
'''
|
'''
|
||||||
Created by Francesco Mangiacrapa, see: #8964
|
|
||||||
'''
|
|
||||||
class OrganizationVREController(group.GroupController):
|
|
||||||
''' The organization controller is for Organizations, which are implemented
|
|
||||||
as Groups with is_organization=True and group_type='organization'. It works
|
|
||||||
the same as the group controller apart from:
|
|
||||||
* templates and logic action/auth functions are sometimes customized
|
|
||||||
(switched using _replace_group_org)
|
|
||||||
* 'bulk_process' action only works for organizations
|
|
||||||
|
|
||||||
Nearly all the code for both is in the GroupController (for historical
|
group_types = ['organization']
|
||||||
reasons).
|
|
||||||
'''
|
|
||||||
|
|
||||||
group_types = ['organization']
|
def _guess_group_type(expecting_name=False):
|
||||||
|
return 'organization'
|
||||||
|
|
||||||
def _guess_group_type(self, expecting_name=False):
|
def _replace_group_org( string):
|
||||||
return 'organization'
|
''' substitute organization for group if this is an org'''
|
||||||
|
return re.sub('^group', 'organization', string)
|
||||||
|
|
||||||
def _replace_group_org(self, string):
|
def _update_facet_titles(facets, group_type):
|
||||||
''' substitute organization for group if this is an org'''
|
for plugin in plugins.PluginImplementations(plugins.IFacets):
|
||||||
return re.sub('^group', 'organization', string)
|
facets = plugin.organization_facets(
|
||||||
|
facets, group_type, None)
|
||||||
|
|
||||||
def _update_facet_titles(self, facets, group_type):
|
@organization_vre.route('/organization_vre')
|
||||||
for plugin in plugins.PluginImplementations(plugins.IFacets):
|
def index():
|
||||||
facets = plugin.organization_facets(
|
group_type = _guess_group_type()
|
||||||
facets, group_type, None)
|
page = h.get_page_number(request.args) or 1
|
||||||
|
items_per_page = 21
|
||||||
|
context = {'model': model, 'session': model.Session,
|
||||||
|
'user': g.user, 'for_view': True,
|
||||||
|
'with_private': False}
|
||||||
|
|
||||||
|
q = g.q = request.params.get('q', '')
|
||||||
|
sort_by = g.sort_by_selected = request.args.get('sort')
|
||||||
|
|
||||||
|
try:
|
||||||
|
logic.check_access('site_read', context)
|
||||||
|
logic.check_access('group_list', context)
|
||||||
|
except NotAuthorized:
|
||||||
|
abort(403, _('Not authorized to see this page'))
|
||||||
|
# pass user info to context as needed to view private datasets of
|
||||||
|
# orgs correctly
|
||||||
|
|
||||||
|
if g.userobj:
|
||||||
|
context['user_id'] = g.userobj.id
|
||||||
|
context['user_is_admin'] = g.userobj.sysadmin
|
||||||
|
|
||||||
|
data_dict_global_results = {
|
||||||
|
'all_fields': False,
|
||||||
|
'q': q,
|
||||||
|
'sort': sort_by,
|
||||||
|
'type': group_type or 'group',
|
||||||
|
}
|
||||||
|
global_results = logic.get_action('group_list')(context,data_dict_global_results)
|
||||||
|
|
||||||
|
data_dict_page_results = {
|
||||||
|
'all_fields': True,
|
||||||
|
'q': q,
|
||||||
|
'sort': sort_by,
|
||||||
|
'type': group_type or 'group',
|
||||||
|
'limit': items_per_page,
|
||||||
|
'offset': items_per_page * (page - 1),
|
||||||
|
}
|
||||||
|
page_results = logic.get_action('group_list')(context, data_dict_page_results)
|
||||||
|
|
||||||
|
g.page = h.Page(
|
||||||
|
collection=global_results,
|
||||||
|
page=page,
|
||||||
|
url=h.pager_url,
|
||||||
|
items_per_page=items_per_page,
|
||||||
|
)
|
||||||
|
g.page.items = page_results
|
||||||
|
return render_template('organization_vre/index.html',
|
||||||
|
extra_vars={'group_type': group_type})
|
||||||
|
|
||||||
def index(self):
|
|
||||||
group_type = self._guess_group_type()
|
|
||||||
|
|
||||||
page = h.get_page_number(request.params) or 1
|
@organization_vre.route('/organization_vre/<id>')
|
||||||
items_per_page = 21
|
def read(id, limit=20):
|
||||||
|
#group_type = self._ensure_controller_matches_group_type(
|
||||||
context = {'model': model, 'session': model.Session,
|
# id.split('@')[0])
|
||||||
'user': c.user, 'for_view': True,
|
group_type = 'organization'
|
||||||
'with_private': False}
|
|
||||||
|
context = {'model': model, 'session': model.Session,
|
||||||
q = c.q = request.params.get('q', '')
|
'user': g.user,
|
||||||
sort_by = c.sort_by_selected = request.params.get('sort')
|
'schema': logic.schema.group_form_schema(),
|
||||||
try:
|
'for_view': True}
|
||||||
self._check_access('site_read', context)
|
data_dict = {'id': id, 'type': group_type}
|
||||||
self._check_access('group_list', context)
|
|
||||||
except NotAuthorized:
|
# recupero eventuale query di ricerca
|
||||||
abort(403, _('Not authorized to see this page'))
|
g.q = request.args.get('q', '')
|
||||||
|
|
||||||
# pass user info to context as needed to view private datasets of
|
try:
|
||||||
# orgs correctly
|
#i dataset non si includono nel risultato
|
||||||
if c.userobj:
|
data_dict['include_datasets'] = False
|
||||||
context['user_id'] = c.userobj.id
|
g.group_dict = logic.get_action('group_show')(context, data_dict)
|
||||||
context['user_is_admin'] = c.userobj.sysadmin
|
g.group = context['group']
|
||||||
|
except (NotFound, NotAuthorized):
|
||||||
data_dict_global_results = {
|
abort(404, _('Group not found'))
|
||||||
'all_fields': False,
|
|
||||||
'q': q,
|
#read(id, limit, group_type)
|
||||||
'sort': sort_by,
|
return render_template('organization_vre/read.html',
|
||||||
'type': group_type or 'group',
|
extra_vars={'group_type': group_type})
|
||||||
}
|
|
||||||
global_results = self._action('group_list')(context,
|
|
||||||
data_dict_global_results)
|
|
||||||
|
|
||||||
data_dict_page_results = {
|
|
||||||
'all_fields': True,
|
|
||||||
'q': q,
|
|
||||||
'sort': sort_by,
|
|
||||||
'type': group_type or 'group',
|
|
||||||
'limit': items_per_page,
|
|
||||||
'offset': items_per_page * (page - 1),
|
|
||||||
}
|
|
||||||
page_results = self._action('group_list')(context,
|
|
||||||
data_dict_page_results)
|
|
||||||
|
|
||||||
c.page = h.Page(
|
|
||||||
collection=global_results,
|
|
||||||
page=page,
|
|
||||||
url=h.pager_url,
|
|
||||||
items_per_page=items_per_page,
|
|
||||||
)
|
|
||||||
|
|
||||||
c.page.items = page_results
|
|
||||||
return base.render('organization_vre/index.html',
|
|
||||||
extra_vars={'group_type': group_type})
|
|
||||||
|
|
||||||
|
|
||||||
def read(self, id, limit=20):
|
|
||||||
group_type = self._ensure_controller_matches_group_type(
|
|
||||||
id.split('@')[0])
|
|
||||||
|
|
||||||
context = {'model': model, 'session': model.Session,
|
|
||||||
'user': c.user,
|
|
||||||
'schema': self._db_to_form_schema(group_type=group_type),
|
|
||||||
'for_view': True}
|
|
||||||
data_dict = {'id': id, 'type': group_type}
|
|
||||||
|
|
||||||
# unicode format (decoded from utf8)
|
|
||||||
c.q = request.params.get('q', '')
|
|
||||||
|
|
||||||
try:
|
|
||||||
# Do not query for the group datasets when dictizing, as they will
|
|
||||||
# be ignored and get requested on the controller anyway
|
|
||||||
data_dict['include_datasets'] = False
|
|
||||||
c.group_dict = self._action('group_show')(context, data_dict)
|
|
||||||
c.group = context['group']
|
|
||||||
except (NotFound, NotAuthorized):
|
|
||||||
abort(404, _('Group not found'))
|
|
||||||
|
|
||||||
self._read(id, limit, group_type)
|
|
||||||
return base.render('organization_vre/read.html',
|
|
||||||
extra_vars={'group_type': group_type})
|
|
|
@ -1,88 +1,73 @@
|
||||||
import logging
|
import logging
|
||||||
import ckan.plugins as p
|
import ckan.plugins as p
|
||||||
from ckan.common import OrderedDict, _, g, c
|
from ckan.common import OrderedDict, _
|
||||||
import ckan.lib.search as search
|
import ckan.lib.search as search
|
||||||
import ckan.model as model
|
import ckan.model as model
|
||||||
import ckan.logic as logic
|
import ckan.logic as logic
|
||||||
import ckan.lib.maintain as maintain
|
|
||||||
import ckan.lib.base as base
|
|
||||||
import ckan.lib.helpers as h
|
import ckan.lib.helpers as h
|
||||||
|
from flask import Blueprint, render_template, request, g
|
||||||
|
from ckan.lib.search import SearchError
|
||||||
from urllib.parse import urlencode
|
from urllib.parse import urlencode
|
||||||
|
|
||||||
#from pylons.i18n import get_lang
|
|
||||||
from flask import Blueprint, render_template, g, request
|
|
||||||
|
|
||||||
import ckan.lib.base as base
|
|
||||||
import ckan.lib.navl.dictization_functions as dict_fns
|
|
||||||
import ckan.authz as authz
|
|
||||||
|
|
||||||
|
|
||||||
class d4STypeController(base.BaseController):
|
|
||||||
|
|
||||||
#Overriding controllers.HomeController.index method
|
|
||||||
def index(self):
|
|
||||||
try:
|
|
||||||
# package search
|
|
||||||
context = {'model': model, 'session': model.Session,'user': g.user, 'auth_user_obj': g.userobj}
|
|
||||||
|
|
||||||
facets = OrderedDict()
|
|
||||||
|
|
||||||
default_facet_titles = {
|
|
||||||
'organization': _('Organizations'),
|
|
||||||
'groups': _('Groups'),
|
|
||||||
'tags': _('Tags'),
|
|
||||||
'res_format': _('Formats'),
|
|
||||||
'license_id': _('Licenses'),
|
|
||||||
}
|
|
||||||
|
|
||||||
for facet in g.facets:
|
|
||||||
if facet in default_facet_titles:
|
|
||||||
facets[facet] = default_facet_titles[facet]
|
|
||||||
else:
|
|
||||||
facets[facet] = facet
|
|
||||||
|
|
||||||
# Facet titles
|
|
||||||
for plugin in p.PluginImplementations(p.IFacets):
|
|
||||||
facets = plugin.dataset_facets(facets, 'dataset')
|
|
||||||
|
|
||||||
g.facet_titles = facets
|
|
||||||
|
|
||||||
data_dict = {
|
|
||||||
'q': '*:*',
|
|
||||||
'facet.field': list(facets.keys()),
|
|
||||||
'rows': 4,
|
|
||||||
'start': 0,
|
|
||||||
'sort': 'views_recent desc',
|
|
||||||
'fq': 'capacity:"public"'
|
|
||||||
}
|
|
||||||
query = logic.get_action('package_search')(context, data_dict)
|
|
||||||
g.search_facets = query['search_facets']
|
|
||||||
g.package_count = query['count']
|
|
||||||
g.datasets = query['results']
|
|
||||||
|
|
||||||
#print "c.search_facets: "
|
|
||||||
#print " ".join(c.search_facets)
|
|
||||||
|
|
||||||
except search.SearchError:
|
|
||||||
g.package_count = 0
|
|
||||||
|
|
||||||
if g.userobj and not g.userobj.email:
|
|
||||||
#url = h.url_for(controller='user', action='edit') pylons
|
|
||||||
url = h.url_for('user.edit')
|
|
||||||
msg = _('Please <a href="%s">update your profile</a>'
|
|
||||||
' and add your email address. ') % url + \
|
|
||||||
_('%s uses your email address'
|
|
||||||
' if you need to reset your password.') \
|
|
||||||
% g.site_title
|
|
||||||
h.flash_notice(msg, allow_html=True)
|
|
||||||
|
|
||||||
#return base.render('type/index.html', cache_force=True) pylons
|
|
||||||
return render_template('type/index.html', cache_force=True)
|
|
||||||
|
|
||||||
d4s_type_blueprint = Blueprint('d4s_type', __name__)
|
d4s_type_blueprint = Blueprint('d4s_type', __name__)
|
||||||
|
|
||||||
@d4s_type_blueprint.route('/')
|
@d4s_type_blueprint.route('/')
|
||||||
def index():
|
def index():
|
||||||
controller = d4STypeController()
|
try:
|
||||||
return controller.index()
|
# package search
|
||||||
|
context = {'model': model, 'session': model.Session,'user': g.user, 'auth_user_obj': g.userobj}
|
||||||
|
|
||||||
|
facets = OrderedDict()
|
||||||
|
|
||||||
|
default_facet_titles = {
|
||||||
|
'organization': _('Organizations'),
|
||||||
|
'groups': _('Groups'),
|
||||||
|
'tags': _('Tags'),
|
||||||
|
'res_format': _('Formats'),
|
||||||
|
'license_id': _('Licenses'),
|
||||||
|
}
|
||||||
|
|
||||||
|
for facet in g.facets:
|
||||||
|
if facet in default_facet_titles:
|
||||||
|
facets[facet] = default_facet_titles[facet]
|
||||||
|
else:
|
||||||
|
facets[facet] = facet
|
||||||
|
|
||||||
|
# Facet titles
|
||||||
|
for plugin in p.PluginImplementations(p.IFacets):
|
||||||
|
facets = plugin.dataset_facets(facets, 'dataset')
|
||||||
|
|
||||||
|
g.facet_titles = facets
|
||||||
|
|
||||||
|
data_dict = {
|
||||||
|
'q': '*:*',
|
||||||
|
'facet.field': list(facets.keys()),
|
||||||
|
'rows': 4,
|
||||||
|
'start': 0,
|
||||||
|
'sort': 'views_recent desc',
|
||||||
|
'fq': 'capacity:"public"'
|
||||||
|
}
|
||||||
|
query = logic.get_action('package_search')(context, data_dict)
|
||||||
|
g.search_facets = query['search_facets']
|
||||||
|
g.package_count = query['count']
|
||||||
|
g.datasets = query['results']
|
||||||
|
|
||||||
|
#print "c.search_facets: "
|
||||||
|
#print " ".join(c.search_facets)
|
||||||
|
|
||||||
|
except search.SearchError:
|
||||||
|
g.package_count = 0
|
||||||
|
|
||||||
|
if g.userobj and not g.userobj.email:
|
||||||
|
#url = h.url_for(controller='user', action='edit') pylons
|
||||||
|
url = h.url_for('user.edit')
|
||||||
|
msg = _('Please <a href="%s">update your profile</a>'
|
||||||
|
' and add your email address. ') % url + \
|
||||||
|
_('%s uses your email address'
|
||||||
|
' if you need to reset your password.') \
|
||||||
|
% g.site_title
|
||||||
|
h.flash_notice(msg, allow_html=True)
|
||||||
|
|
||||||
|
#return base.render('type/index.html', cache_force=True) pylons
|
||||||
|
return render_template('type/index.html', cache_force=True)
|
||||||
|
|
||||||
|
|
|
@ -14,10 +14,6 @@ namespaces_dir = None
|
||||||
NAMESPACES_DIR_NAME = "namespaces_for_catalogue"
|
NAMESPACES_DIR_NAME = "namespaces_for_catalogue"
|
||||||
NAMESPACES_CACHE_FILENAME = "Namespaces_Catalogue_Categories.csv"
|
NAMESPACES_CACHE_FILENAME = "Namespaces_Catalogue_Categories.csv"
|
||||||
|
|
||||||
# Created by Francesco Mangiacrapa
|
|
||||||
# francesco.mangiacrapa@isti.cnr.it
|
|
||||||
# ISTI-CNR Pisa (ITALY)
|
|
||||||
|
|
||||||
|
|
||||||
# D4S_Cache_Controller
|
# D4S_Cache_Controller
|
||||||
class D4S_Cache_Controller():
|
class D4S_Cache_Controller():
|
||||||
|
|
|
@ -1,8 +1,3 @@
|
||||||
# Created by Francesco Mangiacrapa
|
|
||||||
# francesco.mangiacrapa@isti.cnr.it
|
|
||||||
# ISTI-CNR Pisa (ITALY)
|
|
||||||
|
|
||||||
## questo file va bene anche in p3 ##
|
|
||||||
import logging
|
import logging
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
|
@ -44,13 +44,8 @@ def reload_namespaces_from_IS(urlICProxy, resourceID, gcubeToken):
|
||||||
log.info("namespaces list read from IS is empty. Skipping caching update")
|
log.info("namespaces list read from IS is empty. Skipping caching update")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("Error occurred on reading namespaces from IS and refilling the cache!")
|
log.error("Error occurred on reading namespaces from IS and refilling the cache!")
|
||||||
print(e)
|
log.error(e)
|
||||||
|
|
||||||
|
|
||||||
# Created by Francesco Mangiacrapa
|
|
||||||
# francesco.mangiacrapa@isti.cnr.it
|
|
||||||
# ISTI-CNR Pisa (ITALY)
|
|
||||||
|
|
||||||
|
|
||||||
# D4S_IS_DiscoveryCatalogueNamespacesController is used to discovery namespaces for Catalogue Categories (implemented as a Singleton)
|
# D4S_IS_DiscoveryCatalogueNamespacesController is used to discovery namespaces for Catalogue Categories (implemented as a Singleton)
|
||||||
|
|
|
@ -7,11 +7,6 @@ NOCATEOGORY = 'nocategory'
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
# Created by Francesco Mangiacrapa
|
|
||||||
# francesco.mangiacrapa@isti.cnr.it
|
|
||||||
# ISTI-CNR Pisa (ITALY)
|
|
||||||
|
|
||||||
|
|
||||||
# D4S_Namespaces_Extra_Util is used to get the extra fields indexed for D4Science namespaces
|
# D4S_Namespaces_Extra_Util is used to get the extra fields indexed for D4Science namespaces
|
||||||
# @param: namespace_dict is the namespace dict of D4Science namespaces (defined in the Generic Resource: "Namespaces Catalogue Categories")
|
# @param: namespace_dict is the namespace dict of D4Science namespaces (defined in the Generic Resource: "Namespaces Catalogue Categories")
|
||||||
# @param: extras is the dictionary of extra fields for a certain item
|
# @param: extras is the dictionary of extra fields for a certain item
|
||||||
|
@ -25,7 +20,7 @@ class D4S_Namespaces_Extra_Util():
|
||||||
dict_extras = None
|
dict_extras = None
|
||||||
nms = namespaceid + ":"
|
nms = namespaceid + ":"
|
||||||
#has_namespace_ref = None
|
#has_namespace_ref = None
|
||||||
for key, value in extras:
|
for key, value in extras.items():
|
||||||
k = key
|
k = key
|
||||||
v = value
|
v = value
|
||||||
# print "key: " + k
|
# print "key: " + k
|
||||||
|
@ -53,7 +48,7 @@ class D4S_Namespaces_Extra_Util():
|
||||||
#break
|
#break
|
||||||
|
|
||||||
#ADDING ALL EXTRAS WITHOUT NAMESPACE
|
#ADDING ALL EXTRAS WITHOUT NAMESPACE
|
||||||
for key, value in extras:
|
for key, value in extras.items():
|
||||||
k = key
|
k = key
|
||||||
v = value
|
v = value
|
||||||
|
|
||||||
|
|
|
@ -13,11 +13,6 @@ NAMESPACE_ID_LABEL = '@id'
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
# Created by Francesco Mangiacrapa
|
|
||||||
# francesco.mangiacrapa@isti.cnr.it
|
|
||||||
# ISTI-CNR Pisa (ITALY)
|
|
||||||
|
|
||||||
def getResponseBody(uri):
|
def getResponseBody(uri):
|
||||||
req = urllib.request.Request(uri)
|
req = urllib.request.Request(uri)
|
||||||
try:
|
try:
|
||||||
|
@ -43,6 +38,12 @@ def getResponseBody(uri):
|
||||||
class D4S_IS_DiscoveryCatalogueNamespaces():
|
class D4S_IS_DiscoveryCatalogueNamespaces():
|
||||||
|
|
||||||
def __init__(self, urlICProxy, resourceID, gcubeToken):
|
def __init__(self, urlICProxy, resourceID, gcubeToken):
|
||||||
|
if not isinstance(urlICProxy, str):
|
||||||
|
raise ValueError("urlICProxy must be a string")
|
||||||
|
if not isinstance(resourceID, str):
|
||||||
|
raise ValueError("resourceID must be a string")
|
||||||
|
if not isinstance(gcubeToken, str):
|
||||||
|
raise ValueError("gcubeToken must be a string")
|
||||||
self.urlICProxy = urlICProxy
|
self.urlICProxy = urlICProxy
|
||||||
self.resourceID = resourceID
|
self.resourceID = resourceID
|
||||||
self.gcubeToken = gcubeToken
|
self.gcubeToken = gcubeToken
|
||||||
|
@ -53,10 +54,6 @@ class D4S_IS_DiscoveryCatalogueNamespaces():
|
||||||
namespace_list = []
|
namespace_list = []
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# print("proxy: "+self.urlICProxy)
|
|
||||||
# print("resourceID: " + self.resourceID)
|
|
||||||
# print("gcubeTokenParam: " + gcubeTokenParam)
|
|
||||||
# print("gcubeToken: " + self.gcubeToken)
|
|
||||||
|
|
||||||
uri = self.urlICProxy + "/" + self.resourceID + "?" + gcubeTokenParam + "=" + self.gcubeToken
|
uri = self.urlICProxy + "/" + self.resourceID + "?" + gcubeTokenParam + "=" + self.gcubeToken
|
||||||
log.info("Contacting URL: %s" % uri)
|
log.info("Contacting URL: %s" % uri)
|
||||||
|
|
|
@ -26,14 +26,14 @@ def remove_check_replicated_custom_key(schema):
|
||||||
|
|
||||||
def _package_extras_save(extra_dicts, obj, context):
|
def _package_extras_save(extra_dicts, obj, context):
|
||||||
''' It can save repeated extras as key-value '''
|
''' It can save repeated extras as key-value '''
|
||||||
allow_partial_update = context.get("allow_partial_update", False)
|
#allow_partial_update = context.get("allow_partial_update", False) potrebbe non servire
|
||||||
if extra_dicts is None and allow_partial_update:
|
if extra_dicts is None: #and allow_partial_update:
|
||||||
return
|
return
|
||||||
|
|
||||||
model = context["model"]
|
model = context["model"]
|
||||||
session = context["session"]
|
session = context["session"]
|
||||||
|
|
||||||
log.debug("extra_dicts: "+unicode(str(extra_dicts)).encode('utf-8'))
|
log.debug("extra_dicts: "+ str(extra_dicts))
|
||||||
#print "extra_dicts: "+str(extra_dicts)
|
#print "extra_dicts: "+str(extra_dicts)
|
||||||
|
|
||||||
extras_list = obj.extras_list
|
extras_list = obj.extras_list
|
||||||
|
@ -59,118 +59,121 @@ def _package_extras_save(extra_dicts, obj, context):
|
||||||
if extra_dict['value'] is not None:
|
if extra_dict['value'] is not None:
|
||||||
new_extras.setdefault(extra_dict["key"], []).append(extra_dict["value"])
|
new_extras.setdefault(extra_dict["key"], []).append(extra_dict["value"])
|
||||||
|
|
||||||
log.debug("new_extras: "+unicode(str(new_extras)).encode('utf-8'))
|
log.debug("new_extras: "+ str(new_extras))
|
||||||
#print "new_extras: "+str(new_extras)
|
#print "new_extras: "+str(new_extras)
|
||||||
|
|
||||||
#new
|
#aggiunta di nuove chiavi
|
||||||
for key in set(new_extras.keys()) - set(old_extras.keys()):
|
for key in set(new_extras.keys()) - set(old_extras.keys()):
|
||||||
state = 'active'
|
#state = 'active'
|
||||||
log.debug("adding key: "+unicode(key).encode('utf-8'))
|
log.debug("adding key: " + str(key))
|
||||||
#print "adding key: "+str(key)
|
#print "adding key: "+str(key)
|
||||||
extra_lst = new_extras[key]
|
extra_lst = new_extras[key]
|
||||||
for extra in extra_lst:
|
for extra in extra_lst:
|
||||||
extra = model.PackageExtra(state=state, key=key, value=extra)
|
extra = model.PackageExtra(state='active', key=key, value=extra)
|
||||||
session.add(extra)
|
session.add(extra)
|
||||||
extras_list.append(extra)
|
extras_list.append(extra)
|
||||||
|
|
||||||
#deleted
|
#gestione chiavi eliminate
|
||||||
for key in set(old_extras.keys()) - set(new_extras.keys()):
|
for key in set(old_extras.keys()) - set(new_extras.keys()):
|
||||||
log.debug("deleting key: "+unicode(key).encode('utf-8'))
|
log.debug("deleting key: "+ str(key))
|
||||||
#print "deleting key: "+str(key)
|
#print "deleting key: "+str(key)
|
||||||
extra_lst = extras[key]
|
extra_lst = extras[key]
|
||||||
for extra in extra_lst:
|
for extra in extra_lst:
|
||||||
state = 'deleted'
|
#state = 'deleted'
|
||||||
extra.state = state
|
extra.state = 'deleted'
|
||||||
extras_list.remove(extra)
|
extras_list.remove(extra)
|
||||||
|
|
||||||
#changed
|
#gestione chiavi aggiornate
|
||||||
for key in set(new_extras.keys()) & set(old_extras.keys()):
|
for key in set(new_extras.keys()) & set(old_extras.keys()):
|
||||||
#for each value of new list
|
#for each value of new list
|
||||||
for value in new_extras[key]:
|
for value in new_extras[key]:
|
||||||
old_occur = old_extras[key].count(value)
|
old_occur = old_extras[key].count(value)
|
||||||
new_occur = new_extras[key].count(value)
|
new_occur = new_extras[key].count(value)
|
||||||
log.debug("value: "+unicode(value).encode('utf-8') + ", new_occur: "+unicode(new_occur).encode('utf-8')+ ", old_occur: "+unicode(old_occur).encode('utf-8'))
|
log.debug("value: " + str(value) + ", new_occur: "+ str(new_occur)+ ", old_occur: "+ str(old_occur))
|
||||||
#print "value: "+str(value) + ", new_occur: "+str(new_occur) + ", old_occur: "+str(old_occur)
|
#print "value: "+str(value) + ", new_occur: "+str(new_occur) + ", old_occur: "+str(old_occur)
|
||||||
# it is an old value deleted or not
|
# it is an old value deleted or not
|
||||||
if value in old_extras[key]:
|
if value in old_extras[key]:
|
||||||
if old_occur == new_occur:
|
if old_occur == new_occur:
|
||||||
#print "extra - occurrences of: "+str(value) +", are equal into both list"
|
#print "extra - occurrences of: "+str(value) +", are equal into both list"
|
||||||
log.debug("extra - occurrences of: "+unicode(value).encode('utf-8') +", are equal into both list")
|
log.debug("extra - occurrences of: "+ str(value) +", are equal into both list")
|
||||||
#there is a little bug, this code return always the first element, so I'm fixing with #FIX-STATUS
|
#there is a little bug, this code return always the first element, so I'm fixing with #FIX-STATUS
|
||||||
extra_values = get_package_for_value(extras[key], value)
|
extra_values = get_package_for_value(extras[key], value)
|
||||||
#extras_list.append(extra)
|
#extras_list.append(extra)
|
||||||
for extra in extra_values:
|
for extra in extra_values:
|
||||||
state = 'active'
|
#state = 'active'
|
||||||
extra.state = state
|
extra.state = 'active'
|
||||||
session.add(extra)
|
session.add(extra)
|
||||||
#print "extra updated: "+str(extra)
|
#print "extra updated: "+str(extra)
|
||||||
log.debug("extra updated: "+unicode(extra).encode('utf-8'))
|
log.debug("extra updated: "+ str(extra))
|
||||||
|
|
||||||
elif new_occur > old_occur:
|
elif new_occur > old_occur:
|
||||||
#print "extra - a new occurrence of: "+str(value) +", is present into new list, adding it to old list"
|
#print "extra - a new occurrence of: "+str(value) +", is present into new list, adding it to old list"
|
||||||
log.debug("extra - a new occurrence of: "+unicode(value).encode('utf-8') +", is present into new list, adding it to old list")
|
log.debug("extra - a new occurrence of: "+ str(value) + ", is present into new list, adding it to old list")
|
||||||
state = 'active'
|
#state = 'active'
|
||||||
extra = model.PackageExtra(state=state, key=key, value=value)
|
extra = model.PackageExtra(state='active', key=key, value=value)
|
||||||
extra.state = state
|
#extra.state = state
|
||||||
|
#extra.state = 'active' non dovrebbe servire
|
||||||
session.add(extra)
|
session.add(extra)
|
||||||
extras_list.append(extra)
|
extras_list.append(extra)
|
||||||
old_extras[key].append(value)
|
old_extras[key].append(value)
|
||||||
log.debug("old extra values updated: "+unicode(old_extras[key]).encode('utf-8'))
|
log.debug("old extra values updated: "+ str(old_extras[key]))
|
||||||
#print "old extra values updated: "+str(old_extras[key])
|
#print "old extra values updated: "+str(old_extras[key])
|
||||||
|
|
||||||
else:
|
else:
|
||||||
#remove all occurrences deleted - this code could be optimized, it is run several times but could be performed one shot
|
#remove all occurrences deleted - this code could be optimized, it is run several times but could be performed one shot
|
||||||
countDelete = old_occur-new_occur
|
countDelete = old_occur-new_occur
|
||||||
log.debug("extra - occurrence of: "+unicode(value).encode('utf-8')+", is not present into new list, removing "+unicode(countDelete).encode('utf-8')+" occurrence/s from old list")
|
log.debug("extra - occurrence of: "+ str(value).encode('utf-8') + ", is not present into new list, removing "+ str(countDelete).encode('utf-8')+" occurrence/s from old list")
|
||||||
#print "extra - occurrence of: "+str(value) +", is not present into new list, removing "+str(countDelete)+" occurrence/s from old list"
|
#print "extra - occurrence of: "+str(value) +", is not present into new list, removing "+str(countDelete)+" occurrence/s from old list"
|
||||||
extra_values = get_package_for_value(extras[key], value)
|
extra_values = get_package_for_value(extras[key], value)
|
||||||
for idx, extra in enumerate(extra_values):
|
for idx, extra in enumerate(extra_values):
|
||||||
if idx < countDelete:
|
if idx < countDelete:
|
||||||
#print "extra - occurrence of: "+str(value) +", is not present into new list, removing it from old list"
|
#print "extra - occurrence of: "+str(value) +", is not present into new list, removing it from old list"
|
||||||
log.debug("pkg extra deleting: "+unicode(extra.value).encode('utf-8'))
|
log.debug("pkg extra deleting: "+ str(extra.value))
|
||||||
#print "pkg extra deleting: "+str(extra.value)
|
#print "pkg extra deleting: "+str(extra.value)
|
||||||
state = 'deleted'
|
#state = 'deleted'
|
||||||
extra.state = state
|
extra.state = 'deleted'
|
||||||
|
|
||||||
else:
|
else:
|
||||||
#print "pkg extra reactivating: "+str(extra.value)
|
#print "pkg extra reactivating: "+str(extra.value)
|
||||||
log.debug("pkg extra reactivating: "+unicode(extra.value).encode('utf-8'))
|
log.debug("pkg extra reactivating: "+ str(extra.value))
|
||||||
state = 'active'
|
#state = 'active'
|
||||||
extra.state = state
|
extra.state = 'active'
|
||||||
session.add(extra)
|
session.add(extra)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
#print "extra new value: "+str(value)
|
#print "extra new value: "+str(value)
|
||||||
log.debug("extra new value: "+unicode(value).encode('utf-8'))
|
log.debug("extra new value: " + str(value))
|
||||||
state = 'active'
|
#state = 'active'
|
||||||
extra = model.PackageExtra(state=state, key=key, value=value)
|
extra = model.PackageExtra(state='active', key=key, value=value)
|
||||||
extra.state = state
|
#extra.state = state
|
||||||
|
#extra.state = 'active'
|
||||||
session.add(extra)
|
session.add(extra)
|
||||||
extras_list.append(extra)
|
extras_list.append(extra)
|
||||||
|
|
||||||
|
|
||||||
#for each value of old list
|
#chiavi vecchie non presenti
|
||||||
for value in old_extras[key]:
|
for value in old_extras[key]:
|
||||||
#if value is not present in new list
|
#if value is not present in new list
|
||||||
if value not in new_extras[key]:
|
if value not in new_extras[key]:
|
||||||
extra_values = get_package_for_value(extras[key], value)
|
extra_values = get_package_for_value(extras[key], value)
|
||||||
for extra in extra_values:
|
for extra in extra_values:
|
||||||
#print "not present extra deleting: "+str(extra)
|
#print "not present extra deleting: "+str(extra)
|
||||||
log.debug("not present extra deleting: "+unicode(extra).encode('utf-8'))
|
log.debug("not present extra deleting: "+ str(extra))
|
||||||
state = 'deleted'
|
#state = 'deleted'
|
||||||
extra.state = state
|
extra.state = 'deleted'
|
||||||
|
|
||||||
def get_package_for_value(list_package, value):
|
def get_package_for_value(list_package, value):
|
||||||
''' Returns a list of packages containing the value passed in input
|
''' Returns a list of packages containing the value passed in input'''
|
||||||
'''
|
|
||||||
lst = []
|
return [x for x in list_package if x.value == value]
|
||||||
for x in list_package:
|
#lst = []
|
||||||
if x.value == value:
|
#for x in list_package:
|
||||||
lst.append(x)
|
# if x.value == value:
|
||||||
else:
|
# lst.append(x)
|
||||||
return lst
|
# else:
|
||||||
|
# return lst
|
||||||
return lst
|
#
|
||||||
|
#return lst
|
||||||
|
|
||||||
|
|
||||||
#OVERRIDING BASE SQL ALCHEMY ENGINE INSTANCE
|
#OVERRIDING BASE SQL ALCHEMY ENGINE INSTANCE
|
||||||
|
@ -189,7 +192,7 @@ def _init_TrackingMiddleware(self, app, config):
|
||||||
sqlalchemy_overflow = config.get('sqlalchemy.max_overflow')
|
sqlalchemy_overflow = config.get('sqlalchemy.max_overflow')
|
||||||
|
|
||||||
if sqlalchemy_overflow is None:
|
if sqlalchemy_overflow is None:
|
||||||
sqlalchemy_overflow = 10;
|
sqlalchemy_overflow = 10
|
||||||
|
|
||||||
log.debug('sqlalchemy_overflow read: '+str(sqlalchemy_overflow))
|
log.debug('sqlalchemy_overflow read: '+str(sqlalchemy_overflow))
|
||||||
|
|
||||||
|
@ -244,7 +247,7 @@ class D4SciencePlugin(plugins.SingletonPlugin):
|
||||||
|
|
||||||
def package_types(self):
|
def package_types(self):
|
||||||
# Aggiunta del tipo di dato personalizzato deliverable
|
# Aggiunta del tipo di dato personalizzato deliverable
|
||||||
return ['deliverable_type']
|
return []
|
||||||
|
|
||||||
def is_fallback(self):
|
def is_fallback(self):
|
||||||
# Indica che questo plugin può essere usato come fallback se un tipo specifico non è specificato
|
# Indica che questo plugin può essere usato come fallback se un tipo specifico non è specificato
|
||||||
|
|
Loading…
Reference in New Issue