def metrics(self, aliases, provider_url_template=None, # ignore this because multiple url steps cache_enabled=True): # Only lookup metrics for items with appropriate ids from totalimpact.models import ItemFactory aliases_dict = ItemFactory.alias_dict_from_tuples(aliases) metrics_page = None # try lookup by doi try: metrics_page = self._get_metrics_lookup_page(self.metrics_from_doi_template, aliases_dict["doi"][0]) except KeyError: pass # try lookup by pmid if not metrics_page: try: metrics_page = self._get_metrics_lookup_page(self.metrics_from_pmid_template, aliases_dict["pmid"][0]) except KeyError: pass # try lookup by title if not metrics_page: try: page = self._get_uuid_lookup_page(aliases_dict["biblio"][0]["title"]) if page: uuid = self._get_uuid_from_title(aliases_dict, page) if uuid: logger.debug("Mendeley: uuid is %s for %s" %(uuid, aliases_dict["biblio"][0]["title"])) metrics_page = self._get_metrics_lookup_page(self.metrics_from_uuid_template, uuid) else: logger.debug("Mendeley: couldn't find uuid for %s" %(aliases_dict["biblio"][0]["title"])) except KeyError: pass # give up! if not metrics_page: return {} metrics_and_drilldown = self._get_metrics_and_drilldown_from_metrics_page(metrics_page) return metrics_and_drilldown
def wrapper(cls, tiid, input_aliases_dict, provider, method_name, aliases_providers_run, callback): #logger.info("{:20}: **Starting {tiid} {provider_name} {method_name} with {aliases}".format( # "wrapper", tiid=tiid, provider_name=provider.provider_name, method_name=method_name, aliases=aliases)) provider_name = provider.provider_name worker_name = provider_name+"_worker" input_alias_tuples = ItemFactory.alias_tuples_from_dict(input_aliases_dict) method = getattr(provider, method_name) try: method_response = method(input_alias_tuples) except ProviderError: method_response = None logger.info("{:20}: **ProviderError {tiid} {method_name} {provider_name} ".format( worker_name, tiid=tiid, provider_name=provider_name.upper(), method_name=method_name.upper())) if method_name == "aliases": # update aliases to include the old ones too aliases_providers_run += [provider_name] if method_response: new_aliases_dict = ItemFactory.alias_dict_from_tuples(method_response) response = ItemFactory.merge_alias_dicts(new_aliases_dict, input_aliases_dict) else: response = input_aliases_dict else: response = method_response logger.info("{:20}: RETURNED {tiid} {method_name} {provider_name} : {response}".format( worker_name, tiid=tiid, method_name=method_name.upper(), provider_name=provider_name.upper(), response=response)) callback(tiid, response, method_name, aliases_providers_run) try: del thread_count[provider_name][tiid+method_name] except KeyError: # thread isn't there when we call wrapper in unit tests pass return response