Skip to content

Commit 58d937a

Browse files
committed
feat(wos): add version 0.0.0 supporting deprecated fields
1 parent 96bbc3b commit 58d937a

File tree

6 files changed

+138
-0
lines changed

6 files changed

+138
-0
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ All notable changes to this project will be documented in this file.
77
- Introduced versioned parser, serializer, and translator dispatchers.
88
- Added upgrade pipeline and CLI command.
99
- Added `deprecated-syntax` linter warning (`LINT_2001`).
10+
- Added Web of Science parser version `0.0.0` with support for field tags later
11+
marked as deprecated.
1012

1113
## Release 0.12.0
1214

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/usr/bin/env python3
2+
"""WoS v0.0.0."""
3+
4+
__author__ = """Gerit Wagner"""
5+
__email__ = "gerit.wagner@hec.ca"

search_query/wos/v_0_0_0/parser.py

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
#!/usr/bin/env python3
2+
"""Versioned Web of Science parser wrappers."""
3+
from __future__ import annotations
4+
5+
import re
6+
import typing
7+
8+
from search_query.wos.linter import WOSQueryListLinter
9+
from search_query.wos.linter import WOSQueryStringLinter
10+
from search_query.wos.parser import WOSListParser
11+
from search_query.wos.parser import WOSParser
12+
from search_query.query import Query
13+
14+
if typing.TYPE_CHECKING: # pragma: no cover
15+
from search_query.registry import Registry
16+
17+
18+
class WOSQueryStringLinter_v0_0_0(WOSQueryStringLinter):
19+
"""Linter for WOS queries supporting deprecated fields."""
20+
21+
VERSION = "0.0.0"
22+
VALID_fieldS_REGEX = re.compile(r"^[A-Za-z]{2,3}=$", re.IGNORECASE)
23+
24+
def check_deprecated_field_tags(self, query: Query) -> None: # pragma: no cover - simple override
25+
"""Allow field tags that were deprecated in later versions."""
26+
27+
return
28+
29+
30+
class WOSParser_v0_0_0(WOSParser):
31+
"""Web of Science parser for version 0.0.0."""
32+
33+
VERSION = "0.0.0"
34+
35+
# pylint: disable=too-many-arguments
36+
def __init__(
37+
self,
38+
query_str: str,
39+
*,
40+
field_general: str = "",
41+
offset: typing.Optional[dict] = None,
42+
original_str: typing.Optional[str] = None,
43+
silent: bool = False,
44+
) -> None:
45+
super().__init__(
46+
query_str,
47+
field_general=field_general,
48+
offset=offset,
49+
original_str=original_str,
50+
silent=silent,
51+
)
52+
self.linter = WOSQueryStringLinter_v0_0_0(
53+
query_str=query_str, original_str=original_str, silent=silent
54+
)
55+
56+
57+
class WOSListParser_v0_0_0(WOSListParser):
58+
"""Web of Science list parser for version 0.0.0."""
59+
60+
VERSION = "0.0.0"
61+
62+
def __init__(self, query_list: str, *, field_general: str = "") -> None:
63+
super().__init__(query_list=query_list, field_general=field_general)
64+
self.parser_class = WOSParser_v0_0_0
65+
self.linter = WOSQueryListLinter(
66+
parser=self,
67+
string_parser_class=WOSParser_v0_0_0,
68+
original_query_str=query_list,
69+
)
70+
71+
72+
def register(registry: Registry, *, platform: str, version: str) -> None:
73+
"""Register these parsers with the ``registry``."""
74+
75+
registry.register_parser_string(platform, version, WOSParser_v0_0_0)
76+
registry.register_parser_list(platform, version, WOSListParser_v0_0_0)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#!/usr/bin/env python3
2+
"""Web of Science serializer for version 0.0.0."""
3+
from __future__ import annotations
4+
5+
import typing
6+
7+
from search_query.wos.serializer import WOSQuerySerializer
8+
9+
if typing.TYPE_CHECKING: # pragma: no cover
10+
from search_query.registry import Registry
11+
12+
13+
# pylint: disable=too-few-public-methods
14+
class WOSSerializer_v0_0_0(WOSQuerySerializer):
15+
"""Web of Science serializer for version 0.0.0."""
16+
17+
VERSION = "0.0.0"
18+
19+
20+
def register(registry: Registry, *, platform: str, version: str) -> None:
21+
"""Register this serializer with the ``registry``."""
22+
23+
registry.register_serializer_string(platform, version, WOSSerializer_v0_0_0)
24+
registry.register_serializer_list(platform, version, WOSSerializer_v0_0_0)
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/usr/bin/env python3
2+
"""Web of Science translator for version 0.0.0."""
3+
from __future__ import annotations
4+
5+
import typing
6+
7+
from search_query.wos.translator import WOSTranslator
8+
9+
if typing.TYPE_CHECKING: # pragma: no cover
10+
from search_query.registry import Registry
11+
12+
13+
class WOSTranslator_v0_0_0(WOSTranslator):
14+
"""Translator for WOS queries."""
15+
16+
VERSION = "0.0.0"
17+
18+
19+
def register(registry: Registry, *, platform: str, version: str) -> None:
20+
"""Register this translator with the ``registry``."""
21+
22+
registry.register_translator(platform, version, WOSTranslator_v0_0_0)
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
"""Tests for WOSParser_v0_0_0"""
2+
3+
from search_query.wos.v_0_0_0.parser import WOSParser_v0_0_0
4+
5+
6+
def test_deprecated_fields_supported() -> None:
7+
parser = WOSParser_v0_0_0("FN=example AND DE=test")
8+
parser.parse()
9+
assert parser.linter.messages == []

0 commit comments

Comments
 (0)