jzavala-gonzalez / bioportal-apis

BioPortal APIs es un paquete de Python que permite accesar las bases de datos públicas del BioPortal del Departamento de Salud de Puerto Rico.
MIT License
2 stars 1 forks source link

Error de decompresión Brotli #1

Open sacundim opened 3 years ago

sacundim commented 3 years ago

Versión 0.0.3 (la que está en PyPi), siguiendo las instrucciones en el README:

Python 3.7.3 (default, Apr 24 2020, 18:51:23) 
[Clang 11.0.3 (clang-1103.0.32.62)] on darwin
>>> from bioportal import BioPortalClient
>>> cliente = BioPortalClient()
>>> casos_por_coleccion = cliente.descargar_dataset('Casos por fecha de coleccion')
Descargando "Casos por fecha de coleccion"...
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/Users/casillas/Code/covid-19-puerto-rico-downloader/.venv/lib/python3.7/site-packages/bioportal/bioportal_client.py", line 41, in descargar_dataset
    apidata = self.descargar_dataset_url(aurl, verbose=verbose)
  File "/Users/casillas/Code/covid-19-puerto-rico-downloader/.venv/lib/python3.7/site-packages/bioportal/bioportal_client.py", line 48, in descargar_dataset_url
    apidata_raw = (brotli.decompress(r.content))
  File "/Users/casillas/Code/covid-19-puerto-rico-downloader/.venv/lib/python3.7/site-packages/brotli/brotli.py", line 89, in decompress
    data = d.decompress(data)
  File "/Users/casillas/Code/covid-19-puerto-rico-downloader/.venv/lib/python3.7/site-packages/brotli/brotli.py", line 419, in decompress
    "Decompression error: %s" % ffi.string(error_message)
brotli.brotli.Error: Decompression error: b'CL_SPACE'

Mirando un poco por la web, my hipótesis es lo que dice esta respuesta en StackOverflow: que mi versión de la biblioteca requests (2.25.1 en mi virtualenv) está descomprimiendo implícitamente la descarga (usando brotlipy, 0.7.0 en mi virtualenv). Jugando un poco para confirmarlo, veo esto:

>>> import requests
>>> apiurl = 'https://BioPortal.salud.gov.pr/api/administration/reports/cases/grouped-by-collected-date'
>>> r = requests.get(apiurl, headers={'Accept-Encoding': 'br'}, timeout=(15,None))
>>> r.status_code
200
>>> apidata_raw = r.content
>>> apidata_raw[0:100]
b'[{"collectedDate":"3/13/2020","totalConfirmedCases":1,"totalProbableCases":0},{"collectedDate":"3/14'

...que no está comprimido.

jzavala-gonzalez commented 3 years ago

Hola! y gracias por levantar el issue! Entiendo que versión 0.0.5 arreglo este issue y esta disponible en pypi. Tiene que ver un poco con que no tengo manera de determinar cuando BioPortal enviara las tablas en brotli format o no. En bioportal/bioportal_client.py lineas 114-117 puedes ver que al momento el fix es un try-except para circumventar ese error temporeramente. Ha resuelto hasta ahora, pero estoy pendiente a si otro compression issue vuelve a aparecer.

sacundim commented 3 years ago

Pues yo lo que veo en PyPi es esto:

Screen Shot 2021-03-07 at 10 31 32 PM

https://pypi.org/project/bioportal-apis/#history

jzavala-gonzalez commented 3 years ago

Ahh, ya veo. Esa version sigue arriba a lo que aprendia como publish a PyPi. El actual solo se llama 'bioportal' en vez de 'bioportal-apis' y esta aqui: https://pypi.org/project/bioportal/

sacundim commented 3 years ago

Ah. Ahora sí funciona.

Si el bioportal-api no tiene usuarios y no funciona, parece que convendría borrarlo de PyPi. Cosa que normalmente no es una práctica recomendable, pero de nuevo, si no tiene usuarios y no funciona pues eso a mi entender sí amerita borrarlo de PyPi.

jzavala-gonzalez commented 3 years ago

Buena idea, aprovecho y lo cierro para evitar mas confusion. Cierro este issue mañana si no vuelve a aparecer algun bug a lo que lo usas.

sacundim commented 3 years ago

Al momento solo estaba siguiendo las instrucciones básicas para mirar, así que no vaciles en cerrar.

jzavala-gonzalez commented 3 years ago

Dale. Si quieres algun ejemplo de programas que hemos corrido usando esto, nos avisas y te enviamos uno o dos notebooks que tenemos que entiendo solo usan apis publicos. Gracias por el feedback, y aqui a la orden!