diff --git a/ckanext/d4science/controllers/home.py b/ckanext/d4science/controllers/home.py index f91cbfa..369b277 100644 --- a/ckanext/d4science/controllers/home.py +++ b/ckanext/d4science/controllers/home.py @@ -1,5 +1,6 @@ -import logging -from ckan.controllers.home import HomeController +#import logging +#from ckan.controllers.home import HomeController +from flask import Blueprint, render_template, g import ckan.plugins as p from ckan.common import OrderedDict, _, g, c 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.helpers as h -class d4SHomeController(): +#blueprint definition +d4science_home = Blueprint("d4science_home", __name__) - #Overriding controllers.HomeController.index method - def index(self): - try: - # package search - context = {'model': model, 'session': model.Session,'user': c.user, 'auth_user_obj': c.userobj} +#@d4science_home.route("/catalog") +@d4science_home.route("/") +def index(): + try: + # package search + context = {'model': model, 'session': model.Session,'user': g.user, 'auth_user_obj': g.userobj} - facets = OrderedDict() + 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') - - c.facet_titles = facets - - data_dict = { - 'q': '*:*', - 'facet.field': list(facets.keys()), - 'rows': 4, - 'start': 0, - 'sort': 'views_recent desc', - 'fq': 'capacity:"public"' + default_facet_titles = { + 'organization': _('Organizations'), + 'groups': _('Groups'), + 'tags': _('Tags'), + 'res_format': _('Formats'), + 'license_id': _('Licenses'), } - 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: - url = h.url_for(controller='user', action='edit') - msg = _('Please update your profile' - ' 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) + for facet in g.facets: + if facet in default_facet_titles: + facets[facet] = default_facet_titles[facet] + else: + facets[facet] = facet - 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 update your profile' + ' 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) diff --git a/ckanext/d4science/controllers/organization.py b/ckanext/d4science/controllers/organization.py index c453872..23f7837 100644 --- a/ckanext/d4science/controllers/organization.py +++ b/ckanext/d4science/controllers/organization.py @@ -1,135 +1,118 @@ # encoding: utf-8 - import re - -import ckan.controllers.group as group -import ckan.plugins as plugins import logging -import datetime -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 +from flask import Blueprint, g, request, abort, render_template 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 - reasons). - ''' +group_types = ['organization'] - group_types = ['organization'] +def _guess_group_type(expecting_name=False): + return 'organization' - def _guess_group_type(self, expecting_name=False): - return 'organization' +def _replace_group_org( string): + ''' substitute organization for group if this is an org''' + return re.sub('^group', 'organization', string) - def _replace_group_org(self, string): - ''' substitute organization for group if this is an org''' - return re.sub('^group', 'organization', string) +def _update_facet_titles(facets, group_type): + for plugin in plugins.PluginImplementations(plugins.IFacets): + facets = plugin.organization_facets( + facets, group_type, None) - def _update_facet_titles(self, facets, group_type): - for plugin in plugins.PluginImplementations(plugins.IFacets): - facets = plugin.organization_facets( - facets, group_type, None) +@organization_vre.route('/organization_vre') +def index(): + group_type = _guess_group_type() + 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 - items_per_page = 21 - - context = {'model': model, 'session': model.Session, - 'user': c.user, 'for_view': True, - 'with_private': False} - - q = c.q = request.params.get('q', '') - sort_by = c.sort_by_selected = request.params.get('sort') - try: - self._check_access('site_read', context) - self._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 c.userobj: - context['user_id'] = c.userobj.id - context['user_is_admin'] = c.userobj.sysadmin - - data_dict_global_results = { - 'all_fields': False, - 'q': q, - 'sort': sort_by, - 'type': group_type or 'group', - } - 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}) \ No newline at end of file +@organization_vre.route('/organization_vre/') +def read(id, limit=20): + #group_type = self._ensure_controller_matches_group_type( + # id.split('@')[0]) + group_type = 'organization' + + context = {'model': model, 'session': model.Session, + 'user': g.user, + 'schema': logic.schema.group_form_schema(), + 'for_view': True} + data_dict = {'id': id, 'type': group_type} + + # recupero eventuale query di ricerca + g.q = request.args.get('q', '') + + try: + #i dataset non si includono nel risultato + data_dict['include_datasets'] = False + g.group_dict = logic.get_action('group_show')(context, data_dict) + g.group = context['group'] + except (NotFound, NotAuthorized): + abort(404, _('Group not found')) + + #read(id, limit, group_type) + return render_template('organization_vre/read.html', + extra_vars={'group_type': group_type}) + \ No newline at end of file diff --git a/ckanext/d4science/controllers/systemtype.py b/ckanext/d4science/controllers/systemtype.py index 02a38f5..a6a33c7 100644 --- a/ckanext/d4science/controllers/systemtype.py +++ b/ckanext/d4science/controllers/systemtype.py @@ -1,88 +1,73 @@ import logging 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.model as model import ckan.logic as logic -import ckan.lib.maintain as maintain -import ckan.lib.base as base 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 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 update your profile' - ' 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.route('/') def index(): - controller = d4STypeController() - return controller.index() + 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 update your profile' + ' 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) + diff --git a/ckanext/d4science/d4sdiscovery/d4s_cache_controller.py b/ckanext/d4science/d4sdiscovery/d4s_cache_controller.py index 0462d7d..2c90297 100644 --- a/ckanext/d4science/d4sdiscovery/d4s_cache_controller.py +++ b/ckanext/d4science/d4sdiscovery/d4s_cache_controller.py @@ -14,10 +14,6 @@ namespaces_dir = None NAMESPACES_DIR_NAME = "namespaces_for_catalogue" NAMESPACES_CACHE_FILENAME = "Namespaces_Catalogue_Categories.csv" -# Created by Francesco Mangiacrapa -# francesco.mangiacrapa@isti.cnr.it -# ISTI-CNR Pisa (ITALY) - # D4S_Cache_Controller class D4S_Cache_Controller(): diff --git a/ckanext/d4science/d4sdiscovery/d4s_extras.py b/ckanext/d4science/d4sdiscovery/d4s_extras.py index af3e9ce..86bfd60 100644 --- a/ckanext/d4science/d4sdiscovery/d4s_extras.py +++ b/ckanext/d4science/d4sdiscovery/d4s_extras.py @@ -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 log = logging.getLogger(__name__) diff --git a/ckanext/d4science/d4sdiscovery/d4s_namespaces_controller.py b/ckanext/d4science/d4sdiscovery/d4s_namespaces_controller.py index afb88df..b187908 100644 --- a/ckanext/d4science/d4sdiscovery/d4s_namespaces_controller.py +++ b/ckanext/d4science/d4sdiscovery/d4s_namespaces_controller.py @@ -44,13 +44,8 @@ def reload_namespaces_from_IS(urlICProxy, resourceID, gcubeToken): log.info("namespaces list read from IS is empty. Skipping caching update") except Exception as e: - print("Error occurred on reading namespaces from IS and refilling the cache!") - print(e) - - -# Created by Francesco Mangiacrapa -# francesco.mangiacrapa@isti.cnr.it -# ISTI-CNR Pisa (ITALY) + log.error("Error occurred on reading namespaces from IS and refilling the cache!") + log.error(e) # D4S_IS_DiscoveryCatalogueNamespacesController is used to discovery namespaces for Catalogue Categories (implemented as a Singleton) diff --git a/ckanext/d4science/d4sdiscovery/d4s_namespaces_extras_util.py b/ckanext/d4science/d4sdiscovery/d4s_namespaces_extras_util.py index edb0bbf..5a47849 100644 --- a/ckanext/d4science/d4sdiscovery/d4s_namespaces_extras_util.py +++ b/ckanext/d4science/d4sdiscovery/d4s_namespaces_extras_util.py @@ -7,11 +7,6 @@ NOCATEOGORY = 'nocategory' 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 # @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 @@ -25,7 +20,7 @@ class D4S_Namespaces_Extra_Util(): dict_extras = None nms = namespaceid + ":" #has_namespace_ref = None - for key, value in extras: + for key, value in extras.items(): k = key v = value # print "key: " + k @@ -53,7 +48,7 @@ class D4S_Namespaces_Extra_Util(): #break #ADDING ALL EXTRAS WITHOUT NAMESPACE - for key, value in extras: + for key, value in extras.items(): k = key v = value diff --git a/ckanext/d4science/d4sdiscovery/icproxycontroller.py b/ckanext/d4science/d4sdiscovery/icproxycontroller.py index f1c03ce..99a6ef9 100644 --- a/ckanext/d4science/d4sdiscovery/icproxycontroller.py +++ b/ckanext/d4science/d4sdiscovery/icproxycontroller.py @@ -13,11 +13,6 @@ NAMESPACE_ID_LABEL = '@id' log = logging.getLogger(__name__) - -# Created by Francesco Mangiacrapa -# francesco.mangiacrapa@isti.cnr.it -# ISTI-CNR Pisa (ITALY) - def getResponseBody(uri): req = urllib.request.Request(uri) try: @@ -43,6 +38,12 @@ def getResponseBody(uri): class D4S_IS_DiscoveryCatalogueNamespaces(): 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.resourceID = resourceID self.gcubeToken = gcubeToken @@ -53,10 +54,6 @@ class D4S_IS_DiscoveryCatalogueNamespaces(): namespace_list = [] try: - # print("proxy: "+self.urlICProxy) - # print("resourceID: " + self.resourceID) - # print("gcubeTokenParam: " + gcubeTokenParam) - # print("gcubeToken: " + self.gcubeToken) uri = self.urlICProxy + "/" + self.resourceID + "?" + gcubeTokenParam + "=" + self.gcubeToken log.info("Contacting URL: %s" % uri) diff --git a/ckanext/d4science/plugin.py b/ckanext/d4science/plugin.py index 80cf3f0..13b45ef 100644 --- a/ckanext/d4science/plugin.py +++ b/ckanext/d4science/plugin.py @@ -26,14 +26,14 @@ def remove_check_replicated_custom_key(schema): def _package_extras_save(extra_dicts, obj, context): ''' It can save repeated extras as key-value ''' - allow_partial_update = context.get("allow_partial_update", False) - if extra_dicts is None and allow_partial_update: + #allow_partial_update = context.get("allow_partial_update", False) potrebbe non servire + if extra_dicts is None: #and allow_partial_update: return model = context["model"] 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) extras_list = obj.extras_list @@ -59,118 +59,121 @@ def _package_extras_save(extra_dicts, obj, context): if extra_dict['value'] is not None: 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) - #new + #aggiunta di nuove chiavi for key in set(new_extras.keys()) - set(old_extras.keys()): - state = 'active' - log.debug("adding key: "+unicode(key).encode('utf-8')) + #state = 'active' + log.debug("adding key: " + str(key)) #print "adding key: "+str(key) extra_lst = new_extras[key] 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) extras_list.append(extra) - #deleted + #gestione chiavi eliminate 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) extra_lst = extras[key] for extra in extra_lst: - state = 'deleted' - extra.state = state + #state = 'deleted' + extra.state = 'deleted' extras_list.remove(extra) - #changed + #gestione chiavi aggiornate for key in set(new_extras.keys()) & set(old_extras.keys()): #for each value of new list for value in new_extras[key]: old_occur = old_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) # it is an old value deleted or not if value in old_extras[key]: if old_occur == new_occur: #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 extra_values = get_package_for_value(extras[key], value) #extras_list.append(extra) for extra in extra_values: - state = 'active' - extra.state = state + #state = 'active' + extra.state = 'active' session.add(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: #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") - state = 'active' - extra = model.PackageExtra(state=state, key=key, value=value) - extra.state = state + log.debug("extra - a new occurrence of: "+ str(value) + ", is present into new list, adding it to old list") + #state = 'active' + extra = model.PackageExtra(state='active', key=key, value=value) + #extra.state = state + #extra.state = 'active' non dovrebbe servire session.add(extra) extras_list.append(extra) 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]) else: #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 - 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" extra_values = get_package_for_value(extras[key], value) for idx, extra in enumerate(extra_values): if idx < countDelete: #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) - state = 'deleted' - extra.state = state + #state = 'deleted' + extra.state = 'deleted' else: #print "pkg extra reactivating: "+str(extra.value) - log.debug("pkg extra reactivating: "+unicode(extra.value).encode('utf-8')) - state = 'active' - extra.state = state + log.debug("pkg extra reactivating: "+ str(extra.value)) + #state = 'active' + extra.state = 'active' session.add(extra) else: #print "extra new value: "+str(value) - log.debug("extra new value: "+unicode(value).encode('utf-8')) - state = 'active' - extra = model.PackageExtra(state=state, key=key, value=value) - extra.state = state + log.debug("extra new value: " + str(value)) + #state = 'active' + extra = model.PackageExtra(state='active', key=key, value=value) + #extra.state = state + #extra.state = 'active' session.add(extra) extras_list.append(extra) - #for each value of old list + #chiavi vecchie non presenti for value in old_extras[key]: #if value is not present in new list if value not in new_extras[key]: extra_values = get_package_for_value(extras[key], value) for extra in extra_values: #print "not present extra deleting: "+str(extra) - log.debug("not present extra deleting: "+unicode(extra).encode('utf-8')) - state = 'deleted' - extra.state = state + log.debug("not present extra deleting: "+ str(extra)) + #state = 'deleted' + extra.state = 'deleted' def get_package_for_value(list_package, value): - ''' Returns a list of packages containing the value passed in input - ''' - lst = [] - for x in list_package: - if x.value == value: - lst.append(x) - else: - return lst - - return lst + ''' Returns a list of packages containing the value passed in input''' + + return [x for x in list_package if x.value == value] + #lst = [] + #for x in list_package: + # if x.value == value: + # lst.append(x) + # else: + # return lst + # + #return lst #OVERRIDING BASE SQL ALCHEMY ENGINE INSTANCE @@ -189,7 +192,7 @@ def _init_TrackingMiddleware(self, app, config): sqlalchemy_overflow = config.get('sqlalchemy.max_overflow') if sqlalchemy_overflow is None: - sqlalchemy_overflow = 10; + sqlalchemy_overflow = 10 log.debug('sqlalchemy_overflow read: '+str(sqlalchemy_overflow)) @@ -244,7 +247,7 @@ class D4SciencePlugin(plugins.SingletonPlugin): def package_types(self): # Aggiunta del tipo di dato personalizzato deliverable - return ['deliverable_type'] + return [] def is_fallback(self): # Indica che questo plugin può essere usato come fallback se un tipo specifico non è specificato