From bf1b4cd9d755a729643a57a90d07cae2332cd558 Mon Sep 17 00:00:00 2001 From: "Fabien C. Y. Benureau" Date: Tue, 7 Aug 2018 11:22:36 +0900 Subject: [PATCH] mock mode for test_apis The mock system relies on the PUBS_TESTS_MODE environmental variable. See the `tests/mock_requests.py` code for details. By defaults, fast mock tests are used with data pre-fetched from real calls. --- dev_requirements.txt | 3 +- pubs/apis.py | 12 -------- pubs/endecoder.py | 4 +-- test_apis_data.pickle | Bin 0 -> 43888 bytes tests/mock_requests.py | 61 +++++++++++++++++++++++++++++++++++++++++ tests/test_apis.py | 40 +++++++++++++++++++-------- 6 files changed, 92 insertions(+), 28 deletions(-) create mode 100644 test_apis_data.pickle create mode 100644 tests/mock_requests.py diff --git a/dev_requirements.txt b/dev_requirements.txt index 30e3cf6..0d91a9e 100644 --- a/dev_requirements.txt +++ b/dev_requirements.txt @@ -1,7 +1,8 @@ # if you want to setup your environment for development of the pytest code, # doing `pip install -r dev_requirements.txt` is the single thing you have to do. # Alternatively, and perhaps more conveniently, running `python setup.py test` -# will do the same *and* run the tests. +# will do the same *and* run the tests, but without installing the packages on +# the system. # Note that if you introduce a new dependency, you need to add it here and, more # importantly, to the setup.py script so that it is taken into account when # installing from PyPi. diff --git a/pubs/apis.py b/pubs/apis.py index f6d84a8..6f487ca 100644 --- a/pubs/apis.py +++ b/pubs/apis.py @@ -146,7 +146,6 @@ def arxiv2bibtex(arxiv_id, try_doi=True, ui=None): "'{}': {}".format(arxiv_id, e)) raise ReferenceNotFoundError(msg) - # print("TEXT = '{}'".format(r.text)) feed = feedparser.parse(r.text) if len(feed.entries) == 0: # no results. msg = "no results for arXiv id {}".format(arxiv_id) @@ -161,12 +160,6 @@ def arxiv2bibtex(arxiv_id, try_doi=True, ui=None): raise ReferenceNotFoundError(msg) entry = feed.entries[0] - if 'arxiv.org/api/errors' in entry['id']: # server is returning an error message. - msg = 'the arXiv server returned an error message: {}'.format(entry['summary']) - raise ReferenceNotFoundError(msg) - # import pprint - # pprint.pprint(entry) - ## try to return a doi instead of the arXiv reference if try_doi and 'arxiv_doi' in entry: @@ -203,8 +196,3 @@ def arxiv2bibtex(arxiv_id, try_doi=True, ui=None): bibtex = bibtexparser.dumps(db) return bibtex - -if __name__ == '__main__': - print(arxiv2bibtex("0704.0010")) - print(arxiv2bibtex("0704.010*")) -# print(arxiv2bibtex("quant-ph/0703266")) diff --git a/pubs/endecoder.py b/pubs/endecoder.py index f265f54..c280460 100644 --- a/pubs/endecoder.py +++ b/pubs/endecoder.py @@ -10,7 +10,7 @@ import bibtexparser try: import bibtexparser as bp # don't let bibtexparser display stuff -# bp.bparser.logger.setLevel(level=logging.CRITICAL) + bp.bparser.logger.setLevel(level=logging.CRITICAL) except ImportError: print("error: you need to install bibterxparser; try running 'pip install " "bibtexparser'.") @@ -75,8 +75,6 @@ class EnDecoder(object): class BibDecodingError(Exception): -# message = "Could not parse provided bibdata:\n---\n{}\n---" - def __init__(self, error_msg, bibdata): """ :param error_msg: specific message about what went wrong diff --git a/test_apis_data.pickle b/test_apis_data.pickle new file mode 100644 index 0000000000000000000000000000000000000000..a18f46a1779088764856cae2dfc0e3587e196c31 GIT binary patch literal 43888 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