From cb36b4f9acd3de6c6c43d844aa347e9b3af7758e Mon Sep 17 00:00:00 2001 From: PascalEgn Date: Tue, 6 Aug 2024 13:53:03 +0200 Subject: [PATCH] global: add pre-commit with ruff --- .pre-commit-config.yaml | 17 +++++++++ inspire_dojson/__init__.py | 6 ++-- inspire_dojson/api.py | 26 +++++++------- inspire_dojson/cds/__init__.py | 4 +-- inspire_dojson/cds/model.py | 5 +-- inspire_dojson/cds/rules.py | 17 ++++----- inspire_dojson/common/__init__.py | 2 +- inspire_dojson/common/rules.py | 37 +++++++------------ inspire_dojson/conferences/__init__.py | 4 +-- inspire_dojson/conferences/model.py | 2 +- inspire_dojson/conferences/rules.py | 9 +++-- inspire_dojson/data/__init__.py | 4 +-- inspire_dojson/data/model.py | 3 +- inspire_dojson/data/rules.py | 4 +-- inspire_dojson/experiments/__init__.py | 4 +-- inspire_dojson/experiments/model.py | 2 +- inspire_dojson/experiments/rules.py | 6 ++-- inspire_dojson/hep/__init__.py | 4 +-- inspire_dojson/hep/model.py | 5 ++- inspire_dojson/hep/rules/bd0xx.py | 7 ++-- inspire_dojson/hep/rules/bd1xx.py | 9 ++--- inspire_dojson/hep/rules/bd2xx.py | 6 ++-- inspire_dojson/hep/rules/bd3xx.py | 4 +-- inspire_dojson/hep/rules/bd4xx.py | 2 +- inspire_dojson/hep/rules/bd5xx.py | 22 ++++++------ inspire_dojson/hep/rules/bd6xx.py | 6 ++-- inspire_dojson/hep/rules/bd7xx.py | 5 ++- inspire_dojson/hep/rules/bd9xx.py | 5 ++- inspire_dojson/hep/rules/bdFFT.py | 5 ++- inspire_dojson/hepnames/__init__.py | 4 +-- inspire_dojson/hepnames/model.py | 3 +- inspire_dojson/hepnames/rules.py | 36 ++++++++----------- inspire_dojson/institutions/__init__.py | 4 +-- inspire_dojson/institutions/model.py | 2 +- inspire_dojson/institutions/rules.py | 20 +++++------ inspire_dojson/journals/__init__.py | 4 +-- inspire_dojson/journals/model.py | 3 +- inspire_dojson/journals/rules.py | 5 ++- inspire_dojson/model.py | 5 ++- inspire_dojson/utils/__init__.py | 10 +++--- inspire_dojson/utils/geo.py | 2 -- ruff.toml | 30 ++++++++++++++++ run-tests.sh | 1 - setup.py | 10 ++++-- tests/conftest.py | 7 ++-- tests/test_api.py | 2 +- tests/test_cds.py | 2 +- tests/test_common.py | 2 +- tests/test_conferences.py | 2 +- tests/test_data.py | 2 +- tests/test_experiments.py | 2 +- tests/test_experiments_model.py | 2 +- tests/test_hep_bd0xx.py | 2 +- tests/test_hep_bd1xx.py | 2 +- tests/test_hep_bd2xx.py | 11 +++--- tests/test_hep_bd3xx.py | 2 +- tests/test_hep_bd4xx.py | 2 +- tests/test_hep_bd5xx.py | 4 +-- tests/test_hep_bd6xx.py | 2 +- tests/test_hep_bd7xx.py | 2 +- tests/test_hep_bd9xx.py | 2 +- tests/test_hep_bdFFT.py | 48 ++++++++++++------------- tests/test_hep_model.py | 2 +- tests/test_hepnames.py | 6 ++-- tests/test_institutions.py | 2 +- tests/test_journals.py | 2 +- tests/test_model.py | 2 +- tests/test_utils.py | 9 +++-- tests/test_utils_geo.py | 1 - 69 files changed, 241 insertions(+), 252 deletions(-) create mode 100644 .pre-commit-config.yaml create mode 100644 ruff.toml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..22aa9292 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,17 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.6.0 + hooks: + - id: check-yaml + - id: end-of-file-fixer + - id: trailing-whitespace + - id: fix-byte-order-marker + - id: mixed-line-ending + - id: name-tests-test + args: [ --pytest-test-first ] + exclude: '^(?!factories/)' + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.5.6 + hooks: + - id: ruff + args: [ --fix, --unsafe-fixes ] diff --git a/inspire_dojson/__init__.py b/inspire_dojson/__init__.py index c69c7cc4..d6f976e0 100644 --- a/inspire_dojson/__init__.py +++ b/inspire_dojson/__init__.py @@ -24,8 +24,8 @@ from __future__ import absolute_import, division, print_function -from . import common # noqa: F401 -from .api import marcxml2record, record2marcxml # noqa: F401 -from .errors import DoJsonError # noqa: F401 +from inspire_dojson import common # noqa: F401 +from inspire_dojson.api import marcxml2record, record2marcxml # noqa: F401 +from inspire_dojson.errors import DoJsonError # noqa: F401 __version__ = "63.2.22" diff --git a/inspire_dojson/api.py b/inspire_dojson/api.py index 522a3a13..ef642d42 100644 --- a/inspire_dojson/api.py +++ b/inspire_dojson/api.py @@ -28,26 +28,24 @@ import re from itertools import chain +from dojson.contrib.marc21.utils import create_record +from inspire_utils.helpers import force_list +from inspire_utils.record import get_value from lxml.builder import E from lxml.etree import tostring from six import iteritems, text_type, unichr from six.moves import urllib -from dojson.contrib.marc21.utils import create_record - +from inspire_dojson.cds import cds2hep_marc +from inspire_dojson.conferences import conferences +from inspire_dojson.data import data +from inspire_dojson.errors import NotSupportedError +from inspire_dojson.experiments import experiments +from inspire_dojson.hep import hep, hep2marc +from inspire_dojson.hepnames import hepnames, hepnames2marc +from inspire_dojson.institutions import institutions +from inspire_dojson.journals import journals from inspire_dojson.utils import create_record_from_dict, force_single_element -from inspire_utils.helpers import force_list -from inspire_utils.record import get_value - -from .cds import cds2hep_marc -from .conferences import conferences -from .data import data -from .errors import NotSupportedError -from .experiments import experiments -from .hep import hep, hep2marc -from .hepnames import hepnames, hepnames2marc -from .institutions import institutions -from .journals import journals try: unichr(0x100000) diff --git a/inspire_dojson/cds/__init__.py b/inspire_dojson/cds/__init__.py index 892b9c1e..04958dc4 100644 --- a/inspire_dojson/cds/__init__.py +++ b/inspire_dojson/cds/__init__.py @@ -24,5 +24,5 @@ from __future__ import absolute_import, division, print_function -from . import rules # noqa: F401 -from .model import cds2hep_marc # noqa: F401 +from inspire_dojson.cds import rules # noqa: F401 +from inspire_dojson.cds.model import cds2hep_marc # noqa: F401 diff --git a/inspire_dojson/cds/model.py b/inspire_dojson/cds/model.py index 4a2ccb19..1fc47087 100644 --- a/inspire_dojson/cds/model.py +++ b/inspire_dojson/cds/model.py @@ -25,10 +25,11 @@ from __future__ import absolute_import, division, print_function from itertools import chain -from inspire_utils.record import get_value + from inspire_utils.helpers import force_list +from inspire_utils.record import get_value -from ..model import FilterOverdo, clean_record +from inspire_dojson.model import FilterOverdo, clean_record def add_control_number(record, blob): diff --git a/inspire_dojson/cds/rules.py b/inspire_dojson/cds/rules.py index ad82d511..aa5a94a2 100644 --- a/inspire_dojson/cds/rules.py +++ b/inspire_dojson/cds/rules.py @@ -24,6 +24,7 @@ from __future__ import absolute_import, division, print_function +import contextlib import os import re from itertools import chain @@ -31,17 +32,14 @@ import pycountry import rfc3987 import six - -from idutils import is_arxiv from dojson import utils - -from six.moves import urllib - +from idutils import is_arxiv from inspire_utils.helpers import force_list from inspire_utils.name import normalize_name +from six.moves import urllib -from .model import cds2hep_marc -from ..utils import force_single_element, quote_url +from inspire_dojson.cds.model import cds2hep_marc +from inspire_dojson.utils import force_single_element, quote_url CATEGORIES = { 'Accelerators and Storage Rings': 'Accelerators', @@ -55,7 +53,6 @@ 'Engineering': 'Instrumentation', 'General Relativity and Cosmology': 'Gravitation and Cosmology', 'General Theoretical Physics': 'General Physics', - 'General Theoretical Physics': 'General Physics', 'Information Transfer and Management': 'Other', 'Mathematical Physics and Mathematics': 'Math and Math Physics', 'Nuclear Physics - Experiment': 'Experiment-Nucl', @@ -198,10 +195,8 @@ def languages(self, key, value): try: languages.append({'a': pycountry.languages.get(alpha_3=alpha_3).name}) except KeyError: - try: + with contextlib.suppress(KeyError): languages.append({'a': pycountry.languages.get(bibliographic=alpha_3).name}) - except KeyError: - pass return languages diff --git a/inspire_dojson/common/__init__.py b/inspire_dojson/common/__init__.py index 7e89ca52..d715f5a6 100644 --- a/inspire_dojson/common/__init__.py +++ b/inspire_dojson/common/__init__.py @@ -24,4 +24,4 @@ from __future__ import absolute_import, division, print_function -from . import rules # noqa: F401 +from inspire_dojson.common import rules # noqa: F401 diff --git a/inspire_dojson/common/rules.py b/inspire_dojson/common/rules.py index b2b190bb..22d67ac1 100644 --- a/inspire_dojson/common/rules.py +++ b/inspire_dojson/common/rules.py @@ -27,29 +27,22 @@ import re from datetime import datetime -from flask import current_app -from six.moves import urllib - from dojson import utils - +from flask import current_app from inspire_schemas.api import load_schema from inspire_schemas.utils import classify_field from inspire_utils.date import PartialDate, earliest_date from inspire_utils.helpers import force_list, maybe_int +from six.moves import urllib -from ..conferences.model import conferences -from ..data.model import data -from ..experiments.model import experiments -from ..hep.model import hep, hep2marc -from ..hepnames.model import hepnames, hepnames2marc -from ..institutions.model import institutions -from ..journals.model import journals -from ..utils import ( - force_single_element, - get_recid_from_ref, - get_record_ref, -) - +from inspire_dojson.conferences.model import conferences +from inspire_dojson.data.model import data +from inspire_dojson.experiments.model import experiments +from inspire_dojson.hep.model import hep, hep2marc +from inspire_dojson.hepnames.model import hepnames, hepnames2marc +from inspire_dojson.institutions.model import institutions +from inspire_dojson.journals.model import journals +from inspire_dojson.utils import force_single_element, get_recid_from_ref, get_record_ref IS_INTERNAL_UID = re.compile(r'^(inspire:uid:)?\d{5}$') IS_ORCID = re.compile(r'^(orcid:)?\d{4}-\d{4}-\d{4}-\d{3}[0-9X]$') @@ -646,15 +639,9 @@ def _get_datetime(value): a_values = force_list(value.get('a')) for a_value in a_values: if IS_INTERNAL_UID.match(a_value): - if a_value.startswith('inspire:uid:'): - internal_uid = int(a_value[12:]) - else: - internal_uid = int(a_value) + internal_uid = int(a_value[12:]) if a_value.startswith('inspire:uid:') else int(a_value) elif IS_ORCID.match(a_value): - if a_value.startswith('orcid:'): - orcid = a_value[6:] - else: - orcid = a_value + orcid = a_value[6:] if a_value.startswith('orcid:') else a_value else: source = a_value diff --git a/inspire_dojson/conferences/__init__.py b/inspire_dojson/conferences/__init__.py index 4eb22221..f85e2691 100644 --- a/inspire_dojson/conferences/__init__.py +++ b/inspire_dojson/conferences/__init__.py @@ -24,5 +24,5 @@ from __future__ import absolute_import, division, print_function -from . import rules # noqa: F401 -from .model import conferences # noqa: F401 +from inspire_dojson.conferences import rules # noqa: F401 +from inspire_dojson.conferences.model import conferences # noqa: F401 diff --git a/inspire_dojson/conferences/model.py b/inspire_dojson/conferences/model.py index 6f6a68fc..dc82ff1e 100644 --- a/inspire_dojson/conferences/model.py +++ b/inspire_dojson/conferences/model.py @@ -24,7 +24,7 @@ from __future__ import absolute_import, division, print_function -from ..model import FilterOverdo, add_schema, add_collection, clean_record +from inspire_dojson.model import FilterOverdo, add_collection, add_schema, clean_record def remove_lone_series_number(record, blob): diff --git a/inspire_dojson/conferences/rules.py b/inspire_dojson/conferences/rules.py index c7be443d..2cd43310 100644 --- a/inspire_dojson/conferences/rules.py +++ b/inspire_dojson/conferences/rules.py @@ -25,12 +25,11 @@ from __future__ import absolute_import, division, print_function from dojson import utils +from inspire_utils.helpers import force_list, maybe_float, maybe_int -from inspire_utils.helpers import force_list, maybe_int, maybe_float - -from .model import conferences -from ..utils import force_single_element -from ..utils.geo import parse_conference_address +from inspire_dojson.conferences.model import conferences +from inspire_dojson.utils import force_single_element +from inspire_dojson.utils.geo import parse_conference_address def _trim_date(date): diff --git a/inspire_dojson/data/__init__.py b/inspire_dojson/data/__init__.py index dccbe47e..be3a99f1 100644 --- a/inspire_dojson/data/__init__.py +++ b/inspire_dojson/data/__init__.py @@ -24,5 +24,5 @@ from __future__ import absolute_import, division, print_function -from . import rules # noqa: F401 -from .model import data # noqa: F401 +from inspire_dojson.data import rules # noqa: F401 +from inspire_dojson.data.model import data # noqa: F401 diff --git a/inspire_dojson/data/model.py b/inspire_dojson/data/model.py index 9c50ee02..29b46f88 100644 --- a/inspire_dojson/data/model.py +++ b/inspire_dojson/data/model.py @@ -24,8 +24,7 @@ from __future__ import absolute_import, division, print_function -from ..model import FilterOverdo, add_schema, add_collection, clean_record - +from inspire_dojson.model import FilterOverdo, add_collection, add_schema, clean_record filters = [ add_schema('data.json'), diff --git a/inspire_dojson/data/rules.py b/inspire_dojson/data/rules.py index d92bb589..3f067dd7 100644 --- a/inspire_dojson/data/rules.py +++ b/inspire_dojson/data/rules.py @@ -27,8 +27,8 @@ from dojson import utils from idutils import normalize_doi -from .model import data -from ..utils import force_single_element, get_record_ref +from inspire_dojson.data.model import data +from inspire_dojson.utils import force_single_element, get_record_ref @data.over('dois', '^0247.') diff --git a/inspire_dojson/experiments/__init__.py b/inspire_dojson/experiments/__init__.py index a03f4b16..04b98eb2 100644 --- a/inspire_dojson/experiments/__init__.py +++ b/inspire_dojson/experiments/__init__.py @@ -24,5 +24,5 @@ from __future__ import absolute_import, division, print_function -from . import rules # noqa: F401 -from .model import experiments # noqa: F401 +from inspire_dojson.experiments import rules # noqa: F401 +from inspire_dojson.experiments.model import experiments # noqa: F401 diff --git a/inspire_dojson/experiments/model.py b/inspire_dojson/experiments/model.py index d9768601..16668fa4 100644 --- a/inspire_dojson/experiments/model.py +++ b/inspire_dojson/experiments/model.py @@ -24,7 +24,7 @@ from __future__ import absolute_import, division, print_function -from ..model import FilterOverdo, add_collection, add_schema, clean_record +from inspire_dojson.model import FilterOverdo, add_collection, add_schema, clean_record def add_project_type(record, blob): diff --git a/inspire_dojson/experiments/rules.py b/inspire_dojson/experiments/rules.py index 3f6938d4..bcaaf566 100644 --- a/inspire_dojson/experiments/rules.py +++ b/inspire_dojson/experiments/rules.py @@ -26,13 +26,11 @@ from dojson import utils from dojson.errors import IgnoreKey - from inspire_utils.date import normalize_date from inspire_utils.helpers import force_list, maybe_int -from .model import experiments -from ..utils import force_single_element, get_record_ref - +from inspire_dojson.experiments.model import experiments +from inspire_dojson.utils import force_single_element, get_record_ref EXPERIMENT_CATEGORIES_MAP = \ {'1': 'Collider Experiments', diff --git a/inspire_dojson/hep/__init__.py b/inspire_dojson/hep/__init__.py index 0f103c6f..51e21fe5 100644 --- a/inspire_dojson/hep/__init__.py +++ b/inspire_dojson/hep/__init__.py @@ -24,7 +24,8 @@ from __future__ import absolute_import, division, print_function -from .rules import ( # noqa: F401 +from inspire_dojson.hep.model import hep, hep2marc # noqa: F401 +from inspire_dojson.hep.rules import ( # noqa: F401 bd0xx, bd1xx, bd2xx, @@ -36,4 +37,3 @@ bd9xx, bdFFT, ) -from .model import hep, hep2marc # noqa: F401 diff --git a/inspire_dojson/hep/model.py b/inspire_dojson/hep/model.py index 42771c2c..411e006f 100644 --- a/inspire_dojson/hep/model.py +++ b/inspire_dojson/hep/model.py @@ -27,16 +27,15 @@ import itertools import six - +from inspire_schemas.builders.literature import is_citeable from inspire_schemas.utils import ( convert_old_publication_info_to_new, normalize_arxiv_category, ) -from inspire_schemas.builders.literature import is_citeable from inspire_utils.helpers import force_list from inspire_utils.record import get_value -from ..model import FilterOverdo, add_schema, clean_marc, clean_record +from inspire_dojson.model import FilterOverdo, add_schema, clean_marc, clean_record def add_arxiv_categories(record, blob): diff --git a/inspire_dojson/hep/rules/bd0xx.py b/inspire_dojson/hep/rules/bd0xx.py index 66724136..5b6067e5 100644 --- a/inspire_dojson/hep/rules/bd0xx.py +++ b/inspire_dojson/hep/rules/bd0xx.py @@ -28,17 +28,14 @@ from collections import defaultdict import pycountry - from dojson import utils from idutils import is_arxiv_post_2007, is_doi, is_handle, normalize_doi - from inspire_schemas.api import load_schema from inspire_schemas.utils import normalize_arxiv_category from inspire_utils.helpers import force_list -from ..model import hep, hep2marc -from ...utils import force_single_element, normalize_isbn - +from inspire_dojson.hep.model import hep, hep2marc +from inspire_dojson.utils import force_single_element, normalize_isbn RE_LANGUAGE = re.compile(r'\/| or | and |,|=|\s+') diff --git a/inspire_dojson/hep/rules/bd1xx.py b/inspire_dojson/hep/rules/bd1xx.py index 9c98e21c..50c7f965 100644 --- a/inspire_dojson/hep/rules/bd1xx.py +++ b/inspire_dojson/hep/rules/bd1xx.py @@ -27,16 +27,11 @@ import re from dojson import utils - from inspire_utils.dedupers import dedupe_list from inspire_utils.helpers import force_list, maybe_int -from ..model import hep, hep2marc -from ...utils import ( - force_single_element, - get_record_ref, -) - +from inspire_dojson.hep.model import hep, hep2marc +from inspire_dojson.utils import force_single_element, get_record_ref ORCID = re.compile(r'\d{4}-\d{4}-\d{4}-\d{3}[0-9Xx]') diff --git a/inspire_dojson/hep/rules/bd2xx.py b/inspire_dojson/hep/rules/bd2xx.py index e2df2513..003492a5 100644 --- a/inspire_dojson/hep/rules/bd2xx.py +++ b/inspire_dojson/hep/rules/bd2xx.py @@ -25,13 +25,11 @@ from __future__ import absolute_import, division, print_function import langdetect - from dojson import utils - from inspire_utils.helpers import force_list -from ..model import hep, hep2marc -from ...utils import normalize_date_aggressively +from inspire_dojson.hep.model import hep, hep2marc +from inspire_dojson.utils import normalize_date_aggressively @hep.over('titles', '^(210|245|246|247)..') diff --git a/inspire_dojson/hep/rules/bd3xx.py b/inspire_dojson/hep/rules/bd3xx.py index 9913e12b..d3b00e93 100644 --- a/inspire_dojson/hep/rules/bd3xx.py +++ b/inspire_dojson/hep/rules/bd3xx.py @@ -26,8 +26,8 @@ from inspire_utils.helpers import maybe_int -from ..model import hep, hep2marc -from ...utils import force_single_element +from inspire_dojson.hep.model import hep, hep2marc +from inspire_dojson.utils import force_single_element @hep.over('number_of_pages', '^300..') diff --git a/inspire_dojson/hep/rules/bd4xx.py b/inspire_dojson/hep/rules/bd4xx.py index d2999aba..c05479cc 100644 --- a/inspire_dojson/hep/rules/bd4xx.py +++ b/inspire_dojson/hep/rules/bd4xx.py @@ -26,7 +26,7 @@ from dojson import utils -from ..model import hep, hep2marc +from inspire_dojson.hep.model import hep, hep2marc @hep.over('book_series', '^490..') diff --git a/inspire_dojson/hep/rules/bd5xx.py b/inspire_dojson/hep/rules/bd5xx.py index a52cf25b..ff512490 100644 --- a/inspire_dojson/hep/rules/bd5xx.py +++ b/inspire_dojson/hep/rules/bd5xx.py @@ -27,13 +27,11 @@ import re from dojson import utils - from inspire_utils.date import normalize_date from inspire_utils.helpers import force_list, maybe_int -from ..model import hep, hep2marc -from ...utils import force_single_element, get_record_ref - +from inspire_dojson.hep.model import hep, hep2marc +from inspire_dojson.utils import force_single_element, get_record_ref IS_DEFENSE_DATE = re.compile('Presented (on )?(?P.*)', re.IGNORECASE) @@ -58,8 +56,8 @@ def _means_not_curated(public_note): thesis_info = self.get('thesis_info', {}) source = force_single_element(value.get('9', '')) - for value in force_list(value): - for public_note in force_list(value.get('a')): + for current_value in force_list(value): + for public_note in force_list(current_value.get('a')): match = IS_DEFENSE_DATE.match(public_note) if match: try: @@ -316,17 +314,17 @@ def _is_not_for_hal(value): _private_notes = self.get('_private_notes', []) _export_to = self.get('_export_to', {}) - for value in force_list(value): - if _is_for_cds(value): + for current_value in force_list(value): + if _is_for_cds(current_value): _export_to['CDS'] = True - if _is_for_hal(value): + if _is_for_hal(current_value): _export_to['HAL'] = True - elif _is_not_for_hal(value): + elif _is_not_for_hal(current_value): _export_to['HAL'] = False - source = force_single_element(value.get('9')) - for _private_note in force_list(value.get('a')): + source = force_single_element(current_value.get('9')) + for _private_note in force_list(current_value.get('a')): _private_notes.append({ 'source': source, 'value': _private_note, diff --git a/inspire_dojson/hep/rules/bd6xx.py b/inspire_dojson/hep/rules/bd6xx.py index f58aebbc..1f17c128 100644 --- a/inspire_dojson/hep/rules/bd6xx.py +++ b/inspire_dojson/hep/rules/bd6xx.py @@ -25,13 +25,11 @@ from __future__ import absolute_import, division, print_function import six - from dojson import utils - from inspire_utils.helpers import force_list -from ..model import hep, hep2marc -from ...utils import force_single_element, get_record_ref +from inspire_dojson.hep.model import hep, hep2marc +from inspire_dojson.utils import force_single_element, get_record_ref ENERGY_RANGES_MAP = { '1': '0-3 GeV', diff --git a/inspire_dojson/hep/rules/bd7xx.py b/inspire_dojson/hep/rules/bd7xx.py index 5a85c24b..81cffb0c 100644 --- a/inspire_dojson/hep/rules/bd7xx.py +++ b/inspire_dojson/hep/rules/bd7xx.py @@ -25,7 +25,6 @@ from __future__ import absolute_import, division, print_function from dojson import utils - from inspire_schemas.api import load_schema from inspire_schemas.utils import ( convert_new_publication_info_to_old, @@ -34,8 +33,8 @@ ) from inspire_utils.helpers import force_list, maybe_int -from ..model import hep, hep2marc -from ...utils import ( +from inspire_dojson.hep.model import hep, hep2marc +from inspire_dojson.utils import ( force_single_element, get_recid_from_ref, get_record_ref, diff --git a/inspire_dojson/hep/rules/bd9xx.py b/inspire_dojson/hep/rules/bd9xx.py index 8ef04f31..0a0e2f6a 100644 --- a/inspire_dojson/hep/rules/bd9xx.py +++ b/inspire_dojson/hep/rules/bd9xx.py @@ -28,7 +28,6 @@ from dojson import utils from idutils import is_arxiv_post_2007 - from inspire_schemas.api import ReferenceBuilder, load_schema from inspire_schemas.utils import ( build_pubnote, @@ -38,8 +37,8 @@ from inspire_utils.helpers import force_list, maybe_int from inspire_utils.record import get_value -from ..model import hep, hep2marc -from ...utils import force_single_element, get_recid_from_ref, get_record_ref +from inspire_dojson.hep.model import hep, hep2marc +from inspire_dojson.utils import force_single_element, get_recid_from_ref, get_record_ref COLLECTIONS_MAP = { 'babar-analysisdocument': 'BABAR Analysis Documents', diff --git a/inspire_dojson/hep/rules/bdFFT.py b/inspire_dojson/hep/rules/bdFFT.py index bded0913..b721ce48 100644 --- a/inspire_dojson/hep/rules/bdFFT.py +++ b/inspire_dojson/hep/rules/bdFFT.py @@ -28,11 +28,10 @@ import re from dojson import utils - from inspire_utils.helpers import force_list -from ..model import hep, hep2marc -from ...utils import absolute_url, afs_url, afs_url_to_path +from inspire_dojson.hep.model import hep, hep2marc +from inspire_dojson.utils import absolute_url, afs_url, afs_url_to_path @hep.over('documents', '^FFT[^%][^%]') diff --git a/inspire_dojson/hepnames/__init__.py b/inspire_dojson/hepnames/__init__.py index af6754d7..5292f163 100644 --- a/inspire_dojson/hepnames/__init__.py +++ b/inspire_dojson/hepnames/__init__.py @@ -24,5 +24,5 @@ from __future__ import absolute_import, division, print_function -from . import rules # noqa: F401 -from .model import hepnames, hepnames2marc # noqa: F401 +from inspire_dojson.hepnames import rules # noqa: F401 +from inspire_dojson.hepnames.model import hepnames, hepnames2marc # noqa: F401 diff --git a/inspire_dojson/hepnames/model.py b/inspire_dojson/hepnames/model.py index 07de915c..b47532d0 100644 --- a/inspire_dojson/hepnames/model.py +++ b/inspire_dojson/hepnames/model.py @@ -24,8 +24,7 @@ from __future__ import absolute_import, division, print_function -from ..model import FilterOverdo, add_schema, add_collection, clean_marc, clean_record - +from inspire_dojson.model import FilterOverdo, add_collection, add_schema, clean_marc, clean_record hepnames_filters = [ add_schema('authors.json'), diff --git a/inspire_dojson/hepnames/rules.py b/inspire_dojson/hepnames/rules.py index 2ac13b8a..16eae0c5 100644 --- a/inspire_dojson/hepnames/rules.py +++ b/inspire_dojson/hepnames/rules.py @@ -27,7 +27,6 @@ import re from dojson import utils - from inspire_schemas.api import load_schema from inspire_schemas.utils import ( normalize_arxiv_category, @@ -37,17 +36,16 @@ from inspire_utils.helpers import force_list, maybe_int from inspire_utils.name import normalize_name -from .model import hepnames, hepnames2marc -from ..utils import ( +from inspire_dojson.hepnames.model import hepnames, hepnames2marc +from inspire_dojson.utils import ( force_single_element, - get_record_ref, get_recid_from_ref, + get_record_ref, normalize_rank, quote_url, - unquote_url + unquote_url, ) - AWARD_YEAR = re.compile(r'\(?(?P\d{4})\)?') INSPIRE_BAI = re.compile(r'(\w+\.)+\d+') LOOKS_LIKE_CERN = re.compile(r'^\d+$|^CER[MN]?-|^CNER-|^CVERN-', re.I) @@ -452,8 +450,8 @@ def _normalize(a_value): arxiv_categories = self.get('arxiv_categories', []) inspire_categories = self.get('inspire_categories', []) - for value in force_list(value): - for a_value in force_list(value.get('a')): + for current_value in force_list(value): + for a_value in force_list(current_value.get('a')): normalized_a_value = _normalize(a_value) if _is_arxiv(normalized_a_value): @@ -535,10 +533,7 @@ def birth_and_death_date2marc(self, key, value): def awards(self, key, value): award = AWARD_YEAR.sub('', value.get('a')).strip() year_match = AWARD_YEAR.search(value.get('a')) - if year_match: - year = int(year_match.group('year')) - else: - year = None + year = int(year_match.group('year')) if year_match else None return { 'name': award, @@ -572,8 +567,7 @@ def _get_json_experiments(marc_dict): yield { 'curated_relation': record is not None, 'current': ( - True if marc_dict.get('z', '').lower() == 'current' - else False + marc_dict.get('z', '').lower() == 'current' ), 'end_date': end_year, 'name': name, @@ -735,14 +729,14 @@ def new_record(self, key, value): new_record = self.get('new_record', {}) ids = self.get('ids', []) - for value in force_list(value): - for id_ in force_list(value.get('a')): + for current_value in force_list(value): + for id_ in force_list(current_value.get('a')): ids.append({ 'schema': 'SPIRES', 'value': id_, }) - new_recid = force_single_element(value.get('d', '')) + new_recid = force_single_element(current_value.get('d', '')) if new_recid: new_record = get_record_ref(new_recid, 'authors') @@ -760,14 +754,14 @@ def _is_deleted(value): return force_single_element(value.get('c', '')).upper() == 'DELETED' def _is_stub(value): - return not (force_single_element(value.get('a', '')).upper() == 'USEFUL') + return force_single_element(value.get('a', '')).upper() != 'USEFUL' deleted = self.get('deleted') stub = self.get('stub') - for value in force_list(value): - deleted = not deleted and _is_deleted(value) - stub = not stub and _is_stub(value) + for current_value in force_list(value): + deleted = not deleted and _is_deleted(current_value) + stub = not stub and _is_stub(current_value) self['stub'] = stub return deleted diff --git a/inspire_dojson/institutions/__init__.py b/inspire_dojson/institutions/__init__.py index 783e9d42..70024b7a 100644 --- a/inspire_dojson/institutions/__init__.py +++ b/inspire_dojson/institutions/__init__.py @@ -24,5 +24,5 @@ from __future__ import absolute_import, division, print_function -from . import rules # noqa: F401 -from .model import institutions # noqa: F401 +from inspire_dojson.institutions import rules # noqa: F401 +from inspire_dojson.institutions.model import institutions # noqa: F401 diff --git a/inspire_dojson/institutions/model.py b/inspire_dojson/institutions/model.py index 287e5bfe..c4b0980a 100644 --- a/inspire_dojson/institutions/model.py +++ b/inspire_dojson/institutions/model.py @@ -24,7 +24,7 @@ from __future__ import absolute_import, division, print_function -from ..model import FilterOverdo, add_schema, add_collection, clean_record +from inspire_dojson.model import FilterOverdo, add_collection, add_schema, clean_record def combine_addresses_and_location(record, blob): diff --git a/inspire_dojson/institutions/rules.py b/inspire_dojson/institutions/rules.py index f9d618d0..03f58215 100644 --- a/inspire_dojson/institutions/rules.py +++ b/inspire_dojson/institutions/rules.py @@ -27,13 +27,11 @@ import re from dojson import utils - from inspire_utils.helpers import force_list, maybe_float, maybe_int -from .model import institutions -from ..utils import force_single_element, get_record_ref -from ..utils.geo import parse_institution_address - +from inspire_dojson.institutions.model import institutions +from inspire_dojson.utils import force_single_element, get_record_ref +from inspire_dojson.utils.geo import parse_institution_address ACRONYM = re.compile(r'\s*\((.*)\)\s*$') @@ -78,28 +76,28 @@ def _split_acronym(value): institution_hierarchy = self.get('institution_hierarchy', []) related_records = self.get('related_records', []) - for value in force_list(value): + for current_value in force_list(value): ICN.extend(force_list(value.get('t'))) if not legacy_ICN: - legacy_ICN = force_single_element(value.get('u')) + legacy_ICN = force_single_element(current_value.get('u')) - for b_value in force_list(value.get('b')): + for b_value in force_list(current_value.get('b')): department_name, department_acronym = _split_acronym(b_value) institution_hierarchy.append({ 'acronym': department_acronym, 'name': department_name, }) - for a_value in force_list(value.get('a')): + for a_value in force_list(current_value.get('a')): institution_name, institution_acronym = _split_acronym(a_value) institution_hierarchy.append({ 'acronym': institution_acronym, 'name': institution_name, }) - x_values = force_list(value.get('x')) - z_values = force_list(value.get('z')) + x_values = force_list(current_value.get('x')) + z_values = force_list(current_value.get('z')) # XXX: we zip only when they have the same length, otherwise # we might match a relation with the wrong recid. diff --git a/inspire_dojson/journals/__init__.py b/inspire_dojson/journals/__init__.py index 1add2ab8..babc2907 100644 --- a/inspire_dojson/journals/__init__.py +++ b/inspire_dojson/journals/__init__.py @@ -24,5 +24,5 @@ from __future__ import absolute_import, division, print_function -from . import rules # noqa: F401 -from .model import journals # noqa: F401 +from inspire_dojson.journals import rules # noqa: F401 +from inspire_dojson.journals.model import journals # noqa: F401 diff --git a/inspire_dojson/journals/model.py b/inspire_dojson/journals/model.py index 4b8ef804..4fab0a69 100644 --- a/inspire_dojson/journals/model.py +++ b/inspire_dojson/journals/model.py @@ -24,8 +24,7 @@ from __future__ import absolute_import, division, print_function -from ..model import FilterOverdo, add_collection, add_schema, clean_record - +from inspire_dojson.model import FilterOverdo, add_collection, add_schema, clean_record filters = [ add_schema('journals.json'), diff --git a/inspire_dojson/journals/rules.py b/inspire_dojson/journals/rules.py index a9470c8c..bd6743f9 100644 --- a/inspire_dojson/journals/rules.py +++ b/inspire_dojson/journals/rules.py @@ -26,12 +26,11 @@ from dojson import utils from idutils import normalize_issn - from inspire_utils.date import normalize_date from inspire_utils.helpers import force_list, maybe_int -from .model import journals -from ..utils import get_record_ref +from inspire_dojson.journals.model import journals +from inspire_dojson.utils import get_record_ref @journals.over('issns', '^022..') diff --git a/inspire_dojson/model.py b/inspire_dojson/model.py index b19d01d0..318e57a3 100644 --- a/inspire_dojson/model.py +++ b/inspire_dojson/model.py @@ -32,11 +32,10 @@ from dojson import Overdo from dojson.errors import IgnoreKey - from six import raise_from -from .errors import DoJsonError -from .utils import dedupe_all_lists, strip_empty_values +from inspire_dojson.errors import DoJsonError +from inspire_dojson.utils import dedupe_all_lists, strip_empty_values class FilterOverdo(Overdo): diff --git a/inspire_dojson/utils/__init__.py b/inspire_dojson/utils/__init__.py index de4138b4..9127b4ab 100644 --- a/inspire_dojson/utils/__init__.py +++ b/inspire_dojson/utils/__init__.py @@ -27,16 +27,14 @@ import os import re -from flask import current_app -from isbn import ISBN -from six import binary_type, iteritems, text_type -from six.moves import urllib - from dojson.utils import GroupableOrderedDict - +from flask import current_app from inspire_utils.date import normalize_date from inspire_utils.dedupers import dedupe_list, dedupe_list_of_dicts from inspire_utils.helpers import force_list, maybe_int +from isbn import ISBN +from six import binary_type, iteritems, text_type +from six.moves import urllib DEFAULT_AFS_PATH = '/afs/cern.ch/project/inspire/PROD' diff --git a/inspire_dojson/utils/geo.py b/inspire_dojson/utils/geo.py index 71739b46..7f095dbc 100644 --- a/inspire_dojson/utils/geo.py +++ b/inspire_dojson/utils/geo.py @@ -25,10 +25,8 @@ from __future__ import absolute_import, division, print_function import six - from inspire_utils.helpers import force_list - country_to_iso_code = { 'AFGHANISTAN': 'AF', 'Ă…LAND ISLANDS': 'AX', diff --git a/ruff.toml b/ruff.toml new file mode 100644 index 00000000..0ddeba11 --- /dev/null +++ b/ruff.toml @@ -0,0 +1,30 @@ +target-version = "py311" +line-length = 100 +[lint.flake8-tidy-imports] +ban-relative-imports = "all" + +[lint] +select = [ + # pycodestyle + "E", + # Pyflakes + "F", + # flake8-bugbear + "B", + # flake8-simplify + "SIM", + # isort + "I", + # flake8-tidy-imports + "TID", + # flake8-pytest-style + "PT", +] +ignore = ["B904", "B905", "E501"] + + +[lint.pycodestyle] +ignore-overlong-task-comments = true + +[lint.pydocstyle] +convention = "google" diff --git a/run-tests.sh b/run-tests.sh index ac5a34cd..02585227 100755 --- a/run-tests.sh +++ b/run-tests.sh @@ -22,5 +22,4 @@ set -e -flake8 inspire_dojson tests py.test tests diff --git a/setup.py b/setup.py index 2cd0e60b..acd5291e 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,8 @@ URL = "https://github.com/inspirehep/inspire-dojson" -readme = open("README.rst").read() +with open("README.rst") as f: + readme = f.read() install_requires = [ @@ -54,13 +55,18 @@ "pytest-cov~=2.0,>=2.6.1", ] +dev_require = [ + "pre-commit==3.5.0", +] + extras_require = { "docs": docs_require, "tests": tests_require, + "dev": dev_require, } extras_require["all"] = [] -for name, reqs in extras_require.items(): +for _name, reqs in extras_require.items(): extras_require["all"].extend(reqs) packages = find_packages(exclude=["docs"]) diff --git a/tests/conftest.py b/tests/conftest.py index 2521c61d..c9ab5491 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -22,9 +22,8 @@ from __future__ import absolute_import, division, print_function import pytest -from langdetect import DetectorFactory from flask import Flask - +from langdetect import DetectorFactory CONFIG = { 'SERVER_NAME': 'localhost:5000', @@ -40,8 +39,8 @@ def app(): yield app -@pytest.fixture(scope='function') -def stable_langdetect(app): +@pytest.fixture() +def _stable_langdetect(app): """Ensure that ``langdetect`` always returns the same thing. See: https://github.com/Mimino666/langdetect#basic-usage. diff --git a/tests/test_api.py b/tests/test_api.py index d0d786a0..0a16b937 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -24,7 +24,7 @@ import pytest -from inspire_dojson.api import marcxml2record, record2marcxml, cds_marcxml2record +from inspire_dojson.api import cds_marcxml2record, marcxml2record, record2marcxml from inspire_dojson.errors import NotSupportedError diff --git a/tests/test_cds.py b/tests/test_cds.py index 1bfe07b8..eacd8759 100644 --- a/tests/test_cds.py +++ b/tests/test_cds.py @@ -23,11 +23,11 @@ from __future__ import absolute_import, division, print_function from dojson.contrib.marc21.utils import create_record +from inspire_schemas.api import load_schema, validate from inspire_dojson.cds import cds2hep_marc from inspire_dojson.hep import hep from inspire_dojson.utils import create_record_from_dict -from inspire_schemas.api import load_schema, validate def test_external_system_identifiers_from_001(): diff --git a/tests/test_common.py b/tests/test_common.py index dd44a888..fe31d826 100644 --- a/tests/test_common.py +++ b/tests/test_common.py @@ -23,11 +23,11 @@ from __future__ import absolute_import, division, print_function from dojson.contrib.marc21.utils import create_record +from inspire_schemas.api import load_schema, validate from inspire_dojson.conferences import conferences from inspire_dojson.hep import hep, hep2marc from inspire_dojson.hepnames import hepnames, hepnames2marc -from inspire_schemas.api import load_schema, validate def test_acquisition_source_from_541__a_c(): diff --git a/tests/test_conferences.py b/tests/test_conferences.py index e1e040c8..0c38247a 100644 --- a/tests/test_conferences.py +++ b/tests/test_conferences.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function from dojson.contrib.marc21.utils import create_record +from inspire_schemas.api import load_schema, validate from inspire_dojson.conferences import conferences -from inspire_schemas.api import load_schema, validate def test_addresses_from_034__d_f_and_111__c(): diff --git a/tests/test_data.py b/tests/test_data.py index 057ff10d..1d156c7a 100644 --- a/tests/test_data.py +++ b/tests/test_data.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function from dojson.contrib.marc21.utils import create_record +from inspire_schemas.api import load_schema, validate from inspire_dojson.data import data -from inspire_schemas.api import load_schema, validate def test_dois_from_0247_2_a(): diff --git a/tests/test_experiments.py b/tests/test_experiments.py index 91c04aeb..f819f951 100644 --- a/tests/test_experiments.py +++ b/tests/test_experiments.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function from dojson.contrib.marc21.utils import create_record +from inspire_schemas.api import load_schema, validate from inspire_dojson.experiments import experiments -from inspire_schemas.api import load_schema, validate def test_dates_from_046__q_s_and_046__r(): diff --git a/tests/test_experiments_model.py b/tests/test_experiments_model.py index 08251b67..488655a8 100644 --- a/tests/test_experiments_model.py +++ b/tests/test_experiments_model.py @@ -22,8 +22,8 @@ from __future__ import absolute_import, division, print_function -from inspire_dojson.model import FilterOverdo from inspire_dojson.experiments.model import add_project_type +from inspire_dojson.model import FilterOverdo def test_add_project_type(): diff --git a/tests/test_hep_bd0xx.py b/tests/test_hep_bd0xx.py index 618258ac..d639c145 100644 --- a/tests/test_hep_bd0xx.py +++ b/tests/test_hep_bd0xx.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function from dojson.contrib.marc21.utils import create_record +from inspire_schemas.api import load_schema, validate from inspire_dojson.hep import hep, hep2marc -from inspire_schemas.api import load_schema, validate def test_isbns_from_020__a(): diff --git a/tests/test_hep_bd1xx.py b/tests/test_hep_bd1xx.py index b011d445..59908ffa 100644 --- a/tests/test_hep_bd1xx.py +++ b/tests/test_hep_bd1xx.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function from dojson.contrib.marc21.utils import create_record +from inspire_schemas.api import load_schema, validate from inspire_dojson.hep import hep, hep2marc -from inspire_schemas.api import load_schema, validate def test_authors_from_100__a_i_u_x_y(): diff --git a/tests/test_hep_bd2xx.py b/tests/test_hep_bd2xx.py index 9e59ca04..63c26a60 100644 --- a/tests/test_hep_bd2xx.py +++ b/tests/test_hep_bd2xx.py @@ -22,10 +22,11 @@ from __future__ import absolute_import, division, print_function +import pytest from dojson.contrib.marc21.utils import create_record +from inspire_schemas.api import load_schema, validate from inspire_dojson.hep import hep, hep2marc -from inspire_schemas.api import load_schema, validate def test_rpp_from_210__a(): @@ -175,8 +176,8 @@ def test_titles_from_245__a_b(): assert expected == result['245'] - -def test_title_translations_from_242__a(stable_langdetect): +@pytest.mark.usefixtures(name='_stable_langdetect') +def test_title_translations_from_242__a(): schema = load_schema('hep') subschema = schema['properties']['title_translations'] @@ -206,8 +207,8 @@ def test_title_translations_from_242__a(stable_langdetect): assert expected == result['242'] - -def test_title_translations_from_242__a_b(stable_langdetect): +@pytest.mark.usefixtures(name='_stable_langdetect') +def test_title_translations_from_242__a_b(): schema = load_schema('hep') subschema = schema['properties']['title_translations'] diff --git a/tests/test_hep_bd3xx.py b/tests/test_hep_bd3xx.py index ba726240..d8166bba 100644 --- a/tests/test_hep_bd3xx.py +++ b/tests/test_hep_bd3xx.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function from dojson.contrib.marc21.utils import create_record +from inspire_schemas.api import load_schema, validate from inspire_dojson.hep import hep, hep2marc -from inspire_schemas.api import load_schema, validate def test_number_of_pages_from_300__a(): diff --git a/tests/test_hep_bd4xx.py b/tests/test_hep_bd4xx.py index 99b7c48f..18794ae2 100644 --- a/tests/test_hep_bd4xx.py +++ b/tests/test_hep_bd4xx.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function from dojson.contrib.marc21.utils import create_record +from inspire_schemas.api import load_schema, validate from inspire_dojson.hep import hep, hep2marc -from inspire_schemas.api import load_schema, validate def test_book_series_from_490__a(): diff --git a/tests/test_hep_bd5xx.py b/tests/test_hep_bd5xx.py index 7f650628..39701ef0 100644 --- a/tests/test_hep_bd5xx.py +++ b/tests/test_hep_bd5xx.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function from dojson.contrib.marc21.utils import create_record +from inspire_schemas.api import load_schema, validate from inspire_dojson.hep import hep, hep2marc -from inspire_schemas.api import load_schema, validate def test_public_notes_from_500__a_9(): @@ -325,7 +325,7 @@ def test_thesis_info_defense_date_from_500__a_incomplete_human_date(): result = hep.do(create_record(snippet)) assert validate(result['thesis_info'], subschema) is None - expected == result['thesis_info'] + assert expected == result['thesis_info'] expected = [ {'a': 'Presented on 1992-12'}, diff --git a/tests/test_hep_bd6xx.py b/tests/test_hep_bd6xx.py index f1f49ea5..2feb690c 100644 --- a/tests/test_hep_bd6xx.py +++ b/tests/test_hep_bd6xx.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function from dojson.contrib.marc21.utils import create_record +from inspire_schemas.api import load_schema, validate from inspire_dojson.hep import hep, hep2marc -from inspire_schemas.api import load_schema, validate def test_keywords_from_084__a_2(): diff --git a/tests/test_hep_bd7xx.py b/tests/test_hep_bd7xx.py index 8b320598..ad86169b 100644 --- a/tests/test_hep_bd7xx.py +++ b/tests/test_hep_bd7xx.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function from dojson.contrib.marc21.utils import create_record +from inspire_schemas.api import load_schema, validate from inspire_dojson.hep import hep, hep2marc -from inspire_schemas.api import load_schema, validate def test_collaborations_from_710__g(): diff --git a/tests/test_hep_bd9xx.py b/tests/test_hep_bd9xx.py index 6e652574..746d5398 100644 --- a/tests/test_hep_bd9xx.py +++ b/tests/test_hep_bd9xx.py @@ -23,6 +23,7 @@ from __future__ import absolute_import, division, print_function from dojson.contrib.marc21.utils import create_record +from inspire_schemas.api import load_schema, validate from inspire_dojson.hep import hep, hep2marc from inspire_dojson.hep.rules.bd9xx import ( @@ -31,7 +32,6 @@ DOCUMENT_TYPE_MAP, DOCUMENT_TYPE_REVERSE_MAP, ) -from inspire_schemas.api import load_schema, validate def test_collections_map_contains_all_valid_collections(): diff --git a/tests/test_hep_bdFFT.py b/tests/test_hep_bdFFT.py index 40c6bb12..a11239a7 100644 --- a/tests/test_hep_bdFFT.py +++ b/tests/test_hep_bdFFT.py @@ -23,26 +23,24 @@ from __future__ import absolute_import, division, print_function import pytest - from dojson.contrib.marc21.utils import create_record - from flask import current_app +from inspire_schemas.api import load_schema, validate from mock import patch from inspire_dojson.hep import hep, hep2marc -from inspire_schemas.api import load_schema, validate -@pytest.fixture -def legacy_afs_service_config(): +@pytest.fixture() +def _legacy_afs_service_config(): config = { 'LABS_AFS_HTTP_SERVICE': 'http://legacy-afs-web' } with patch.dict(current_app.config, config): yield - -def test_documents_from_FFT(legacy_afs_service_config): +@pytest.mark.usefixtures("_legacy_afs_service_config") +def test_documents_from_FFT(): schema = load_schema('hep') subschema = schema['properties']['documents'] @@ -72,8 +70,8 @@ def test_documents_from_FFT(legacy_afs_service_config): assert expected == result['documents'] assert 'figures' not in result - -def test_documents_from_FFT_special_cases_arxiv_properly(legacy_afs_service_config): +@pytest.mark.usefixtures("_legacy_afs_service_config") +def test_documents_from_FFT_special_cases_arxiv_properly(): schema = load_schema('hep') subschema = schema['properties']['documents'] @@ -105,8 +103,8 @@ def test_documents_from_FFT_special_cases_arxiv_properly(legacy_afs_service_conf assert expected == result['documents'] assert 'figures' not in result - -def test_documents_are_unique_from_FFT(legacy_afs_service_config): +@pytest.mark.usefixtures("_legacy_afs_service_config") +def test_documents_are_unique_from_FFT(): schema = load_schema('hep') subschema = schema['properties']['documents'] @@ -153,8 +151,8 @@ def test_documents_are_unique_from_FFT(legacy_afs_service_config): assert expected == result['documents'] assert 'figures' not in result - -def test_figures_from_FFT(legacy_afs_service_config): +@pytest.mark.usefixtures("_legacy_afs_service_config") +def test_figures_from_FFT(): schema = load_schema('hep') subschema = schema['properties']['figures'] @@ -186,8 +184,8 @@ def test_figures_from_FFT(legacy_afs_service_config): assert expected == result['figures'] assert 'documents' not in result - -def test_figures_order_from_FFT(legacy_afs_service_config): +@pytest.mark.usefixtures("_legacy_afs_service_config") +def test_figures_order_from_FFT(): schema = load_schema('hep') subschema = schema['properties']['figures'] @@ -364,8 +362,8 @@ def test_documents_to_FFT(): assert expected == result['FFT'] - -def test_documents_to_FFT_converts_afs_urls_to_path(legacy_afs_service_config): +@pytest.mark.usefixtures("_legacy_afs_service_config") +def test_documents_to_FFT_converts_afs_urls_to_path(): schema = load_schema('hep') subschema = schema['properties']['documents'] @@ -563,8 +561,8 @@ def test_figures_to_FFT(): assert expected == result['FFT'] - -def test_figures_to_FFT_converts_afs_urls_to_paths(legacy_afs_service_config): +@pytest.mark.usefixtures("_legacy_afs_service_config") +def test_figures_to_FFT_converts_afs_urls_to_paths(): schema = load_schema('hep') subschema = schema['properties']['figures'] @@ -627,8 +625,8 @@ def test_figures_to_FFT_uses_filename(): assert expected == result['FFT'] - -def test_figures_from_FFT_generates_valid_uri(legacy_afs_service_config): +@pytest.mark.usefixtures("_legacy_afs_service_config") +def test_figures_from_FFT_generates_valid_uri(): schema = load_schema('hep') subschema = schema['properties']['figures'] @@ -672,8 +670,8 @@ def test_figures_from_FFT_generates_valid_uri(legacy_afs_service_config): assert expected == result['FFT'] - -def test_figures_and_documents_from_FFT_without_d_subfield(legacy_afs_service_config): +@pytest.mark.usefixtures("_legacy_afs_service_config") +def test_figures_and_documents_from_FFT_without_d_subfield(): schema = load_schema('hep') figures_subschema = schema['properties']['figures'] documents_subschema = schema['properties']['documents'] @@ -728,8 +726,8 @@ def test_figures_and_documents_from_FFT_without_d_subfield(legacy_afs_service_co assert expected_figures == result['figures'] assert expected_documents == result['documents'] - -def test_figures_from_FFT_with_composite_file_extension(legacy_afs_service_config): +@pytest.mark.usefixtures("_legacy_afs_service_config") +def test_figures_from_FFT_with_composite_file_extension(): schema = load_schema('hep') subschema = schema['properties']['figures'] diff --git a/tests/test_hep_model.py b/tests/test_hep_model.py index 00cdeb54..df0e81cf 100644 --- a/tests/test_hep_model.py +++ b/tests/test_hep_model.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function from dojson.contrib.marc21.utils import create_record +from inspire_schemas.api import load_schema, validate from inspire_dojson.hep import hep -from inspire_schemas.api import load_schema, validate def test_ensure_curated(): diff --git a/tests/test_hepnames.py b/tests/test_hepnames.py index 3bc68b47..7aa076da 100644 --- a/tests/test_hepnames.py +++ b/tests/test_hepnames.py @@ -23,12 +23,10 @@ from __future__ import absolute_import, division, print_function import pytest - from dojson.contrib.marc21.utils import create_record - -from inspire_dojson.hepnames import hepnames2marc, hepnames from inspire_schemas.api import load_schema, validate +from inspire_dojson.hepnames import hepnames, hepnames2marc EXPERIMENTS_DATA = [ [ @@ -237,7 +235,7 @@ @pytest.mark.parametrize( - 'test_name,xml_snippet,expected_json,expected_marc', + ('test_name', 'xml_snippet', 'expected_json', 'expected_marc'), EXPERIMENTS_DATA, ids=[test_data[0] for test_data in EXPERIMENTS_DATA], ) diff --git a/tests/test_institutions.py b/tests/test_institutions.py index 7ed3a511..7dac11bf 100644 --- a/tests/test_institutions.py +++ b/tests/test_institutions.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function from dojson.contrib.marc21.utils import create_record +from inspire_schemas.api import load_schema, validate from inspire_dojson.institutions import institutions -from inspire_schemas.api import load_schema, validate def test_addresses_from_034__d_f_and_371__double_a_b_d_g(): diff --git a/tests/test_journals.py b/tests/test_journals.py index f19eb6f3..a4ca246b 100644 --- a/tests/test_journals.py +++ b/tests/test_journals.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function from dojson.contrib.marc21.utils import create_record +from inspire_schemas.api import load_schema, validate from inspire_dojson.journals import journals -from inspire_schemas.api import load_schema, validate def test_issns_from_022__a(): diff --git a/tests/test_model.py b/tests/test_model.py index f3533b51..929346ba 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -24,8 +24,8 @@ import pytest -from inspire_dojson.model import FilterOverdo, add_schema from inspire_dojson import DoJsonError, marcxml2record, record2marcxml +from inspire_dojson.model import FilterOverdo, add_schema def test_filteroverdo_works_without_filters(): diff --git a/tests/test_utils.py b/tests/test_utils.py index ff91cba3..c8372815 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -23,7 +23,6 @@ from __future__ import absolute_import, division, print_function import pytest - from flask import current_app from mock import patch @@ -31,13 +30,13 @@ absolute_url, afs_url, afs_url_to_path, - normalize_rank, + dedupe_all_lists, force_single_element, get_recid_from_ref, get_record_ref, - dedupe_all_lists, - strip_empty_values, normalize_date_aggressively, + normalize_rank, + strip_empty_values, ) @@ -404,7 +403,7 @@ def test_normalize_date_aggressively_strips_wrong_month(): def test_normalize_date_aggressively_raises_on_wrong_format(): - with pytest.raises(ValueError): + with pytest.raises(ValueError, match='Unknown string format: 2014=12'): normalize_date_aggressively('2014=12-01') diff --git a/tests/test_utils_geo.py b/tests/test_utils_geo.py index e51dd413..24d497d1 100644 --- a/tests/test_utils_geo.py +++ b/tests/test_utils_geo.py @@ -28,7 +28,6 @@ parse_institution_address, ) - # TODO: test match_country_code