diff --git a/inspire_schemas/utils.py b/inspire_schemas/utils.py index 5c13a376..8425f381 100644 --- a/inspire_schemas/utils.py +++ b/inspire_schemas/utils.py @@ -64,7 +64,7 @@ r'^/licenses/(?P[-\w]*)(?:/(?P[\.\d]*))?' ) _RE_VOLUME_STARTS_WITH_A_LETTER = re.compile( - r'^(?P[A-Z])(?P\d+)', re.IGNORECASE + r'^(?P[A-Z])(?P\d[\dA-Z]*$)', re.IGNORECASE ) _RE_VOLUME_ENDS_WITH_A_LETTER = re.compile( r'(?P\d+)(?P[A-Z])$', re.IGNORECASE diff --git a/setup.py b/setup.py index 794df8c8..43c02235 100644 --- a/setup.py +++ b/setup.py @@ -180,6 +180,8 @@ def do_setup(): 'pyyaml', 'rfc3987', 'six', + # requests requires a urllib3 version of 1.23, we pin it down here to solve dependency problems + 'urllib3==1.23', ], tests_require=tests_require, extras_require=extras_require, diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py index dd7891e2..a9f3c39d 100644 --- a/tests/unit/test_utils.py +++ b/tests/unit/test_utils.py @@ -669,6 +669,33 @@ def test_convert_old_publication_info_to_new_does_not_raise_when_deducing_year_f assert expected == result +def test_convert_old_publication_info_to_new_handles_volumes_with_letters_in_the_middle(): + schema = utils.load_schema('hep') + subschema = schema['properties']['publication_info'] + + publication_info = [ + { + 'journal_record': { + '$ref': 'http://localhost:5000/api/journals/725825', + }, + 'journal_title': 'Eur.Phys.J.', + 'journal_volume': 'A28S1', + }, + ] + assert utils.validate(publication_info, subschema) is None + + expected = [ + { + 'journal_title': 'Eur.Phys.J.A', + 'journal_volume': '28S1', + }, + ] + result = utils.convert_old_publication_info_to_new(publication_info) + + assert utils.validate(result, subschema) is None + assert expected == result + + def test_convert_new_publication_info_to_old(): schema = utils.load_schema('hep') subschema = schema['properties']['publication_info'] @@ -804,6 +831,30 @@ def test_convert_new_publication_info_to_old_handles_year_added_to_volumes(): assert expected == result +def test_convert_new_publication_info_to_old_handles_volumes_with_letters_in_the_middle(): + schema = utils.load_schema('hep') + subschema = schema['properties']['publication_info'] + + publication_info = [ + { + 'journal_title': 'Eur.Phys.J.A', + 'journal_volume': '28S1', + }, + ] + assert utils.validate(publication_info, subschema) is None + + expected = [ + { + 'journal_title': 'Eur.Phys.J.', + 'journal_volume': 'A28S1', + }, + ] + result = utils.convert_new_publication_info_to_old(publication_info) + + assert utils.validate(result, subschema) is None + assert expected == result + + def test_draft_validate(): schema = utils.load_schema('hep')