From 2ebd81a0a66771956c114736be466e2a76978314 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 27 Jun 2026 10:39:47 +0000 Subject: [PATCH 1/5] Add sphinx-pyrepl-web interactive REPLs to Overview docs Co-authored-by: chrizzftd --- docs/source/Overview.rst | 441 ++++++++++++------------ docs/source/_static/pyrepl_bootstrap.py | 5 + docs/source/conf.py | 1 + setup.cfg | 2 +- 4 files changed, 219 insertions(+), 230 deletions(-) create mode 100644 docs/source/_static/pyrepl_bootstrap.py diff --git a/docs/source/Overview.rst b/docs/source/Overview.rst index b7009d1..36fcd83 100644 --- a/docs/source/Overview.rst +++ b/docs/source/Overview.rst @@ -20,237 +20,220 @@ Usage Inherit from the class to use and assign a class attribute `config` as a mapping of {field_name: regex_pattern} to use. - Name:: - - >>> from naming import Name - >>> class BasicName(Name): - ... config = dict(base=r'\w+') - ... - >>> n = BasicName() - >>> n.get() # no name has been set on the object, convention is solved with {missing} fields - '{base}' - >>> n.values - {} - >>> n.name = 'hello_world' - >>> n - Name("hello_world") - >>> str(n) # cast to string - 'hello_world' - >>> n.values - {'base': 'hello_world'} - >>> # modify name and get values from field names - >>> n.base = 'through_field_name' - >>> n.values - {'base': 'through_field_name'} - >>> n.base - 'through_field_name' - - Pipe:: - - >>> from naming import Pipe - >>> class BasicPipe(Pipe): - ... config = dict(base=r'\w+') - ... - >>> p = BasicPipe() - >>> p.get() - '{base}.{pipe}' - >>> p.get(version=10) - '{base}.10' - >>> p.get(output='data') - '{base}.data.{version}' - >>> p.get(output='cache', version=7, index=24) - '{base}.cache.7.24' - >>> p = BasicPipe('my_wip_data.1') - >>> p.version - '1' - >>> p.values - {'base': 'my_wip_data', 'pipe': '.1', 'version': '1'} - >>> p.get(output='exchange') # returns a new string - 'my_wip_data.exchange.1' - >>> p.name - 'my_wip_data.1' - >>> p.output = 'exchange' # mutates the object - >>> p.name - 'my_wip_data.exchange.1' - >>> p.index = 101 - >>> p.version = 7 - >>> p.name - 'my_wip_data.exchange.7.101' - >>> p.values - {'base': 'my_wip_data', 'pipe': '.exchange.7.101', 'output': 'exchange', 'version': '7', 'index': '101'} - - File:: - - >>> from naming import File - >>> class BasicFile(File): - ... config = dict(base=r'\w+') - ... - >>> f = BasicFile() - >>> f.get() - '{basse}.{suffix}' - >>> f.get(suffix='png') - '{base}.png' - >>> f = BasicFile('hello.world') - >>> f.values - {'base': 'hello', 'suffix': 'world'} - >>> f.suffix - 'world' - >>> f.suffix = 'abc' - >>> f.name - 'hello.abc' - >>> f.path - WindowsPath('hello.abc') - - PipeFile:: - - >>> from naming import PipeFile - >>> class BasicPipeFile(PipeFile): - ... config = dict(base=r'\w+') - ... - >>> p = BasicPipeFile('wipfile.7.ext') - >>> p.values - {'base': 'wipfile', 'pipe': '.7', 'version': '7', 'suffix': 'ext'} - >>> [p.get(index=x, output='render') for x in range(10)] - ['wipfile.render.7.0.ext', - 'wipfile.render.7.1.ext', - 'wipfile.render.7.2.ext', - 'wipfile.render.7.3.ext', - 'wipfile.render.7.4.ext', - 'wipfile.render.7.5.ext', - 'wipfile.render.7.6.ext', - 'wipfile.render.7.7.ext', - 'wipfile.render.7.8.ext', - 'wipfile.render.7.9.ext'] + Name + + .. py-repl:: + :packages: naming + :repl-title: Name + :no-banner: + + >>> from naming import Name + >>> class BasicName(Name): + ... config = dict(base=r'\w+') + ... + >>> n = BasicName() + >>> n.get() # no name has been set on the object, convention is solved with {missing} fields + >>> n.values + >>> n.name = 'hello_world' + >>> n + >>> str(n) # cast to string + >>> n.values + >>> # modify name and get values from field names + >>> n.base = 'through_field_name' + >>> n.values + >>> n.base + + Pipe + + .. py-repl:: + :packages: naming + :repl-title: Pipe + :no-banner: + + >>> from naming import Pipe + >>> class BasicPipe(Pipe): + ... config = dict(base=r'\w+') + ... + >>> p = BasicPipe() + >>> p.get() + >>> p.get(version=10) + >>> p.get(output='data') + >>> p.get(output='cache', version=7, index=24) + >>> p = BasicPipe('my_wip_data.1') + >>> p.version + >>> p.values + >>> p.get(output='exchange') # returns a new string + >>> p.name + >>> p.output = 'exchange' # mutates the object + >>> p.name + >>> p.index = 101 + >>> p.version = 7 + >>> p.name + >>> p.values + + File + + .. py-repl:: + :packages: naming + :repl-title: File + :no-banner: + + >>> from naming import File + >>> class BasicFile(File): + ... config = dict(base=r'\w+') + ... + >>> f = BasicFile() + >>> f.get() + >>> f.get(suffix='png') + >>> f = BasicFile('hello.world') + >>> f.values + >>> f.suffix + >>> f.suffix = 'abc' + >>> f.name + >>> f.path + + PipeFile + + .. py-repl:: + :packages: naming + :repl-title: PipeFile + :no-banner: + + >>> from naming import PipeFile + >>> class BasicPipeFile(PipeFile): + ... config = dict(base=r'\w+') + ... + >>> p = BasicPipeFile('wipfile.7.ext') + >>> p.values + >>> [p.get(index=x, output='render') for x in range(10)] .. topic:: Extending Names The **config**, **drop** and **join** attributes are merged on subclasses. - Inheriting from an existing name:: - - >>> class ProjectFile(BasicPipeFile): - ... config = dict(year='[0-9]{4}', - ... user='[a-z]+', - ... another='(constant)', - ... last='[a-zA-Z0-9]+') - ... - >>> pf = ProjectFile('project_data_name_2017_christianl_constant_iamlast.data.17.abc', sep='_') - >>> pf.values - {'base': 'project_data_name', - 'year': '2017', - 'user': 'christianl', - 'another': 'constant', - 'last': 'iamlast', - 'pipe': '.data.17', - 'output': 'data', - 'version': '17', - 'suffix': 'abc'} - >>> pf.nice_name # no pipe & suffix fields - 'project_data_name_2017_christianl_constant_iamlast' - >>> pf.year - '2017' - >>> pf.year = 'nondigits' # mutating with invalid fields raises a ValueError - Traceback (most recent call last): - ... - ValueError: Can't set field 'year' with invalid value 'nondigits' on 'ProjectFile("project_data_name_2017_christianl_constant_iamlast.data.17.abc")'. A valid field value should match pattern: '[0-9]{4}' - >>> pf.year = 1907 - >>> pf - ProjectFile("project_data_name_1907_christianl_constant_iamlast.data.17.abc") - >>> pf.suffix - 'abc' - >>> pf.sep = ' ' # you can set the separator to a different set of characters - >>> pf.name - 'project_data_name 1907 christianl constant iamlast.data.17.abc' - - Dropping fields from bases:: - - >>> class Dropper(BasicPipeFile): - ... config = dict(without=r'[a-zA-Z0-9]+', basename=r'[a-zA-Z0-9]+') - ... drop=('base',) - ... - >>> d = Dropper() - >>> d.get() - '{without}_{basename}.{pipe}.{suffix}' - >>> # New subclasses will drop the 'base' field as well - >>> Subdropper = type('Dropper', (Dropper,), dict(config=dict(subdrop='[\w]'))) - >>> s = Subdropper() - >>> s.get() - '{without}_{basename}_{subdrop}.{pipe}.{suffix}' - - Setting compound fields:: - - >>> # splitting the 'base' field into multiple joined fields - >>> class Compound(BasicPipeFile): - ... config=dict(first=r'\d+', second=r'[a-zA-Z]+') - ... join=dict(base=('first', 'second')) - ... - >>> c = Compound() - >>> c.get() # we see the original field 'base' - '{base}.{pipe}.{suffix}' - >>> c.get(first=50, second='abc') # providing each field to join will work - '50abc.{pipe}.{suffix}' - >>> c.name = c.get(base='101dalmatians', version=1, suffix='png') # providing the key field will also work - >>> c.nice_name - '101dalmatians' - >>> c.get(first=200) - '200dalmatians.1.png' - >>> class CompoundByDash(Compound): - ... join_sep = '-' # you can specify the string to join compounds - ... - >>> c = CompoundByDash('101-dalmatians.1.png') - >>> c.get(first=300) - '300-dalmatians.1.png' - - Defining path rules for File subclasses:: - - >>> from naming import File - >>> class FilePath(File): - ... config = dict(base=r'\w+', extrafield='[a-z0-9]+') - ... def get_path_pattern_list(self): - ... # As an example we are returning the pattern list from the name object (base, extrafield) - ... return super().get_pattern_list() - ... - >>> fp = FilePath() - >>> fp.get() - '{base} {extrafield}.{suffix}' - >>> # path attribute will vary depending on the OS - >>> fp.path - WindowsPath('{base}/{extrafield}/{base} {extrafield}.{suffix}') - - Using properties as fields while solving names:: - - >>> from naming import PipeFile - >>> class PropertyField(PipeFile): - ... config = dict(base=r'\w+', extrafield='[a-z0-9]+') - ... - ... @property - ... def nameproperty(self): - ... return 'staticvalue' - ... - ... @property - ... def pathproperty(self): - ... return 'path_field' - ... - ... def get_path_pattern_list(self): - ... result = super().get_pattern_list() - ... result.append('pathproperty') - ... return result - ... - ... def get_pattern_list(self): - ... result = super().get_pattern_list() - ... result.append('nameproperty') - ... return result - ... - >>> pf = PropertyField() - >>> pf.get() - '{base} {extrafield} staticvalue.{pipe}.{suffix}' - >>> pf.name = 'simple props staticvalue.1.abc' - >>> pf.values - {'base': 'simple', - 'extrafield': 'props', - 'nameproperty': 'staticvalue', - 'pipe': '.1', - 'version': '1', - 'suffix': 'abc'} - >>> pf.path - WindowsPath('simple/props/path_field/simple props staticvalue.1.abc') + Inheriting from an existing name + + .. py-repl:: + :packages: naming + :src: _static/pyrepl_bootstrap.py + :repl-title: Extending names + :no-banner: + + >>> class ProjectFile(BasicPipeFile): + ... config = dict(year='[0-9]{4}', + ... user='[a-z]+', + ... another='(constant)', + ... last='[a-zA-Z0-9]+') + ... + >>> pf = ProjectFile('project_data_name_2017_christianl_constant_iamlast.data.17.abc', sep='_') + >>> pf.values + >>> pf.nice_name # no pipe & suffix fields + >>> pf.year + >>> pf.year = 'nondigits' # mutating with invalid fields raises a ValueError + >>> pf.year = 1907 + >>> pf + >>> pf.suffix + >>> pf.sep = ' ' # you can set the separator to a different set of characters + >>> pf.name + + Dropping fields from bases + + .. py-repl:: + :packages: naming + :src: _static/pyrepl_bootstrap.py + :repl-title: Dropping fields + :no-banner: + + >>> class Dropper(BasicPipeFile): + ... config = dict(without=r'[a-zA-Z0-9]+', basename=r'[a-zA-Z0-9]+') + ... drop=('base',) + ... + >>> d = Dropper() + >>> d.get() + >>> # New subclasses will drop the 'base' field as well + >>> Subdropper = type('Dropper', (Dropper,), dict(config=dict(subdrop='[\w]'))) + >>> s = Subdropper() + >>> s.get() + + Setting compound fields + + .. py-repl:: + :packages: naming + :src: _static/pyrepl_bootstrap.py + :repl-title: Compound fields + :no-banner: + + >>> # splitting the 'base' field into multiple joined fields + >>> class Compound(BasicPipeFile): + ... config=dict(first=r'\d+', second=r'[a-zA-Z]+') + ... join=dict(base=('first', 'second')) + ... + >>> c = Compound() + >>> c.get() # we see the original field 'base' + >>> c.get(first=50, second='abc') # providing each field to join will work + >>> c.name = c.get(base='101dalmatians', version=1, suffix='png') # providing the key field will also work + >>> c.nice_name + >>> c.get(first=200) + >>> class CompoundByDash(Compound): + ... join_sep = '-' # you can specify the string to join compounds + ... + >>> c = CompoundByDash('101-dalmatians.1.png') + >>> c.get(first=300) + + Defining path rules for File subclasses + + In the browser REPL, paths appear as ``PosixPath``. + + .. py-repl:: + :packages: naming + :repl-title: Path rules + :no-banner: + + >>> from naming import File + >>> class FilePath(File): + ... config = dict(base=r'\w+', extrafield='[a-z0-9]+') + ... def get_path_pattern_list(self): + ... # As an example we are returning the pattern list from the name object (base, extrafield) + ... return super().get_pattern_list() + ... + >>> fp = FilePath() + >>> fp.get() + >>> # path attribute will vary depending on the OS + >>> fp.path + + Using properties as fields while solving names + + In the browser REPL, paths appear as ``PosixPath``. + + .. py-repl:: + :packages: naming + :repl-title: Property fields + :no-banner: + + >>> from naming import PipeFile + >>> class PropertyField(PipeFile): + ... config = dict(base=r'\w+', extrafield='[a-z0-9]+') + ... + ... @property + ... def nameproperty(self): + ... return 'staticvalue' + ... + ... @property + ... def pathproperty(self): + ... return 'path_field' + ... + ... def get_path_pattern_list(self): + ... result = super().get_pattern_list() + ... result.append('pathproperty') + ... return result + ... + ... def get_pattern_list(self): + ... result = super().get_pattern_list() + ... result.append('nameproperty') + ... return result + ... + >>> pf = PropertyField() + >>> pf.get() + >>> pf.name = 'simple props staticvalue.1.abc' + >>> pf.values + >>> pf.path diff --git a/docs/source/_static/pyrepl_bootstrap.py b/docs/source/_static/pyrepl_bootstrap.py new file mode 100644 index 0000000..5205d31 --- /dev/null +++ b/docs/source/_static/pyrepl_bootstrap.py @@ -0,0 +1,5 @@ +from naming import PipeFile + + +class BasicPipeFile(PipeFile): + config = dict(base=r'\w+') diff --git a/docs/source/conf.py b/docs/source/conf.py index 06e18a8..eed849f 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -44,6 +44,7 @@ 'sphinx_copybutton', 'sphinx_togglebutton', 'sphinx_toggleprompt', + 'sphinx_pyrepl_web', ] # Offset to play well with copybutton diff --git a/setup.cfg b/setup.cfg index d99230b..685440f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -24,4 +24,4 @@ packages = find: # docs dependencies install: # conda install --channel conda-forge pygraphviz # python -m pip install sphinx myst-parser sphinx-toggleprompt sphinx-copybutton sphinx-togglebutton sphinx-hoverxref sphinx_autodoc_typehints sphinx_rtd_theme -docs = sphinx; myst-parser; sphinx-toggleprompt; sphinx-copybutton; sphinx-togglebutton; sphinx-hoverxref; sphinx_autodoc_typehints; sphinx_rtd_theme +docs = sphinx; myst-parser; sphinx-toggleprompt; sphinx-copybutton; sphinx-togglebutton; sphinx-hoverxref; sphinx_autodoc_typehints; sphinx_rtd_theme; sphinx-pyrepl-web From d16f06ff2eec199d10ff744a1dc1ca0a4542ff82 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 27 Jun 2026 10:40:57 +0000 Subject: [PATCH 2/5] Fix PropertyField REPL script by removing blank doctest continuations Co-authored-by: chrizzftd --- docs/source/Overview.rst | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/source/Overview.rst b/docs/source/Overview.rst index 36fcd83..f8b8133 100644 --- a/docs/source/Overview.rst +++ b/docs/source/Overview.rst @@ -213,25 +213,20 @@ Usage >>> from naming import PipeFile >>> class PropertyField(PipeFile): ... config = dict(base=r'\w+', extrafield='[a-z0-9]+') - ... ... @property ... def nameproperty(self): ... return 'staticvalue' - ... ... @property ... def pathproperty(self): ... return 'path_field' - ... ... def get_path_pattern_list(self): ... result = super().get_pattern_list() ... result.append('pathproperty') ... return result - ... ... def get_pattern_list(self): ... result = super().get_pattern_list() ... result.append('nameproperty') ... return result - ... >>> pf = PropertyField() >>> pf.get() >>> pf.name = 'simple props staticvalue.1.abc' From c94a16891da374c2c7748bbf88ec3c68df8ceedb Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 27 Jun 2026 10:52:50 +0000 Subject: [PATCH 3/5] Fix REPL syntax errors by removing bare doctest ... terminators Standalone '...' lines are valid doctest block endings but become literal Ellipsis statements in py-repl replay scripts, causing SyntaxError during interactive replay. Co-authored-by: chrizzftd --- docs/source/Overview.rst | 9 --------- 1 file changed, 9 deletions(-) diff --git a/docs/source/Overview.rst b/docs/source/Overview.rst index f8b8133..34368b3 100644 --- a/docs/source/Overview.rst +++ b/docs/source/Overview.rst @@ -30,7 +30,6 @@ Usage >>> from naming import Name >>> class BasicName(Name): ... config = dict(base=r'\w+') - ... >>> n = BasicName() >>> n.get() # no name has been set on the object, convention is solved with {missing} fields >>> n.values @@ -53,7 +52,6 @@ Usage >>> from naming import Pipe >>> class BasicPipe(Pipe): ... config = dict(base=r'\w+') - ... >>> p = BasicPipe() >>> p.get() >>> p.get(version=10) @@ -81,7 +79,6 @@ Usage >>> from naming import File >>> class BasicFile(File): ... config = dict(base=r'\w+') - ... >>> f = BasicFile() >>> f.get() >>> f.get(suffix='png') @@ -102,7 +99,6 @@ Usage >>> from naming import PipeFile >>> class BasicPipeFile(PipeFile): ... config = dict(base=r'\w+') - ... >>> p = BasicPipeFile('wipfile.7.ext') >>> p.values >>> [p.get(index=x, output='render') for x in range(10)] @@ -124,7 +120,6 @@ Usage ... user='[a-z]+', ... another='(constant)', ... last='[a-zA-Z0-9]+') - ... >>> pf = ProjectFile('project_data_name_2017_christianl_constant_iamlast.data.17.abc', sep='_') >>> pf.values >>> pf.nice_name # no pipe & suffix fields @@ -147,7 +142,6 @@ Usage >>> class Dropper(BasicPipeFile): ... config = dict(without=r'[a-zA-Z0-9]+', basename=r'[a-zA-Z0-9]+') ... drop=('base',) - ... >>> d = Dropper() >>> d.get() >>> # New subclasses will drop the 'base' field as well @@ -167,7 +161,6 @@ Usage >>> class Compound(BasicPipeFile): ... config=dict(first=r'\d+', second=r'[a-zA-Z]+') ... join=dict(base=('first', 'second')) - ... >>> c = Compound() >>> c.get() # we see the original field 'base' >>> c.get(first=50, second='abc') # providing each field to join will work @@ -176,7 +169,6 @@ Usage >>> c.get(first=200) >>> class CompoundByDash(Compound): ... join_sep = '-' # you can specify the string to join compounds - ... >>> c = CompoundByDash('101-dalmatians.1.png') >>> c.get(first=300) @@ -195,7 +187,6 @@ Usage ... def get_path_pattern_list(self): ... # As an example we are returning the pattern list from the name object (base, extrafield) ... return super().get_pattern_list() - ... >>> fp = FilePath() >>> fp.get() >>> # path attribute will vary depending on the OS From 1efa7a1ed2e8cffee49e9895f4fd0f61d6fa7c0f Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 27 Jun 2026 11:31:02 +0000 Subject: [PATCH 4/5] Require sphinx-pyrepl-web>=0.1.1 and restore doctest ... terminators The 0.1.1 release fixes bare doctest block terminators in replay scripts, so the manual workaround of omitting standalone '...' lines is no longer needed. Co-authored-by: chrizzftd --- docs/source/Overview.rst | 9 +++++++++ setup.cfg | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/docs/source/Overview.rst b/docs/source/Overview.rst index 34368b3..f8b8133 100644 --- a/docs/source/Overview.rst +++ b/docs/source/Overview.rst @@ -30,6 +30,7 @@ Usage >>> from naming import Name >>> class BasicName(Name): ... config = dict(base=r'\w+') + ... >>> n = BasicName() >>> n.get() # no name has been set on the object, convention is solved with {missing} fields >>> n.values @@ -52,6 +53,7 @@ Usage >>> from naming import Pipe >>> class BasicPipe(Pipe): ... config = dict(base=r'\w+') + ... >>> p = BasicPipe() >>> p.get() >>> p.get(version=10) @@ -79,6 +81,7 @@ Usage >>> from naming import File >>> class BasicFile(File): ... config = dict(base=r'\w+') + ... >>> f = BasicFile() >>> f.get() >>> f.get(suffix='png') @@ -99,6 +102,7 @@ Usage >>> from naming import PipeFile >>> class BasicPipeFile(PipeFile): ... config = dict(base=r'\w+') + ... >>> p = BasicPipeFile('wipfile.7.ext') >>> p.values >>> [p.get(index=x, output='render') for x in range(10)] @@ -120,6 +124,7 @@ Usage ... user='[a-z]+', ... another='(constant)', ... last='[a-zA-Z0-9]+') + ... >>> pf = ProjectFile('project_data_name_2017_christianl_constant_iamlast.data.17.abc', sep='_') >>> pf.values >>> pf.nice_name # no pipe & suffix fields @@ -142,6 +147,7 @@ Usage >>> class Dropper(BasicPipeFile): ... config = dict(without=r'[a-zA-Z0-9]+', basename=r'[a-zA-Z0-9]+') ... drop=('base',) + ... >>> d = Dropper() >>> d.get() >>> # New subclasses will drop the 'base' field as well @@ -161,6 +167,7 @@ Usage >>> class Compound(BasicPipeFile): ... config=dict(first=r'\d+', second=r'[a-zA-Z]+') ... join=dict(base=('first', 'second')) + ... >>> c = Compound() >>> c.get() # we see the original field 'base' >>> c.get(first=50, second='abc') # providing each field to join will work @@ -169,6 +176,7 @@ Usage >>> c.get(first=200) >>> class CompoundByDash(Compound): ... join_sep = '-' # you can specify the string to join compounds + ... >>> c = CompoundByDash('101-dalmatians.1.png') >>> c.get(first=300) @@ -187,6 +195,7 @@ Usage ... def get_path_pattern_list(self): ... # As an example we are returning the pattern list from the name object (base, extrafield) ... return super().get_pattern_list() + ... >>> fp = FilePath() >>> fp.get() >>> # path attribute will vary depending on the OS diff --git a/setup.cfg b/setup.cfg index dc32d2e..30b352f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -23,5 +23,5 @@ packages = find: [options.extras_require] # docs dependencies install: # conda install --channel conda-forge pygraphviz -# python -m pip install sphinx myst-parser sphinx-toggleprompt sphinx-copybutton sphinx-togglebutton sphinx_autodoc_typehints sphinx_rtd_theme sphinx-pyrepl-web -docs = sphinx; myst-parser; sphinx-toggleprompt; sphinx-copybutton; sphinx-togglebutton; sphinx_autodoc_typehints; sphinx_rtd_theme; sphinx-pyrepl-web +# python -m pip install sphinx myst-parser sphinx-toggleprompt sphinx-copybutton sphinx-togglebutton sphinx_autodoc_typehints sphinx_rtd_theme "sphinx-pyrepl-web>=0.1.1" +docs = sphinx; myst-parser; sphinx-toggleprompt; sphinx-copybutton; sphinx-togglebutton; sphinx_autodoc_typehints; sphinx_rtd_theme; sphinx-pyrepl-web>=0.1.1 From e283235e118e8c8959acce371ba4996773f924a6 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 27 Jun 2026 11:51:25 +0000 Subject: [PATCH 5/5] Add missing doctest terminator to PropertyField REPL block Co-authored-by: chrizzftd --- docs/source/Overview.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/source/Overview.rst b/docs/source/Overview.rst index f8b8133..471bb5a 100644 --- a/docs/source/Overview.rst +++ b/docs/source/Overview.rst @@ -227,6 +227,7 @@ Usage ... result = super().get_pattern_list() ... result.append('nameproperty') ... return result + ... >>> pf = PropertyField() >>> pf.get() >>> pf.name = 'simple props staticvalue.1.abc'