Skip to content

Commit cef2bce

Browse files
committed
Refactor _EnumFormatter
1 parent d395689 commit cef2bce

File tree

1 file changed

+65
-39
lines changed

1 file changed

+65
-39
lines changed

tests/test_extensions/test_ext_autodoc.py

+65-39
Original file line numberDiff line numberDiff line change
@@ -1555,15 +1555,41 @@ def entry(
15551555
qualname = f'{self.name}.{entry_name}'
15561556
return self._node(role, qualname, doc, args=args, indent=indent, **rst_options)
15571557

1558-
def brief(self, doc: str, *, indent: int = 0, **options: Any) -> list[str]:
1559-
"""Generate the brief part of the class being documented."""
1558+
def preamble_lookup(
1559+
self, doc: str, *, indent: int = 0, **options: Any
1560+
) -> list[str]:
1561+
assert (
1562+
doc
1563+
), f'enumeration class {self.target!r} should have an explicit docstring'
1564+
1565+
args = self._preamble_args()
1566+
return self._preamble(doc=doc, args=args, indent=indent, **options)
1567+
1568+
def preamble_constructor(
1569+
self, doc: str, *, indent: int = 0, **options: Any
1570+
) -> list[str]:
15601571
assert (
15611572
doc
15621573
), f'enumeration class {self.target!r} should have an explicit docstring'
15631574

1564-
args = '(value)'
1575+
args = self._preamble_args()
1576+
return self._preamble(doc=doc, args=args, indent=indent, **options)
1577+
1578+
def _preamble(
1579+
self, *, doc: str, args: str, indent: int = 0, **options: Any
1580+
) -> list[str]:
1581+
"""Generate the preamble of the class being documented."""
15651582
return self._node('class', self.name, doc, args=args, indent=indent, **options)
15661583

1584+
@staticmethod
1585+
def _preamble_args():
1586+
"""EnumType.__call__() is a dual-purpose method:
1587+
1588+
* Look an enum member (valid only if the enum has members)
1589+
* Create a new enum class (functional API)
1590+
"""
1591+
return '(value)'
1592+
15671593
def method(
15681594
self,
15691595
name: str,
@@ -1595,7 +1621,7 @@ def test_enum_class(app, autodoc_enum_options):
15951621

15961622
actual = do_autodoc(app, 'class', fmt.target, options)
15971623
assert list(actual) == [
1598-
*fmt.brief('this is enum class'),
1624+
*fmt.preamble_lookup('this is enum class'),
15991625
*fmt.method(
16001626
'say_goodbye', 'a classmethod says good-bye to you.', 'classmethod'
16011627
),
@@ -1611,7 +1637,7 @@ def test_enum_class(app, autodoc_enum_options):
16111637
# redefined by the user in one of the bases.
16121638
actual = do_autodoc(app, 'class', fmt.target, options | {'inherited-members': None})
16131639
assert list(actual) == [
1614-
*fmt.brief('this is enum class'),
1640+
*fmt.preamble_lookup('this is enum class'),
16151641
*fmt.method(
16161642
'say_goodbye', 'a classmethod says good-bye to you.', 'classmethod'
16171643
),
@@ -1633,7 +1659,7 @@ def test_enum_class_with_data_type(app, autodoc_enum_options):
16331659

16341660
actual = do_autodoc(app, 'class', fmt.target, autodoc_enum_options)
16351661
assert list(actual) == [
1636-
*fmt.brief('this is enum class'),
1662+
*fmt.preamble_lookup('this is enum class'),
16371663
*fmt.method('say_goodbye', 'docstring', 'classmethod'),
16381664
*fmt.method('say_hello', 'docstring'),
16391665
*fmt.member('x', 'x', ''),
@@ -1642,7 +1668,7 @@ def test_enum_class_with_data_type(app, autodoc_enum_options):
16421668
options = autodoc_enum_options | {'inherited-members': None}
16431669
actual = do_autodoc(app, 'class', fmt.target, options)
16441670
assert list(actual) == [
1645-
*fmt.brief('this is enum class'),
1671+
*fmt.preamble_lookup('this is enum class'),
16461672
*fmt.entry('dtype', 'docstring', role='property'),
16471673
*fmt.method('isupper', 'inherited'),
16481674
*fmt.method('say_goodbye', 'docstring', 'classmethod'),
@@ -1657,7 +1683,7 @@ def test_enum_class_with_mixin_type(app, autodoc_enum_options):
16571683

16581684
actual = do_autodoc(app, 'class', fmt.target, autodoc_enum_options)
16591685
assert list(actual) == [
1660-
*fmt.brief('this is enum class'),
1686+
*fmt.preamble_lookup('this is enum class'),
16611687
*fmt.method('say_goodbye', 'docstring', 'classmethod'),
16621688
*fmt.method('say_hello', 'docstring'),
16631689
*fmt.member('x', 'X', ''),
@@ -1666,7 +1692,7 @@ def test_enum_class_with_mixin_type(app, autodoc_enum_options):
16661692
options = autodoc_enum_options | {'inherited-members': None}
16671693
actual = do_autodoc(app, 'class', fmt.target, options)
16681694
assert list(actual) == [
1669-
*fmt.brief('this is enum class'),
1695+
*fmt.preamble_lookup('this is enum class'),
16701696
*fmt.method('say_goodbye', 'docstring', 'classmethod'),
16711697
*fmt.method('say_hello', 'docstring'),
16721698
*fmt.entry('value', 'uppercased', role='property'),
@@ -1680,14 +1706,14 @@ def test_enum_class_with_mixin_type_and_inheritence(app, autodoc_enum_options):
16801706

16811707
actual = do_autodoc(app, 'class', fmt.target, autodoc_enum_options)
16821708
assert list(actual) == [
1683-
*fmt.brief('this is enum class'),
1709+
*fmt.preamble_lookup('this is enum class'),
16841710
*fmt.member('x', 'X', ''),
16851711
]
16861712

16871713
options = autodoc_enum_options | {'inherited-members': None}
16881714
actual = do_autodoc(app, 'class', fmt.target, options)
16891715
assert list(actual) == [
1690-
*fmt.brief('this is enum class'),
1716+
*fmt.preamble_lookup('this is enum class'),
16911717
*fmt.method('say_goodbye', 'inherited', 'classmethod'),
16921718
*fmt.method('say_hello', 'inherited'),
16931719
*fmt.entry('value', 'uppercased', role='property'),
@@ -1701,7 +1727,7 @@ def test_enum_class_with_mixin_enum_type(app, autodoc_enum_options):
17011727

17021728
actual = do_autodoc(app, 'class', fmt.target, autodoc_enum_options)
17031729
assert list(actual) == [
1704-
*fmt.brief('this is enum class'),
1730+
*fmt.preamble_lookup('this is enum class'),
17051731
# override() is overridden at the class level so it should be rendered
17061732
*fmt.method('override', 'overridden'),
17071733
# say_goodbye() and say_hello() are not rendered since they are inherited
@@ -1711,7 +1737,7 @@ def test_enum_class_with_mixin_enum_type(app, autodoc_enum_options):
17111737
options = autodoc_enum_options | {'inherited-members': None}
17121738
actual = do_autodoc(app, 'class', fmt.target, options)
17131739
assert list(actual) == [
1714-
*fmt.brief('this is enum class'),
1740+
*fmt.preamble_lookup('this is enum class'),
17151741
*fmt.method('override', 'overridden'),
17161742
*fmt.method('say_goodbye', 'inherited', 'classmethod'),
17171743
*fmt.method('say_hello', 'inherited'),
@@ -1725,7 +1751,7 @@ def test_enum_class_with_mixin_and_data_type(app, autodoc_enum_options):
17251751

17261752
actual = do_autodoc(app, 'class', fmt.target, autodoc_enum_options)
17271753
assert list(actual) == [
1728-
*fmt.brief('this is enum class'),
1754+
*fmt.preamble_lookup('this is enum class'),
17291755
*fmt.method('isupper', 'overridden'),
17301756
*fmt.method('say_goodbye', 'overridden', 'classmethod'),
17311757
*fmt.method('say_hello', 'overridden'),
@@ -1736,7 +1762,7 @@ def test_enum_class_with_mixin_and_data_type(app, autodoc_enum_options):
17361762
options = autodoc_enum_options | {'special-members': '__str__'}
17371763
actual = do_autodoc(app, 'class', fmt.target, options)
17381764
assert list(actual) == [
1739-
*fmt.brief('this is enum class'),
1765+
*fmt.preamble_lookup('this is enum class'),
17401766
*fmt.method('__str__', 'overridden'),
17411767
*fmt.method('isupper', 'overridden'),
17421768
*fmt.method('say_goodbye', 'overridden', 'classmethod'),
@@ -1747,7 +1773,7 @@ def test_enum_class_with_mixin_and_data_type(app, autodoc_enum_options):
17471773
options = autodoc_enum_options | {'inherited-members': None}
17481774
actual = do_autodoc(app, 'class', fmt.target, options)
17491775
assert list(actual) == [
1750-
*fmt.brief('this is enum class'),
1776+
*fmt.preamble_lookup('this is enum class'),
17511777
*fmt.entry('dtype', 'docstring', role='property'),
17521778
*fmt.method('isupper', 'overridden'),
17531779
*fmt.method('say_goodbye', 'overridden', 'classmethod'),
@@ -1763,7 +1789,7 @@ def test_enum_with_parent_enum(app, autodoc_enum_options):
17631789

17641790
actual = do_autodoc(app, 'class', fmt.target, autodoc_enum_options)
17651791
assert list(actual) == [
1766-
*fmt.brief('this is enum class'),
1792+
*fmt.preamble_lookup('this is enum class'),
17671793
*fmt.method('isupper', 'overridden'),
17681794
*fmt.member('x', 'X', ''),
17691795
]
@@ -1772,7 +1798,7 @@ def test_enum_with_parent_enum(app, autodoc_enum_options):
17721798
options = autodoc_enum_options | {'special-members': '__str__'}
17731799
actual = do_autodoc(app, 'class', fmt.target, options)
17741800
assert list(actual) == [
1775-
*fmt.brief('this is enum class'),
1801+
*fmt.preamble_lookup('this is enum class'),
17761802
*fmt.method('__str__', 'overridden'),
17771803
*fmt.method('isupper', 'overridden'),
17781804
*fmt.member('x', 'X', ''),
@@ -1781,7 +1807,7 @@ def test_enum_with_parent_enum(app, autodoc_enum_options):
17811807
options = autodoc_enum_options | {'inherited-members': None}
17821808
actual = do_autodoc(app, 'class', fmt.target, options)
17831809
assert list(actual) == [
1784-
*fmt.brief('this is enum class'),
1810+
*fmt.preamble_lookup('this is enum class'),
17851811
*fmt.entry('dtype', 'docstring', role='property'),
17861812
*fmt.method('isupper', 'overridden'),
17871813
*fmt.method('override', 'inherited'),
@@ -1798,28 +1824,28 @@ def test_enum_sunder_method(app, autodoc_enum_options):
17981824

17991825
fmt = _EnumFormatter('EnumSunderMissingInNonEnumMixin')
18001826
actual = do_autodoc(app, 'class', fmt.target, autodoc_enum_options)
1801-
assert list(actual) == [*fmt.brief('this is enum class')]
1827+
assert list(actual) == [*fmt.preamble_constructor('this is enum class')]
18021828
actual = do_autodoc(app, 'class', fmt.target, autodoc_enum_options | PRIVATE)
1803-
assert list(actual) == [*fmt.brief('this is enum class')]
1829+
assert list(actual) == [*fmt.preamble_constructor('this is enum class')]
18041830

18051831
fmt = _EnumFormatter('EnumSunderMissingInEnumMixin')
18061832
actual = do_autodoc(app, 'class', fmt.target, autodoc_enum_options)
1807-
assert list(actual) == [*fmt.brief('this is enum class')]
1833+
assert list(actual) == [*fmt.preamble_constructor('this is enum class')]
18081834
actual = do_autodoc(app, 'class', fmt.target, autodoc_enum_options | PRIVATE)
1809-
assert list(actual) == [*fmt.brief('this is enum class')]
1835+
assert list(actual) == [*fmt.preamble_constructor('this is enum class')]
18101836

18111837
fmt = _EnumFormatter('EnumSunderMissingInDataType')
18121838
actual = do_autodoc(app, 'class', fmt.target, autodoc_enum_options)
1813-
assert list(actual) == [*fmt.brief('this is enum class')]
1839+
assert list(actual) == [*fmt.preamble_constructor('this is enum class')]
18141840
actual = do_autodoc(app, 'class', fmt.target, autodoc_enum_options | PRIVATE)
1815-
assert list(actual) == [*fmt.brief('this is enum class')]
1841+
assert list(actual) == [*fmt.preamble_constructor('this is enum class')]
18161842

18171843
fmt = _EnumFormatter('EnumSunderMissingInClass')
18181844
actual = do_autodoc(app, 'class', fmt.target, autodoc_enum_options)
1819-
assert list(actual) == [*fmt.brief('this is enum class')]
1845+
assert list(actual) == [*fmt.preamble_constructor('this is enum class')]
18201846
actual = do_autodoc(app, 'class', fmt.target, autodoc_enum_options | PRIVATE)
18211847
assert list(actual) == [
1822-
*fmt.brief('this is enum class'),
1848+
*fmt.preamble_constructor('this is enum class'),
18231849
*fmt.method('_missing_', 'docstring', 'classmethod', args='(value)'),
18241850
]
18251851

@@ -1834,21 +1860,21 @@ def test_enum_inherited_sunder_method(app, autodoc_enum_options):
18341860
fmt = _EnumFormatter('EnumSunderMissingInNonEnumMixin')
18351861
actual = do_autodoc(app, 'class', fmt.target, options)
18361862
assert list(actual) == [
1837-
*fmt.brief('this is enum class'),
1863+
*fmt.preamble_constructor('this is enum class'),
18381864
*fmt.method('_missing_', 'inherited', 'classmethod', args='(value)'),
18391865
]
18401866

18411867
fmt = _EnumFormatter('EnumSunderMissingInEnumMixin')
18421868
actual = do_autodoc(app, 'class', fmt.target, options)
18431869
assert list(actual) == [
1844-
*fmt.brief('this is enum class'),
1870+
*fmt.preamble_constructor('this is enum class'),
18451871
*fmt.method('_missing_', 'inherited', 'classmethod', args='(value)'),
18461872
]
18471873

18481874
fmt = _EnumFormatter('EnumSunderMissingInDataType')
18491875
actual = do_autodoc(app, 'class', fmt.target, options)
18501876
assert list(actual) == [
1851-
*fmt.brief('this is enum class'),
1877+
*fmt.preamble_constructor('this is enum class'),
18521878
*fmt.method('_missing_', 'inherited', 'classmethod', args='(value)'),
18531879
*fmt.entry('dtype', 'docstring', role='property'),
18541880
*fmt.method('isupper', 'inherited'),
@@ -1857,7 +1883,7 @@ def test_enum_inherited_sunder_method(app, autodoc_enum_options):
18571883
fmt = _EnumFormatter('EnumSunderMissingInClass')
18581884
actual = do_autodoc(app, 'class', fmt.target, options)
18591885
assert list(actual) == [
1860-
*fmt.brief('this is enum class'),
1886+
*fmt.preamble_constructor('this is enum class'),
18611887
*fmt.method('_missing_', 'docstring', 'classmethod', args='(value)'),
18621888
]
18631889

@@ -1866,20 +1892,20 @@ def test_enum_inherited_sunder_method(app, autodoc_enum_options):
18661892
def test_enum_custom_name_property(app, autodoc_enum_options):
18671893
fmt = _EnumFormatter('EnumNamePropertyInNonEnumMixin')
18681894
actual = do_autodoc(app, 'class', fmt.target, autodoc_enum_options)
1869-
assert list(actual) == [*fmt.brief('this is enum class')]
1895+
assert list(actual) == [*fmt.preamble_constructor('this is enum class')]
18701896

18711897
fmt = _EnumFormatter('EnumNamePropertyInEnumMixin')
18721898
actual = do_autodoc(app, 'class', fmt.target, autodoc_enum_options)
1873-
assert list(actual) == [*fmt.brief('this is enum class')]
1899+
assert list(actual) == [*fmt.preamble_constructor('this is enum class')]
18741900

18751901
fmt = _EnumFormatter('EnumNamePropertyInDataType')
18761902
actual = do_autodoc(app, 'class', fmt.target, autodoc_enum_options)
1877-
assert list(actual) == [*fmt.brief('this is enum class')]
1903+
assert list(actual) == [*fmt.preamble_constructor('this is enum class')]
18781904

18791905
fmt = _EnumFormatter('EnumNamePropertyInClass')
18801906
actual = do_autodoc(app, 'class', fmt.target, autodoc_enum_options)
18811907
assert list(actual) == [
1882-
*fmt.brief('this is enum class'),
1908+
*fmt.preamble_constructor('this is enum class'),
18831909
*fmt.entry('name', 'docstring', role='property'),
18841910
]
18851911

@@ -1891,21 +1917,21 @@ def test_enum_inherited_custom_name_property(app, autodoc_enum_options):
18911917
fmt = _EnumFormatter('EnumNamePropertyInNonEnumMixin')
18921918
actual = do_autodoc(app, 'class', fmt.target, options)
18931919
assert list(actual) == [
1894-
*fmt.brief('this is enum class'),
1920+
*fmt.preamble_constructor('this is enum class'),
18951921
*fmt.entry('name', 'inherited', role='property'),
18961922
]
18971923

18981924
fmt = _EnumFormatter('EnumNamePropertyInEnumMixin')
18991925
actual = do_autodoc(app, 'class', fmt.target, options)
19001926
assert list(actual) == [
1901-
*fmt.brief('this is enum class'),
1927+
*fmt.preamble_constructor('this is enum class'),
19021928
*fmt.entry('name', 'inherited', role='property'),
19031929
]
19041930

19051931
fmt = _EnumFormatter('EnumNamePropertyInDataType')
19061932
actual = do_autodoc(app, 'class', fmt.target, options)
19071933
assert list(actual) == [
1908-
*fmt.brief('this is enum class'),
1934+
*fmt.preamble_constructor('this is enum class'),
19091935
*fmt.entry('dtype', 'docstring', role='property'),
19101936
*fmt.method('isupper', 'inherited'),
19111937
*fmt.entry('name', 'inherited', role='property'),
@@ -1914,7 +1940,7 @@ def test_enum_inherited_custom_name_property(app, autodoc_enum_options):
19141940
fmt = _EnumFormatter('EnumNamePropertyInClass')
19151941
actual = do_autodoc(app, 'class', fmt.target, options)
19161942
assert list(actual) == [
1917-
*fmt.brief('this is enum class'),
1943+
*fmt.preamble_constructor('this is enum class'),
19181944
*fmt.entry('name', 'docstring', role='property'),
19191945
]
19201946

0 commit comments

Comments
 (0)