Skip to content

Commit e90e4f2

Browse files
authored
Merge pull request #38 from bretttolbert/parser-refactoring
Cont. Refactoring
2 parents 52211a6 + e828458 commit e90e4f2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+600
-339
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
- 1.11.7 [TBR]
44
- Cont. refactoring
5+
- Separating XML parsing code from logical types
56

67
- 1.11.6 [26 October 2025]
78
- Fixed Voseo conjugation for irregular verb `ser` for the subjuntivo (no vowel accents)

tests/test_inflectors/test_inflector_ca.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
from verbecc.src.defs.types.lang_code import LangCodeISO639_1 as Lang
55
from verbecc.src.defs.types.gender import Gender
66
from verbecc.src.defs.types.person import Person
7+
from verbecc.src.defs.types.data.tense_template import TenseTemplate
78
from verbecc.src.conjugator.conjugator import Conjugator
8-
from verbecc.src.parsers.tense_template import TenseTemplate
9+
from verbecc.src.parsers.tense_template_parser import TenseTemplateParser
910
from verbecc.src.defs.types.alternates_behavior import AlternatesBehavior
1011

1112

@@ -2985,7 +2986,7 @@ def test_inflector_ca_conjugate_simple_mood_tense(cg):
29852986
</present>""",
29862987
parser=None,
29872988
)
2988-
tense_template = TenseTemplate(Lang.ca, mood, tense_elem)
2989+
tense_template = TenseTemplateParser(Lang.ca, mood).parse(tense_elem)
29892990
out = cg._conjugate_simple_mood_tense(verb_stem, mood, tense, tense_template)
29902991
assert len(out) == 6
29912992
assert out == [

tests/test_inflectors/test_inflector_es.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
)
1313
from verbecc.src.defs.types.lang.es.voseo_options import VoseoOptions
1414
from verbecc.src.conjugator.conjugator import Conjugator
15-
from verbecc.src.parsers.tense_template import TenseTemplate
15+
from verbecc.src.parsers.tense_template_parser import TenseTemplateParser
1616

17-
cg = Conjugator(lang="es")
17+
cg = Conjugator(lang=Lang.es)
1818

1919

2020
def test_all_verbs_have_templates():
@@ -635,7 +635,7 @@ def test_inflector_es_conjugate_simple_mood_tense():
635635
</presente>""",
636636
parser=None,
637637
)
638-
tense_template = TenseTemplate(Lang.es, mood, tense_elem)
638+
tense_template = TenseTemplateParser(Lang.es, mood).parse(tense_elem)
639639
out = cg._conjugate_simple_mood_tense(verb_stem, mood, tense, tense_template)
640640
assert len(out) == 6
641641
assert out == [

tests/test_inflectors/test_inflector_fr.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from verbecc.src.defs.types.gender import Gender
77
from verbecc.src.defs.types.person import Person
88
from verbecc.src.conjugator.conjugator import Conjugator, AlternatesBehavior
9-
from verbecc.src.parsers.tense_template import TenseTemplate
9+
from verbecc.src.parsers.tense_template_parser import TenseTemplateParser
1010
from verbecc.src.defs.types.exceptions import ConjugatorError
1111
from verbecc.src.defs.types.conjugation import MoodsConjugation
1212

@@ -68,7 +68,7 @@ def test_inflector_frverb_can_be_reflexive(cg, infinitive, expected_result):
6868
def test_inflector_fr_impersonal_verbs(cg):
6969
impersonal_verbs = [
7070
v.infinitive
71-
for v in cg._inflector._verb_parser.verbs
71+
for v in cg._inflector._verbs
7272
if cg._inflector._is_impersonal_verb(v.infinitive)
7373
]
7474
assert set(impersonal_verbs) == set(
@@ -111,7 +111,7 @@ def test_inflector_fr_conjugate_simple_mood_tense(cg):
111111
</présent>""",
112112
parser=None,
113113
)
114-
tense_template = TenseTemplate(Lang.fr, mood, tense_elem)
114+
tense_template = TenseTemplateParser(Lang.fr, mood).parse(tense_elem)
115115
out = cg._conjugate_simple_mood_tense(verb_stem, mood, tense, tense_template)
116116
assert len(out) == 6
117117
assert out == [

tests/test_inflectors/test_inflector_ro.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import pytest
22

3+
from verbecc.src.conjugator.conjugator import Conjugator
34
from verbecc.src.defs.types.gender import Gender
45
from verbecc.src.defs.types.person import Person
5-
from verbecc.src.conjugator.conjugator import Conjugator
66
from verbecc.src.defs.types.alternates_behavior import AlternatesBehavior
77

88

tests/test_mlconjug.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
@pytest.fixture(scope="module")
99
def verb_template_pairs():
1010
inf = InflectorFr()
11-
yield [(v.infinitive, v.template) for v in inf._verb_parser.verbs]
11+
yield [(v.infinitive, v.template) for v in inf._verbs]
1212

1313

1414
def test_extract_verb_features():

tests/test_parser/test_conjugation_template.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import pytest
44

5-
from verbecc.src.parsers.conjugation_template import ConjugationTemplate
5+
from verbecc.src.parsers.conjugation_template_parser import ConjugationTemplateParser
66
from verbecc.src.defs.types.exceptions import ConjugationTemplateError
77
from verbecc.src.defs.types.lang_code import LangCodeISO639_1 as Lang
88

@@ -11,11 +11,11 @@
1111
def test_template_invalid_tag_template(mock_template_elem):
1212
mock_template_elem.tag.return_value = "not-template"
1313
with pytest.raises(ConjugationTemplateError):
14-
template = ConjugationTemplate(Lang.fr, mock_template_elem)
14+
template = ConjugationTemplateParser(Lang.fr).parse(mock_template_elem)
1515

1616

1717
@patch("lxml.etree._Element")
1818
def test_template_invalid_tag_name(mock_template_elem):
1919
mock_template_elem.get.return_value = "not-name"
2020
with pytest.raises(ConjugationTemplateError):
21-
template = ConjugationTemplate(Lang.ca, mock_template_elem)
21+
template = ConjugationTemplateParser(Lang.ca).parse(mock_template_elem)

tests/test_parser/test_tense_and_person.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from lxml import etree
22

3-
from verbecc.src.parsers.tense_template import TenseTemplate
3+
from verbecc.src.parsers.tense_template_parser import TenseTemplateParser
4+
from verbecc.src.defs.types.data.tense_template import TenseTemplate
45
from verbecc.src.defs.types.lang_code import LangCodeISO639_1 as Lang
56
from verbecc.src.defs.types.tense import Tense
67

@@ -17,9 +18,9 @@ def test_tense_and_person():
1718
</présent>"""
1819
tense_elem: etree._Element = etree.fromstring(tense_elem_str)
1920
tense = Tense.fr.Présent
20-
tense_template = TenseTemplate(Lang.fr, mood, tense_elem)
21+
tense_template = TenseTemplateParser(Lang.fr, mood).parse(tense_elem)
2122
assert tense_template.mood == mood
22-
assert tense_template.name == str(tense.value)
23+
assert tense_template.tense == tense
2324
assert tense_template.person_endings[0].get_ending() == "ie"
2425
assert tense_template.person_endings[0].get_alternate_ending_if_available() == "ye"
2526
assert tense_template.person_endings[0].get_person() == "1s"
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from unittest.mock import patch
2+
3+
import pytest
4+
5+
from verbecc.src.parsers.verb_parser import VerbParser
6+
from verbecc.src.defs.types.exceptions import VerbsParserError
7+
from verbecc.src.defs.types.lang_code import LangCodeISO639_1 as Lang
8+
9+
10+
@patch("lxml.etree._Element")
11+
def test_verb_invalid_xml(mock_v_elem):
12+
v = VerbParser()
13+
mock_v_elem.tag.return_value = "not-v"
14+
with pytest.raises(VerbsParserError):
15+
v.parse(mock_v_elem)
Lines changed: 4 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,8 @@
1-
from unittest.mock import patch
2-
3-
import pytest
4-
51
from verbecc.src.parsers.verbs_parser import VerbsParser
6-
from verbecc.src.parsers.verb import Verb
7-
from verbecc.src.defs.types.exceptions import VerbsParserError
2+
from verbecc.src.defs.types.lang_code import LangCodeISO639_1 as Lang
83

94

105
def test_verbs_parser():
11-
vp = VerbsParser()
12-
assert len(vp.verbs) >= 7000
13-
14-
15-
def test_verb():
16-
vp = VerbsParser()
17-
verb = vp.find_verb_by_infinitive("manger")
18-
assert verb.infinitive == "manger"
19-
assert verb.template == "man:ger"
20-
assert verb.translation_en == "eat"
21-
22-
23-
def test_verb_two():
24-
vp = VerbsParser()
25-
verb = vp.find_verb_by_infinitive("abattre")
26-
assert verb.infinitive == "abattre"
27-
assert verb.template == "bat:tre"
28-
assert verb.translation_en == "tear down"
29-
30-
31-
@patch("lxml.etree._Element")
32-
def test_verb_invalid_xml(mock_v_elem):
33-
mock_v_elem.tag.return_value = "not-v"
34-
with pytest.raises(VerbsParserError):
35-
v = Verb(mock_v_elem)
36-
37-
38-
@pytest.mark.parametrize(
39-
"query,expected_matches",
40-
[
41-
("mang", ["mangeotter", "manger"]),
42-
("Mang", ["mangeotter", "manger"]),
43-
],
44-
)
45-
def test_get_verbs_that_start_with(query, expected_matches):
46-
vp = VerbsParser()
47-
matches = vp.get_verbs_that_start_with(query)
48-
assert matches == expected_matches
6+
vp = VerbsParser(Lang.fr)
7+
verbs = vp.parse()
8+
assert len(verbs) >= 7000

0 commit comments

Comments
 (0)