Skip to content

Commit

Permalink
adding tests for content negotiation
Browse files Browse the repository at this point in the history
  • Loading branch information
mfenner committed Oct 7, 2023
1 parent 47cc188 commit d53ed3f
Show file tree
Hide file tree
Showing 13 changed files with 2,776 additions and 5 deletions.
291 changes: 290 additions & 1 deletion poetry.lock

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ typesense = "^0.17.0"
pydash = "^6.0"
commonmeta-py = "^0.8.4"
pytest-asyncio = "^0.21.1"
chardet = "^5.2.0"


[tool.poetry.group.dev.dependencies]
Expand All @@ -28,6 +29,7 @@ pytest-cov = "^4.1.0"
ruff = "^0.0.292"
black = "^23.9.1"
pytest-asyncio = "^0.21.1"
pytest-recording = "^0.13.0"

[build-system]
requires = ["poetry-core"]
Expand Down
7 changes: 6 additions & 1 deletion rogue_scholar_api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
from uuid import UUID
from dotenv import load_dotenv
from supabase import create_client, Client as SupabaseClient
from quart import Quart, request, jsonify
from quart import Quart, request, jsonify, render_template
import typesense as ts
import chardet

from rogue_scholar_api.utils import get_doi_metadata_from_ra

Expand Down Expand Up @@ -145,6 +146,10 @@ async def post(slug, suffix=None):
}
content_type = content_types.get(format_)
metadata = get_doi_metadata_from_ra(doi, headers={"Accept": content_type})
try:
print(metadata)
except Exception:
pass
if not metadata:
return {"error": "Metadata not found."}, 404

Expand Down
1 change: 1 addition & 0 deletions rogue_scholar_api/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
def get_doi_metadata_from_ra(doi: str, headers) -> str:
"""use DOI content negotiation to get metadata in various formats"""
response = requests.get(doi, headers=headers)
response.encoding = 'UTF-8'
if response.status_code >= 400:
return "Metadata not found"
return response.text.strip()
Expand Down
214 changes: 214 additions & 0 deletions tests/cassettes/test-routes/test_blogs_route.yaml

Large diffs are not rendered by default.

240 changes: 240 additions & 0 deletions tests/cassettes/test-routes/test_post_as_bibtex.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,240 @@
interactions:
- request:
body: '{}'
headers:
accept:
- application/vnd.pgrst.object+json
accept-encoding:
- gzip, deflate
accept-profile:
- public
connection:
- keep-alive
content-length:
- '2'
content-profile:
- public
content-type:
- application/json
host:
- db.rogue-scholar.org
user-agent:
- python-httpx/0.24.1
x-client-info:
- supabase-py/1.2.0
method: GET
uri: https://db.rogue-scholar.org/rest/v1/posts?select=id%2C%20doi%2C%20url%2C%20archive_url%2C%20title%2C%20summary%2C%20content_html%2C%20published_at%2C%20updated_at%2C%20indexed_at%2C%20authors%2C%20image%2C%20tags%2C%20language%2C%20reference%2C%20relationships%2C%20blog_name%2C%20blog_slug%2C%20blog%3A%20blogs%21inner%28%2A%29&doi=eq.https%3A//doi.org/10.59350/sfzv4-xdb68
response:
content: "{\"id\":\"77b2102f-fec5-425a-90a3-4a97c768bdc4\",\"doi\":\"https://doi.org/10.59350/sfzv4-xdb68\",\"url\":\"https://norbisley.wordpress.com/2023/10/06/que-libros-cientificos-publicamos\",\"archive_url\":null,\"title\":\"\xBFQu\xE9
libros cient\xEDficos publicamos?\",\"summary\":\"Con frecuencia a la editorial
llegan textos que terminan siendo muy diferentes a la idea de libro que el autor
tra\xEDa inicialmente. Esto se debe en parte, a que es insuficiente el abordaje
de las clasificaciones de textos cient\xEDficos que se divulga institucionalmente.\",\"content_html\":\"\\n<p><img
loading=\\\"lazy\\\" width=\\\"1008\\\" height=\\\"301\\\" src=\\\"https://norbisley.files.wordpress.com/2023/10/rrm1esyb-3.png\\\"
srcset=\\\"https://norbisley.files.wordpress.com/2023/10/rrm1esyb-3.png 1008w,
https://norbisley.files.wordpress.com/2023/10/rrm1esyb-3.png?w=150&amp;h=45
150w, https://norbisley.files.wordpress.com/2023/10/rrm1esyb-3.png?w=300&amp;h=90
300w, https://norbisley.files.wordpress.com/2023/10/rrm1esyb-3.png?w=768&amp;h=229
768w\\\" /></p>\\n\\n\\n\\n<p>Con frecuencia a la editorial llegan textos que
terminan siendo muy diferentes a la idea de libro que el autor tra\xEDa inicialmente.
Esto se debe en parte, a que es insuficiente el abordaje de las clasificaciones
de textos cient\xEDficos que se divulga institucionalmente. Aqu\xED comento
brevemente algunos tipos de libros que publicamos en <a href=\\\"https://edicionesuc.reduc.edu.cu/\\\">Ediciones
Universidad de Camag\xFCey.</a></p>\\n\\n\\n\\n<ul>\\n<li><strong>Libros de
texto: </strong>se utilizan para mejorar la comprensi\xF3n de una asignatura.
Enriquecen los procesos de aprendizaje mediante la explicaci\xF3n te\xF3rica
de los principales conceptos, su aplicaci\xF3n explicada en ejemplos concretos
y la presentaci\xF3n de ejercicios que responden a las habilidades o competencias
de un programa.</li>\\n\\n\\n\\n<li><strong>Gu\xEDas de estudio o de ejercicios:</strong>
proporcionan informaci\xF3n detallada sobre un tema espec\xEDfico mediante la
resoluci\xF3n de problemas. Pueden incluir consejos, estrategias, tutoriales.
Culminan con la lista de soluciones de manera tal que pueda facilitar el autoaprendizaje.</li>\\n\\n\\n\\n<li><strong>Ciclos
de conferencias:</strong> se publica el programa con su justificaci\xF3n y todas
las conferencias que debe desarrollar un docente de la asignatura.</li>\\n\\n\\n\\n<li><strong>Libros
de consulta o de referencia:</strong> no son de lectura continuada, sino que
el lector los consulta cuando quiere conocer un dato determinado. Debe contar
con entradas organizadas alfab\xE9tica o cronol\xF3gicamente de acuerdo al tema
y puede ser o no ilustrado (enciclopedias, diccionarios, vocabularios, gu\xEDas
telef\xF3nicas, cat\xE1logos, directorios, etc.).</li>\\n\\n\\n\\n<li><strong>Libros
de ensayo: </strong>presentan una posici\xF3n argumentativa sobre un tema, resultado
de una investigaci\xF3n exhaustiva en la que el autor defiende un punto de vista.</li>\\n\\n\\n\\n<li><strong>Manual:
</strong>proporciona instrucciones detalladas sobre c\xF3mo utilizar un producto
o realizar un proceso. Los manuales suelen incluir diagramas, gr\xE1ficos y
otros elementos visuales para hacer que la informaci\xF3n sea m\xE1s f\xE1cil
de comprender. Son libros instructivos.</li>\\n\\n\\n\\n<li><strong>Compilaciones:</strong>
este texto re\xFAne los principales textos (o partes de textos) y aportes existentes
sobre un tema. Puede reunir diferentes g\xE9neros con una estructura tem\xE1tica
l\xF3gica seg\xFAn el objetivo que persiga el compilador.</li>\\n\\n\\n\\n<li><strong>Compendio:</strong>
presenta una materia en extenso, abracando todas las aristas posibles. Recopila
informaci\xF3n de manera descriptiva.</li>\\n\\n\\n\\n<li><strong>Monograf\xEDa:
</strong>analiza una materia en profundidad, dejando partes \u2014debidamente
limitadas en la descripci\xF3n del objeto de estudio\u2014 sin ser estudiadas.</li>\\n\\n\\n\\n<li><strong>Tratados:</strong>
se caracteriza por la exposici\xF3n objetiva, integral y ordenada de conocimientos
sobre un t\xF3pico espec\xEDfico. Se relata o escribe tal como un discurso,
usando el texto expositivo y en tercera persona; se subdivide en numerosos apartados
que ayudan a organizarlo de forma correlativa y l\xF3gica. El tratado debe incluir
gran cantidad de datos precisos.</li>\\n\\n\\n\\n<li><strong>Memorias: </strong>Presenta
conclusiones y trabajos presentados a un evento.</li>\\n</ul>\\n\\n\\n\\n<p>Todos
los libros de este sello editorial son digitales y est\xE1n disponibles, en
acceso abierto. </p>\\n\\n\\n\\n<p></p>\\n\\n\\n\\n<p></p>\\n\\n\\n\\n<p>Bibliograf\xEDas:</p>\\n\\n\\n\\n<p>Moyano,
Estela. \u201CUna clasificaci\xF3n de g\xE9neros cient\xEDficos.\u201D XIX Congreso
aesla. Vol. 1. No. 9. 2001.</p>\\n\\n\\n\\n<p>M\xE9ndez, Misael. \u201CCategor\xEDas
de trabajo en edici\xF3n de textos: breve experiencia con publicaciones cubanas
y extranjeras.\u201D Islas 135 (2003): 27-48.</p>\\n\\n\\n\\n<p>M\xE9ndez, Misael.
Ser manual pero no parecerlo. Editorial Samuel Feijoo, Las Villas, 2020.</p>\\n\",\"published_at\":1696588740,\"updated_at\":1696589176,\"indexed_at\":1696593190,\"authors\":[{\"url\":
\"https://orcid.org/0000-0002-9373-4622\", \"name\": \"Norbisley Fern\xE1ndez\"}],\"image\":\"https://norbisley.files.wordpress.com/2023/10/rrm1esyb-3.png\",\"tags\":[\"Presentacion
De La Informacion Cientifica\",\"Sin Categoria\"],\"language\":\"es\",\"reference\":[],\"relationships\":[],\"blog_name\":\"Edici\xF3n
y comunicaci\xF3n de la Ciencia\",\"blog_slug\":\"norbisley\",\"blog\":{\"id\":\"6aswq28\",\"title\":\"Edici\xF3n
y comunicaci\xF3n de la Ciencia\",\"description\":null,\"language\":\"es\",\"favicon\":\"https://db.rogue-scholar.org/storage/v1/object/public/images/Screenshot%202023-08-28%20063918.png\",\"feed_url\":\"https://norbisley.wordpress.com/feed/atom/\",\"home_page_url\":\"https://norbisley.wordpress.com\",\"user_id\":\"126368cd-e941-4e6f-8316-f5fe574e595b\",\"created_at\":\"2023-08-22\",\"feed_format\":\"application/atom+xml\",\"license\":\"https://creativecommons.org/licenses/by/4.0/legalcode\",\"generator\":\"WordPress.com\",\"category\":\"mediaAndCommunications\",\"prefix\":\"10.59350\",\"modified_at\":\"2023-10-06T10:46:16+00:00\",\"version\":\"https://jsonfeed.org/version/1.1\",\"current_feed_url\":null,\"status\":\"active\",\"issn\":null,\"backlog\":0,\"authors\":null,\"plan\":\"Starter\",\"slug\":\"norbisley\",\"use_mastodon\":false,\"api\":true,\"funding\":null,\"archive_prefix\":null,\"use_api\":true,\"relative_url\":null,\"canonical_url\":null,\"filter\":null}}"
headers:
Access-Control-Allow-Origin:
- '*'
CF-Cache-Status:
- DYNAMIC
CF-Ray:
- 812915949f8c162c-DUS
Connection:
- keep-alive
Content-Location:
- /posts?doi=eq.https%3A%2F%2Fdoi.org%2F10.59350%2Fsfzv4-xdb68&select=id%2C%20doi%2C%20url%2C%20archive_url%2C%20title%2C%20summary%2C%20content_html%2C%20published_at%2C%20updated_at%2C%20indexed_at%2C%20authors%2C%20image%2C%20tags%2C%20language%2C%20reference%2C%20relationships%2C%20blog_name%2C%20blog_slug%2C%20blog%3A%20blogs%21inner%28%2A%29
Content-Profile:
- public
Content-Range:
- 0-0/*
Content-Type:
- application/vnd.pgrst.object+json; charset=utf-8
Date:
- Sat, 07 Oct 2023 21:02:18 GMT
Server:
- cloudflare
Strict-Transport-Security:
- max-age=2592000; includeSubDomains
Transfer-Encoding:
- chunked
Vary:
- Accept-Encoding
Via:
- kong/2.8.1
X-Kong-Proxy-Latency:
- '1'
X-Kong-Upstream-Latency:
- '5'
alt-svc:
- h3=":443"; ma=86400
sb-gateway-version:
- '1'
http_version: HTTP/1.1
status_code: 200
- request:
body: null
headers:
Accept:
- application/x-bibtex
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
User-Agent:
- python-requests/2.31.0
method: GET
uri: https://doi.org/10.59350/sfzv4-xdb68
response:
body:
string: '<html><head><title>Handle Redirect</title></head>
<body><a href="https://api.crossref.org/v1/works/10.59350%2Fsfzv4-xdb68/transform">https://api.crossref.org/v1/works/10.59350%2Fsfzv4-xdb68/transform</a></body></html>'
headers:
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 81291595fd5366ca-AMS
Connection:
- keep-alive
Content-Length:
- '217'
Content-Type:
- text/html;charset=utf-8
Date:
- Sat, 07 Oct 2023 21:02:18 GMT
NEL:
- '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}'
Report-To:
- '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=csm4%2BFJyDC6Iqc9QnDiXFzKc8%2BrRdKB%2B0JyD3VDfNOzynREEOA6pTuaOHQ%2BdMhLA02qLJC0DZvsylmNQuhW0IVnZayZRjZJhQ3DPNhCBaEQvIXb9nb5L7JDlGVc55HNuRdXSkyE%3D"}],"group":"cf-nel","max_age":604800}'
Server:
- cloudflare
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
alt-svc:
- h3=":443"; ma=86400
expires:
- Sat, 07 Oct 2023 21:36:07 GMT
location:
- https://api.crossref.org/v1/works/10.59350%2Fsfzv4-xdb68/transform
permissions-policy:
- interest-cohort=(),browsing-topics=()
vary:
- Accept
status:
code: 302
message: Found
- request:
body: null
headers:
Accept:
- application/x-bibtex
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
User-Agent:
- python-requests/2.31.0
method: GET
uri: https://api.crossref.org/v1/works/10.59350%2Fsfzv4-xdb68/transform
response:
body:
string: "@article{Fern_ndez_2023,\n\tdoi = {10.59350/sfzv4-xdb68},\n\turl =
{https://doi.org/10.59350%2Fsfzv4-xdb68},\n\tyear = 2023,\n\tmonth = {oct},\n\tpublisher
= {Front Matter},\n\tauthor = {Norbisley Fern{\\'{a}}ndez},\n\ttitle = {{\\textquestiondown}Qu{\\'{e}}
libros cient{\\'{\\i}}ficos publicamos?}\n}"
headers:
access-control-allow-headers:
- X-Requested-With, Accept, Accept-Encoding, Accept-Charset, Accept-Language,
Accept-Ranges, Cache-Control
access-control-allow-origin:
- '*'
access-control-expose-headers:
- Link
connection:
- close
content-type:
- application/x-bibtex
date:
- Sat, 07 Oct 2023 21:02:19 GMT
link:
- "<http://dx.doi.org/10.59350/sfzv4-xdb68>; rel=\"canonical\", <https://norbisley.wordpress.com/2023/10/06/que-libros-cientificos-publicamos>;
version=\"vor\"; type=\"text/html\"; rel=\"item\", <https://creativecommons.org/licenses/by/4.0/legalcode>;
version=\"vor\"; rel=\"license\", <https://creativecommons.org/licenses/by/4.0/legalcode>;
version=\"tdm\"; rel=\"license\", <http://orcid.org/0000-0002-9373-4622>;
title=\"Norbisley Fern\xE1ndez\"; rel=\"author\""
permissions-policy:
- interest-cohort=()
server:
- Jetty(9.4.40.v20210413)
transfer-encoding:
- chunked
vary:
- Accept
x-api-pool:
- public
x-rate-limit-interval:
- 1s
x-rate-limit-limit:
- '50'
x-ratelimit-interval:
- 1s
x-ratelimit-limit:
- '50'
status:
code: 200
message: OK
version: 1

0 comments on commit d53ed3f

Please sign in to comment.