本文整理汇总了Python中totalimpact.providers.provider.ProviderFactory类的典型用法代码示例。如果您正苦于以下问题:Python ProviderFactory类的具体用法?Python ProviderFactory怎么用?Python ProviderFactory使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ProviderFactory类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: import_products
def import_products(provider_name, import_input):
if provider_name in ["bibtex", "product_id_strings"]:
logger.debug(u"in import_products with provider_name {provider_name}".format(
provider_name=provider_name))
else:
logger.debug(u"in import_products with provider_name {provider_name}: {import_input}".format(
provider_name=provider_name, import_input=import_input))
aliases = []
# pull in standard items, if we were passed any of these
if provider_name=="product_id_strings":
aliases = get_aliases_from_product_id_strings(import_input)
elif provider_name=="bibtex":
provider_module = ProviderFactory.get_provider("bibtex")
aliases = provider_module.member_items(import_input)
else:
try:
provider_module = ProviderFactory.get_provider(provider_name)
aliases = provider_module.member_items(import_input)
except ImportError:
logger.debug(u"in import_products, got ImportError")
pass
# logger.debug(u"returning from import_products with aliases {aliases}".format(
# aliases=aliases))
return(aliases)
示例2: setUp
def setUp(self):
self.config = None #placeholder
self.TEST_PROVIDER_CONFIG = [
("wikipedia", {})
]
# hacky way to delete the "ti" db, then make it fresh again for each test.
temp_dao = dao.Dao("http://localhost:5984", os.getenv("CLOUDANT_DB"))
temp_dao.delete_db(os.getenv("CLOUDANT_DB"))
self.d = dao.Dao("http://localhost:5984", os.getenv("CLOUDANT_DB"))
# do the same thing for the redis db, set up the test redis database. We're using DB Number 8
self.r = tiredis.from_url("redis://localhost:6379", db=8)
self.r.flushdb()
provider_queues = {}
providers = ProviderFactory.get_providers(self.TEST_PROVIDER_CONFIG)
for provider in providers:
provider_queues[provider.provider_name] = backend.PythonQueue(provider.provider_name+"_queue")
self.b = backend.Backend(
backend.RedisQueue("alias-unittest", self.r),
provider_queues,
[backend.PythonQueue("couch_queue")],
self.r)
self.fake_item = {
"_id": "1",
"type": "item",
"num_providers_still_updating":1,
"aliases":{"pmid":["111"]},
"biblio": {},
"metrics": {}
}
self.fake_aliases_dict = {"pmid":["222"]}
self.tiid = "abcd"
示例3: setUp
def setUp(self):
self.config = None #placeholder
self.TEST_PROVIDER_CONFIG = [
("wikipedia", {})
]
self.d = None
# do the same thing for the redis db, set up the test redis database. We're using DB Number 8
self.r = tiredis.from_url("redis://localhost:6379", db=8)
self.r.flushdb()
provider_queues = {}
providers = ProviderFactory.get_providers(self.TEST_PROVIDER_CONFIG)
for provider in providers:
provider_queues[provider.provider_name] = backend.PythonQueue(provider.provider_name+"_queue")
self.b = backend.Backend(
backend.RedisQueue("alias-unittest", self.r),
provider_queues,
[backend.PythonQueue("couch_queue")],
self.r)
self.fake_item = {
"_id": "1",
"type": "item",
"num_providers_still_updating":1,
"aliases":{"pmid":["111"]},
"biblio": {},
"metrics": {},
"last_modified": datetime.datetime(2013, 1, 1)
}
self.fake_aliases_dict = {"pmid":["222"]}
self.tiid = "abcd"
self.db = setup_postgres_for_unittests(db, app)
示例4: create_item
def create_item(namespace, nid, myredis, mydao):
logger.debug("In create_item with alias" + str((namespace, nid)))
item = make()
namespace = clean_id(namespace)
nid = clean_id(nid)
item["aliases"][namespace] = [nid]
item["aliases"] = canonical_aliases(item["aliases"])
# set this so we know when it's still updating later on
myredis.set_num_providers_left(
item["_id"],
ProviderFactory.num_providers_with_metrics(default_settings.PROVIDERS)
)
mydao.save(item)
myredis.add_to_alias_queue(item["_id"], item["aliases"])
logger.info("Created new item '{id}' with alias '{alias}'".format(
id=item["_id"],
alias=str((namespace, nid))
))
mixpanel.track("Create:Item", {"Namespace":namespace})
try:
return item["_id"]
except AttributeError:
abort(500)
示例5: importer_post
def importer_post(provider_name):
"""
Gets aliases associated with a query from a given provider.
"""
input_string = request.json["input"]
if provider_name == "pmids":
provider_name = "pubmed"
elif provider_name == "dois":
provider_name = "crossref"
elif provider_name == "urls":
provider_name = "webpage"
try:
provider = ProviderFactory.get_provider(provider_name)
except ImportError:
abort_custom(404, "an importer for provider '{provider_name}' is not found".format(
provider_name=provider_name))
try:
aliases = provider.member_items(input_string)
except ProviderItemNotFoundError:
abort_custom(404, "item not found")
except (ProviderTimeout, ProviderServerError):
abort_custom(503, "timeout error, might be transient")
except ProviderError:
abort(500, "internal error from provider")
tiids_aliases_map = item_module.create_tiids_from_aliases(aliases, myredis)
logger.debug(u"in provider_importer_get with {tiids_aliases_map}".format(
tiids_aliases_map=tiids_aliases_map))
products_dict = format_into_products_dict(tiids_aliases_map)
resp = make_response(json.dumps({"products": products_dict}, sort_keys=True, indent=4), 200)
return resp
示例6: sniffer
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)
示例7: provider_run
def provider_run(aliases_dict, tiid, method_name, provider_name):
provider = ProviderFactory.get_provider(provider_name)
# logger.info(u"in provider_run for {provider}".format(
# provider=provider.provider_name))
(success, estimated_wait_seconds) = rate.acquire(provider_name, block=False)
# add up to random 2 seconds to spread it out
estimated_wait_seconds += random.random() * 3
if not success:
logger.warning(u"RATE LIMIT HIT in provider_run for {provider} {method_name} {tiid}, retrying".format(
provider=provider.provider_name, method_name=method_name, tiid=tiid))
provider_run.retry(args=[aliases_dict, tiid, method_name, provider_name],
countdown=estimated_wait_seconds,
max_retries=10)
timeout_seconds = 30
try:
with timeout.Timeout(timeout_seconds):
response = provider_method_wrapper(tiid, aliases_dict, provider, method_name)
except timeout.Timeout:
msg = u"TIMEOUT in provider_run for {provider} {method_name} {tiid} after {timeout_seconds} seconds".format(
provider=provider.provider_name, method_name=method_name, tiid=tiid, timeout_seconds=timeout_seconds)
# logger.warning(msg) # message is written elsewhere
raise ProviderTimeout(msg)
return response
示例8: provider_memberitems
def provider_memberitems(provider_name):
"""
Starts a memberitems update for a specified provider, using a supplied file.
Returns a hash of the file's contents, which is needed to get memberitems'
output. To get output, poll GET /provider/<provider_name>/memberitems/<hash>?method=async
"""
# logger.debug("Query POSTed to {provider_name}/memberitems with request headers '{headers}'".format(
# provider_name=provider_name,
# headers=request.headers
# ))
file = request.files["file"]
logger.debug("In provider_memberitems got file")
logger.debug("filename = " + file.filename)
query = file.read().decode("utf-8")
provider = ProviderFactory.get_provider(provider_name)
memberitems = MemberItems(provider, myredis)
query_hash = memberitems.start_update(query)
response_dict = {"query_hash": query_hash}
resp = make_response(json.dumps(response_dict), 201) # created
resp.mimetype = "application/json"
resp.headers["Access-Control-Allow-Origin"] = "*"
return resp
示例9: prep_collection_items
def prep_collection_items(aliases):
logger.info("got a list of aliases; creating new items for them.")
try:
# remove unprintable characters and change list to tuples
clean_aliases = [(clean_id(namespace), clean_id(nid)) for [namespace, nid] in aliases]
except ValueError:
logger.error(
"bad input to POST /collection (requires [namespace, id] pairs):{input}".format(input=str(clean_aliases))
)
abort(404, "POST /collection requires a list of [namespace, id] pairs.")
logger.debug(
"POST /collection got list of aliases; creating new items for {aliases}".format(aliases=str(clean_aliases))
)
(tiids, items) = create_or_find_items_from_aliases(clean_aliases)
logger.debug("POST /collection saving a group of {num} new items: {items}".format(num=len(items), items=str(items)))
# batch upload the new docs to the db
# make sure they are there before the provider updates start happening
for doc in mydao.db.update(items):
pass
# for each item, set the number of providers that need to run before the update is done
# and put them on the update queue
for item in items:
myredis.set_num_providers_left(
item["_id"], ProviderFactory.num_providers_with_metrics(default_settings.PROVIDERS)
)
myredis.add_to_alias_queue(item["_id"], item["aliases"])
return tiids
示例10: collection_update
def collection_update(cid=""):
# first, get the tiids in this collection:
try:
collection = mydao.get(cid)
tiids = collection["alias_tiids"].values()
except Exception:
logger.exception("couldn't get tiids for collection '{cid}'".format(cid=cid))
abort(404, "couldn't get tiids for this collection...maybe doesn't exist?")
# put each of them on the update queue
for tiid in tiids:
logger.debug("In update_item with tiid " + tiid)
# set this so we know when it's still updating later on
myredis.set_num_providers_left(tiid, ProviderFactory.num_providers_with_metrics(default_settings.PROVIDERS))
item_doc = mydao.get(tiid)
try:
myredis.add_to_alias_queue(item_doc["_id"], item_doc["aliases"])
except (KeyError, TypeError):
logger.debug("couldn't get item_doc for {tiid}. Skipping its update".format(tiid=tiid))
pass
resp = make_response("true", 200)
resp.mimetype = "application/json"
return resp
示例11: provider_method_wrapper
def provider_method_wrapper(tiid, provider, method_name):
# logger.info(u"{:20}: in provider_method_wrapper with {tiid} {provider_name} {method_name} with {aliases}".format(
# "wrapper", tiid=tiid, provider_name=provider.provider_name, method_name=method_name, aliases=input_aliases_dict))
product = Product.query.get(tiid)
if not product:
logger.warning(u"Empty product in provider_run for tiid {tiid}".format(
tiid=tiid))
return None
input_alias_tuples = product.aliases_for_providers
try:
method = getattr(provider, method_name)
except AttributeError:
provider = ProviderFactory.get_provider(provider)
method = getattr(provider, method_name)
provider_name = provider.provider_name
worker_name = provider_name+"_worker"
try:
method_response = method(input_alias_tuples)
except ProviderError, e:
method_response = None
logger.info(u"{:20}: **ProviderError {tiid} {method_name} {provider_name}, Exception type {exception_type} {exception_arguments}".format(
worker_name,
tiid=tiid,
provider_name=provider_name.upper(),
method_name=method_name.upper(),
exception_type=type(e).__name__,
exception_arguments=e.args))
示例12: get_metric_names
def get_metric_names(providers_config):
full_metric_names = []
providers = ProviderFactory.get_providers(providers_config)
for provider in providers:
metric_names = provider.metric_names()
for metric_name in metric_names:
full_metric_names.append(provider.provider_name + ':' + metric_name)
return full_metric_names
示例13: test_03_init_aliases
def test_03_init_aliases(self):
providers = ProviderFactory.get_providers(self.config)
pat = ProvidersAliasThread(providers, self.d)
assert hasattr(pat, "stop")
assert hasattr(pat, "stopped")
assert hasattr(pat, "first")
assert pat.queue is not None
示例14: provider_memberitems
def provider_memberitems(provider_name):
"""
Make a descr string (like bibtex) into a dict strings describing items.
"""
provider = ProviderFactory.get_provider(provider_name)
items_dict = provider.parse(request.json["descr"])
resp = make_response(
json.dumps({"memberitems": items_dict}, sort_keys=True, indent=4),
200
)
return resp
示例15: provider_biblio
def provider_biblio(provider_name, id):
provider = ProviderFactory.get_provider(provider_name)
if id=="example":
id = provider.example_id[1]
url = "http://localhost:8080/" + provider_name + "/biblio?%s"
else:
url = None
biblio = provider.get_biblio_for_id(id, url, cache_enabled=False)
resp = make_response( json.dumps(biblio, sort_keys=True, indent=4) )
resp.mimetype = "application/json"
return resp