├── tests ├── __init__.py ├── unit │ ├── __init__.py │ └── test_endpoints.py ├── test_random_entity.py ├── cassettes │ ├── test_grouped_entities │ │ ├── test_venues_group_by_with_filter.yaml │ │ ├── test_works_group_by.yaml │ │ ├── test_authors_group_by.yaml │ │ ├── test_institutions_group_by.yaml │ │ ├── test_concepts_group_by_with_filter.yaml │ │ ├── test_groups_with_search.yaml │ │ ├── test_works_group_by_with_filter.yaml │ │ ├── test_authors_group_by_with_filter.yaml │ │ ├── test_institutions_group_by_with_filter.yaml │ │ ├── test_venues_group_by.yaml │ │ ├── test_concepts_group_by.yaml │ │ ├── test_concepts_group_by_with_sort.yaml │ │ ├── test_institutions_group_by_with_sort.yaml │ │ ├── test_authors_group_by_with_sort.yaml │ │ ├── test_groups_with_search_and_sort.yaml │ │ ├── test_works_group_by_with_sort.yaml │ │ └── test_venues_group_by_with_sort.yaml │ ├── test_random_entity │ │ ├── test_random_author.yaml │ │ ├── test_random_venue.yaml │ │ ├── test_random_institution.yaml │ │ ├── test_random_work.yaml │ │ └── test_random_concept.yaml │ └── test_single_entity │ │ ├── test_single_venue_by_openalex_id.yaml │ │ ├── test_single_venue_by_issn_id.yaml │ │ ├── test_single_venue_by_issn_l_id.yaml │ │ ├── test_single_venue_by_mag_id.yaml │ │ ├── test_single_author_by_mag_id.yaml │ │ ├── test_single_author_by_openalex_id.yaml │ │ ├── test_single_author_by_orcid_id.yaml │ │ ├── test_single_author_by_orcid_url.yaml │ │ ├── test_single_work_by_pmid.yaml │ │ ├── test_single_work_by_mag_id.yaml │ │ ├── test_single_work_by_doi.yaml │ │ ├── test_single_work_by_doi_url.yaml │ │ ├── test_single_work_by_openalex_id.yaml │ │ ├── test_single_work_by_pmid_url.yaml │ │ ├── test_single_concept_by_mag_id.yaml │ │ ├── test_single_concept_by_wikidata_id.yaml │ │ ├── test_single_concept_by_wikidata_url.yaml │ │ ├── test_single_institution_by_mag_id.yaml │ │ ├── test_single_institution_by_openalex_id.yaml │ │ └── test_single_institution_by_ror_id.yaml ├── test_list_entities.py ├── test_grouped_entities.py └── test_single_entity.py ├── diophila ├── __init__.py └── api_caller.py ├── requirements.txt ├── .github └── workflows │ └── release.yml ├── setup.py ├── LICENSE ├── .gitignore └── README.md /tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/unit/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /diophila/__init__.py: -------------------------------------------------------------------------------- 1 | from diophila.openalex import OpenAlex -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | pytest 2 | pytest-recording 3 | requests -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: upload Python Package to PyPI on release 2 | 3 | on: 4 | release: 5 | types: [published] 6 | 7 | jobs: 8 | build-n-publish: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v2 12 | 13 | - name: Set up Python 14 | uses: actions/setup-python@v3 15 | with: 16 | python-version: '3.9' 17 | 18 | - name: Build distributions 19 | run: | 20 | python -m pip install --upgrade pip 21 | pip install setuptools wheel 22 | python setup.py sdist bdist_wheel 23 | 24 | - name: Publish package 25 | uses: pypa/gh-action-pypi-publish@v1.1.0 26 | with: 27 | user: __token__ 28 | password: ${{ secrets.PYPI_API_TOKEN }} 29 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup 2 | 3 | with open("README.md", "r", encoding="utf-8") as readme: 4 | long_description = readme.read() 5 | 6 | setup( 7 | name="diophila", 8 | packages=["diophila"], 9 | version="0.4.0", 10 | author="Sandra Mierz", 11 | description="Python API Wrapper for OpenAlex", 12 | long_description=long_description, 13 | long_description_content_type="text/markdown", 14 | license="BSD-3", 15 | url="https://github.com/smierz/diophila", 16 | project_urls={ 17 | "Bug Tracker": "https://github.com/smierz/diophila/issues", 18 | }, 19 | install_requires=["requests>=2.7.0"], 20 | keywords=["openalex"], 21 | classifiers=[ 22 | "Programming Language :: Python :: 3", 23 | "License :: OSI Approved :: BSD License", 24 | "Operating System :: OS Independent", 25 | "Intended Audience :: Science/Research", 26 | ] 27 | ) 28 | -------------------------------------------------------------------------------- /tests/test_random_entity.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from diophila import OpenAlex 3 | 4 | openalex = OpenAlex() 5 | 6 | 7 | @pytest.mark.vcr 8 | def test_random_author(): 9 | random_author = openalex.get_random_author() 10 | assert random_author['id'].startswith("https://openalex.org/A") 11 | 12 | 13 | @pytest.mark.vcr 14 | def test_random_concept(): 15 | random_concept = openalex.get_random_concept() 16 | assert random_concept['id'].startswith("https://openalex.org/C") 17 | 18 | 19 | @pytest.mark.vcr 20 | def test_random_institution(): 21 | random_institution = openalex.get_random_institution() 22 | assert random_institution['id'].startswith("https://openalex.org/I") 23 | 24 | 25 | @pytest.mark.vcr 26 | def test_random_venue(): 27 | random_venue = openalex.get_random_venue() 28 | assert random_venue['id'].startswith("https://openalex.org/V") 29 | 30 | 31 | @pytest.mark.vcr 32 | def test_random_work(): 33 | random_work = openalex.get_random_work() 34 | assert random_work['id'].startswith("https://openalex.org/W") 35 | -------------------------------------------------------------------------------- /tests/cassettes/test_grouped_entities/test_venues_group_by_with_filter.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/venues?group_by=is_oa&filter=is_oa%3Atrue 15 | response: 16 | body: 17 | string: '{"meta":{"count":1,"db_response_time_ms":7,"page":1,"per_page":200},"results":[],"group_by":[{"key":"true","key_display_name":"true","count":38930}]} 18 | 19 | ' 20 | headers: 21 | Access-Control-Allow-Credentials: 22 | - 'true' 23 | Access-Control-Allow-Headers: 24 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 25 | Access-Control-Allow-Methods: 26 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 27 | Access-Control-Allow-Origin: 28 | - '*' 29 | Access-Control-Expose-Headers: 30 | - Authorization, Cache-Control 31 | Cache-Control: 32 | - max-age=0, no-cache 33 | Connection: 34 | - keep-alive 35 | Content-Length: 36 | - '150' 37 | Content-Type: 38 | - application/json 39 | Date: 40 | - Tue, 31 May 2022 09:18:04 GMT 41 | Server: 42 | - gunicorn 43 | Via: 44 | - 1.1 vegur 45 | X-Api-Pool: 46 | - common 47 | status: 48 | code: 200 49 | message: OK 50 | version: 1 51 | -------------------------------------------------------------------------------- /tests/cassettes/test_grouped_entities/test_works_group_by.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/works?group_by=has_doi 15 | response: 16 | body: 17 | string: '{"meta":{"count":2,"db_response_time_ms":1835,"page":1,"per_page":200},"results":[],"group_by":[{"key":"true","key_display_name":"true","count":134388794},{"key":"false","key_display_name":"false","count":102426106}]} 18 | 19 | ' 20 | headers: 21 | Access-Control-Allow-Credentials: 22 | - 'true' 23 | Access-Control-Allow-Headers: 24 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 25 | Access-Control-Allow-Methods: 26 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 27 | Access-Control-Allow-Origin: 28 | - '*' 29 | Access-Control-Expose-Headers: 30 | - Authorization, Cache-Control 31 | Cache-Control: 32 | - max-age=0, no-cache 33 | Connection: 34 | - keep-alive 35 | Content-Length: 36 | - '218' 37 | Content-Type: 38 | - application/json 39 | Date: 40 | - Tue, 31 May 2022 09:18:07 GMT 41 | Server: 42 | - gunicorn 43 | Via: 44 | - 1.1 vegur 45 | X-Api-Pool: 46 | - common 47 | status: 48 | code: 200 49 | message: OK 50 | version: 1 51 | -------------------------------------------------------------------------------- /tests/cassettes/test_grouped_entities/test_authors_group_by.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/authors?group_by=has_orcid 15 | response: 16 | body: 17 | string: '{"meta":{"count":2,"db_response_time_ms":4056,"page":1,"per_page":200},"results":[],"group_by":[{"key":"true","key_display_name":"true","count":4849743},{"key":"false","key_display_name":"false","count":238848360}]} 18 | 19 | ' 20 | headers: 21 | Access-Control-Allow-Credentials: 22 | - 'true' 23 | Access-Control-Allow-Headers: 24 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 25 | Access-Control-Allow-Methods: 26 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 27 | Access-Control-Allow-Origin: 28 | - '*' 29 | Access-Control-Expose-Headers: 30 | - Authorization, Cache-Control 31 | Cache-Control: 32 | - max-age=0, no-cache 33 | Connection: 34 | - keep-alive 35 | Content-Length: 36 | - '216' 37 | Content-Type: 38 | - application/json 39 | Date: 40 | - Tue, 31 May 2022 09:17:57 GMT 41 | Server: 42 | - gunicorn 43 | Via: 44 | - 1.1 vegur 45 | X-Api-Pool: 46 | - common 47 | status: 48 | code: 200 49 | message: OK 50 | version: 1 51 | -------------------------------------------------------------------------------- /tests/cassettes/test_grouped_entities/test_institutions_group_by.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/institutions?group_by=has_ror 15 | response: 16 | body: 17 | string: '{"meta":{"count":2,"db_response_time_ms":16,"page":1,"per_page":200},"results":[],"group_by":[{"key":"true","key_display_name":"true","count":102392},{"key":"false","key_display_name":"false","count":6273}]} 18 | 19 | ' 20 | headers: 21 | Access-Control-Allow-Credentials: 22 | - 'true' 23 | Access-Control-Allow-Headers: 24 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 25 | Access-Control-Allow-Methods: 26 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 27 | Access-Control-Allow-Origin: 28 | - '*' 29 | Access-Control-Expose-Headers: 30 | - Authorization, Cache-Control 31 | Cache-Control: 32 | - max-age=0, no-cache 33 | Connection: 34 | - keep-alive 35 | Content-Length: 36 | - '208' 37 | Content-Type: 38 | - application/json 39 | Date: 40 | - Tue, 31 May 2022 09:18:02 GMT 41 | Server: 42 | - gunicorn 43 | Via: 44 | - 1.1 vegur 45 | X-Api-Pool: 46 | - common 47 | status: 48 | code: 200 49 | message: OK 50 | version: 1 51 | -------------------------------------------------------------------------------- /tests/cassettes/test_grouped_entities/test_concepts_group_by_with_filter.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/concepts?group_by=level&filter=level%3A%3E3 15 | response: 16 | body: 17 | string: '{"meta":{"count":2,"db_response_time_ms":9,"page":1,"per_page":200},"results":[],"group_by":[{"key":"4","key_display_name":"4","count":12406},{"key":"5","key_display_name":"5","count":6136}]} 18 | 19 | ' 20 | headers: 21 | Access-Control-Allow-Credentials: 22 | - 'true' 23 | Access-Control-Allow-Headers: 24 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 25 | Access-Control-Allow-Methods: 26 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 27 | Access-Control-Allow-Origin: 28 | - '*' 29 | Access-Control-Expose-Headers: 30 | - Authorization, Cache-Control 31 | Cache-Control: 32 | - max-age=0, no-cache 33 | Connection: 34 | - keep-alive 35 | Content-Length: 36 | - '192' 37 | Content-Type: 38 | - application/json 39 | Date: 40 | - Tue, 31 May 2022 09:18:01 GMT 41 | Server: 42 | - gunicorn 43 | Via: 44 | - 1.1 vegur 45 | X-Api-Pool: 46 | - common 47 | status: 48 | code: 200 49 | message: OK 50 | version: 1 51 | -------------------------------------------------------------------------------- /tests/cassettes/test_grouped_entities/test_groups_with_search.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/works?group_by=has_doi&search=test 15 | response: 16 | body: 17 | string: '{"meta":{"count":2,"db_response_time_ms":389,"page":1,"per_page":200},"results":[],"group_by":[{"key":"true","key_display_name":"true","count":7586288},{"key":"false","key_display_name":"false","count":3408061}]} 18 | 19 | ' 20 | headers: 21 | Access-Control-Allow-Credentials: 22 | - 'true' 23 | Access-Control-Allow-Headers: 24 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 25 | Access-Control-Allow-Methods: 26 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 27 | Access-Control-Allow-Origin: 28 | - '*' 29 | Access-Control-Expose-Headers: 30 | - Authorization, Cache-Control 31 | Cache-Control: 32 | - max-age=0, no-cache 33 | Connection: 34 | - keep-alive 35 | Content-Length: 36 | - '213' 37 | Content-Type: 38 | - application/json 39 | Date: 40 | - Sun, 31 Jul 2022 10:16:40 GMT 41 | Server: 42 | - gunicorn 43 | Via: 44 | - 1.1 vegur 45 | X-Api-Pool: 46 | - common 47 | status: 48 | code: 200 49 | message: OK 50 | version: 1 51 | -------------------------------------------------------------------------------- /tests/cassettes/test_grouped_entities/test_works_group_by_with_filter.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/works?group_by=has_doi&filter=has_doi%3Atrue 15 | response: 16 | body: 17 | string: '{"meta":{"count":2,"db_response_time_ms":1583,"page":1,"per_page":200},"results":[],"group_by":[{"key":"true","key_display_name":"true","count":134388794},{"key":"false","key_display_name":"false","count":0}]} 18 | 19 | ' 20 | headers: 21 | Access-Control-Allow-Credentials: 22 | - 'true' 23 | Access-Control-Allow-Headers: 24 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 25 | Access-Control-Allow-Methods: 26 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 27 | Access-Control-Allow-Origin: 28 | - '*' 29 | Access-Control-Expose-Headers: 30 | - Authorization, Cache-Control 31 | Cache-Control: 32 | - max-age=0, no-cache 33 | Connection: 34 | - keep-alive 35 | Content-Length: 36 | - '210' 37 | Content-Type: 38 | - application/json 39 | Date: 40 | - Tue, 31 May 2022 09:18:09 GMT 41 | Server: 42 | - gunicorn 43 | Via: 44 | - 1.1 vegur 45 | X-Api-Pool: 46 | - common 47 | status: 48 | code: 200 49 | message: OK 50 | version: 1 51 | -------------------------------------------------------------------------------- /tests/cassettes/test_grouped_entities/test_authors_group_by_with_filter.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/authors?group_by=has_orcid&filter=works_count%3A%3E20000 15 | response: 16 | body: 17 | string: '{"meta":{"count":2,"db_response_time_ms":17,"page":1,"per_page":200},"results":[],"group_by":[{"key":"true","key_display_name":"true","count":0},{"key":"false","key_display_name":"false","count":0}]} 18 | 19 | ' 20 | headers: 21 | Access-Control-Allow-Credentials: 22 | - 'true' 23 | Access-Control-Allow-Headers: 24 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 25 | Access-Control-Allow-Methods: 26 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 27 | Access-Control-Allow-Origin: 28 | - '*' 29 | Access-Control-Expose-Headers: 30 | - Authorization, Cache-Control 31 | Cache-Control: 32 | - max-age=0, no-cache 33 | Connection: 34 | - keep-alive 35 | Content-Length: 36 | - '200' 37 | Content-Type: 38 | - application/json 39 | Date: 40 | - Tue, 31 May 2022 09:17:57 GMT 41 | Server: 42 | - gunicorn 43 | Via: 44 | - 1.1 vegur 45 | X-Api-Pool: 46 | - common 47 | status: 48 | code: 200 49 | message: OK 50 | version: 1 51 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2022, Sandra Mierz 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /tests/cassettes/test_grouped_entities/test_institutions_group_by_with_filter.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/institutions?group_by=has_ror&filter=has_ror%3Atrue 15 | response: 16 | body: 17 | string: '{"meta":{"count":2,"db_response_time_ms":17,"page":1,"per_page":200},"results":[],"group_by":[{"key":"true","key_display_name":"true","count":102392},{"key":"false","key_display_name":"false","count":0}]} 18 | 19 | ' 20 | headers: 21 | Access-Control-Allow-Credentials: 22 | - 'true' 23 | Access-Control-Allow-Headers: 24 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 25 | Access-Control-Allow-Methods: 26 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 27 | Access-Control-Allow-Origin: 28 | - '*' 29 | Access-Control-Expose-Headers: 30 | - Authorization, Cache-Control 31 | Cache-Control: 32 | - max-age=0, no-cache 33 | Connection: 34 | - keep-alive 35 | Content-Length: 36 | - '205' 37 | Content-Type: 38 | - application/json 39 | Date: 40 | - Tue, 31 May 2022 09:18:02 GMT 41 | Server: 42 | - gunicorn 43 | Via: 44 | - 1.1 vegur 45 | X-Api-Pool: 46 | - common 47 | status: 48 | code: 200 49 | message: OK 50 | version: 1 51 | -------------------------------------------------------------------------------- /tests/cassettes/test_grouped_entities/test_venues_group_by.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/venues?group_by=is_oa 15 | response: 16 | body: 17 | string: '{"meta":{"count":3,"db_response_time_ms":11,"page":1,"per_page":200},"results":[],"group_by":[{"key":"false","key_display_name":"false","count":58988},{"key":"true","key_display_name":"true","count":38930},{"key":"unknown","key_display_name":"unknown","count":26148}]} 18 | 19 | ' 20 | headers: 21 | Access-Control-Allow-Credentials: 22 | - 'true' 23 | Access-Control-Allow-Headers: 24 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 25 | Access-Control-Allow-Methods: 26 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 27 | Access-Control-Allow-Origin: 28 | - '*' 29 | Access-Control-Expose-Headers: 30 | - Authorization, Cache-Control 31 | Cache-Control: 32 | - max-age=0, no-cache 33 | Connection: 34 | - keep-alive 35 | Content-Length: 36 | - '269' 37 | Content-Type: 38 | - application/json 39 | Date: 40 | - Tue, 31 May 2022 09:18:03 GMT 41 | Server: 42 | - gunicorn 43 | Via: 44 | - 1.1 vegur 45 | X-Api-Pool: 46 | - common 47 | status: 48 | code: 200 49 | message: OK 50 | version: 1 51 | -------------------------------------------------------------------------------- /tests/cassettes/test_grouped_entities/test_concepts_group_by.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/concepts?group_by=level 15 | response: 16 | body: 17 | string: '{"meta":{"count":6,"db_response_time_ms":5,"page":1,"per_page":200},"results":[],"group_by":[{"key":"3","key_display_name":"3","count":24768},{"key":"2","key_display_name":"2","count":21460},{"key":"4","key_display_name":"4","count":12406},{"key":"5","key_display_name":"5","count":6136},{"key":"1","key_display_name":"1","count":284},{"key":"0","key_display_name":"0","count":19}]} 18 | 19 | ' 20 | headers: 21 | Access-Control-Allow-Credentials: 22 | - 'true' 23 | Access-Control-Allow-Headers: 24 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 25 | Access-Control-Allow-Methods: 26 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 27 | Access-Control-Allow-Origin: 28 | - '*' 29 | Access-Control-Expose-Headers: 30 | - Authorization, Cache-Control 31 | Cache-Control: 32 | - max-age=0, no-cache 33 | Connection: 34 | - keep-alive 35 | Content-Length: 36 | - '383' 37 | Content-Type: 38 | - application/json 39 | Date: 40 | - Tue, 31 May 2022 09:18:01 GMT 41 | Server: 42 | - gunicorn 43 | Via: 44 | - 1.1 vegur 45 | X-Api-Pool: 46 | - common 47 | status: 48 | code: 200 49 | message: OK 50 | version: 1 51 | -------------------------------------------------------------------------------- /tests/cassettes/test_grouped_entities/test_concepts_group_by_with_sort.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/concepts?group_by=level&sort=key%3Adesc 15 | response: 16 | body: 17 | string: '{"meta":{"count":6,"db_response_time_ms":4,"page":1,"per_page":200},"results":[],"group_by":[{"key":"5","key_display_name":"5","count":6136},{"key":"4","key_display_name":"4","count":12406},{"key":"3","key_display_name":"3","count":24768},{"key":"2","key_display_name":"2","count":21460},{"key":"1","key_display_name":"1","count":284},{"key":"0","key_display_name":"0","count":19}]} 18 | 19 | ' 20 | headers: 21 | Access-Control-Allow-Credentials: 22 | - 'true' 23 | Access-Control-Allow-Headers: 24 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 25 | Access-Control-Allow-Methods: 26 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 27 | Access-Control-Allow-Origin: 28 | - '*' 29 | Access-Control-Expose-Headers: 30 | - Authorization, Cache-Control 31 | Cache-Control: 32 | - max-age=0, no-cache 33 | Connection: 34 | - keep-alive 35 | Content-Length: 36 | - '383' 37 | Content-Type: 38 | - application/json 39 | Date: 40 | - Tue, 31 May 2022 09:18:02 GMT 41 | Server: 42 | - gunicorn 43 | Via: 44 | - 1.1 vegur 45 | X-Api-Pool: 46 | - common 47 | status: 48 | code: 200 49 | message: OK 50 | version: 1 51 | -------------------------------------------------------------------------------- /tests/cassettes/test_grouped_entities/test_institutions_group_by_with_sort.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/institutions?group_by=type&sort=key%3Aasc%2Ccount%3Adesc 15 | response: 16 | body: 17 | string: !!binary | 18 | H4sIAEvdlWIA/3WR3Y6DIBBG7/cx5poL1KYVX2XTEKpTJZWfIHZjjO++NJWIiV4xk8N3AjMzKPQC 19 | qhlqM2oPFSPQPLjDwRo9IPdSIVcDVBklYEWLoQoFOv5tckoXAuH62Ptw6/dOoHVmtPwxhW6GF4Yz 20 | uJUVegLy6XkjB9uLiWuhcAfXJ+TswsqFxDA2Yy28NPo4nuJVkLEySwTaaOvMU/pjQYqjoLix6ybo 21 | UPS+q4XDY8OOR0XObvmmeIpa9tKfjCChcQ0FTdLGd+iOoxGtuTJLfz7qlzZ/J4Pb4Jq9FvSyZVvz 22 | RqcV6pOx7Xg00CIxCFd38n0ysw3GrZd5sdyXn391i4jgkgIAAA== 23 | headers: 24 | Access-Control-Allow-Credentials: 25 | - 'true' 26 | Access-Control-Allow-Headers: 27 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 28 | Access-Control-Allow-Methods: 29 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 30 | Access-Control-Allow-Origin: 31 | - '*' 32 | Access-Control-Expose-Headers: 33 | - Authorization, Cache-Control 34 | Cache-Control: 35 | - max-age=0, no-cache 36 | Connection: 37 | - keep-alive 38 | Content-Encoding: 39 | - gzip 40 | Content-Length: 41 | - '265' 42 | Content-Type: 43 | - application/json 44 | Date: 45 | - Tue, 31 May 2022 09:18:03 GMT 46 | Server: 47 | - gunicorn 48 | Vary: 49 | - Accept-Encoding 50 | Via: 51 | - 1.1 vegur 52 | X-Api-Pool: 53 | - common 54 | status: 55 | code: 200 56 | message: OK 57 | version: 1 58 | -------------------------------------------------------------------------------- /tests/cassettes/test_grouped_entities/test_authors_group_by_with_sort.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/authors?group_by=last_known_institution.type&sort=key%3Aasc 15 | response: 16 | body: 17 | string: !!binary | 18 | H4sIAJa+42IA/3WRwY6DIBCG7/sYc/YgCBV8lU1DqE4rqYJBbGOM7742q8EmeoLJx/8xAxO0GDQU 19 | E5RusAEKmUB1Ux77ztkeVTAtqraHgl4kSaDTD4Tis0Gv/guapnMCS2BownLu95rAw7uhU7dxqSZ4 20 | 4rKC9mVtXgjJp1aV6btGj8rqFr/g2oQQOcnnZAuXru20HY/DEa5hmmVE0jTGsRpKHYyzx4I9XhWM 21 | MMYzvnPcdWkaE0562NGtCSEvjNEoeLgXetviAg8VX3yVZISRTIooqVE3oS61P3nIL77NIrgkjEeJ 22 | dbbz7m5OGtnjVUFSLkhGosKFGv1xfEPbCDllnMXkYJ/WvU9+IsLtYkmFEJTn83X++QOIvkbGqwIA 23 | AA== 24 | headers: 25 | Access-Control-Allow-Credentials: 26 | - 'true' 27 | Access-Control-Allow-Headers: 28 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 29 | Access-Control-Allow-Methods: 30 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 31 | Access-Control-Allow-Origin: 32 | - '*' 33 | Access-Control-Expose-Headers: 34 | - Authorization, Cache-Control 35 | Cache-Control: 36 | - max-age=0, no-cache 37 | Connection: 38 | - keep-alive 39 | Content-Encoding: 40 | - gzip 41 | Content-Length: 42 | - '286' 43 | Content-Type: 44 | - application/json 45 | Date: 46 | - Fri, 29 Jul 2022 11:03:50 GMT 47 | Server: 48 | - gunicorn 49 | Vary: 50 | - Accept-Encoding 51 | Via: 52 | - 1.1 vegur 53 | X-Api-Pool: 54 | - common 55 | status: 56 | code: 200 57 | message: OK 58 | version: 1 59 | -------------------------------------------------------------------------------- /tests/cassettes/test_grouped_entities/test_groups_with_search_and_sort.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/works?group_by=type&search=test&sort=key%3Aasc 15 | response: 16 | body: 17 | string: !!binary | 18 | H4sIAFBX5mIA/4WV0a6jIBCG7/cxuNZExIr2VTYnhups61aBAJ6Tpum7L5sjwlGxVy2Z//8YhmF8 19 | ohEMQ+cnasXEDTrnNEHdpVGgpeAaGtOP0IwancsESXYFdMb2D6jme5Fn2StBVj0Nxop+fyToqsQk 20 | m8vDrp7oDvYXXYS4o+T/oul6LQf2aDgbwUfmzU84x6dXEtrS9sakARW3B4oZQ/KSVvWKI5kyB5A5 21 | PBOKcuXW0Jpe8AOAV7gsNgjVgz4kzIIZsCmFhqMTfEe3m7ditFcJPOINw64Hakq9v2OGRXf2wSVp 22 | UuSBudf2WIbFi7dSuPzJieLgCq+KxQ7gQi55b/orJsXZsG/zwaVr6Maa2q7o2wEOEYFoRlFCaEbw 23 | FmfPOr2BOYnLqqi3J0o/xTCNb0CLxiXlMaPgwpZN3vYJYXgpTl14vzC32It0IfeQCK28TwKoVMFn 24 | D1/77p8CX4KgE6TQBrq0FdxEe3qjcaSswKfgaUslWoCu59fIu/wpmClVhXcRx82yL3R3QzGh+T71 25 | aG7s6nbGh4I/oIC3kMZH8UazzMJqD2QLqx7vSE40o8oir0OWFLGZvMRcgTJSV2vrYWnWEveJCUeb 26 | Nox3THX7hCDqssCYBLc08TsXX5G55oPuPsqqqMri9fH69Q8TBBqbdgcAAA== 27 | headers: 28 | Access-Control-Allow-Credentials: 29 | - 'true' 30 | Access-Control-Allow-Headers: 31 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 32 | Access-Control-Allow-Methods: 33 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 34 | Access-Control-Allow-Origin: 35 | - '*' 36 | Access-Control-Expose-Headers: 37 | - Authorization, Cache-Control 38 | Cache-Control: 39 | - max-age=0, no-cache 40 | Connection: 41 | - keep-alive 42 | Content-Encoding: 43 | - gzip 44 | Content-Length: 45 | - '499' 46 | Content-Type: 47 | - application/json 48 | Date: 49 | - Sun, 31 Jul 2022 10:20:00 GMT 50 | Server: 51 | - gunicorn 52 | Vary: 53 | - Accept-Encoding 54 | Via: 55 | - 1.1 vegur 56 | X-Api-Pool: 57 | - common 58 | status: 59 | code: 200 60 | message: OK 61 | version: 1 62 | -------------------------------------------------------------------------------- /tests/cassettes/test_grouped_entities/test_works_group_by_with_sort.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/works?group_by=type&sort=key%3Aasc%2Ccount%3Adesc 15 | response: 16 | body: 17 | string: !!binary | 18 | H4sIAFLdlWIA/4VVy46jMBC872f4HCSDX3h+ZTVCDvQmbAJGxswoivLv69FicIhNTjy6unB3VTd3 19 | 1IFV6OOOaj31Fn0U5QE1x8rAOOh+hMq2HVTdiD7yvKQHNKgTuHt3A6b6/1Bg/DgglzBdrcP9/jyg 20 | k9HTUB1v7umOLuCu6K+eTK+umTK2ra+ADj/vq6Ydh6u6Vb3qIAqaT5XnggpOOXkcPOHUX3r93ceJ 21 | 1uBMIHJcMEzkmn/U+pLVZzVYMHGSDcIfRchSEiFWpsHoGqBp+9O4X14cOPOWuOCc0ZXWJY9grLKt 22 | TlS5QcxEnBY0F/i50nSFayItMctZ0KJBjxaarNa9BQeI17TFzGRECkZoWI6yaoQEyxr0NiSFwCSQ 23 | 28AfMNDXkLnPmFuc5hXkRcM/8pcrnXea6+D0xowe4nXiBeMyPNigTaKsJealEZLjfM3V9pwynw/N 24 | mUxIFnqu070+GTWc49lh2DPkzl6BK0ar+kaZJk4QRL2gbs7zQM8BwGQGvlr4TjjjCbDoKklc1rRL 25 | XzCeC7uK2MpV687trKRTw/DCUDCCo5P8doKDzjJJ2Yu1dk0VDJ3kgm/dlLmxbiFxhi3EW5xLTDfr 26 | bVApZ4ZhT0BdO14n5Etfp+7NiCwY73NZBC53Rkxp4kM+r5RiU8JeJ54Byw8sJ/HdvEcVxfnGMLpt 27 | 7Ah1ei1vEDOLJMULyZ44T+uQcLZJtkbVO1t9ifuusMfn49c/ssUoYO4HAAA= 28 | headers: 29 | Access-Control-Allow-Credentials: 30 | - 'true' 31 | Access-Control-Allow-Headers: 32 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 33 | Access-Control-Allow-Methods: 34 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 35 | Access-Control-Allow-Origin: 36 | - '*' 37 | Access-Control-Expose-Headers: 38 | - Authorization, Cache-Control 39 | Cache-Control: 40 | - max-age=0, no-cache 41 | Connection: 42 | - keep-alive 43 | Content-Encoding: 44 | - gzip 45 | Content-Length: 46 | - '557' 47 | Content-Type: 48 | - application/json 49 | Date: 50 | - Tue, 31 May 2022 09:18:10 GMT 51 | Server: 52 | - gunicorn 53 | Vary: 54 | - Accept-Encoding 55 | Via: 56 | - 1.1 vegur 57 | X-Api-Pool: 58 | - common 59 | status: 60 | code: 200 61 | message: OK 62 | version: 1 63 | -------------------------------------------------------------------------------- /tests/cassettes/test_random_entity/test_random_author.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/authors/random 15 | response: 16 | body: 17 | string: !!binary | 18 | H4sIAFzdlWIA/52VXWvbMBSG7/crgq7dxJL1YQfGGKU3Y4N99G4Mo9laLKJIxpLrhpL/vmOXjGRx 19 | S5WAgy0do+e857w+T0jXaI2aEFq/Xq1cq6w06nHpus3qI8koLihlJEcJcl01htremATV2rdG7ksr 20 | dwpev3e7xV296229+KS8dy06DymlCaqzMugH5dH6568EDa7b+rJyvQ1ojRNU6aDq8vf+uJQmQAax 21 | T+jI9DbMndxA4MnSIUFG+lBurRtsqa0POvRBO3vM5RGOtJVqw0j29IoetzjL85xxTuCcQW91LYM8 22 | CR6GYXlcnl4YH1bfWF5gdCHZ10YbB0o1e9gz6kGZKWdfuQ62cZou00PyKg0RJOUEx8GALiK/pLlv 23 | lDNuc8KCo1iwEBR+LI6FU0pmlHFGB11Js/CVVlCZawXCRcGyglAcRQWZzAj0WQ7XalMwTKhgWRRF 24 | LhjP+SXHnX3QnbM7ZQMIpEKjK38tGMNQgCIt0igywjnDbAbttuk0mEvaCywSVzZOslGwOKwcZ3RG 25 | LrC2253BRPYQpSmBK1IjTNIZz/9wlf7PZpGWp5wLIeJgwPK5uIT5rozeaNf7hQ99rdXVbZSB8QXD 26 | RRQUFgUjM+b/IrutCgs11e3qzxEBkfKU4cnJEVA8yyikM9PbMjTwWaoWHkoIxgtKVo22m5d7HEbc 27 | NMn8ONP2SnbTcHm+geYQb5iAh39jUra67DtzkgGsLM9yngI//NHjoH0ve8Dtlrpenw/HvoWM4ZDx 28 | f5ySKeY3Kb8hY8ZVp17YO7z7C8nSCdUmCAAA 29 | headers: 30 | Access-Control-Allow-Credentials: 31 | - 'true' 32 | Access-Control-Allow-Headers: 33 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 34 | Access-Control-Allow-Methods: 35 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 36 | Access-Control-Allow-Origin: 37 | - '*' 38 | Access-Control-Expose-Headers: 39 | - Authorization, Cache-Control 40 | Cache-Control: 41 | - max-age=0, no-cache 42 | Connection: 43 | - keep-alive 44 | Content-Encoding: 45 | - gzip 46 | Content-Length: 47 | - '597' 48 | Content-Type: 49 | - application/json 50 | Date: 51 | - Tue, 31 May 2022 09:18:20 GMT 52 | Server: 53 | - gunicorn 54 | Vary: 55 | - Accept-Encoding 56 | Via: 57 | - 1.1 vegur 58 | X-Api-Pool: 59 | - common 60 | status: 61 | code: 200 62 | message: OK 63 | version: 1 64 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | 131 | # IDE 132 | /.idea/ 133 | -------------------------------------------------------------------------------- /tests/cassettes/test_single_entity/test_single_venue_by_openalex_id.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/venues/V2751751161 15 | response: 16 | body: 17 | string: !!binary | 18 | H4sIAGTdlWIA/5WWW2/TMBTH3/kUU57b1PdLJYTEBE+ABki8oCnyUtOYpXEUJ+uqqd+dk47S5UK7 19 | VG2V2P7bv3Oxj58it4qWUVbXZVguFr60hcntY+yr9eIHkRzDFwsczSIXQpHk0bJo8vz57fi8cqHM 20 | zS4pzMbCXN996kx+9T11tkjt1TcbrKnS7OqLrbe+uoepyuYudyGz1XGGtj0kqW+KOloqKbhAsyh1 21 | tV0ld7tjOyVUaEXatRNvTiCJK5KVN7+PLZnf2NKsbdJU+V/TwLLtdhuHUBVx6jeL1pxViJZP0dHg 22 | 1/lgY9Yw8EXTfhY9Ah/YWdYw38+nM+68xoJQwiRHMNPW3buVqc2LwS3hsfkgaF8WXxWmLBo4+QMs 23 | 6jcuDdCV2wcLloLLQuor6JUk5vvZeRYpGXz4JBQqGCNDlhufu9qlEPPwHPMxJkFidomJMUwpxH4S 24 | FFMUMU6HWO+b4AobRj3EdYwu0WjNqSYMT6IBt6ohyiezPVHgEwWP8SUKhKmiB69PcAlFmA8pPrrC 25 | dKJzIiE61hdIGEZI4YN1rychGOsRf1z7TdnUtjqXMK9AgoRBBH7TEoZggvCQqT22fO7Xu1EYdTF7 26 | KSQL5UxO21F6JE6fTZ3Zjan/s7uJuJi7SigER83EjUTQyCY64xN6OUBUKcWFmJa+XOmR+NxkLvfB 27 | l9k4DI7V/haKRlsrQls1dlB1Dify8wNBhPQKDSPDIkP4waZ/GtzXUELoiAwhpFVHiXpKAWk3osRc 28 | 9ZRY95QcIqmHSs0okx2h6sMKLcRQKLGQvCOU/RWRlCMVGAvFCe0oRV9JMWEj/pEa/N9R8oGVmKiR 29 | qq8kRV3/sCEtkUMlI0xr0VHSvhILPULLEFWiSzvIHS3kSPpQjdto3h5Hm9K9uIa0OQ8tcWeTHAa+ 30 | ++VyOA/fZj7UyYMtGhu71bJ7+WhK2CewWvvf3kLAoXPE56i9HaSV7fZhOUd6DlVg/+YPsRjALOMJ 31 | AAA= 32 | headers: 33 | Access-Control-Allow-Credentials: 34 | - 'true' 35 | Access-Control-Allow-Headers: 36 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 37 | Access-Control-Allow-Methods: 38 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 39 | Access-Control-Allow-Origin: 40 | - '*' 41 | Access-Control-Expose-Headers: 42 | - Authorization, Cache-Control 43 | Cache-Control: 44 | - max-age=0, no-cache 45 | Connection: 46 | - keep-alive 47 | Content-Encoding: 48 | - gzip 49 | Content-Length: 50 | - '743' 51 | Content-Type: 52 | - application/json 53 | Date: 54 | - Tue, 31 May 2022 09:18:28 GMT 55 | Server: 56 | - gunicorn 57 | Vary: 58 | - Accept-Encoding 59 | Via: 60 | - 1.1 vegur 61 | X-Api-Pool: 62 | - common 63 | status: 64 | code: 200 65 | message: OK 66 | version: 1 67 | -------------------------------------------------------------------------------- /tests/cassettes/test_single_entity/test_single_venue_by_issn_id.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/venues/issn:1431-5890 15 | response: 16 | body: 17 | string: !!binary | 18 | H4sIAGXdlWIA/51WyW7bMBC99ysCnm2Z+2KgKNCceijaoEB7CApBkRibjTaIUhwjyL935DSGLRFW 19 | 1IthDeeRb2becPiMXIbWaNu2tV+vVlVtyyS3T1HVbFY/OWGCY8nRAjnvyzgHT2wYWSph1D8jWt8i 20 | wsEmtMFgO10ngtIllVKh3wuUOV/nyT4uk8LCPtdbW3wp76umAMe6u8ud39oGFn653O7BtquaBx+n 21 | VVe2aK2oZhgvUOpam8V3+zc7FZQw3DOJqwSt75Pc28OXK+OsSv4cTduqsHWysXHXQBRll+fglnm0 22 | fkZvMf93GopkA5aB1zvz8rJATxBMmdq6BTa3zxfqcU20EIZK3e+3cw8uS9rkxHm320Vv5gOg/1jd 23 | UEYNCubf+bbpU53bRwtBQR59WjWwSjCO8MviMhmllcGSziNDIEtkzOZbs0lKl16lY1bkyErpiE6Q 24 | 0pAcRvk8TvwQw4DRZ1fl1SaYHaEjMZUcISRXVJp5leKMCzHm8tVmLnWw/eX8CBHJCV5CcMO0VLNo 25 | KWx4MEGX2bCITGUJmhfEeeiZGeUibMzm+3bvXepD5WIyUlNEJAEtUzlPN5pSGUjMNXjlwOaEDD0l 26 | M6VhYqiQoOF5RaJUKyYD2kla2zi4BK986izcM8EUkUnlKAKU8Nxu1xKTQLv/AE72snyomryBJNz+ 27 | WB6Cfj8lwwMlu+mSsu2Kq8Km2/4e8kFGMuITjCgxguCZetbGUEIDOqqKO2j6turLd7nzad9rMGMP 28 | U9H383Fvk+YwTl7/UEzJYKTK8TSFHugDPELwAEIDGMZPIcQMIGyMkISeQfTwlABmAFFDSOBpQLg5 29 | B8kBiDDNVQiHB6eJIVByGXqLwAUiz4B8CITLl4eABuszIBtRhbdFAKhBbGdAOjoRZkqgaBA77gXz 30 | 6pzU7vVddJQqWKIzaR8cP927HDr347bybfxoy85GLlufvo+6GsQNR/W/sB2khC6xWOJ+LW3s+RqR 31 | SyyXlKOXD38BV68ICYcKAAA= 32 | headers: 33 | Access-Control-Allow-Credentials: 34 | - 'true' 35 | Access-Control-Allow-Headers: 36 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 37 | Access-Control-Allow-Methods: 38 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 39 | Access-Control-Allow-Origin: 40 | - '*' 41 | Access-Control-Expose-Headers: 42 | - Authorization, Cache-Control 43 | Cache-Control: 44 | - max-age=0, no-cache 45 | Connection: 46 | - keep-alive 47 | Content-Encoding: 48 | - gzip 49 | Content-Length: 50 | - '758' 51 | Content-Type: 52 | - application/json 53 | Date: 54 | - Tue, 31 May 2022 09:18:29 GMT 55 | Server: 56 | - gunicorn 57 | Vary: 58 | - Accept-Encoding 59 | Via: 60 | - 1.1 vegur 61 | X-Api-Pool: 62 | - common 63 | status: 64 | code: 200 65 | message: OK 66 | version: 1 67 | -------------------------------------------------------------------------------- /tests/cassettes/test_single_entity/test_single_venue_by_issn_l_id.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/venues/issn_l:0931-7597 15 | response: 16 | body: 17 | string: !!binary | 18 | H4sIAGbdlWIA/51WyW7bMBC99ysCnm2Z+2KgKNCceijaoEB7CApBkRibjTaIUhwjyL935DSGLRFW 19 | 1IthDeeRb2becPiMXIbWaNu2tV+vVlVtyyS3T1HVbFY/OWGCY8nRAjnvyzgHT2wYWSph1D8jWt8i 20 | wsEmtMFgO10ngtIllVKh3wuUOV/nyT4uk8LCPtdbW3wp76umAMe6u8ud39oGFn653O7BtquaBx+n 21 | VVe2aK2oZhgvUOpam8V3+zc7FZQw3DOJqwSt75Pc28OXK+OsSv4cTduqsHWysXHXQBRll+fglnm0 22 | fkZvMf93GopkA5aB1zvz8rJATxBMmdq6BTa3zxfqcU20EIZK3e+3cw8uS9rkxHm320Vv5gOg/1jd 23 | UEYNCubf+bbpU53bRwtBQR59WjWwSjCO8MviMhmllcGSziNDIEtkzOZbs0lKl16lY1bkyErpiE6Q 24 | 0pAcRvk8TvwQw4DRZ1fl1SaYHaEjMZUcISRXVJp5leKMCzHm8tVmLnWw/eX8CBHJCV5CcMO0VLNo 25 | KWx4MEGX2bCITGUJmhfEeeiZGeUibMzm+3bvXepD5WIyUlNEJAEtUzlPN5pSGUjMNXjlwOaEDD0l 26 | M6VhYqiQoOF5RaJUKyYD2kla2zi4BK986izcM8EUkUnlKAKU8Nxu1xKTQLv/AE72snyomryBJNz+ 27 | WB6Cfj8lwwMlu+mSsu2Kq8Km2/4e8kFGMuITjCgxguCZetbGUEIDOqqKO2j6turLd7nzad9rMGMP 28 | U9H383Fvk+YwTl7/UEzJYKTK8TSFHugDPELwAEIDGMZPIcQMIGyMkISeQfTwlABmAFFDSOBpQLg5 29 | B8kBiDDNVQiHB6eJIVByGXqLwAUiz4B8CITLl4eABuszIBtRhbdFAKhBbGdAOjoRZkqgaBA77gXz 30 | 6pzU7vVddJQqWKIzaR8cP927HDr347bybfxoy85GLlufvo+6GsQNR/W/sB2khC6xWOJ+LW3s+RqR 31 | SyyXlKOXD38BV68ICYcKAAA= 32 | headers: 33 | Access-Control-Allow-Credentials: 34 | - 'true' 35 | Access-Control-Allow-Headers: 36 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 37 | Access-Control-Allow-Methods: 38 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 39 | Access-Control-Allow-Origin: 40 | - '*' 41 | Access-Control-Expose-Headers: 42 | - Authorization, Cache-Control 43 | Cache-Control: 44 | - max-age=0, no-cache 45 | Connection: 46 | - keep-alive 47 | Content-Encoding: 48 | - gzip 49 | Content-Length: 50 | - '758' 51 | Content-Type: 52 | - application/json 53 | Date: 54 | - Tue, 31 May 2022 09:18:30 GMT 55 | Server: 56 | - gunicorn 57 | Vary: 58 | - Accept-Encoding 59 | Via: 60 | - 1.1 vegur 61 | X-Api-Pool: 62 | - common 63 | status: 64 | code: 200 65 | message: OK 66 | version: 1 67 | -------------------------------------------------------------------------------- /tests/cassettes/test_random_entity/test_random_venue.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/venues/random 15 | response: 16 | body: 17 | string: !!binary | 18 | H4sIAF3dlWIA/62W32vbMBDH3/dXGD9tkDn6aUuBMVjpQx/KVsb2UopRbTXRYsvGstuG0v99Z3dJ 19 | m9iN6zIIIT7fRR/dnb66B9+k/sJf1XXpFvN5UWqrMn0fFNVy/psRjAgVNOT+zDfO2TgDXxLh8DNi 20 | XP4z+ovLF7armZ8aV2ZqE1uVa/A/XTu1rhV4l811ZtxKV2D9Zc2trpyplfPOXKZy78ymhdXOKO9j 21 | ZzCJt3PaeMXNs8Mn+K+7olq7OCkaW/uLkM38xNQ6ja83WxuOWry4UP7iRmVOd0/Gxmmh/uxMqyLX 22 | pVrquKlga7bJMnBLnb948Lep+L/ZeZz590BoE13WsMzlw5H8n4hQIEoYardr1iZVkMVn37u7u2Br 23 | 7vzbh/kFI63/QQ2+mSIrlht4kelbDZxo5rukqOAdlwF7nB3lwIJzSQBmEgihRPZJTlY6N66uhlnC 24 | gI6wUCoJ5SyahEIl75OcqxpYVG0SN8TC+CgLJhHDNER0Egxu26aPc2qXxmpdGbscxCEBGcXBFHIe 25 | smn9ggdgfqw27rW8oCAcAWEYIYGZmNYuGEsx0C9FXja1rjyXGA3H5p1IOBKRRCGZ1sIYU477TN+r 26 | pbIgT0m/l/EOikYBH4EKCScopOEkJslYn+iiUbZuci/XyapFc4NEeLyjhQTFkdNOV4T5gOScJgeS 27 | 8wxCZBCNgUjCQ5C+aSSEiKhLZ/+ow8ECyT/WRUQEeISKcyapCCemB8mBioEiH22fN9BEkKT2qE1s 28 | aSwHqnWuU5OA/rwzMRjxSPJQTjvymDAxID4/axBlV7/SxYQHaIwmhLuHRXxaZgSmA3WCNrZF/ooW 29 | voGFEbggoomaLCgXQ1rYNkyiMk8P3RUvUkThSodBrJuEXDsTbbSqumnj6QdBhByMUAMTVLe1XQA+ 30 | CMC8H0HpXgg6CCGyHxKJlyFYHq4iBiY7shciDlcZ2snV1kmV5mnY29UALMFezTrHrzcmA9H4sipc 31 | Hd9q2+jApIv9oa8poW6wUPvdjn6Q1c+Iw6QH75JK99/Bh/qPH/4CNFo/tXULAAA= 32 | headers: 33 | Access-Control-Allow-Credentials: 34 | - 'true' 35 | Access-Control-Allow-Headers: 36 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 37 | Access-Control-Allow-Methods: 38 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 39 | Access-Control-Allow-Origin: 40 | - '*' 41 | Access-Control-Expose-Headers: 42 | - Authorization, Cache-Control 43 | Cache-Control: 44 | - max-age=0, no-cache 45 | Connection: 46 | - keep-alive 47 | Content-Encoding: 48 | - gzip 49 | Content-Length: 50 | - '788' 51 | Content-Type: 52 | - application/json 53 | Date: 54 | - Tue, 31 May 2022 09:18:21 GMT 55 | Server: 56 | - gunicorn 57 | Vary: 58 | - Accept-Encoding 59 | Via: 60 | - 1.1 vegur 61 | X-Api-Pool: 62 | - common 63 | status: 64 | code: 200 65 | message: OK 66 | version: 1 67 | -------------------------------------------------------------------------------- /tests/cassettes/test_single_entity/test_single_venue_by_mag_id.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/venues/mag:1983995261 15 | response: 16 | body: 17 | string: !!binary | 18 | H4sIAGXdlWIA/6WWTWvbQBCG7/0VQWdb3pn9NpRCQgktFNJLL6UYRdram8iSkOQ4JuS/d+XEsT42 19 | EaIXY4/m1T47++54ngKbBMtgU9dFtVws8sJkUWoew7xcL36BVlRrjgKCWWCrKlulLhdByLmiXL8G 20 | g+XvVuzPLEhsVaTRYZVFW+Pyb4wpv7vcYneb2mpjylZsn5f31SrOd1kdLJEIrmZBbGuTrG4PpzAw 21 | EIo1a63yKFjW5c4cf9hsleTR3SmyybemiNZmtSvT1x25De33+7Bwi92Fcb5dNMRJFSyfgtNG/2Pv 22 | 22jtIoO8XjmeZ8Gj20kWm6J2K/9++qDgV0ooQpGRpjL23iZRHbVym72cwsf85sfiJ8Mmv1f0S5un 23 | +frgHqTmwTh0MguqOC/dM8VD9jz7kEOCRgZkGgcAaA/JD5PY2GbGh8J0KEZQQHGu0dVlEgtS1EOU 24 | q43Z2qouvWVhIiQjLJxRzpHSSSgSBA5Rrk1mahtXZxI4k9CQj1ZFO6NoOZGEe87na9xzSgsEQhwr 25 | CWeaKjERhGjmtWw8PKAzDdWjNICSAmWgphmXCI9Zrs27N4jyUasAYRSk61sTT0hJv1fOGPiGgWrc 26 | JxwkJUKIaRhI+BDjxr02z+p33YJytK8ACopICE5tLMpj3G9ZbUr38ovtoMO0oEQoR6CaRqeATfMM 27 | umanPB0m3xY7h3VRxda4nu9zj0Ma87Grv2AaxDT3AJHg9fG6jIqN18nIxm+4Voigph0ZYx6Sy7yO 28 | Mr91aEhHrQPUdbyJJWFAPUbeHKpO623VA0L17EaY4+hRNUPIwUTl8W/75QsSxN7YwjkfDi2Imh4v 29 | 55sMejJGmW/YQck17QjJQCioRwiaU2gLQfeEVHHmERJJhewIVV9IJBkKtRKoOzrZ07lL5dmi0EJ2 30 | 1xN9HUcPqGBcdjfIezrNPDKqSLegwPoF1eg5QCI568hof1ylvvMjzqONg15So8K25tHGqC4Sdpx9 31 | TPzy16aubXze5FW9ejDZzoQ2WXaH0F3hzO0Waz6bUdQ5cU74nDQ3Ii5N9xmIORFzZMHzp388LNtV 32 | 4wsAAA== 33 | headers: 34 | Access-Control-Allow-Credentials: 35 | - 'true' 36 | Access-Control-Allow-Headers: 37 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 38 | Access-Control-Allow-Methods: 39 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 40 | Access-Control-Allow-Origin: 41 | - '*' 42 | Access-Control-Expose-Headers: 43 | - Authorization, Cache-Control 44 | Cache-Control: 45 | - max-age=0, no-cache 46 | Connection: 47 | - keep-alive 48 | Content-Encoding: 49 | - gzip 50 | Content-Length: 51 | - '802' 52 | Content-Type: 53 | - application/json 54 | Date: 55 | - Tue, 31 May 2022 09:18:29 GMT 56 | Server: 57 | - gunicorn 58 | Vary: 59 | - Accept-Encoding 60 | Via: 61 | - 1.1 vegur 62 | X-Api-Pool: 63 | - common 64 | status: 65 | code: 200 66 | message: OK 67 | version: 1 68 | -------------------------------------------------------------------------------- /tests/cassettes/test_single_entity/test_single_author_by_mag_id.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/authors/mag:1969205032 15 | response: 16 | body: 17 | string: !!binary | 18 | H4sIAF/dlWIA/7WWTW/bOBCG7/srDB168gc5/JBkoCi8yaEB2m3aLpDDojAYiYmJyKRA0VGMIv+9 19 | pJykkc3G1mEF2JCoGfKZeUfk/ExUmcyTlXN1M5/NTC21qOTD1Njb2QLnPAfEEIFknBhb9E3Dc2eH 20 | /DXxPzLBHJMJyzPs7UvV1JXYLrVYS+/2UQq3kna0mI4uVWtaYfdslqJy0mrh1L1skvl/P8ZJa+xd 21 | syzMRrtkztA4KZST5fJ6+zwGPMdjH4G3/5k8s/8/4azFrbfuTeFa5Tzy0yR+jqeBaWHWMysbKWyx 22 | snKtHrxxU5h60/y2bdt2uhvrzJX2GSlnYuNWxp5LJ1TVTDe2+rAbuTh/DwwDcMgAoXe1sE7LMPr5 23 | n+zfL4tv35PHcVKJxi3vtGn1UunGKbdxyuiQmj9rfEEB7a4QpDX2laF/2iUEtEV3gqaHqn7Z2NG3 24 | p0j9204WG+Qpw9uzRcjStg732ujamhvlAumDt9CFrF0Q+i28M4oRyjDN/EStulOlcOKVbUji83Bn 25 | Hx5mXwHjPDuEPTPreuP1GTWFkn55b1HJe1klc9TpY71Rlk3R4/hNJGAAKU8x58OgSEopJ4dY597u 26 | EAm/IHF6FAkTnnKKAA0iol0EezRXxlbl6EqVcnQlr2M8jB/nSX2slLJBOIRTCodAl6ZSThWieks2 27 | dkKO8pyRHCgeBOUDiVTSJ9FGM3MCBfe1ibOuDk6n8OycsQiHurbCbt+qHnqcKeOZ39DowOLpim2P 28 | 529lKnO7jSlE0FGOFAd50DAO7PMZIfksS1UoHS0WOKGAAwgmA/cdnALNI2df94WvlVb6NiYRHJcI 29 | 0jSjyNdiOgyIMs4ARZAWlVtLZ1XR/CaCQUQEA4GBO06GeQaRTedC3xi7FuG4GtmAJe9FFU0VnCAd 30 | JgRyToeVM47szJerbdPLEBoCEjTLEGN42I6D0xjKmXJdeqJqBZYfT6dvE9qjrT+Qu5N1dwMIYK+b 31 | ijRTDEJALx54zwNH2q8877mgPRc4dPEH1WsXnB93gRz3XLI9FxLrC1nPJT1hFeiD8RPCJ6jnwo7n 32 | GFLSc6EnrIJ7umCy55LHYumvsi9+JHyv5EvDLWq19K3nq1L1I9NecXeGH25UaNnf71rUqSrn/RZ7 33 | U/vS9quEfz9ZqMKJ76pRHjpFK/vvMJ8gPgGaPP71C5CrZM+UDAAA 34 | headers: 35 | Access-Control-Allow-Credentials: 36 | - 'true' 37 | Access-Control-Allow-Headers: 38 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 39 | Access-Control-Allow-Methods: 40 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 41 | Access-Control-Allow-Origin: 42 | - '*' 43 | Access-Control-Expose-Headers: 44 | - Authorization, Cache-Control 45 | Cache-Control: 46 | - max-age=0, no-cache 47 | Connection: 48 | - keep-alive 49 | Content-Encoding: 50 | - gzip 51 | Content-Length: 52 | - '894' 53 | Content-Type: 54 | - application/json 55 | Date: 56 | - Tue, 31 May 2022 09:18:23 GMT 57 | Server: 58 | - gunicorn 59 | Vary: 60 | - Accept-Encoding 61 | Via: 62 | - 1.1 vegur 63 | X-Api-Pool: 64 | - common 65 | status: 66 | code: 200 67 | message: OK 68 | version: 1 69 | -------------------------------------------------------------------------------- /tests/cassettes/test_single_entity/test_single_author_by_openalex_id.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/authors/openalex:A1969205032 15 | response: 16 | body: 17 | string: !!binary | 18 | H4sIAMsblmIA/7WWTW/bOBCG7/srDB168gc5/JBkoCi8yaEB2m3aLpDDojAYiYmJyKRA0VGMIv+9 19 | pJykkc3G1mEF2JCoGfKZeUfk/ExUmcyTlXN1M5/NTC21qOTD1Njb2QLnPAfEEIFknBhb9E3Dc2eH 20 | /DXxPzLBHJMJyzPs7UvV1JXYLrVYS+/2UQq3kna0mI4uVWtaYfdslqJy0mrh1L1skvl/P8ZJa+xd 21 | syzMRrtkztA4KZST5fJ6+zwGPMdjH4G3/5k8s/8/4azFrbfuTeFa5Tzy0yR+jqeBaWHWMysbKWyx 22 | snKtHrxxU5h60/y2bdt2uhvrzJX2GSlnYuNWxp5LJ1TVTDe2+rAbuTh/DwwDcMgAoXe1sE7LMPr5 23 | n+zfL4tv35PHcVKJxi3vtGn1UunGKbdxyuiQmj9rfEEB7a4QpDX2laF/2iUEtEV3gqaHqn7Z2NG3 24 | p0j9204WG+Qpw9uzRcjStg732ujamhvlAumDt9CFrF0Q+i28M4oRyjDN/EStulOlcOKVbUji83Bn 25 | Hx5mXwHjPDuEPTPreuP1GTWFkn55b1HJe1klc9TpY71Rlk3R4/hNJGAAKU8x58OgSEopJ4dY597u 26 | EAm/IHF6FAkTnnKKAA0iol0EezRXxlbl6EqVcnQlr2M8jB/nSX2slLJBOIRTCodAl6ZSThWieks2 27 | dkKO8pyRHCgeBOUDiVTSJ9FGM3MCBfe1ibOuDk6n8OycsQiHurbCbt+qHnqcKeOZ39DowOLpim2P 28 | 529lKnO7jSlE0FGOFAd50DAO7PMZIfksS1UoHS0WOKGAAwgmA/cdnALNI2df94WvlVb6NiYRHJcI 29 | 0jSjyNdiOgyIMs4ARZAWlVtLZ1XR/CaCQUQEA4GBO06GeQaRTedC3xi7FuG4GtmAJe9FFU0VnCAd 30 | JgRyToeVM47szJerbdPLEBoCEjTLEGN42I6D0xjKmXJdeqJqBZYfT6dvE9qjrT+Qu5N1dwMIYK+b 31 | ijRTDEJALx54zwNH2q8877mgPRc4dPEH1WsXnB93gRz3XLI9FxLrC1nPJT1hFeiD8RPCJ6jnwo7n 32 | GFLSc6EnrIJ7umCy55LHYumvsi9+JHyv5EvDLWq19K3nq1L1I9NecXeGH25UaNnf71rUqSrn/RZ7 33 | U/vS9quEfz9ZqMKJ76pRHjpFK/vvMJ8gPgGaPP71C5CrZM+UDAAA 34 | headers: 35 | Access-Control-Allow-Credentials: 36 | - 'true' 37 | Access-Control-Allow-Headers: 38 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 39 | Access-Control-Allow-Methods: 40 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 41 | Access-Control-Allow-Origin: 42 | - '*' 43 | Access-Control-Expose-Headers: 44 | - Authorization, Cache-Control 45 | Cache-Control: 46 | - max-age=0, no-cache 47 | Connection: 48 | - keep-alive 49 | Content-Encoding: 50 | - gzip 51 | Content-Length: 52 | - '894' 53 | Content-Type: 54 | - application/json 55 | Date: 56 | - Tue, 31 May 2022 13:44:43 GMT 57 | Server: 58 | - gunicorn 59 | Vary: 60 | - Accept-Encoding 61 | Via: 62 | - 1.1 vegur 63 | X-Api-Pool: 64 | - common 65 | status: 66 | code: 200 67 | message: OK 68 | version: 1 69 | -------------------------------------------------------------------------------- /tests/cassettes/test_single_entity/test_single_author_by_orcid_id.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/authors/orcid:0000-0003-1613-5981 15 | response: 16 | body: 17 | string: !!binary | 18 | H4sIAGDdlWIA/7WWTW/bOBCG7/srDB168gc5/JBkoCi8yaEB2m3aLpDDojAYiYmJyKRA0VGMIv+9 19 | pJykkc3G1mEF2JCoGfKZeUfk/ExUmcyTlXN1M5/NTC21qOTD1Njb2QLnPAfEEIFknBhb9E3Dc2eH 20 | /DXxPzLBHJMJyzPs7UvV1JXYLrVYS+/2UQq3kna0mI4uVWtaYfdslqJy0mrh1L1skvl/P8ZJa+xd 21 | syzMRrtkztA4KZST5fJ6+zwGPMdjH4G3/5k8s/8/4azFrbfuTeFa5Tzy0yR+jqeBaWHWMysbKWyx 22 | snKtHrxxU5h60/y2bdt2uhvrzJX2GSlnYuNWxp5LJ1TVTDe2+rAbuTh/DwwDcMgAoXe1sE7LMPr5 23 | n+zfL4tv35PHcVKJxi3vtGn1UunGKbdxyuiQmj9rfEEB7a4QpDX2laF/2iUEtEV3gqaHqn7Z2NG3 24 | p0j9204WG+Qpw9uzRcjStg732ujamhvlAumDt9CFrF0Q+i28M4oRyjDN/EStulOlcOKVbUji83Bn 25 | Hx5mXwHjPDuEPTPreuP1GTWFkn55b1HJe1klc9TpY71Rlk3R4/hNJGAAKU8x58OgSEopJ4dY597u 26 | EAm/IHF6FAkTnnKKAA0iol0EezRXxlbl6EqVcnQlr2M8jB/nSX2slLJBOIRTCodAl6ZSThWieks2 27 | dkKO8pyRHCgeBOUDiVTSJ9FGM3MCBfe1ibOuDk6n8OycsQiHurbCbt+qHnqcKeOZ39DowOLpim2P 28 | 529lKnO7jSlE0FGOFAd50DAO7PMZIfksS1UoHS0WOKGAAwgmA/cdnALNI2df94WvlVb6NiYRHJcI 29 | 0jSjyNdiOgyIMs4ARZAWlVtLZ1XR/CaCQUQEA4GBO06GeQaRTedC3xi7FuG4GtmAJe9FFU0VnCAd 30 | JgRyToeVM47szJerbdPLEBoCEjTLEGN42I6D0xjKmXJdeqJqBZYfT6dvE9qjrT+Qu5N1dwMIYK+b 31 | ijRTDEJALx54zwNH2q8877mgPRc4dPEH1WsXnB93gRz3XLI9FxLrC1nPJT1hFeiD8RPCJ6jnwo7n 32 | GFLSc6EnrIJ7umCy55LHYumvsi9+JHyv5EvDLWq19K3nq1L1I9NecXeGH25UaNnf71rUqSrn/RZ7 33 | U/vS9quEfz9ZqMKJ76pRHjpFK/vvMJ8gPgGaPP71C5CrZM+UDAAA 34 | headers: 35 | Access-Control-Allow-Credentials: 36 | - 'true' 37 | Access-Control-Allow-Headers: 38 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 39 | Access-Control-Allow-Methods: 40 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 41 | Access-Control-Allow-Origin: 42 | - '*' 43 | Access-Control-Expose-Headers: 44 | - Authorization, Cache-Control 45 | Cache-Control: 46 | - max-age=0, no-cache 47 | Connection: 48 | - keep-alive 49 | Content-Encoding: 50 | - gzip 51 | Content-Length: 52 | - '894' 53 | Content-Type: 54 | - application/json 55 | Date: 56 | - Tue, 31 May 2022 09:18:24 GMT 57 | Server: 58 | - gunicorn 59 | Vary: 60 | - Accept-Encoding 61 | Via: 62 | - 1.1 vegur 63 | X-Api-Pool: 64 | - common 65 | status: 66 | code: 200 67 | message: OK 68 | version: 1 69 | -------------------------------------------------------------------------------- /tests/cassettes/test_single_entity/test_single_author_by_orcid_url.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/authors/https://orcid.org/0000-0003-1613-5981 15 | response: 16 | body: 17 | string: !!binary | 18 | H4sIAGDdlWIA/7WWTW/bOBCG7/srDB168gc5/JBkoCi8yaEB2m3aLpDDojAYiYmJyKRA0VGMIv+9 19 | pJykkc3G1mEF2JCoGfKZeUfk/ExUmcyTlXN1M5/NTC21qOTD1Njb2QLnPAfEEIFknBhb9E3Dc2eH 20 | /DXxPzLBHJMJyzPs7UvV1JXYLrVYS+/2UQq3kna0mI4uVWtaYfdslqJy0mrh1L1skvl/P8ZJa+xd 21 | syzMRrtkztA4KZST5fJ6+zwGPMdjH4G3/5k8s/8/4azFrbfuTeFa5Tzy0yR+jqeBaWHWMysbKWyx 22 | snKtHrxxU5h60/y2bdt2uhvrzJX2GSlnYuNWxp5LJ1TVTDe2+rAbuTh/DwwDcMgAoXe1sE7LMPr5 23 | n+zfL4tv35PHcVKJxi3vtGn1UunGKbdxyuiQmj9rfEEB7a4QpDX2laF/2iUEtEV3gqaHqn7Z2NG3 24 | p0j9204WG+Qpw9uzRcjStg732ujamhvlAumDt9CFrF0Q+i28M4oRyjDN/EStulOlcOKVbUji83Bn 25 | Hx5mXwHjPDuEPTPreuP1GTWFkn55b1HJe1klc9TpY71Rlk3R4/hNJGAAKU8x58OgSEopJ4dY597u 26 | EAm/IHF6FAkTnnKKAA0iol0EezRXxlbl6EqVcnQlr2M8jB/nSX2slLJBOIRTCodAl6ZSThWieks2 27 | dkKO8pyRHCgeBOUDiVTSJ9FGM3MCBfe1ibOuDk6n8OycsQiHurbCbt+qHnqcKeOZ39DowOLpim2P 28 | 529lKnO7jSlE0FGOFAd50DAO7PMZIfksS1UoHS0WOKGAAwgmA/cdnALNI2df94WvlVb6NiYRHJcI 29 | 0jSjyNdiOgyIMs4ARZAWlVtLZ1XR/CaCQUQEA4GBO06GeQaRTedC3xi7FuG4GtmAJe9FFU0VnCAd 30 | JgRyToeVM47szJerbdPLEBoCEjTLEGN42I6D0xjKmXJdeqJqBZYfT6dvE9qjrT+Qu5N1dwMIYK+b 31 | ijRTDEJALx54zwNH2q8877mgPRc4dPEH1WsXnB93gRz3XLI9FxLrC1nPJT1hFeiD8RPCJ6jnwo7n 32 | GFLSc6EnrIJ7umCy55LHYumvsi9+JHyv5EvDLWq19K3nq1L1I9NecXeGH25UaNnf71rUqSrn/RZ7 33 | U/vS9quEfz9ZqMKJ76pRHjpFK/vvMJ8gPgGaPP71C5CrZM+UDAAA 34 | headers: 35 | Access-Control-Allow-Credentials: 36 | - 'true' 37 | Access-Control-Allow-Headers: 38 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 39 | Access-Control-Allow-Methods: 40 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 41 | Access-Control-Allow-Origin: 42 | - '*' 43 | Access-Control-Expose-Headers: 44 | - Authorization, Cache-Control 45 | Cache-Control: 46 | - max-age=0, no-cache 47 | Connection: 48 | - keep-alive 49 | Content-Encoding: 50 | - gzip 51 | Content-Length: 52 | - '894' 53 | Content-Type: 54 | - application/json 55 | Date: 56 | - Tue, 31 May 2022 09:18:24 GMT 57 | Server: 58 | - gunicorn 59 | Vary: 60 | - Accept-Encoding 61 | Via: 62 | - 1.1 vegur 63 | X-Api-Pool: 64 | - common 65 | status: 66 | code: 200 67 | message: OK 68 | version: 1 69 | -------------------------------------------------------------------------------- /tests/cassettes/test_random_entity/test_random_institution.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/institutions/random 15 | response: 16 | body: 17 | string: !!binary | 18 | H4sIAF3dlWIA/61X247bNhB971cYAvK21vJ+MVAU3TQo+lAkAdqXpoGhlWiZiCwJuqyjLvzvGSre 19 | tSRzoxXQF0oczqEOzwyH1GNgk2AT7JumrDe3t0Vp8igzX8OiSm//wIxqKgSRwU1QFdXAD3q9C6Ic 20 | M15yBB6Jrcss6rZ5dDDg+nduH0xV26ZbFbvVnYn3UQVecdHmTdVt4yJxXr/9A7amK927Sdo4amyR 21 | g2lfHEwZpWbbVtn5u/DZ4/EYtjDv+r6fLkz+A1d7ePbL2yx7MjT79nCfRzYbDg05bqO4KvLuUAeb 22 | T5+nQ1ljqhzIPJjz8LGovtTbnn2wEYrDSmxjku1992yUhMLHEwA8Bk9C/k/aworAY4hJqz5w7hEy 23 | RhhCoQDz0X6xpUlsNJjQ5OGzuZ/Z9W4v8XlDULGD5jlGbjyJmuEcTvkn82WOj1JpIKmDExAyhVs4 24 | qNIB7u7fFiGjzxPCmJMV9IPRbU+ccMQ5dWurTOpifo6QLz/ONuj+mqWmgsXdBBkEp2mdD8WhQIxQ 25 | DcYiT8/WNQkJJYoAM5ufgwkkMsdxnKmPQeTkB8KCxH0rXcu4a6nuLXrVd+RguG8p7t+j1QVBksH7 26 | rh8gqvdl/QC6tOQ8h1uiW92Hyu66Oi2y1Vg+k1/vp7G+LlTvs6yOCzsGn2D9UV0XsY1cttq8drI5 27 | Kc553WtbuzTujNPh02Pw/YUgQiZpT66Tnkh6uhlA8ATC0TUGU0ZGIDTdXh6QUnyIwfoVGMnHGPUK 28 | cgLLEUZOMewaw+n4O2KKUdcYJtAIw1/BjXE1wrAJhnmqEkNjbnSCUR5ulOARZpoHzKMBkfwE6fQV 29 | +nlsyqbuU+nlw+UtJphSogVbVHAYptdHzYd9V9u4dlXBPBjY4qAdbIUKxrgOmVvLD4lImFUguogI 30 | xoh4qLyDApQbqFF56qXDQjFDRwmFKNTzZbIQzwl8Z4usSDsfD8ZCMsNDEE6gOIlFPDRj1zw+tlHe 31 | tIfVwZ0v+ShQ+MKIzjLCmnAByshFlAhRsl/FhNWfUBDhKMnqVR1bAznr04mK2fTRknKuOF+YPUx6 32 | suevvakORdJB9wWZKJ+ViVJNKGfLVKKaeyXamwMcnP69RWlIZ7gwjJDCTC2LGMZaXbN5WxzKFmL2 33 | w3jNU8IQK01gky3jBKXKQwnksbW7mvi4kFDNccGaa83UsuRhFK6GntKTmbipbBxlK+OrQpckIjKU 34 | 80WRwjmNl0UOI+FR6XfzYh0ifF4jqaSGu9KyeGEMt+drKu+r1FWgVXwdODwkNScPQVwwjRceXhhJ 35 | DyeQJ62icu8X6BVJpDQcGHrZfpfY98/2Lp5ECg+J9Af894tAVNrBn5n7DljCEa/e8ZeddX9SPw/v 36 | naFNNqPfn7ZM+supa92fAVw814ivkRM3rsx4DIs1EmvCgtNP3wAL/obGvA4AAA== 37 | headers: 38 | Access-Control-Allow-Credentials: 39 | - 'true' 40 | Access-Control-Allow-Headers: 41 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 42 | Access-Control-Allow-Methods: 43 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 44 | Access-Control-Allow-Origin: 45 | - '*' 46 | Access-Control-Expose-Headers: 47 | - Authorization, Cache-Control 48 | Cache-Control: 49 | - max-age=0, no-cache 50 | Connection: 51 | - keep-alive 52 | Content-Encoding: 53 | - gzip 54 | Content-Length: 55 | - '1072' 56 | Content-Type: 57 | - application/json 58 | Date: 59 | - Tue, 31 May 2022 09:18:21 GMT 60 | Server: 61 | - gunicorn 62 | Vary: 63 | - Accept-Encoding 64 | Via: 65 | - 1.1 vegur 66 | X-Api-Pool: 67 | - common 68 | status: 69 | code: 200 70 | message: OK 71 | version: 1 72 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # diophila 2 | Python API Wrapper for [OpenAlex](http://openalex.org/). 3 | 4 | ### Entities / Endpoints 5 | OpenAlex currently describes five different [scholarly entity types](https://docs.openalex.org/about-the-data) 6 | and their connections: 7 | * [Authors](https://docs.openalex.org/about-the-data/author) 8 | * [Concepts](https://docs.openalex.org/about-the-data/concept) 9 | * [Institutions](https://docs.openalex.org/about-the-data/institution) 10 | * [Venues](https://docs.openalex.org/about-the-data/venue) 11 | * [Works](https://docs.openalex.org/about-the-data/work) 12 | 13 | Each entity type comes with an endpoint of the same name that can be queried 14 | for a single (random or specific) entity or multiple (grouped or listed) entities. 15 | 16 | ### Installation 17 | ```commandline 18 | pip (or pip3) install diophila 19 | ``` 20 | 21 | ### Usage 22 | First off, you need to initialize a client. The client offers all methods to query the API. 23 | 24 | ```Python 25 | from diophila import OpenAlex 26 | 27 | openalex = OpenAlex() 28 | ``` 29 | 30 | You can use the client to query for a [single random entity](https://docs.openalex.org/api/get-single-entities#random-entity) 31 | with the method `get_random_`: 32 | ```Python 33 | random_author = openalex.get_random_author() 34 | random_author['id'] 35 | ``` 36 | 37 | Or if you have a [specific entity](https://docs.openalex.org/api/get-single-entities) in mind, you can use the client 38 | using one of the entity's IDs via the `get_single_` method: 39 | ```Python 40 | specific_work = openalex.get_single_work("https://doi.org/10.1364/PRJ.433188", "doi") 41 | specific_work['display_name'] 42 | ``` 43 | 44 | If you are interested in [entities grouped](https://docs.openalex.org/api/get-groups-of-entities) into facets, 45 | use the `get_groups_of_` method: 46 | ```Python 47 | grouped_institutions = openalex.get_groups_of_institutions("type") 48 | for group in grouped_institutions['group_by']: 49 | group['key'] 50 | ``` 51 | 52 | And last but not least you can get [multiple entities](https://docs.openalex.org/api/get-lists-of-entities) from a type 53 | in a list by using the `get_list_of_` method. Note that this method uses pagination, 54 | either [basic paging](https://docs.openalex.org/api#basic-paging) or 55 | [cursor paging](https://docs.openalex.org/api#cursor-paging) 56 | depending on whether the `pages` parameter is supplied: 57 | ```Python 58 | # if no `pages` parameter is supplied, we use cursor paging 59 | pages = None 60 | # if `pages` parameter is supplied, we use basic paging 61 | pages = [1, 2, 3] 62 | 63 | filters = {"is_oa": "true", 64 | "works_count": ">15000"} 65 | pages_of_venues = openalex.get_list_of_venues(filters=filters, pages=pages) 66 | 67 | for page in pages_of_venues: # loop through pages 68 | for venue in page['results']: # loop though list of venues 69 | venue['id'] 70 | ``` 71 | 72 | Bonus: If you want to retrieve all `works` connected to another entity, 73 | you may use the entity's `works_api_url` property with the `get_works_by_api_url` method: 74 | ```Python 75 | works_api_url = "https://api.openalex.org/works?filter=author.id:A1969205032" 76 | pages_of_works = openalex.get_works_by_api_url(works_api_url) 77 | 78 | for page in pages_of_works: 79 | for work in page['results']: 80 | work['display_name'] 81 | ``` 82 | 83 | ### The Polite Pool 84 | It's a good idea to use OpenAlex [polite pool](https://docs.openalex.org/api#the-polite-pool) 85 | which offers faster response times for users providing an email address. 86 | If you would like to use it, simply initialize the client with your email address. 87 | 88 | ```Python 89 | from diophila import OpenAlex 90 | 91 | openalex = OpenAlex("your-email@address.com") 92 | ``` 93 | 94 | ### Rate limits 95 | The API currently doesn't have [rate limits](https://docs.openalex.org/api#rate-limits). 96 | However, if you need more than 100,000 calls per day, 97 | please drop the OpenAlex team a line at team@ourresearch.org 98 | or alternatively look into [using a snapshot](https://docs.openalex.org/download-snapshot). 99 | 100 | ### Citation 101 | If you are using OpenAlex in your research, 102 | the OpenAlex team kindly asks you to cite https://doi.org/10.48550/arXiv.2205.01833 103 | -------------------------------------------------------------------------------- /diophila/api_caller.py: -------------------------------------------------------------------------------- 1 | """This module wraps all API calls to the OpenAlex API.""" 2 | from typing import Optional, List, Iterable 3 | import requests 4 | 5 | 6 | class APICaller: 7 | """This class wraps all API calls to the OpenAlex API.""" 8 | 9 | # Basic paging only works for to read the first 10,000 results of any list. 10 | # see https://docs.openalex.org/api#basic-paging 11 | PAGING_RESULTS_MAX = 10000 12 | 13 | # per-page parameter can be any number between 1 and 200 14 | # see https://docs.openalex.org/api#basic-paging 15 | PER_PAGE_MAX = 200 16 | 17 | def __init__(self, base_url: str, email: Optional[str] = None) -> object: 18 | """ Init API caller, preferably with an email to get into the polite pool.""" 19 | self.base_url = base_url 20 | self.headers = {'Accept': 'application/json'} 21 | if email: 22 | self.headers['User-Agent'] = f'mailto:{email}' 23 | 24 | def get(self, path: str, params: Optional[dict] = None) -> dict: 25 | """ Make a GET request to the API. 26 | 27 | Args: 28 | path (str): path that will be concatenated to the base URL of the OpenAlex API. 29 | params (Optional[dict]): dictionary containing items that will be constructed 30 | into a query string, optional. 31 | 32 | Returns: 33 | JSON object from HTTP response. 34 | """ 35 | response = requests.get(url=f"{self.base_url}/{path}", 36 | params=params, 37 | headers=self.headers) 38 | response.raise_for_status() 39 | result = response.json() 40 | return result 41 | 42 | def get_all(self, 43 | path: str, 44 | params: dict, 45 | per_page: Optional[int] = None, 46 | pages: Optional[List[int]] = None) -> Iterable: 47 | """ Make multiple GET requests to the API to paginate through results. 48 | 49 | Args: 50 | path (str): path that will be concatenated to the base URL of the OpenAlex API. 51 | params (dict): dictionary containing items that will be constructed 52 | into a query string. 53 | per_page (Optional[int]): number of entities per page. Needs to be in [1;200]. 54 | Defaults to 25. 55 | pages (Optional[List[int]]): list of page numbers to query from API, optional. 56 | If empty, cursor pagination will be used. 57 | 58 | Returns: 59 | Generator, each item a dict from JSON representing a (partial) list of entities. 60 | """ 61 | params['per_page'] = self.__validate_per_page_param(per_page) 62 | if pages: 63 | return self.__do_basic_paging(path, params, pages) 64 | # else: 65 | return self.__do_cursor_paging(path, params) 66 | 67 | def __do_basic_paging(self, path: str, params: dict, pages: List[int]): 68 | """ Use basic pagination to loop thought the specified result pages. """ 69 | pages = self.__validate_pages(pages, params['per_page']) 70 | for page in pages: 71 | params['page'] = page 72 | yield self.get(path, params) 73 | 74 | def __do_cursor_paging(self, path: str, params: dict): 75 | """ Use cursor pagination to loop thought the results. """ 76 | params['cursor'] = "*" # start cursor pagination 77 | while True: 78 | json_response = self.get(path, params) 79 | yield json_response 80 | 81 | next_cursor = json_response['meta']['next_cursor'] 82 | if not next_cursor: 83 | break 84 | 85 | params['cursor'] = next_cursor 86 | 87 | def __validate_per_page_param(self, per_page: int) -> Optional[int]: 88 | """Helper method validating the 'per_page' parameter.""" 89 | if not per_page or per_page <= 0: 90 | return 25 # set to default 91 | if 0 < per_page <= self.PER_PAGE_MAX: 92 | return per_page 93 | # elif per_page > self.PER_PAGE_MAX: 94 | return self.PER_PAGE_MAX 95 | 96 | def __validate_pages(self, pages, per_page): 97 | """Helper method validating the 'pages' parameter.""" 98 | max_pages = self.PAGING_RESULTS_MAX / per_page 99 | valid_pages = [page for page in pages if 0 < page <= max_pages] 100 | return valid_pages 101 | -------------------------------------------------------------------------------- /tests/test_list_entities.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from diophila import OpenAlex 3 | 4 | openalex = OpenAlex() 5 | 6 | 7 | @pytest.mark.vcr 8 | def test_list_of_entities_all_defaults(): 9 | concept_pages = openalex.get_list_of_concepts() 10 | first_page = next(concept_pages) 11 | assert first_page['meta']['next_cursor'] is not None 12 | assert first_page['results'][0]['id'].startswith("https://openalex.org/C") 13 | 14 | 15 | @pytest.mark.vcr 16 | def test_list_of_entities_cursor_ends(): 17 | filters = {"doi": "https://doi.org/10.1371/journal.pone.0266781|https://doi.org/10.1371/journal.pone.0267149"} 18 | work_pages = openalex.get_list_of_works(filters) 19 | first_page = next(work_pages) 20 | assert first_page['meta']['next_cursor'] is not None 21 | assert len(first_page['results']) == 2 22 | 23 | second_page = next(work_pages) 24 | assert second_page['meta']['next_cursor'] is None 25 | assert len(second_page['results']) == 0 26 | 27 | 28 | @pytest.mark.vcr 29 | def test_list_of_entities_basic_paging(): 30 | pages = [1, 3] 31 | author_pages = openalex.get_list_of_authors(pages=pages) 32 | assert len(list(author_pages)) == len(pages) 33 | for page in author_pages: 34 | assert page['results'][0]['id'].startswith("https://openalex.org/A") 35 | assert page['meta']['page'] in pages 36 | 37 | 38 | @pytest.mark.vcr 39 | def test_list_of_entities_basic_paging_pages_exceeding(): 40 | pages = [1, 401] 41 | author_pages = openalex.get_list_of_authors(pages=pages) 42 | assert len(list(author_pages)) == len(pages) - 1 43 | 44 | 45 | @pytest.mark.vcr 46 | def test_list_of_entities_per_page(): 47 | per_page = 100 48 | venue_pages = openalex.get_list_of_venues(per_page=per_page) 49 | first_page = next(venue_pages) 50 | assert first_page['meta']['per_page'] == per_page 51 | 52 | 53 | @pytest.mark.vcr 54 | def test_list_of_entities_per_page_too_low(): 55 | per_page = 0 56 | venue_pages = openalex.get_list_of_venues(per_page=per_page) 57 | first_page = next(venue_pages) 58 | assert first_page['meta']['per_page'] == 25 59 | 60 | 61 | @pytest.mark.vcr 62 | def test_list_of_entities_per_page_too_high(): 63 | per_page = 201 64 | venue_pages = openalex.get_list_of_venues(per_page=per_page) 65 | first_page = next(venue_pages) 66 | assert first_page['meta']['per_page'] == 200 67 | 68 | 69 | @pytest.mark.vcr 70 | def test_list_of_entities_basic_paging_no_valid_pages(): 71 | pages = [0, 401] 72 | author_pages = openalex.get_list_of_authors(pages=pages) 73 | assert len(list(author_pages)) == 0 74 | 75 | 76 | @pytest.mark.vcr 77 | def test_list_of_works_by_api_url(): 78 | works_api_url = "https://api.openalex.org/works?filter=author.id:A1969205032" 79 | work_pages = openalex.get_works_by_api_url(works_api_url) 80 | first_page = next(work_pages) 81 | assert first_page['meta']['count'] > 0 82 | assert len(first_page['results']) > 0 83 | 84 | 85 | @pytest.mark.vcr 86 | def test_list_of_entities_with_search(): 87 | search = '"Physics"' 88 | concept_pages = openalex.get_list_of_concepts(search=search) 89 | first_page = next(concept_pages) 90 | assert first_page['meta']['count'] == 80 91 | 92 | 93 | @pytest.mark.vcr 94 | def test_list_of_entities_with_search_and_sort(): 95 | search = '"Physics"' 96 | sort = {"display_name": "desc"} 97 | concept_pages = openalex.get_list_of_concepts(search=search, sort=sort) 98 | first_page = next(concept_pages) 99 | assert first_page['meta']['count'] == 80 100 | assert first_page['results'][0]['level'] == 2 101 | 102 | 103 | @pytest.mark.vcr 104 | def test_list_of_entities_with_search_and_relevance_score(): 105 | search = '"Physics"' 106 | sort = {"relevance_score": "desc"} 107 | concept_pages = openalex.get_list_of_concepts(search=search, sort=sort) 108 | first_page = next(concept_pages) 109 | assert first_page['meta']['count'] == 80 110 | assert first_page['results'][0]['level'] == 0 111 | 112 | 113 | # test for exceptions 114 | def test_list_filter_is_not_filterable_attr(): 115 | filters = {"hallo": "test"} 116 | with pytest.raises(ValueError): 117 | openalex.get_list_of_works(filters) 118 | 119 | 120 | def test_list_sort_key_not_valid(): 121 | sort = {"hallo": "asc"} 122 | with pytest.raises(ValueError): 123 | openalex.get_list_of_works(sort=sort) 124 | 125 | 126 | def test_list_sort_value_not_valid(): 127 | sort = {"display_name": "xyz"} 128 | with pytest.raises(ValueError): 129 | openalex.get_list_of_works(sort=sort) 130 | 131 | 132 | def test_list_with_no_search_and_relevance_score(): 133 | sort = {"relevance_score": "asc"} 134 | with pytest.raises(ValueError): 135 | openalex.get_list_of_works(sort=sort) 136 | -------------------------------------------------------------------------------- /tests/cassettes/test_random_entity/test_random_work.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/works/random 15 | response: 16 | body: 17 | string: !!binary | 18 | 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 60 | 78sf/g2K1dYHKBsAAA== 61 | headers: 62 | Access-Control-Allow-Credentials: 63 | - 'true' 64 | Access-Control-Allow-Headers: 65 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 66 | Access-Control-Allow-Methods: 67 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 68 | Access-Control-Allow-Origin: 69 | - '*' 70 | Access-Control-Expose-Headers: 71 | - Authorization, Cache-Control 72 | Cache-Control: 73 | - max-age=0, no-cache 74 | Connection: 75 | - keep-alive 76 | Content-Encoding: 77 | - gzip 78 | Content-Length: 79 | - '2407' 80 | Content-Type: 81 | - application/json 82 | Date: 83 | - Tue, 31 May 2022 09:18:22 GMT 84 | Server: 85 | - gunicorn 86 | Vary: 87 | - Accept-Encoding 88 | Via: 89 | - 1.1 vegur 90 | X-Api-Pool: 91 | - common 92 | status: 93 | code: 200 94 | message: OK 95 | version: 1 96 | -------------------------------------------------------------------------------- /tests/test_grouped_entities.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from diophila import OpenAlex 3 | 4 | openalex = OpenAlex() 5 | 6 | 7 | # tests for /authors endpoint 8 | @pytest.mark.vcr 9 | def test_authors_group_by(): 10 | group_by = "has_orcid" 11 | grouped_authors = openalex.get_groups_of_authors(group_by) 12 | assert len(grouped_authors['group_by']) == 2 13 | 14 | 15 | @pytest.mark.vcr 16 | def test_authors_group_by_with_filter(): 17 | group_by = "has_orcid" 18 | filters = {"works_count": ">20000"} 19 | grouped_authors = openalex.get_groups_of_authors(group_by=group_by, filters=filters) 20 | assert grouped_authors['group_by'][0]['count'] == 0 21 | 22 | 23 | @pytest.mark.vcr 24 | def test_authors_group_by_with_sort(): 25 | group_by = "last_known_institution.type" 26 | sort = {"key": "asc"} 27 | grouped_authors = openalex.get_groups_of_authors(group_by=group_by, sort=sort) 28 | assert grouped_authors['group_by'][0]['key'] == "archive" 29 | 30 | 31 | # tests for /concepts endpoint 32 | @pytest.mark.vcr 33 | def test_concepts_group_by(): 34 | group_by = "level" 35 | grouped_concepts = openalex.get_groups_of_concepts(group_by) 36 | assert len(grouped_concepts['group_by']) == 6 37 | 38 | 39 | @pytest.mark.vcr 40 | def test_concepts_group_by_with_filter(): 41 | group_by = "level" 42 | filters = {"level": ">3"} 43 | grouped_concepts = openalex.get_groups_of_concepts(group_by=group_by, filters=filters) 44 | assert grouped_concepts['group_by'][0]['key'] == '4' 45 | 46 | 47 | @pytest.mark.vcr 48 | def test_concepts_group_by_with_sort(): 49 | group_by = "level" 50 | sort = {"key": "desc"} 51 | grouped_concepts = openalex.get_groups_of_concepts(group_by=group_by, sort=sort) 52 | assert grouped_concepts['group_by'][0]['key'] == '5' 53 | 54 | 55 | # tests for /institutions endpoint 56 | @pytest.mark.vcr 57 | def test_institutions_group_by(): 58 | group_by = "has_ror" 59 | grouped_institutions = openalex.get_groups_of_institutions(group_by) 60 | assert len(grouped_institutions['group_by']) == 2 61 | 62 | 63 | @pytest.mark.vcr 64 | def test_institutions_group_by_with_filter(): 65 | group_by = "has_ror" 66 | filters = {"has_ror": "true"} 67 | grouped_institutions = openalex.get_groups_of_institutions(group_by=group_by, filters=filters) 68 | assert grouped_institutions['group_by'][1]['key'] == 'false' 69 | assert grouped_institutions['group_by'][1]['count'] == 0 70 | 71 | 72 | @pytest.mark.vcr 73 | def test_institutions_group_by_with_sort(): 74 | group_by = "type" 75 | sort = {"key": "asc", "count": "desc"} 76 | grouped_institutions = openalex.get_groups_of_institutions(group_by=group_by, sort=sort) 77 | assert grouped_institutions['group_by'][0]['key'] == 'company' 78 | 79 | 80 | # tests for /venues endpoint 81 | @pytest.mark.vcr 82 | def test_venues_group_by(): 83 | group_by = "is_oa" 84 | grouped_venues = openalex.get_groups_of_venues(group_by) 85 | assert len(grouped_venues['group_by']) == 3 86 | 87 | 88 | @pytest.mark.vcr 89 | def test_venues_group_by_with_filter(): 90 | group_by = "is_oa" 91 | filters = {"is_oa": "true"} 92 | grouped_venues = openalex.get_groups_of_venues(group_by=group_by, filters=filters) 93 | assert grouped_venues['group_by'][0]['key'] == 'true' 94 | assert grouped_venues['group_by'][0]['count'] > 0 95 | 96 | 97 | @pytest.mark.vcr 98 | def test_venues_group_by_with_sort(): 99 | group_by = "publisher" 100 | sort = {"key": "asc", "count": "desc"} 101 | grouped_venues = openalex.get_groups_of_venues(group_by=group_by, sort=sort) 102 | assert grouped_venues['group_by'][0]['key'] == 'unknown' 103 | 104 | 105 | # tests for /works endpoint 106 | @pytest.mark.vcr 107 | def test_works_group_by(): 108 | group_by = "has_doi" 109 | grouped_works = openalex.get_groups_of_works(group_by) 110 | assert len(grouped_works['group_by']) == 2 111 | 112 | 113 | @pytest.mark.vcr 114 | def test_works_group_by_with_filter(): 115 | group_by = "has_doi" 116 | filters = {"has_doi": "true"} 117 | grouped_works = openalex.get_groups_of_works(group_by=group_by, filters=filters) 118 | assert grouped_works['group_by'][1]['key'] == 'false' 119 | assert grouped_works['group_by'][1]['count'] == 0 120 | 121 | 122 | @pytest.mark.vcr 123 | def test_works_group_by_with_sort(): 124 | group_by = "type" 125 | sort = {"key": "asc", "count": "desc"} 126 | grouped_works = openalex.get_groups_of_works(group_by=group_by, sort=sort) 127 | assert grouped_works['group_by'][0]['key'] == 'journal-article' 128 | 129 | 130 | @pytest.mark.vcr 131 | def test_groups_with_search(): 132 | group_by = "has_doi" 133 | search = "test" 134 | grouped_works = openalex.get_groups_of_works(group_by=group_by, search=search) 135 | assert len(grouped_works['group_by']) == 2 136 | 137 | 138 | @pytest.mark.vcr 139 | def test_groups_with_search_and_sort(): 140 | group_by = "type" 141 | search = "test" 142 | sort = {"key": "asc"} 143 | grouped_works = openalex.get_groups_of_works(group_by=group_by, search=search, sort=sort) 144 | assert grouped_works['group_by'][0]['key'] == "book" 145 | 146 | 147 | # test for exceptions 148 | def test_groups_group_by_is_empty(): 149 | group_by = None 150 | with pytest.raises(ValueError): 151 | openalex.get_groups_of_works(group_by) 152 | 153 | 154 | def test_groups_group_by_is_not_groupable_attr(): 155 | group_by = "cited_by_count" 156 | with pytest.raises(ValueError): 157 | openalex.get_groups_of_works(group_by) 158 | 159 | 160 | def test_groups_sort_key_not_valid(): 161 | group_by = "type" 162 | sort = {"hallo": "asc"} 163 | with pytest.raises(ValueError): 164 | openalex.get_groups_of_works(group_by=group_by, sort=sort) 165 | 166 | 167 | def test_groups_filter_is_not_filterable_attr(): 168 | group_by = "type" 169 | filters = {"hallo": "test"} 170 | with pytest.raises(ValueError): 171 | openalex.get_groups_of_works(group_by=group_by, filters=filters) 172 | 173 | 174 | def test_groups_with_search_and_relevance_score(): 175 | group_by = "type" 176 | search = "test" 177 | sort = {"relevance_score": "asc"} 178 | with pytest.raises(ValueError): 179 | openalex.get_groups_of_works(group_by=group_by, search=search, sort=sort) 180 | 181 | 182 | def test_groups_with_filter_search_and_relevance_score(): 183 | group_by = "type" 184 | filters = {"title.search": "test"} 185 | sort = {"relevance_score": "asc"} 186 | with pytest.raises(ValueError): 187 | openalex.get_groups_of_works(group_by=group_by, filters=filters, sort=sort) 188 | -------------------------------------------------------------------------------- /tests/test_single_entity.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from diophila import OpenAlex 3 | 4 | openalex = OpenAlex() 5 | 6 | 7 | # tests for /authors endpoint 8 | @pytest.mark.vcr 9 | def test_single_author_by_openalex_id(): 10 | openalex_id = "A1969205032" 11 | id_type = "openalex" 12 | single_author = openalex.get_single_author(openalex_id, id_type) 13 | assert single_author['id'] == f"https://openalex.org/{openalex_id}" 14 | 15 | 16 | @pytest.mark.vcr 17 | def test_single_author_by_mag_id(): 18 | mag_id = "1969205032" 19 | id_type = "mag" 20 | single_author = openalex.get_single_author(mag_id, id_type) 21 | assert single_author['ids'][id_type] == mag_id 22 | 23 | 24 | @pytest.mark.vcr 25 | def test_single_author_by_orcid_id(): 26 | orcid_id = "0000-0003-1613-5981" 27 | id_type = "orcid" 28 | single_author = openalex.get_single_author(orcid_id, id_type) 29 | assert single_author['ids'][id_type].endswith(orcid_id) 30 | 31 | 32 | @pytest.mark.vcr 33 | def test_single_author_by_orcid_url(): 34 | orcid_url = "https://orcid.org/0000-0003-1613-5981" 35 | id_type = "orcid" 36 | single_author = openalex.get_single_author(orcid_url) 37 | assert single_author['ids'][id_type] == orcid_url 38 | 39 | 40 | # tests for /concepts endpoint 41 | @pytest.mark.vcr 42 | def test_single_concept_by_openalex_id(): 43 | openalex_id = "C71924100" 44 | single_concept = openalex.get_single_concept(openalex_id) 45 | assert single_concept['id'] == f"https://openalex.org/{openalex_id}" 46 | 47 | 48 | @pytest.mark.vcr 49 | def test_single_concept_by_mag_id(): 50 | mag_id = "2780831525" 51 | id_type = "mag" 52 | single_concept = openalex.get_single_concept(mag_id, id_type) 53 | assert single_concept['ids'][id_type] == mag_id 54 | 55 | 56 | @pytest.mark.vcr 57 | def test_single_concept_by_wikidata_id(): 58 | wikidata_id = "Q11190" 59 | id_type = "wikidata" 60 | single_concept = openalex.get_single_concept(wikidata_id, id_type) 61 | assert single_concept['ids'][id_type].endswith(wikidata_id) 62 | 63 | 64 | @pytest.mark.vcr 65 | def test_single_concept_by_wikidata_url(): 66 | wikidata_url = "https://www.wikidata.org/wiki/Q11190" 67 | id_type = "wikidata" 68 | single_concept = openalex.get_single_concept(wikidata_url) 69 | assert single_concept['ids'][id_type] == wikidata_url 70 | 71 | 72 | # tests for /institutions endpoint 73 | @pytest.mark.vcr 74 | def test_single_institution_by_openalex_id(): 75 | openalex_id = "I19820366" 76 | single_institution = openalex.get_single_institution(openalex_id) 77 | assert single_institution['id'] == f"https://openalex.org/{openalex_id}" 78 | 79 | 80 | @pytest.mark.vcr 81 | def test_single_institution_by_mag_id(): 82 | mag_id = "19820366" 83 | id_type = "mag" 84 | single_institution = openalex.get_single_institution(mag_id, id_type) 85 | assert single_institution['ids'][id_type] == mag_id 86 | 87 | 88 | @pytest.mark.vcr 89 | def test_single_institution_by_ror_id(): 90 | ror_id = "034t30j35" 91 | id_type = "ror" 92 | single_institution = openalex.get_single_institution(ror_id, id_type) 93 | assert single_institution['ids'][id_type].endswith(ror_id) 94 | 95 | 96 | @pytest.mark.vcr 97 | def test_single_institution_by_ror_url(): 98 | ror_url = "https://ror.org/034t30j35" 99 | id_type = "ror" 100 | single_institution = openalex.get_single_institution(ror_url) 101 | assert single_institution['ids'][id_type] == ror_url 102 | 103 | 104 | # tests for /venues endpoint 105 | @pytest.mark.vcr 106 | def test_single_venue_by_openalex_id(): 107 | openalex_id = "V2751751161" 108 | single_venue = openalex.get_single_venue(openalex_id) 109 | assert single_venue['id'] == f"https://openalex.org/{openalex_id}" 110 | 111 | 112 | @pytest.mark.vcr 113 | def test_single_venue_by_mag_id(): 114 | mag_id = "1983995261" 115 | id_type = "mag" 116 | single_venue = openalex.get_single_venue(mag_id, id_type) 117 | assert single_venue['ids'][id_type] == mag_id 118 | 119 | 120 | @pytest.mark.vcr 121 | def test_single_venue_by_issn_id(): 122 | issn_id = "1431-5890" 123 | id_type = "issn" 124 | single_venue = openalex.get_single_venue(issn_id, id_type) 125 | assert issn_id in single_venue['ids'][id_type] 126 | 127 | 128 | @pytest.mark.vcr 129 | def test_single_venue_by_issn_l_id(): 130 | issn_l_id = "0931-7597" 131 | id_type = "issn_l" 132 | single_venue = openalex.get_single_venue(issn_l_id, id_type) 133 | assert single_venue['ids'][id_type] == issn_l_id 134 | 135 | 136 | # tests for /works endpoint 137 | @pytest.mark.vcr 138 | def test_single_work_by_openalex_id(): 139 | openalex_id = "https://openalex.org/W2741809807" 140 | single_work = openalex.get_single_work(openalex_id) 141 | assert single_work['id'] == openalex_id 142 | 143 | 144 | @pytest.mark.vcr 145 | def test_single_work_by_mag_id(): 146 | mag_id = "2741809807" 147 | id_type = "mag" 148 | single_work = openalex.get_single_work(mag_id, id_type) 149 | assert single_work['ids'][id_type] == mag_id 150 | 151 | 152 | @pytest.mark.vcr 153 | def test_single_work_by_doi(): 154 | doi = "10.7717/peerj.4375" 155 | id_type = "doi" 156 | single_work = openalex.get_single_work(doi, id_type) 157 | assert single_work['ids'][id_type].endswith(doi) 158 | 159 | 160 | @pytest.mark.vcr 161 | def test_single_work_by_doi_url(): 162 | doi_url = "https://doi.org/10.7717/peerj.4375" 163 | id_type = "doi" 164 | single_work = openalex.get_single_work(doi_url) 165 | assert single_work['ids'][id_type] == doi_url 166 | 167 | 168 | @pytest.mark.vcr 169 | def test_single_work_by_pmid(): 170 | pmid = "29456894" 171 | id_type = "pmid" 172 | single_work = openalex.get_single_work(pmid, id_type) 173 | assert single_work['ids'][id_type].endswith(pmid) 174 | 175 | 176 | @pytest.mark.vcr 177 | def test_single_work_by_pmid_url(): 178 | pmid = "https://pubmed.ncbi.nlm.nih.gov/29456894" 179 | id_type = "pmid" 180 | single_work = openalex.get_single_work(pmid, id_type) 181 | assert single_work['ids'][id_type] == pmid 182 | 183 | 184 | # test for exceptions 185 | def test_single_no_id_value(): 186 | with pytest.raises(ValueError): 187 | openalex.get_single_work(None) 188 | 189 | 190 | def test_single_id_type_is_no_id_attr(): 191 | doi = "10.7717/peerj.4375" 192 | id_type = "wrongtype" 193 | with pytest.raises(ValueError): 194 | openalex.get_single_work(doi, id_type) 195 | 196 | 197 | def test_single_no_id_type_and_id_value_not_url_or_openalex(): 198 | doi = "xyz" 199 | with pytest.raises(ValueError): 200 | openalex.get_single_work(doi) 201 | -------------------------------------------------------------------------------- /tests/unit/test_endpoints.py: -------------------------------------------------------------------------------- 1 | """All unit tests covering class 'endpoints'.""" 2 | 3 | import pytest 4 | from diophila.endpoints import Venues 5 | 6 | endpoint = Venues(None) 7 | 8 | 9 | # test method "build_filter_param" 10 | def test_build_filter_param_empty_filters_should_give_none(): 11 | filters = {} 12 | filter_param = endpoint._Endpoint__build_filter_param(filters=filters) 13 | assert filter_param is None 14 | 15 | 16 | def test_build_filter_param_valid_filters_should_give_filter_string(): 17 | filters = {"display_name.search": "test", 18 | "has_issn": "test", 19 | "publisher": "test"} 20 | filter_param = endpoint._Endpoint__build_filter_param(filters=filters) 21 | assert filter_param == "display_name.search:test,has_issn:test,publisher:test" 22 | 23 | 24 | def test_build_filter_param_no_valid_filters_error(): 25 | filters = {"hallo": "test"} 26 | with pytest.raises(ValueError): 27 | endpoint._Endpoint__build_filter_param(filters=filters) 28 | 29 | 30 | # test method "is_search" 31 | def test_is_search_no_filter_no_search(): 32 | filters = None 33 | search = None 34 | is_search = endpoint._Endpoint__is_search(filters=filters, search=search) 35 | assert is_search is False 36 | 37 | 38 | def test_is_search_with_search(): 39 | filters = {} 40 | search = "hallo" 41 | is_search = endpoint._Endpoint__is_search(filters=filters, search=search) 42 | assert is_search is True 43 | 44 | 45 | def test_is_search_even_with_empty_search(): 46 | filters = {} 47 | search = "" 48 | is_search = endpoint._Endpoint__is_search(filters=filters, search=search) 49 | assert is_search is True 50 | 51 | 52 | def test_is_search_with_search_in_filters(): 53 | filters = {"display_name.search": "hallo", "has_issn": "test"} 54 | search = None 55 | is_search = endpoint._Endpoint__is_search(filters=filters, search=search) 56 | assert is_search is True 57 | 58 | 59 | def test_is_search_no_search_filter_no_search(): 60 | filters = {"has_issn": "test"} 61 | search = None 62 | is_search = endpoint._Endpoint__is_search(filters=filters, search=search) 63 | assert is_search is False 64 | 65 | 66 | # test method "build_group_by_param" 67 | def test_build_group_by_param_empty_groupby_error(): 68 | groupby = "" 69 | with pytest.raises(ValueError): 70 | endpoint._Endpoint__build_group_by_param(groupby) 71 | 72 | 73 | def test_build_group_by_param_no_valid_groupby_error(): 74 | groupby = "hallo" 75 | with pytest.raises(ValueError): 76 | endpoint._Endpoint__build_group_by_param(groupby) 77 | 78 | 79 | def test_build_group_by_param_excluded_groupby_error(): 80 | groupby = "doi" 81 | with pytest.raises(ValueError): 82 | endpoint._Endpoint__build_group_by_param(groupby) 83 | 84 | 85 | def test_build_group_by_param_valid_groupby_should_give_groupby_string(): 86 | groupby = "has_issn" 87 | groupby_param = endpoint._Endpoint__build_group_by_param(groupby) 88 | assert groupby_param == groupby 89 | 90 | 91 | # test method "build_sort_param_for_groups" 92 | def test_build_sort_param_for_groups_empty_sort_should_give_none(): 93 | sort = {} 94 | sort_param = endpoint._Endpoint__build_sort_param_for_groups(sort) 95 | assert sort_param is None 96 | 97 | 98 | def test_build_sort_param_for_groups_all_valid_combos(): 99 | sortable_keys = endpoint.sortable_attrs_for_groups 100 | sortable_values = endpoint.sortable_drctns 101 | for k in sortable_keys: 102 | for v in sortable_values: 103 | sort_param = endpoint._Endpoint__build_sort_param_for_groups({k: v}) 104 | assert sort_param == f'{k}:{v}' 105 | 106 | 107 | def test_build_sort_param_for_groups_multiple_values(): 108 | sort = {"count": "asc", "key": "desc"} 109 | sort_param = endpoint._Endpoint__build_sort_param_for_groups(sort) 110 | assert sort_param == "count:asc,key:desc" 111 | 112 | 113 | def test_build_sort_param_for_groups_no_valid_sort_error(): 114 | sort = {"hallo": "test", "key": "desc"} 115 | with pytest.raises(ValueError): 116 | endpoint._Endpoint__build_sort_param_for_groups(sort) 117 | 118 | 119 | # test method "build_sort_param_for_list" 120 | def test_build_sort_param_for_list_empty_sort_should_give_none(): 121 | sort = {} 122 | sort_param = endpoint._Endpoint__build_sort_param_for_list(sort=sort, is_search=False) 123 | assert sort_param is None 124 | 125 | 126 | def test_build_sort_param_for_list_all_valid_combos(): 127 | # relevance_score is handled separately 128 | sortable_keys = filter(lambda x: x != "relevance_score", endpoint.sortable_attrs) 129 | sortable_values = endpoint.sortable_drctns 130 | for k in sortable_keys: 131 | for v in sortable_values: 132 | sort = {k: v} 133 | is_search = False 134 | sort_param = endpoint._Endpoint__build_sort_param_for_list(sort=sort, is_search=is_search) 135 | assert sort_param == f'{k}:{v}' 136 | 137 | 138 | def test_build_sort_param_for_list_relevance_score_with_search(): 139 | sort = {"relevance_score": "desc"} 140 | is_search = True 141 | sort_param = endpoint._Endpoint__build_sort_param_for_list(sort=sort, is_search=is_search) 142 | assert sort_param == "relevance_score:desc" 143 | 144 | 145 | def test_build_sort_param_for_list_relevance_score_asc_error(): 146 | sort = {"relevance_score": "asc"} 147 | is_search = True 148 | with pytest.raises(ValueError): 149 | endpoint._Endpoint__build_sort_param_for_list(sort=sort, is_search=is_search) 150 | 151 | 152 | def test_build_sort_param_for_list_relevance_score_without_search_error(): 153 | sort = {"relevance_score": "desc"} 154 | is_search = False 155 | with pytest.raises(ValueError): 156 | assert endpoint._Endpoint__build_sort_param_for_list(sort=sort, is_search=is_search) 157 | 158 | 159 | def test_build_sort_param_for_list_multiple_values(): 160 | sort = {"display_name": "asc", "works_count": "desc"} 161 | is_search = False 162 | sort_param = endpoint._Endpoint__build_sort_param_for_list(sort=sort, is_search=is_search) 163 | assert sort_param == "display_name:asc,works_count:desc" 164 | 165 | 166 | def test_build_sort_param_for_list_no_valid_sort_no_search_error(): 167 | sort = {"hallo": "test", "key": "desc"} 168 | is_search = False 169 | with pytest.raises(ValueError): 170 | endpoint._Endpoint__build_sort_param_for_list(sort=sort, is_search=is_search) 171 | 172 | 173 | def test_build_sort_param_for_list_no_valid_sort_search_error(): 174 | sort = {"hallo": "test", "key": "desc"} 175 | is_search = True 176 | with pytest.raises(ValueError): 177 | endpoint._Endpoint__build_sort_param_for_list(sort=sort, is_search=is_search) 178 | -------------------------------------------------------------------------------- /tests/cassettes/test_grouped_entities/test_venues_group_by_with_sort.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/venues?group_by=publisher&sort=key%3Aasc%2Ccount%3Adesc 15 | response: 16 | body: 17 | string: !!binary | 18 | H4sIAEzdlWIA/7Vc7ZLbtg79f5+Csz96tzObdD+yySavctvJQBIt06JIlZTseDt99wvKokzZgKTd 19 | pjOZJBsBBxQJAgcglb9uatnCzbe/bnLbmfbm2+P9/d1NkX130jfWePm9VbX8Xvubb08vdzcNlPLm 20 | 2wP+Rbrvpx9Q4e+7GxTvdItS//vj7qZ0tmu+Z0f86a+bSuKfN52pjD2Ym7vw8/dC+UbD8buBWk4e 21 | DoN4en75+vj3XVT2jVOmlE4YaDsnaZBroQHs0+PT8xlLai/3SjoaJHkatR9eXs7aLRy1deIXsXFg 22 | cuVpFEIqvtiX56cz2kFp/JOEiI/iqjx9Tkbhw8TTk3B6Mmg9PKdvnkOdOVWUUnRG7aXzqj2KBheO 23 | eYtZ+cHC88tD8jqgW5z/QorSdcfw17LOtsz7cbIR+HMyT1tlCjgooVWtWlnQiNdCESqdBPtjY12x 24 | cgZ44Qj98DmBrlXuRdNlWnkcTCn6bcAgc7LR674myy1r6UAX4rbOM9E1vzKuey0Vwb5MvEA5ZhvG 25 | R1EtdblaFmGPnoacQ6swNtAojOQI+uUMiiuG85oraXIppEEvwD3spRe6LT7S6Esq0cxzsjA731pm 26 | v8dHUe1T8soZwm+hFoM1GuBaaIRKva6RRhYqzAXjDxOBCPGUvARsHM6mETvbOQPaC2u0MsyoeOEI 27 | ff+QLoNvVdu1UtiNkFrmbdDWAkwx/GhNcFdpSgTB6eeW5u0wMSx+TXZ7XTRKQMl41/gwqr4k84zx 28 | SmtmoYZHYyBO5jaJQmEhhG8+ildhP1rGCWflRwOfkrQh823YFFqGcFriWuNWFa2DIux9rXMmj6xQ 29 | i+aeEs+1e1WIoGystqXC3XF7sCHeelHp7iDdr0J8wEDZNMrktm0FZhutoPaYsvCvleL29s8BHoec 30 | rBzyCS8lxldbOqhp61cyI1DiPaW0rhTtVmE8FBi2NZSiYpyJlY1ZN43CYYdry6Td+Cwqfk68S5bH 31 | pvV96lAFhguFa+gbmeOf6lUWIujkSgvMNUIW3Slk9rumDyqt2qhcoLIElzPZ9GebGF/j0/T9LyST 32 | BHYncMWZ7bJSMxpNY7CRDb7KqpjHiUbYxzTxlEqU2mbABIvJ8xEgnYyPogIX2CYXqC4kRnadjAJc 33 | LY3CMF06iVEkYQM5F3mWVEYzlwuH2XIdM5mRpsBzXFknT461B92dPEsZys24HPpmjEhvX5Ia4WCd 34 | Tt2ZoZ3XUhRYofYwYRf4xx4ws80y0BVao7H7JN+BO+ILGhSTmXQtk/iupSLYlySX58i2rGtVVwvp 35 | OmQUzJQTYhEujV3NVmnrbbM9isLmHTpfe1qQvH9PJk4vKo31SbLVI8suANMr/vJgRQOdtne4g3Dh 36 | FYjON33FIH2LDwtAH0GnqSHHn/C3QiKrBnELZaeAYcn/gpXxZZJ5y8CUGkX9dl3wmpWPBj4lBtrt 37 | pCxDxpVvcVilnatnlpWiqaevSZjy3uK89CsY9mhu66ZrQ2DAOcEAIR1Tw65THE2+TPkyznWOg0K6 38 | 8YNxYkJqBEtC1BbMWGqx5PVaaIRKyIXHfbz1to/Ake6Gt8uULcZpRX3VojPhTs0ccJPzXihqWIXd 39 | S4F1V0+3Z9aflBsBH9OKoJA/cL2QcSFl7zyOEDeu6ZeSzZlLOpQhWTQxrjNjvpAYQZKYh1MWtuiK 40 | 2pSRjKApRfBOCQ2mgnUbeE58hE/LuQ6X3KzMybzwCJ34O+qcqr/GH/NtT9T7Muy8Gxkra/RGg4n7 41 | bbCwa1UoAoJvAcZU2gApRwHGVs7txIXQDXBU4PTxTCONbDGlV0ywfxcONaB0g06L25U18bziaDJh 42 | Bco2yYIz6JcyFBBG3dqa3mOQRF2+Mdf7W1SKph5e0mlqpQ6vyE3G+fGo/vmaqIJmWdClCAUTc/S4 43 | Exl3J8RGuKdrXtKCx/dHQq+El8jGgFuVeYXRxANtAnNaoQpVBY4PBgkBs5kWdShDkxbNuKqBXIcF 44 | R0jMOV66vcJgKwrVWBy/dTYlDbe6aWr8B3zK7Lqfb2R8lcStm0Bfc6YePz+kVHd2i3lWmh3Uyvhp 45 | EVU3YJiMvUYtmrufuvXQMgnJ3dtNK5p9+zF0LMVt3whmJnKdIm0S03DN1SnJ01H5mfbGEoodbJGv 46 | FSvccCpMQffnIciiTSm14pLEVGSEScOx9XM0J31MqadjBuUwbZflitdLRSnYMb+cIkvPryNzCX/v 47 | KgcY8sUtlur9GuI/nEoLA13FFSw/AXUc7P20fnD2GLIhZncZqwEMiL7lKOuizmDoa1oIOUzAOzhC 48 | sr25Bi0pGTEJB8Uart96GmON8X05h77nFOP2a9SitU+0t9TQAtuepAUJxJFo9XOXn+dzgZcR4hE9 49 | cUOJ3oGxie8qTwUIhAZpSQg8rxOevK4HslqXsIshKXewl3NU+Eom4hDpNCy0gXzYPl1rja2hX275 50 | g00d65Wj5WRXydy6DTD8+vxw0Hz5Ot2PO8Asku6tGicSzBqe+RZ1wnrqul5mUvcu7CTDwubECfRw 51 | T6CPxysqNFY24jJdApRebhKchCJS2uZydoe8VNSdZ+q7CwkCYwjKBbqJMmsK5nkFwkLMAIFKYWXT 52 | hah7Jli51Roy65b7c+/CieNJj5KTJqJGZRO40FAiBKYS0tFy+3FGk7CZul5XYLYwKzL3WZBAhEoZ 53 | Va1wTVowIibxPat3TIrrHxAap8WXbXocc25G3fGxfJ1itJh2eHwLJuv0YlqmBQnE0NEDQRwf/DKU 54 | +/yh/lrVaDWJ9fiaoRu+YvkYSQIT37i9bJTiOLi4PidOoBPlYYOMGd/2tjNcTbWsFC3dTywdUOnY 55 | on/UqrIadiCqU4Ougt8wM+A/dT7t2S15wz+FHEb5hck9SSGLgQkLQ6/eVv6mWtFWepNmL80Tk52H 56 | R1Hry+XujDy8RgNtOIzZYH06tys5BcLC+ZCfST9TAQKhtg5Lf9wwOWo11jI5hxIj0JJoEpLE2CpZ 57 | akit0iPsTVYzVJH4y3H7jRcmkHGT1OipeaXkQeWvk7tc9tVwNtaoRWsUs08LJLVXi/xtnSJhsdFS 58 | hXOjxaWhBal3qPpFAyUqVLDi1bXcYTQtGTHTcxN8tQJj/D6cdlxepxO/nf9Jth5LV40ksBXAzNX7 59 | weLIHmej8Q7fy7Ur4s6VPIEP4LaTIDh/KjQnHtEfJv62un3FyhK4mbW16FRbyjAMrHqM2AJ304EX 60 | jshJTipx2cziaRwhRWD5UCx8LJRjO84XEgQGsZ5HWx7f6AITFcLKiUX3h6BDtxnrJYNjC2fjfahM 61 | WAmyNqizrj8mNWXVIRNfzMs/18DwBp+TLJ1rZZDUTMuUeV9eUiGs7HAYSBwW/YOUI/CwKD3Atj/A 62 | D00JJideCRFIocBGnmH8Ue+xpka2esn6Fs7d1ykTllN3Ux5XLjodINMqMBDiKlbgPTDV3pv0afsj 63 | 5dtBqaTWyJwrJX7v7u/l4+/d4z3k4feHXByOBRyQ9mEhJxK9bqIoS7718m9YIt6pNA/9dUqvfCw7 64 | mUBECkbE9HZgZ8LpS2fCtkJC0qphkfspRwo0rQ8y3JIdy6Lei0WMK119VG5Yo7QggQjeenGEI7KS 65 | PdPDvxSJKEkvI3QATmQRRCa5liohRWDJzmG5AadmxXCRbGxntKE9HhJeCIIFpihtmxAUmSrgnVDE 66 | qLan6/jnw+akE8VWqHMahI0dkngpReZsu43n6v3djgUyuEqPsIdyhxXpmxIj0PrzhM77wOOI042Z 67 | Q4hZJcISWaKDPtXPNXf8tqgULdFnE1IgJw6XyPAP/OWUDe3jHRipwmmndEyX6K0QxCjAmA6X04Vv 68 | mQ5cyXEpE3HIeoZqLy2VMoxOtJNeYOqqtbmUEyVQLzlH7yfSZVxPYVaews8+9O2pu5nW1pUMgQP6 69 | QzhT/i+SkHMXto8/zAzPyUf8ySUrZbLOlduVUzwrT+CrBsmTsXucvr1MieZ8E3iNGmGtsgfkKmPI 70 | Gm8bMI0TXprA7jL1Zze+7dy6MpIUJnWghLtYg0DApSJjRouwlTnZWO0nLWCzZ8o2TjbippVWrnx/ 71 | M+xcP86eAs7KE/iTkLeRRf+dSxFu5rrFBj+rM2NnaLCAVpjgAyGf2Q2LOoQd2MuLCyJcC4UUHBCf 72 | E8aKa44ZdYit664kLqkQVs6XDUxBNCHCBPT5V552ax8gXeOrpYD6DjhidJPLGKbAVLy0ZBNBCrFp 73 | Q2EWYnybNpNQbyfrjDtAW6NGWDt9USL2yvdBjnc5WjAipp/H2BqZ9unLJWYJphIEBr7I6WrRQl4n 74 | 5Qi8yTWIbgt1DYU69veC9Ko7c7QSYUkOTBm3zvJdSV44IqfddHAV1sdamtm7CNdSBBZ6yA6LqaZz 75 | y3dgWFkCV2L+MfbH8otTchEvrVds6eRm7WdCM9IEtm4e68k2mTQibnGAvwp/BKc2YqvCYW3baY2r 76 | P9uK/eegxEjTHoS2xWsVkCYZIPwrf0q3UpmwHKkJRhYcXf9dQGZL7sPlGemI/Zz6oAtXNbZyn2+l 77 | qawYI/N0eNVRMWzhjQjEGDhGk1tta5aTr9CasXXlFeE/qQilycktKvCqxqoKuje2zmZgiNEg93zF 78 | gStRh29e9jCwUZZ8M8IROf20xTr1iimC+KwyUIk5ArtWlbCqMlXD8uX0aykCa3Sj6y/FnBS3smqX 79 | 7kXOKhIWw4dpCq4C1+wHrAsqhBXi6FNsbeflOOHzt3MWNaPN+Zvq61vD1wqEhdyp2tvlBhApF/Go 80 | 07c+doAOFzRgoIeK6wAtKxGWxq7E6O/na+qhyYelkMqPyw3Cd+HE8aQnbJBJ/yGz+ghq+WosK0wg 81 | byDH6NTPzfT72VZC8J2xjXmHmRBD6KL1fwZIjHB4LokOUXD2ppUf5yrv9dq87SSkj1dGxC3dXx8F 82 | VtzNeQ8kMcoSkFQuttkJqYiVfkhkNg4+1NRljFNc4QjGshphbXo5o+7WUf5EksAMn9WtIM+U2ID2 83 | KT3JdNZ75K7ovp77OvpChEBppOz/24vlqomQI/AKCP+1xtqz/BnpiJ3USU4WYqPtIR6Yxi7b6U72 84 | HElYqUnY7I88L/Kl2HVOcXM+r0BasDWED391/5808S9BC54R//j7P/8H60CYDAZNAAA= 85 | headers: 86 | Access-Control-Allow-Credentials: 87 | - 'true' 88 | Access-Control-Allow-Headers: 89 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 90 | Access-Control-Allow-Methods: 91 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 92 | Access-Control-Allow-Origin: 93 | - '*' 94 | Access-Control-Expose-Headers: 95 | - Authorization, Cache-Control 96 | Cache-Control: 97 | - max-age=0, no-cache 98 | Connection: 99 | - keep-alive 100 | Content-Encoding: 101 | - gzip 102 | Content-Length: 103 | - '3812' 104 | Content-Type: 105 | - application/json 106 | Date: 107 | - Tue, 31 May 2022 09:18:04 GMT 108 | Server: 109 | - gunicorn 110 | Vary: 111 | - Accept-Encoding 112 | Via: 113 | - 1.1 vegur 114 | X-Api-Pool: 115 | - common 116 | status: 117 | code: 200 118 | message: OK 119 | version: 1 120 | -------------------------------------------------------------------------------- /tests/cassettes/test_single_entity/test_single_work_by_pmid.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/works/pmid:29456894 15 | response: 16 | body: 17 | string: !!binary | 18 | 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 85 | 753UY5Hh39G7//hfq/kBhWgyAAA= 86 | headers: 87 | Access-Control-Allow-Credentials: 88 | - 'true' 89 | Access-Control-Allow-Headers: 90 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 91 | Access-Control-Allow-Methods: 92 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 93 | Access-Control-Allow-Origin: 94 | - '*' 95 | Access-Control-Expose-Headers: 96 | - Authorization, Cache-Control 97 | Cache-Control: 98 | - max-age=0, no-cache 99 | Connection: 100 | - keep-alive 101 | Content-Encoding: 102 | - gzip 103 | Content-Length: 104 | - '3839' 105 | Content-Type: 106 | - application/json 107 | Date: 108 | - Tue, 31 May 2022 09:18:32 GMT 109 | Server: 110 | - gunicorn 111 | Vary: 112 | - Accept-Encoding 113 | Via: 114 | - 1.1 vegur 115 | X-Api-Pool: 116 | - common 117 | status: 118 | code: 200 119 | message: OK 120 | version: 1 121 | -------------------------------------------------------------------------------- /tests/cassettes/test_single_entity/test_single_work_by_mag_id.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/works/mag:2741809807 15 | response: 16 | body: 17 | string: !!binary | 18 | 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 85 | 753UY5Hh39G7//hfq/kBhWgyAAA= 86 | headers: 87 | Access-Control-Allow-Credentials: 88 | - 'true' 89 | Access-Control-Allow-Headers: 90 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 91 | Access-Control-Allow-Methods: 92 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 93 | Access-Control-Allow-Origin: 94 | - '*' 95 | Access-Control-Expose-Headers: 96 | - Authorization, Cache-Control 97 | Cache-Control: 98 | - max-age=0, no-cache 99 | Connection: 100 | - keep-alive 101 | Content-Encoding: 102 | - gzip 103 | Content-Length: 104 | - '3839' 105 | Content-Type: 106 | - application/json 107 | Date: 108 | - Tue, 31 May 2022 09:18:31 GMT 109 | Server: 110 | - gunicorn 111 | Vary: 112 | - Accept-Encoding 113 | Via: 114 | - 1.1 vegur 115 | X-Api-Pool: 116 | - common 117 | status: 118 | code: 200 119 | message: OK 120 | version: 1 121 | -------------------------------------------------------------------------------- /tests/cassettes/test_single_entity/test_single_work_by_doi.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/works/doi:10.7717/peerj.4375 15 | response: 16 | body: 17 | string: !!binary | 18 | H4sIAGfdlWIA/+1ba28jN5b9vr+iIGB2O0BJJlkPVhkIAsfZmfTMJN2J8/jgDQyqRFlMSlWaetjW 19 | BP3f99xLyZbaUlmd9A6ywHTSQZF1SZ77vpeq/Dpys9H5aNF1q/b87Kxe2cqU9mFSN7dnPyody0zk 20 | mdCjcDSr3Q4hRkwjxURrqc9W1jY/T+JIJyDtXFdaEH+3sEHbmc4G9Tx4c3EemKA0za0dtwUOCQyO 21 | WreupbcdSFeNvcN8VdCrWeCWK1N0vBSogouisG0bmKZzRWlbQuTaVWnWN5VZ/gtOW/XT0hWmc3V1 22 | s7amGZ0rIbP9+RlOBxJ6MRZqLCOsc7N2dP7raCvZjy7spbmlI3dXr5Z7SgXCpZ1NqmLqJlW5nFRu 23 | Mbmt785UHidplse8othbcn9//5weRGdbgZwlmUyiSI3ehaNF3XY3d7bqLTF63J5+kHkW5XmiUkly 24 | advqpiToMtXjLEryzeTo/Hpn7qdnen4L7v+6VUi7sM3OXLdeEcnTq3DUN+WponTtTW1G513T23B0 25 | Z5sWOt3ZbfbDZiocQeO2aumoohhP1ySFzdE/130DlscbQYGWZHBj2J5YPruH1OaGTLbHm9FtXc5G 26 | PLUP2UMs6uWT8AnvZDWb07mm7xZ10y7cCptc/7oZ36zq1nUe/9w1bTfaUg7r6ELmaa5EIqDaZ5L/ 27 | 0hp4ThNcTIK37r6+NyTfutk3HR7zXgJ/xvgbjWUqo3GSZ5IAu6pFgOgJnEd8HM3rWAn/Rz5H86Zv 28 | gm9tC1csFnjbEGuP22DkMaiqEb+YmNyiqPuqa9Y3RT2j9ZcXTwZT1dWqqeeuG72DwTXm/sbM5650 29 | 3q3brnEVedlrDhJtVzfrMLgy1bxuZmHw9WUYfH91Ad4OSR++OGM7OEn8Sgk4lk59FNhn+K+mravg 30 | bePs8iS5y3EqMz1OUyn+LfeX5J5LnSKIJs/5/cEhR1Rd8HfTuDv3P70QNmvsSRpQY6WjaCwQZT9U 31 | A1rkEXwxfY7n+8pxbOrWlK2+qiFba8rjmoDzPdw+RPGwJuys90mMxTkATCa5ROaIspeQfdPbqS0C 32 | 052AUajm5+mdkidjHLIWUlGRFzWS/swGU4foXXcLVhxmq3rpbGA7vGuDtnBUAbREWP6XI8Na8m6w 33 | rC0zfiFRMB9+aMrw/eE3MMdLVBkzM/k4JqlzIWOZpNGBUNAbRAIzLevgolxZMH6iPeZRHI91HH2w 34 | PaK6kLFODmj9yi0Rlv7cmBap4ckEBkKDjJqiUNlHMkiFsieNEnXAdd9ybRb8rarvSzu7tQie9c+2 35 | 6LbYqr4s3wfh5zwIeh40Nda3gy5eb0RpA5hQcNX1MwerclCSLx5Ajsh1WFJh8IOpAALDMPj8o1tR 36 | lIko1/mBhPJ315rgK9N1C2faUwNaKvEf6Su//y8GNKTCq2JRo08o18FlvVz21aaWbxHvp6ep7OOq 37 | K5aRVCI+IKfPG2uDr+umRL9iTyu91FjEkRzHSn1w6YUmJo4zfagC2I/zPxo2744L42Pxvbh7mErO 38 | ru9p7PurD9bY66cwHZD26nInWr8HCRpE0Yp29COWClAReh/8+1wyF+2itOvgz7Anu37SEMeRf4v/ 39 | 44hfpkrlSopDadHeIeR+MQl+tNzxnOIgUCaa9Uh9cED742ro+rer6KcjOirN6S2kEgpSQVY+oKGr 40 | zs5NhQLsS9O3nT2xbkEJjaZoLOPogzuZP0a5+lJJHWmZod5/CeObrjP35jiuqIiXyzuZfpTE+GaK 41 | nHdnuto1lovlq22xvCmev7PFoqrL+pZKnVdvrr77BLnQkuxQDnW26bfYjd8BXWOxsOgabdCihyzN 42 | dkfaEKOd/YJXl6+/pQ0P1OE9VOWfSV/8JE4uzZnlwnV2djMl4UBIo/Moj8OR7xPItO/qsmfhp/5G 43 | qn+sCvkm5WZlbh9nyC92Jt7xJVJjuwb9qoXG56ZsLU+uTGM6+9A9zqEVKeyqe8mCL5XWWSaSRJJ5 44 | 3Ltf3Mx05r27uu00r6DB2TdSywP+dwltdJs7LHtny9G5CkdtUTf0UkziWEcijV8w2EupM+Q/zU51 45 | OqJUoPk4YOOfs+SXEJor2qPA4kwokbyEDMLScUrXhx8EDR3R4ZrrqTosdqvDJ5TRPkop4vxl+aFZ 46 | yVQk0/iDQMZaRfGBazn2ou4lAUZCRpGO2AGWtl3A7PBkSjhqBcO8ebrFfcki9+9xj9zO7l+HPruH 47 | HbrU/H0XsR659873sP1334CR4O1Xl08AG8tZrm7WexgB0TL1alkw048wMbG5+/4MYD9t7KYY/z/C 48 | fArY027ssdP20v43ofXx7TjU3cZ5COnM3SIIleRPyN+TvionyEhnxa07u3P2HmGxgzlPMP5sg/1T 49 | icz/n/ziofu0JZfE6uNctP106bruN8v8paufYBy8Nat107fB+WPnj3Pw5ttdvl+WxcpvM0HymfTL 50 | Td0xKczZw7Ls3dnUdS1NLc9klqZnKlKxOpPeecYiHb/sMr9XFEf6X0jgql9i55O4bJl00s57Yg3J 51 | F/zoNJd/YNjPULfrlnCjToIruYaYaKVnY6OPf4Ey7NJU8Ihgk5VO4QKA2km7Wdj6dRzQpoWRZ2hj 52 | pyJJVZHOtLKiUFlUyKKY5tpOk2IqlJT6t/P0eH1m57ahQm92c183v1B+OfIjqExSgdoC3R32OUKi 53 | 4QRSCS0HSFKt8E+eHCeh+/4okvw7yzGSRKcZcu4Alpyq9izlq4AjP+uie8liFAXHD0IjmWapiNPj 54 | B6GlEpnQcaaGSHKBmkwdZ1qJSOokTvOhg+JMZgkAD5BQ9SdEMoQlQ9cVJXJALnSHgipCDJHEApVv 55 | rtIBklQkuc4GNK0U3adJlWbHSVDz4j2i6wAJ9smkiIZIqMaC+AbkEsVo9ZJsSLpxGiVppvIBuaAV 56 | SFMy8gESJfJcCjXAdJLCVqTIhg7CMXGUpsddDYWs1iLJhklQums1ZN4atoBYlA5g0amCppN4aJeM 57 | ymq4yXGSPMF7OMpx0cFaEIWo5xpx6CpNd0LcSpOEGqcBrclcI5xqMWDwJ4QTmedpIhMo93eGkwhO 58 | rOMB8zglnJwQK14OBCAB2nzIVNFVaa3QAv+uWBEJlQiph+Ce4OWn+OcJzvey20BByEDxUNw6xeBT 59 | laUZbIqs2Uxbvpm4cRUyONm1Q/fyQJceX9h25ejrpWsBwtumvudboGv5E923oUmkG9Xza8VDPERh 60 | okMdhVKKUCqapu+m8CIOYYAYXmy+eLlOMHj15uITPKZ47Go86DABXULL2m2HjekslILISyBpTNc3 61 | KDXOr3NatbDUyF5LQudoWylBrHF+GiIUEnN0ulRhFIdZEkr6m+choj/e9RW6Y3odYVBZupm5lnHI 62 | 7+Z0l3YtkzBW2AmwJB248+kYYZB0Qr8ad/WYPvLiKc2H8lZZqOJQExrsgUcZYx8lcboGmykHklVT 63 | z/rCTUvmg85o/c+EJFZiy7QtJObFrqRnmh6xpcCWEW0LpjQEnieQcgqoEQ4miT19zUYriMtiYfgS 64 | qnEtVX40TYT1nJ7SMJGhTsIMChT4C5gyhkBT7CcI2puLCdFhOgVvEU39yFtnYZyGObgSdDTDns0a 65 | r2nlNcXqiYBSEmLScb/hKlIhIY9jAmK+ePOa5BgR2tobT8QQq9JVdFhEgqNLSMdsRZq3N6TIKAuz 66 | PIR+JUQgY+BMaOnMguElVjMEzwjZpAgToCZmYWJYKxOsBP+ILNATOEli1of/FOs6JukjveKJwC1d 67 | WXK1e83Itx01SYiF31Oxex17eI3lQRYmGW1pliuQEp8xwbGmoJuXhASHGioUQtBQ7WxLtAmgJgrw 68 | vPvdwfncLX9ceM18rupVX/rfKc9pjrZ+JdnFWCVlSY+0eHsBg6EKtdg5h6aiUMMOIEhoKsXfHCar 69 | Ym+L7rZiP0l5TA+QFwO/bOq2RVFPc6SijSJTEsArxSgyNnn6boZGELbKmBNEG95UK7aoKT3S/pub 70 | YNqGnflVRNtoWkSXArwmo7OnHCdgqgqaizbSb4iZDMaF+YRQfF+tzPreUA+FF/HGwMYthMGmlNEZ 71 | UwS5lj4fvM5ojX3o0LZ4PWd0cGn5cjanY+eOHT2HLyaP1ksGkNNOpJ6lV09OK9lEoV7exLR+RNpQ 72 | 2Z/4We0FOZ5irmX+FQ/YkerOlJ9wpJPs4fWqbvzPMZhKnqI0ByOORrMGna5/T15LtrtidffbCCs5 73 | 8NDCbsHhkrb+C315SANa8OV62rjZhMd0yHcchFA/kyPUnheKC5pW+g9hMZFzLDTl+p8+tkaCbUHI 74 | hDngQGvKtuYBDFuQEBeGAznjXLjbhU8xkrW6sg1ZD9+sY4qlEyd/+oSBsWd/bgvjPU/G4pEpFgZ7 75 | 7RzRjwc+/JqZNxNU6D/5zvpRoNCcFw676PZTTaQEwdni3voEQTzc83nknmwij3bGs2wKFf+osFlC 76 | NP/ofV6V7Jrzxv6jB2Pl+pznaNNYs1Wkysd8hpImG9PnAec3byjsZV/DNqbl2mcmAu1v0zgrKb7g 77 | RfivXLvkGU56NQtD642+fQYjfH9BxKr8kHby2ZB9zZsCDymVZRxOmTKjQ6Y9b5nR9g1/GcrDmPMt 78 | pD2GkIseSc1vQTwUEPUt3VLQBFtsP+VnVmhTV/+0LBb2uaWZ+VSpvNwsZV9SJE9y1mCOczpx52tg 79 | zKSsqmnrNqk6p7PuXbeoPWb2UvuwKl3huKzxvuovLjjzsYvaB7P0qUhxXVJsfz2hCeRArgr8l+M8 80 | lbEmmqae1hDINpNzlVOPUUqULArUqtuA9Ghrih3azO4M2/w5T2lvjWRP2704utz6skB4Oy7civJl 81 | yHNqE3cRB3hMu0oOOmrjwY1/oXfYYQAcoJFdmTnvz6gRcRZvzP5s53PrOY0URyQEvcax66Cz3ZoS 82 | jx5dodmg5ZQ675uNmajYI918RkoT0UbLPEi3MZZH+qkOYDTswhw8FLvsvWEMic+W9Ns3Dzn+1dCq 83 | f+vrJOgK27COkSre7fwaaFbuvU+vMTPZq6e5Dfxs7uhXk09pYXu+/+E+K6ul3Tah8dfR9n8WQB33 84 | 7JdHGdGF3yOFPEAhsj0ScYBEpbskMn9Okus9iuw5RbxPoZ9TpHSV169m3A8//p8OSo1FMlbMO3xz 85 | 753UY5Hh39G7//hfq/kBhWgyAAA= 86 | headers: 87 | Access-Control-Allow-Credentials: 88 | - 'true' 89 | Access-Control-Allow-Headers: 90 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 91 | Access-Control-Allow-Methods: 92 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 93 | Access-Control-Allow-Origin: 94 | - '*' 95 | Access-Control-Expose-Headers: 96 | - Authorization, Cache-Control 97 | Cache-Control: 98 | - max-age=0, no-cache 99 | Connection: 100 | - keep-alive 101 | Content-Encoding: 102 | - gzip 103 | Content-Length: 104 | - '3839' 105 | Content-Type: 106 | - application/json 107 | Date: 108 | - Tue, 31 May 2022 09:18:31 GMT 109 | Server: 110 | - gunicorn 111 | Vary: 112 | - Accept-Encoding 113 | Via: 114 | - 1.1 vegur 115 | X-Api-Pool: 116 | - common 117 | status: 118 | code: 200 119 | message: OK 120 | version: 1 121 | -------------------------------------------------------------------------------- /tests/cassettes/test_single_entity/test_single_work_by_doi_url.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/works/https://doi.org/10.7717/peerj.4375 15 | response: 16 | body: 17 | string: !!binary | 18 | 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 85 | 753UY5Hh39G7//hfq/kBhWgyAAA= 86 | headers: 87 | Access-Control-Allow-Credentials: 88 | - 'true' 89 | Access-Control-Allow-Headers: 90 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 91 | Access-Control-Allow-Methods: 92 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 93 | Access-Control-Allow-Origin: 94 | - '*' 95 | Access-Control-Expose-Headers: 96 | - Authorization, Cache-Control 97 | Cache-Control: 98 | - max-age=0, no-cache 99 | Connection: 100 | - keep-alive 101 | Content-Encoding: 102 | - gzip 103 | Content-Length: 104 | - '3839' 105 | Content-Type: 106 | - application/json 107 | Date: 108 | - Tue, 31 May 2022 09:18:31 GMT 109 | Server: 110 | - gunicorn 111 | Vary: 112 | - Accept-Encoding 113 | Via: 114 | - 1.1 vegur 115 | X-Api-Pool: 116 | - common 117 | status: 118 | code: 200 119 | message: OK 120 | version: 1 121 | -------------------------------------------------------------------------------- /tests/cassettes/test_single_entity/test_single_work_by_openalex_id.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/works/https://openalex.org/W2741809807 15 | response: 16 | body: 17 | string: !!binary | 18 | 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 85 | 753UY5Hh39G7//hfq/kBhWgyAAA= 86 | headers: 87 | Access-Control-Allow-Credentials: 88 | - 'true' 89 | Access-Control-Allow-Headers: 90 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 91 | Access-Control-Allow-Methods: 92 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 93 | Access-Control-Allow-Origin: 94 | - '*' 95 | Access-Control-Expose-Headers: 96 | - Authorization, Cache-Control 97 | Cache-Control: 98 | - max-age=0, no-cache 99 | Connection: 100 | - keep-alive 101 | Content-Encoding: 102 | - gzip 103 | Content-Length: 104 | - '3839' 105 | Content-Type: 106 | - application/json 107 | Date: 108 | - Tue, 31 May 2022 09:18:30 GMT 109 | Server: 110 | - gunicorn 111 | Vary: 112 | - Accept-Encoding 113 | Via: 114 | - 1.1 vegur 115 | X-Api-Pool: 116 | - common 117 | status: 118 | code: 200 119 | message: OK 120 | version: 1 121 | -------------------------------------------------------------------------------- /tests/cassettes/test_single_entity/test_single_work_by_pmid_url.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/works/pmid:https://pubmed.ncbi.nlm.nih.gov/29456894 15 | response: 16 | body: 17 | string: !!binary | 18 | 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 85 | 753UY5Hh39G7//hfq/kBhWgyAAA= 86 | headers: 87 | Access-Control-Allow-Credentials: 88 | - 'true' 89 | Access-Control-Allow-Headers: 90 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 91 | Access-Control-Allow-Methods: 92 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 93 | Access-Control-Allow-Origin: 94 | - '*' 95 | Access-Control-Expose-Headers: 96 | - Authorization, Cache-Control 97 | Cache-Control: 98 | - max-age=0, no-cache 99 | Connection: 100 | - keep-alive 101 | Content-Encoding: 102 | - gzip 103 | Content-Length: 104 | - '3839' 105 | Content-Type: 106 | - application/json 107 | Date: 108 | - Tue, 31 May 2022 09:18:32 GMT 109 | Server: 110 | - gunicorn 111 | Vary: 112 | - Accept-Encoding 113 | Via: 114 | - 1.1 vegur 115 | X-Api-Pool: 116 | - common 117 | status: 118 | code: 200 119 | message: OK 120 | version: 1 121 | -------------------------------------------------------------------------------- /tests/cassettes/test_random_entity/test_random_concept.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/concepts/random 15 | response: 16 | body: 17 | string: !!binary | 18 | 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 98 | Nzm8Yb5GAAA= 99 | headers: 100 | Access-Control-Allow-Credentials: 101 | - 'true' 102 | Access-Control-Allow-Headers: 103 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 104 | Access-Control-Allow-Methods: 105 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 106 | Access-Control-Allow-Origin: 107 | - '*' 108 | Access-Control-Expose-Headers: 109 | - Authorization, Cache-Control 110 | Cache-Control: 111 | - max-age=0, no-cache 112 | Connection: 113 | - keep-alive 114 | Content-Encoding: 115 | - gzip 116 | Content-Length: 117 | - '4568' 118 | Content-Type: 119 | - application/json 120 | Date: 121 | - Tue, 31 May 2022 09:18:20 GMT 122 | Server: 123 | - gunicorn 124 | Vary: 125 | - Accept-Encoding 126 | Via: 127 | - 1.1 vegur 128 | X-Api-Pool: 129 | - common 130 | status: 131 | code: 200 132 | message: OK 133 | version: 1 134 | -------------------------------------------------------------------------------- /tests/cassettes/test_single_entity/test_single_concept_by_mag_id.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/concepts/mag:2780831525 15 | response: 16 | body: 17 | string: !!binary | 18 | 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 106 | headers: 107 | Access-Control-Allow-Credentials: 108 | - 'true' 109 | Access-Control-Allow-Headers: 110 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 111 | Access-Control-Allow-Methods: 112 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 113 | Access-Control-Allow-Origin: 114 | - '*' 115 | Access-Control-Expose-Headers: 116 | - Authorization, Cache-Control 117 | Cache-Control: 118 | - max-age=0, no-cache 119 | Connection: 120 | - keep-alive 121 | Content-Encoding: 122 | - gzip 123 | Content-Length: 124 | - '5008' 125 | Content-Type: 126 | - application/json 127 | Date: 128 | - Tue, 31 May 2022 09:18:25 GMT 129 | Server: 130 | - gunicorn 131 | Vary: 132 | - Accept-Encoding 133 | Via: 134 | - 1.1 vegur 135 | X-Api-Pool: 136 | - common 137 | status: 138 | code: 200 139 | message: OK 140 | version: 1 141 | -------------------------------------------------------------------------------- /tests/cassettes/test_single_entity/test_single_concept_by_wikidata_id.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/concepts/wikidata:Q11190 15 | response: 16 | body: 17 | string: !!binary | 18 | H4sIAGHdlWIA/7U7a4/juJHf71cI/pI7oHtGb1kDBIdckrsEuwskuEWAYHuxoEjKYlsPrx7usRfz 19 | 368elEXZntmezu0XiiJZxWKxWFWskn7ZGLX5sKnG8TB8eP++O+hW1Prju67fvf9jmOdhFmVhsN08 20 | bF7M3igxCmf0y8vLu7mZIPDl/d+DIMh9gFBmONTi9FMrGg1Q33VK963XaGWkaTUMqPVR15sPIQzV 21 | g+zNYTRdCyNLo2vldaU3jJM6eWXXe8qIXdsNpt09eGOvxQg1T7TKO/SApKVXmE+LARG/dP1++El2 22 | UztuPgTbHGaQZtTqp+J0afWDOH2A1Q+bD79s5nX/VqxoxA4G3yA5AC9cLLp9d2lesHy3cGxqaljX 23 | ZDYfftj80Q/jMArjzY+fYB0wg/5p6msH23SoO6EIY7PCSPjfy65punZ4r96r8P0fhn2tD6Yb3kXv 24 | ng+7zYxxrKamaIWp34abwO/O8D5NDx8f70zbjiAlAiVB1Lg1ayn6ZSN08Sh6UQAxT5OfRhmWIXJU 25 | lNC2063Ww35qFfJLNDQsCIMES6GoTmUeYT+KGyxAA38Fvvd30PaSG7PAxzKMqK6o3FKL5F4afL6D 26 | YeC2PBdYFiXVk6UuNdW3VGoPH0I6Q6kuFdV5KJWCkY+8BjOv4QTvf5/qml6QnNEUBdQLwWTEAeKL 27 | o4TKmEqcOo7TpR4pKnFNhcSd/5vYFVPdtbhJhbaYohtMcbFg4rqLST+OsHfDfgUeq9eC7z477ZcX 28 | UHV2A8IAy4i4F9AG0OR5QHyOfGrxvX+nscT1iHrCdBkb8lj9H4jZoGID3oNmwlcUtz9Bd5jEe36M 29 | /Oj5ccI9KdrfUBwKu9QyRZJLgUjKBEW29BX2H06/5ew98eOsd0afK2wYLIOscBYf+1kIfXeXqIyc 30 | OpUx77Dv0UvkNjklLkuK9SGQyvIhCOVjhc+43GO7ftsZkLpYdpomqHghQSRRtURaYqmQCXI/K6dM 31 | kyYIsZSS6jhVKnJuwcHdmkGyr+yJNSc9YgNysIbxvs73uGVBkg/jkRpo5cNMmaS2gtEc37jOEyNT 32 | p53QI+6gEpf5050+GqXbYS9QnyhtJz6T8Cv9KKt1i/kZ3r9HmqMAIdDaI1VRkVOJpzGSMZWB047L 33 | jAQqcN0u+8rvj7TV362adsXVqG557/B9WEuHnlXmOBiiVE+2AQzHeKYhH8e1aSjFnU292c7SXLgV 34 | c7nXo9FkjEqk6lvm5L4VJeoEv9xS6RscgCLV8FbTvARF5ue29YBcoNbtQuNE58+QlNKwE5tEGicu 35 | ZnEnLihVJyvBg3eyv+DMFWu0HXqHfyYSw1oMj7U2u8oM2FOvebobXlabv0MJ/LbS+oSjK4E6/5+E 36 | Wz9WHW6wr/BEVvZEJnpLJbItUQmVPpUxjjJWa/npooPjwNHapJBIzq3OJsmf9bt+uuh9MsmVQWfh 37 | T+JFIOPpLDtrqYbiqmHktTFTKpSWrj926J92zMegPWGPVa5JGlKJgpxkGdVLqtMit9ybU0ty3Z6l 38 | hOnFoopejSotrpCYK61Ivv4e9nwPTpbApZj5DM8j6vnoWD1n2mrWJGyONWkPV//iyTZXJ84Mrqyb 39 | gYVdp4uwmyu3xUysT+MkxXIbYRmjXD7zyUuiCChIijSltmbWx7iMZxS2b7SqlpXtGSrwVUFlTGVE 40 | 5RZLLZa6klT6BDfrl9GyYE/O5vdiaKfnZ7Lg+9mB+UrtureWXxYIISX2S5FSXVG9XHrJ3Eoyt7aX 41 | zK0kcyvJ3O7ZyMksAUwqSXJsQz4W5pmPGtmLcs8v1PtYi7H94hB7jiu9a9kE7E9vW24t1sJVC7U2 42 | orU1XZpVRl1etD314pn/H7iFgT9PchOx9qrN80VPFR9N2z7SaGvwNVkSTbzSORKpBZ4dXYTcgmPH 43 | K8KO87zIjJBNaGOQmm+Ec1qateP6akY01u4pglAx9ivyKRXpJ0X6TPkhjm2/ykH6ddeoaVl3igKl 44 | SBSoYUWhMqonVC+oN6SWiFpKBLSumtWqRPUdT5j96ChdNCytfx4TO9qZeIGa4aD7qYCrMjF1cO9z 45 | gixqhHuYhnSFonnhIkWloBbUAM2sP3DL/II3snmprUTZnW1OVgug3Qh8xAslnXm6Evo+aYEQbXcr 46 | qtldCQtpTliJ1VhTF+7KXx8r8kzYcLWCTLDuZylqZ6PBVqJVs+97nt8f23oRaW2NcWsNYB6QQx65 47 | TC1vWLh12Pxalrf6ZbWTLoiP12Aia31zbtv1Yrrj8o79nVwzurPCUtAqCqK8oFXYOlFVEFUFTV1E 48 | dLko6J41A8hlENnsgmgtyGZ3w9eePjA4AHewnpsIcKygfkE4BEmYiOmCIQihIEJEkC11cjkEkXCQ 49 | ynGRcO3EjIOpVtw6WN/oJE/EnEM7izcdmVmkOUKA2Nl5PAyrUXwI6FSnMTuahdNOiK+M6GF8LK58 50 | mZ/RHvxFNAfjnQT4euim9BfjKSse1Tv2mw4UikU/vU3d9dPnb1lJugBy3QEcxP+vlzeI6rOEfHEF 51 | gxhZb8gEvQeJfhfUUVfI1P+wdKQxN1EpnKEl1XOPOpKlKZVUam7HqfggoVtNOzHI1vrwcm5w9gbf 52 | 1eYmwjTsrK7BvQsyyQ8Gr9byMJArLZrnZxKFwTrWSiKDFZoCX5EboiSsJ/R9MlCF8JxB4ecGUQu3 53 | Exv3q6upYgKuLg5DR564eEG/ccAbY/Os2R0pBvQUh/5tYjj0j1q+HfSazBFJ+4vW9awih4ncwlE0 54 | BQ04LgDD3jvqkW7KB+xC/fu9oWGjlfFCkGYrkKMF+SwF2T6y0pc6tZM/aMdLNOmjPV+SFiRJnUhS 55 | JJJOgqSTI8lASDoPkpY498ZLnc6VDGlMHCDuS5CtdFiTOSzjFtzrWKOaGO0h03RSNZ1CTQpUh+Rz 56 | ke3WEdfJFyPDoCmSqmNUfSOL4WcDtSOHINvdTuxE02FgZESxwPBaEAXI5BGPwD+mcaimdjf1KDnj 57 | +LbjP73Rz5vuhI+nM+99YU5E9pFksmGnFwXiiEs/eRWsVUuFzDjiiRhEK474Qqr5D/0wmtEYsmql 58 | xCv1i/WupSYb9CL6tXP90hHLnrE6sSYHF4OuUBkS9rEp33ZDOlmVkSjc6UTTfRPhoKR7KF3zbJ08 59 | yZM1CKv5z0j/P18qgRHlc3V7xztXj7K921yJdryDEDr2182frpJLtwkECt6wfWV3GswzPSK2vOky 60 | Ksypg71Q3mMLyC222+0gHGyxo9TFzj1s6V1Hl1FZRzfbODkJCyHdObxlKtdp4G66L1yIdqiyC+C6 61 | dhYwr/8awGWSdVvkZ4baVYROu3DIsO5M+iuc2syJDQmey+Sp32mMtZhu8A5iTgaOcE3sMR0IKrj3 62 | TjYVaHqv1oOn21L3cMrA0/aqqRGtxjNzSVwE7rUqfLrcoVit2Ygza8A51sFNnJ/gDlKKNnvhlvZS 63 | lizI7W2NMVEEJQo2d/Ihr6dqfuFRDlWJXui0iouwxnKpJ+nDCtXTRcXbUcGCb3XpvIPJcx5f5s4d 64 | uF/j0dKeoI5bEkAOo+6xKHNfHL29ukerZaaYFxwuI10Nv4p22S1+cBbMbOYFuyy3c7I4RNtbmXLt 65 | inYoCK9n5Xa7IeEtNZ7LFM/h3Y0wrFe6oszl6c2KPzs3cwi1PAXm8bxejqsH9/zb0yrxuBrnuAqv 66 | EbWoR0OZCzTjmN4IgkKJB+9Mlx6/VEfBAStlnUlv0AvufTc9eDZLgrC+skFv1XjCTjXDHc+t2U9e 67 | q5vONm1smuOS3dCt1+0ATOwHM3iihPuAN5rag0fZ9bo47Xb6wVmZ7jUCFBosk6q1N5x2qmsaGAOt 68 | +P0CABb6KGBYo+HOCLf/fvAGcCQrIGgZAw07Iinx2NJvgaCNTbV8qyuAV8DSf3R9oafdhF9D/Lnf 69 | A0aoIrD3X0wBvh671vumF+2+0mYkLEv6BUUhImfeplxk9HRJxZCjGRWSysx7umRkCpuj8ZyxiuoZ 70 | dSgHwiIvqZ54C7idKVu6i2KhSZQL7tV0lpzEmbuws3oOIYGzvMQhKvjyMlaoLHjq0Bw4JDDNEXNq 71 | RRuVWwLgFs5s5S7uz1KQ3DDSyYVJ7eKInO7gc6vgDWDKLTnFMohCz1B/WIF7C9WMXkhnQrWshjfx 72 | 14Rj7t86CwwcrvrX+75azZpvjuy4+CyrEkeSXVZZOm6l0MJtHR7pW7Hd2ATkv/xBEiUkB2lACXXe 73 | Xjx7oh87GGpQ+YGn38Gx9qqu6Z6ptwD12aHjTolL6/rgEBgNOgq0IoHVk8Ka4+yAqwuOECrUSfcj 74 | Kosa1GTPHhDery9ZzMj15dgFzBwHzV5gblxAC0AenWQXcPY7Xfdu+7S4oqXrMzsup02IE4C/RrVg 75 | shSsPOfMBee4WOm0BC5t26XDRTgP2tiM7Wjgtg5K/1l4o+6P+gRqt5q6ugYdCqbpwXvu9tA1jXtj 76 | cFDVmVEIz1QNbHFrYYau3em6IStGqVzecO3pEU3JaH6eSF+AicINhTuMV/+u63eiNQN98OSpyZNd 77 | f2CP1bQPHqAEaWsl9oK9Arny2q4Ha4k4ZaV7iVchRurDaLNrYbdpPp6ILeyg0W8eq67udkZfsrdE 78 | ngF/mjIuSnii80jYQNZmQUM5Q1QlyBa8zbJmWNY09DcdSVq3FrQlrUuJS0WJS5vWpbM53w/p3qhD 79 | bqIEJhn4ucy5g7PCdN+0WWF76/QcJFsHR+7OFDgdkYuW5tD5glxvvWUOLdzJA2eO3CEkcYcyEgLQ 80 | vjuTdrggb+HiBc4yKXxa7taroYGzfO7AAMklQR6ugqBUJ8U3pwvsN05cpw77IRQd/9ynFzolqyyP 81 | Lbeeg9HPny55BIvEt/3X4JYeQhs5COnmkvvhLSGWdufzq3lNzlhOIXxF2h+P5bkV6LV5ILGH/pny 82 | n74SR9E+gw/ZjfveUB1c1NrM3Robig5uliN9MEAfCLw8sZcKenugYRmcu6481eA2nuDwHujgRDDf 83 | CyCE40UeKkDsO26QVdfPoN3Lxn5ZsPqogJ/0ZSQl78UzKA5wFcVE7il4vhdTNDyAv93uOkqsgXcK 84 | 4w6of3ai4upJ7A2GoDjJL/DYmhEccQEMwbgaKgZKy5PiOiN94Moar5Nywmu3rq3ZYcsCfi7496Ci 85 | nCR9luCndDF9cVaWPuxhrNE/uLSAyEQ+hr/TXMLew9b72LIF0U8Fhsi34Opjix8gNkx2Zwm6cgBV 86 | UBljGVOJ37hlW0zrZCJLsSXJ7sPmcF62Ai+JaSIIfwnYUok+UUbRCm6J9RZozunzHsBG1G5xZILe 87 | RSrVBVuebAk2E+uRGKWCMqEr0Zygz9HfKiSeXUzWe9QEZBdbtE0ypXMjNabxuanIM7RghcBvi+TW 88 | J0CMRhbbBDtUQmPDPOYXGFUU0XZOutMG8n2K8q0DWJMBzFQLkrEjKdEYXwQp6UE2ofEL0kLJwReK 89 | ZoO1gcud0d7ZyAq8lLPZVd2kRrjUjHDf6Pp9Bzbq6mLUgsmwNyNdQxUOF8DrPd9JKFXWignMq24O 90 | pj9JOC5wNBnFGQ+KwaudlmcwZXgoz+LQFUaj2Zz4BBVdM+fCpKEDI8iuob0tpkGKyxWQOjMqI7B1 91 | npx6lOuVUXPSaCts3TRb1QDvsmjxiEg+5LjYzgaj0E4j9ntzKjChqptb6chRgFch58xUIzXk7024 92 | B2M/re7PWszxLrYGYZAvF2loAg0Fh7tf5e7cUAoHAviK7wQCYulGSjhOUC7dNk7BwR0niHMvdrKK 93 | KGRPV3GFVVwk50H69ZGU7RdDG6vpuCWfk1BHjc7MfuzsDoIaA0HqCj2/99350J15WwIQ0ScOHoDk 94 | mYsJeLoOKJiOJZBEIC7m/FU5DRWNLTy7mY0Bl4ybnIBIiV/Po5sHW/o8YtVToHEPAm7tStTUAAgY 95 | roHr/TPMOmeaFB6lOccEKrq62IOha9gjjHetAOfP7Pg1GcFujF5J1KZ9ZVrVC+ewgv8mCJENY4Cu 96 | f572IJgYtxlEw+DTwZ6CeBx5lQmaBTZYMVBTw3zcEdcDIyS4Vh0NnHKOa6RqzuBUYhgF2cUo2Nei 97 | 5xr61E/0YVJlBgMcgv07Qg2W7DGCFnRJo6GFz2gGvLJnyiJj8EagA99y0yq148Y1WbSjRYpWJ8Lm 98 | rMvXnoJLePXLUUor5nfigv4y1o1JrmOcDmmvD2taFFs3fGlxCIfM2zCfDQI+rOKrC+GulrH4buLG 99 | M47byK/7TaFFtApQJ07/TcQ4cr8icJVJrBc+rVJ1l7ScAP9FjIOhj/o4Mfe/YDgH9nxQZuJQYJyx 100 | sw7Q0ia4xq6QgWuTgMv80dDVf8lnzS4HBl3A+ZFrlyOJt9CSb/FLL3Y5XKclS9Epct0bGAnLSDJV 101 | bj59wp9XJMYJejDwP/zypf+4kiCM8jxN8fOy1/+7FCXgTQUIc/Uj13+LxtSnOz9yBZ8evkhHkGVZ 102 | EKVZ/lV0wPj03v9kf21R+QHHPclx1a8lJ0lSP8rTLPkqcmAJfpTckvN9L5Th35beQEsW5GEc+P5X 103 | kfK5H+1uZvc//Qgega4F/gMnO5CbA2bLf/gR/z+Y2nHAH+NOGjONIElcCf0wvPqTLspu/6OLohyX 104 | doEJrmCSOzABOP0rIP8KKN7eAmXh1oUJ8iuYNL2FSaNoBbN9xTxJsFpQkF3Pc+dnwmuY9BomuIWJ 105 | t/EKJrmCye+txw9WMPErYJJ4TVt0/Xukf2dBabAm7loS4L56Z6aI5IwHioO5+mUQWt6thJ4G/mdp 106 | 6lH3v5+l8p1RH9Z/W04HRXKLJaBDuXz0k0f+XQUjr25fkD8G4WMQbT792/8BfJ5W/Ns6AAA= 107 | headers: 108 | Access-Control-Allow-Credentials: 109 | - 'true' 110 | Access-Control-Allow-Headers: 111 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 112 | Access-Control-Allow-Methods: 113 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 114 | Access-Control-Allow-Origin: 115 | - '*' 116 | Access-Control-Expose-Headers: 117 | - Authorization, Cache-Control 118 | Cache-Control: 119 | - max-age=0, no-cache 120 | Connection: 121 | - keep-alive 122 | Content-Encoding: 123 | - gzip 124 | Content-Length: 125 | - '5069' 126 | Content-Type: 127 | - application/json 128 | Date: 129 | - Tue, 31 May 2022 09:18:25 GMT 130 | Server: 131 | - gunicorn 132 | Vary: 133 | - Accept-Encoding 134 | Via: 135 | - 1.1 vegur 136 | X-Api-Pool: 137 | - common 138 | status: 139 | code: 200 140 | message: OK 141 | version: 1 142 | -------------------------------------------------------------------------------- /tests/cassettes/test_single_entity/test_single_concept_by_wikidata_url.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/concepts/https://www.wikidata.org/wiki/Q11190 15 | response: 16 | body: 17 | string: !!binary | 18 | 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 107 | headers: 108 | Access-Control-Allow-Credentials: 109 | - 'true' 110 | Access-Control-Allow-Headers: 111 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 112 | Access-Control-Allow-Methods: 113 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 114 | Access-Control-Allow-Origin: 115 | - '*' 116 | Access-Control-Expose-Headers: 117 | - Authorization, Cache-Control 118 | Cache-Control: 119 | - max-age=0, no-cache 120 | Connection: 121 | - keep-alive 122 | Content-Encoding: 123 | - gzip 124 | Content-Length: 125 | - '5069' 126 | Content-Type: 127 | - application/json 128 | Date: 129 | - Tue, 31 May 2022 09:18:26 GMT 130 | Server: 131 | - gunicorn 132 | Vary: 133 | - Accept-Encoding 134 | Via: 135 | - 1.1 vegur 136 | X-Api-Pool: 137 | - common 138 | status: 139 | code: 200 140 | message: OK 141 | version: 1 142 | -------------------------------------------------------------------------------- /tests/cassettes/test_single_entity/test_single_institution_by_mag_id.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/institutions/mag:19820366 15 | response: 16 | body: 17 | string: !!binary | 18 | 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 125 | h8+w/wL5Lwi7+vs//heUBpuEV4gAAA== 126 | headers: 127 | Access-Control-Allow-Credentials: 128 | - 'true' 129 | Access-Control-Allow-Headers: 130 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 131 | Access-Control-Allow-Methods: 132 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 133 | Access-Control-Allow-Origin: 134 | - '*' 135 | Access-Control-Expose-Headers: 136 | - Authorization, Cache-Control 137 | Cache-Control: 138 | - max-age=0, no-cache 139 | Connection: 140 | - keep-alive 141 | Content-Encoding: 142 | - gzip 143 | Content-Length: 144 | - '6121' 145 | Content-Type: 146 | - application/json 147 | Date: 148 | - Tue, 31 May 2022 09:18:27 GMT 149 | Server: 150 | - gunicorn 151 | Vary: 152 | - Accept-Encoding 153 | Via: 154 | - 1.1 vegur 155 | X-Api-Pool: 156 | - common 157 | status: 158 | code: 200 159 | message: OK 160 | version: 1 161 | -------------------------------------------------------------------------------- /tests/cassettes/test_single_entity/test_single_institution_by_openalex_id.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/institutions/I19820366 15 | response: 16 | body: 17 | string: !!binary | 18 | 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 125 | h8+w/wL5Lwi7+vs//heUBpuEV4gAAA== 126 | headers: 127 | Access-Control-Allow-Credentials: 128 | - 'true' 129 | Access-Control-Allow-Headers: 130 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 131 | Access-Control-Allow-Methods: 132 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 133 | Access-Control-Allow-Origin: 134 | - '*' 135 | Access-Control-Expose-Headers: 136 | - Authorization, Cache-Control 137 | Cache-Control: 138 | - max-age=0, no-cache 139 | Connection: 140 | - keep-alive 141 | Content-Encoding: 142 | - gzip 143 | Content-Length: 144 | - '6121' 145 | Content-Type: 146 | - application/json 147 | Date: 148 | - Tue, 31 May 2022 09:18:26 GMT 149 | Server: 150 | - gunicorn 151 | Vary: 152 | - Accept-Encoding 153 | Via: 154 | - 1.1 vegur 155 | X-Api-Pool: 156 | - common 157 | status: 158 | code: 200 159 | message: OK 160 | version: 1 161 | -------------------------------------------------------------------------------- /tests/cassettes/test_single_entity/test_single_institution_by_ror_id.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: 6 | - application/json 7 | Accept-Encoding: 8 | - gzip, deflate 9 | Connection: 10 | - keep-alive 11 | User-Agent: 12 | - python-requests/2.27.1 13 | method: GET 14 | uri: https://api.openalex.org/institutions/ror:034t30j35 15 | response: 16 | body: 17 | string: !!binary | 18 | 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 125 | h8+w/wL5Lwi7+vs//heUBpuEV4gAAA== 126 | headers: 127 | Access-Control-Allow-Credentials: 128 | - 'true' 129 | Access-Control-Allow-Headers: 130 | - Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control 131 | Access-Control-Allow-Methods: 132 | - POST, GET, OPTIONS, PUT, DELETE, PATCH 133 | Access-Control-Allow-Origin: 134 | - '*' 135 | Access-Control-Expose-Headers: 136 | - Authorization, Cache-Control 137 | Cache-Control: 138 | - max-age=0, no-cache 139 | Connection: 140 | - keep-alive 141 | Content-Encoding: 142 | - gzip 143 | Content-Length: 144 | - '6121' 145 | Content-Type: 146 | - application/json 147 | Date: 148 | - Tue, 31 May 2022 09:18:27 GMT 149 | Server: 150 | - gunicorn 151 | Vary: 152 | - Accept-Encoding 153 | Via: 154 | - 1.1 vegur 155 | X-Api-Pool: 156 | - common 157 | status: 158 | code: 200 159 | message: OK 160 | version: 1 161 | --------------------------------------------------------------------------------