GithubHelp home page GithubHelp logo

scieloorg / articlemetaapi Goto Github PK

View Code? Open in Web Editor NEW
12.0 12.0 10.0 77 KB

Biblioteca que implementa o uso da API do articlemeta.

License: BSD 2-Clause "Simplified" License

Python 86.76% Thrift 13.24%
service-client-lib

articlemetaapi's People

Contributors

danilobellini avatar ednilson avatar fabiobatalha avatar gustavofonseca avatar jamilatta avatar robertatakenaka avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

articlemetaapi's Issues

Adicionar a capacidade de requisições a assíncronas

Em análise recente com o @rafaelpezzuto verificamos uma melhoria importante nas requisições realizadas pelo articlemetaapi.

Identificamos que é possível melhorar o trecho: https://github.com/scieloorg/articlemetaapi/blob/master/articlemeta/client.py#L83

A idéia é tronar esse método assincrono utilizando asyncio, vejam: https://docs.python.org/3.7/library/asyncio.html

Dessa forma melhoramos o tempo de execução das requisições para o servidor Rest do Article Meta.

Literatura sobre:

Definir a coleção base para as operações.

Estou assumindo que na maioria das sessões onde há a interação entre aplicações cliente e o serviço ArticleMeta, registros de apenas 1 coleção são acessados. Para esses casos, seria desejavel a capacidade de definir a coleção padrão nas quais as consultas seriam executadas e desobrigar a passagem do argumento nos métodos.

Exemplo:

client = RestfulClient(use_collection='scl')  # use_collection seria ou não obrigatório?
doc = client.document('S0001-37141998000300001')  # scl é pesquisado
doc_ssp = client.document('S0001-37141998000300001', 'ssp')  # ssp prevalece

AttributeError: 'DockerVolume' object has no attribute 'volume'

class Value():
def create(self):
self.volume=do_func()
def remove(self):
self.volume.remove()

mock Test:
class TestValue(unittest.Testcase):
@mock.patch("docker.client.DockerClient","remove",new_callable=PropertyMock())
def test_remove(self,docker_remove):
vol_obj=Value()
vol_obj.remove()

Output:
testtools.testresult.real._StringException: Traceback (most recent call last):
File "/usr/lib/python3.6/unittest/mock.py", line 1179, in patched
return func(*args, **keywargs)
File "/tmp/tox_env/collie/tests/volumes/test_base.py", line 36, in test_remove
vol_obj.remove()
File "/tmp/tox_env/collie/volumes/base.py", line 25, in remove
self.volume.remove(force=True)
AttributeError: 'DockerVolume' object has no attribute 'volume'

Onde posso encontrar a documentação?

Estou procurando por uma documentação, mas não encontrei nada além do readme deste repositório.

Mais especificamente, gostaria de saber se a API é capaz de realizar busca de artigos por palavras-chave, ou funciona apenas com coleções, como no exemplo do readme?

Parâmetro ``until_date`` no método documents [RestfulClient, ThriftClient] não respeita a data fornecida.

Testando o uso articlemetaapi nos deparamos com umas situação um tanto curiosa.

Realizamos o seguinte teste:

from articlemeta.client import RestfulClient

art = RestfulClient()

for d in art.documents(from_date='2020-05-15', until_date='2020-05-16'):
    print(d.processing_date)

Reparem que o param until_date é dia 16/05/2020 ao rodarmos esse código identificamos que ele retorna resultado até o final do ano e não até a data informada.

Pois, bem passamos a olhar para o código do articlemetaapi e verificamos o seguinte código em client.py:47 dates_pagination

def dates_pagination(from_date, until_date):
    from_date = datetime.strptime(from_date, '%Y-%m-%d')
    until_date = datetime.strptime(until_date, '%Y-%m-%d')

    for year in range(from_date.year, until_date.year+1):

        dtbg = '%d-01-01' % year
        dtnd = '%d-12-31' % year

        if year == from_date.year:
            yield (from_date.isoformat()[:10], dtnd)
            continue

        if year == until_date.year:
            yield (dtbg, until_date.isoformat()[:10])
            continue

        yield (dtbg, dtnd)

Vejam que retorna uma dupla com data de inicio e data de fim, porém está fixado que a data de fim para cada ano sempre será 31/12, ou seja, o parâmetro until_date é despresado.

Isso é utilizado para todos os métodos que tem filtragem por data.

Estou reportando isso como bug, mas penso que a função dates_pagination foi escrita por alguém e suspeito que exista um motivo para fixar '%d-12-31' % year.

exception while iterating "documents_by_identifiers()"

[...]
  File "./dump_scielo.py", line 73, in run_article_ids
    for ident in cl.documents_by_identifiers(only_identifiers=True):
  File "/home/bnewbold/scratch/ingests/scielo/.venv/lib/python3.7/site-packages/articlemeta/client.py", line 496, in documents_by_identifiers
    identifiers = self._do_request(url, params=params).get('objects', [])
AttributeError: 'NoneType' object has no attribute 'get'

Python version: 3.7
articlemetaapi version: 1.26.6

This error happens after many timeouts. Maybe due to HTTP 429 back-off responses? The self._do_request(url, params=params) statement should perhaps be called first and then status checked.

AttributeError: 'NoneType' object has no attribute 'volume'

Traceback (most recent call last):
  File "/Users/gustavofonseca/prj/oai-pmh/tests/test_articlemeta.py", line 112, in test_get_known_resource_returns_namedtuple_resource
    self.assertIsInstance(am.get('validID'), entities.Resource)
  File "/Users/gustavofonseca/prj/oai-pmh/oaipmh/articlemeta.py", line 290, in get
    return ArticleResourceFacade(doc).to_resource()
  File "/Users/gustavofonseca/prj/oai-pmh/oaipmh/articlemeta.py", line 238, in to_resource
    source=self.source(),
  File "/Users/gustavofonseca/prj/oai-pmh/oaipmh/articlemeta.py", line 211, in source
    return [self.article.bibliographic_legends().get('descriptive_format')]
  File "/Users/gustavofonseca/prj/envs/oai-pmh/lib/python3.6/site-packages/xylose/scielodocument.py", line 1486, in bibliographic_legends
    self.issue.volume,
AttributeError: 'NoneType' object has no attribute 'volume'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.