def sniffer(item_aliases, provider_config=default_settings.PROVIDERS): (genre, host) = item_module.decide_genre(item_aliases) all_metrics_providers = [provider.provider_name for provider in ProviderFactory.get_providers(provider_config, "metrics")] if (genre == "article") and (host != "arxiv"): run = [[("aliases", provider)] for provider in ["mendeley", "crossref", "pubmed", "altmetric_com"]] run += [[("biblio", provider) for provider in ["crossref", "pubmed", "mendeley", "webpage"]]] run += [[("metrics", provider) for provider in all_metrics_providers]] elif (host == "arxiv") or ("doi" in item_aliases): run = [[("aliases", provider)] for provider in [host, "altmetric_com"]] run += [[("biblio", provider) for provider in [host, "mendeley"]]] run += [[("metrics", provider) for provider in all_metrics_providers]] else: # relevant alias and biblio providers are always the same relevant_providers = [host] if relevant_providers == ["unknown"]: relevant_providers = ["webpage"] run = [[("aliases", provider)] for provider in relevant_providers] run += [[("biblio", provider) for provider in relevant_providers]] run += [[("metrics", provider) for provider in all_metrics_providers]] return(run)
def sniffer(cls, item_aliases, aliases_providers_run, provider_config=default_settings.PROVIDERS): # default to nothing aliases_providers = [] biblio_providers = [] metrics_providers = [] all_metrics_providers = [ provider.provider_name for provider in ProviderFactory.get_providers( provider_config, "metrics") ] (genre, host) = item_module.decide_genre(item_aliases) has_enough_alias_urls = ("url" in item_aliases) if has_enough_alias_urls: if ("doi" in item_aliases): has_enough_alias_urls = (len([ url for url in item_aliases["url"] if url.startswith("http://dx.doi.org") ]) > 0) if (genre == "article"): if not "mendeley" in aliases_providers_run: aliases_providers = ["mendeley"] elif not "crossref" in aliases_providers_run: aliases_providers = [ "crossref" ] # do this before pubmed because might tease doi from url elif not "pubmed" in aliases_providers_run: aliases_providers = ["pubmed"] else: metrics_providers = all_metrics_providers biblio_providers = ["crossref", "pubmed", "webpage"] else: # relevant alias and biblio providers are always the same relevant_providers = [host] if relevant_providers == ["unknown"]: relevant_providers = ["webpage"] # if all the relevant providers have already run, then all the aliases are done # or if it already has urls if has_enough_alias_urls or (set(relevant_providers) == set(aliases_providers_run)): metrics_providers = all_metrics_providers biblio_providers = relevant_providers else: aliases_providers = relevant_providers return ({ "aliases": aliases_providers, "biblio": biblio_providers, "metrics": metrics_providers })
def sniffer(cls, item_aliases, aliases_providers_run, provider_config=default_settings.PROVIDERS): # default to nothing aliases_providers = [] biblio_providers = [] metrics_providers = [] all_metrics_providers = [provider.provider_name for provider in ProviderFactory.get_providers(provider_config, "metrics")] (genre, host) = item_module.decide_genre(item_aliases) has_enough_alias_urls = ("url" in item_aliases) if has_enough_alias_urls: if ("doi" in item_aliases): has_enough_alias_urls = (len([url for url in item_aliases["url"] if url.startswith("http://dx.doi.org")]) > 0) if (genre == "article"): if not "mendeley" in aliases_providers_run: aliases_providers = ["mendeley"] elif not "crossref" in aliases_providers_run: aliases_providers = ["crossref"] # do this before pubmed because might tease doi from url elif not "pubmed" in aliases_providers_run: aliases_providers = ["pubmed"] else: metrics_providers = all_metrics_providers biblio_providers = ["crossref", "pubmed", "webpage"] else: # relevant alias and biblio providers are always the same relevant_providers = [host] if relevant_providers == ["unknown"]: relevant_providers = ["webpage"] # if all the relevant providers have already run, then all the aliases are done # or if it already has urls if has_enough_alias_urls or (set(relevant_providers) == set(aliases_providers_run)): metrics_providers = all_metrics_providers biblio_providers = relevant_providers else: aliases_providers = relevant_providers return({ "aliases":aliases_providers, "biblio":biblio_providers, "metrics":metrics_providers})
def test_decide_genre_software(self): aliases = {"url":["http://www.github.com/jasonpriem/my-sofware"]} (genre, host) = item_module.decide_genre(aliases) assert_equals(genre, "software")
def test_decide_genre_slides(self): aliases = {"url":["http://www.slideshare.net/jason/my-slides"]} (genre, host) = item_module.decide_genre(aliases) assert_equals(genre, "slides")
def test_decide_genre_article_pmid(self): aliases = {"pmid":["12345678"]} (genre, host) = item_module.decide_genre(aliases) assert_equals(genre, "article")
def test_decide_genre_article_doi(self): aliases = {"doi":["10:123", "10:456"]} (genre, host) = item_module.decide_genre(aliases) assert_equals(genre, "article")
def test_decide_genre_unknown(self): aliases = {"unknown_namespace":["myname"]} (genre, host) = item_module.decide_genre(aliases) assert_equals(genre, "unknown")
def test_decide_genre_webpage(self): aliases = {"url":["http://www.google.com"]} (genre, host) = item_module.decide_genre(aliases) assert_equals(genre, "webpage")
def test_decide_genre_dataset_dryad(self): aliases = {"doi":["10.5061/dryad.18"]} (genre, host) = item_module.decide_genre(aliases) assert_equals(genre, "dataset")
def test_decide_genre_dataset_figshare(self): aliases = {"doi":["10.6084/m9.figshare.92393"]} (genre, host) = item_module.decide_genre(aliases) assert_equals(genre, "dataset")