pyparsing 3.2.2__tar.gz → 3.2.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyparsing-3.2.2 → pyparsing-3.2.4}/CHANGES +37 -2
- {pyparsing-3.2.2 → pyparsing-3.2.4}/CONTRIBUTING.md +94 -27
- {pyparsing-3.2.2 → pyparsing-3.2.4}/PKG-INFO +5 -4
- pyparsing-3.2.4/docs/CONTRIBUTING.md +1 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/HowToUsePyparsing.rst +0 -2
- pyparsing-3.2.4/docs/Writing_Doctests.rst +443 -0
- pyparsing-3.2.4/docs/_static/pyparsing.css +52 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/conf.py +77 -11
- {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/index.rst +5 -2
- pyparsing-3.2.4/docs/pyparsing.rst +22 -0
- pyparsing-3.2.4/docs/requirements.txt +3 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/whats_new_in_3_0_0.rst +1 -3
- {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/whats_new_in_3_1.rst +56 -43
- {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/whats_new_in_3_2.rst +1 -3
- {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/whats_new_in_x_x_template.rst.txt +0 -2
- {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/__init__.py +18 -14
- {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/actions.py +106 -62
- {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/common.py +97 -46
- {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/core.py +842 -413
- {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/diagram/__init__.py +29 -15
- {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/exceptions.py +26 -7
- {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/helpers.py +380 -298
- {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/results.py +312 -196
- {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/testing.py +63 -37
- {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/util.py +35 -13
- {pyparsing-3.2.2 → pyparsing-3.2.4}/pyproject.toml +1 -2
- {pyparsing-3.2.2 → pyparsing-3.2.4}/readthedocs.yaml +7 -3
- {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/test_unit.py +164 -11
- pyparsing-3.2.4/tox.ini +26 -0
- pyparsing-3.2.2/docs/modules.rst +0 -7
- pyparsing-3.2.2/docs/pyparsing.rst +0 -7
- pyparsing-3.2.2/tox.ini +0 -21
- {pyparsing-3.2.2 → pyparsing-3.2.4}/.coveragerc +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/.gitignore +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/.pre-commit-config.yaml +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/BUILDING.md +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/CODE_OF_CONDUCT.rst +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/LICENSE +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/README.rst +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/CODE_OF_CONDUCT.rst +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/Makefile +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/_static/pyparsingClassDiagram_1.5.2.jpg +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/_static/pyparsingClassDiagram_3.0.9.jpg +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/_static/sql_railroad.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/make_sphinx_docs.bat +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/pyparsing_class_diagram.puml +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/AcManForm.dfm +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/LAparser.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/README.md +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/Setup.ini +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/SimpleCalc.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/SingleForm.dfm +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/TAP.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/TAP_diagram.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/__init__.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/adventureEngine.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/adventure_game_parser_diagram.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/antlr_grammar.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/antlr_grammar_diagram.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/antlr_grammar_tests.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/apicheck.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/apicheck_diagram.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/bf.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/bf_diagram.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/bigquery_view_parser.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/booleansearchparser.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/btpyparse.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/builtin_parse_action_demo.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/cLibHeader.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/chemical_formulas.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/chemical_formulas.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/commasep.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/complex_chemical_formulas.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/complex_chemical_formulas_diagram.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/configParse.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/cpp_enum_parser.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/cuneiform_python.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/datetime_parse_actions.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/decaf_parser.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/decaf_parser_diagram.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/delta_time.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/delta_time_diagram.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/dfmparse.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/dhcpd_leases_parser.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/dictExample.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/dictExample2.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/directx_x_file_parser.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/directx_x_file_parser.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/ebnf.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/ebnf_diagram.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/ebnf_number_parser_diagram.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/ebnf_number_words.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/ebnftest.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/email_address_parser.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/eval_arith.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/excel_expr.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/fourFn.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/gen_ctypes.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/getNTPserversNew.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/greeting.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/greetingInGreek.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/greetingInKorean.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/groupUsingListAllMatches.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/hola_mundo.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/html_stripper.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/html_table_parser.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/httpServerLogParser.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/idlParse.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/include_preprocessor.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/indentedGrammarExample.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/indented_block_example.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/infix_math_parser.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/inv_regex.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/javascript_grammar.g +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/jsonParser.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/left_recursion.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/lineno_example.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/listAllMatches.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/lox_parser.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/lox_parser_diagram.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/lua_parser.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/lua_parser_diagram.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/lucene_grammar.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/lucene_grammar_diagram.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/macro_expander.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/make_diagram.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/matchPreviousDemo.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/mongodb_query_expression.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/mongodb_query_expression.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/mongodb_query_expression_step_0.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/mozilla.ics +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/mozillaCalendarParser.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/nested.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/nested_markup.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/number_words.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/number_words_diagram.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/numerics.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/oc.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/one_to_ninety_nine.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/parseTabularData.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/parse_python_value.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/parse_python_value.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/parse_results_sum_example.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/partial_gene_match.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/pgn.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/position.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/protobuf_parser.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/pythonGrammarParser.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/railroad_diagram_demo.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/range_check.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/readJson.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/removeLineBreaks.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/roman_numerals.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/roman_numerals_diagram.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/rosettacode.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/rosettacode_diagram.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/scanExamples.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/searchParserAppDemo.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/searchparser.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/select_parser.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/sexpParser.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/shapes.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/simpleArith.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/simpleBool.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/simpleSQL.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/simpleWiki.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/snmp_api.h +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/sql2dot.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/stackish.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/statemachine/documentSignoffDemo.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/statemachine/documentsignoffstate.pystate +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/statemachine/libraryBookDemo.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/statemachine/librarybookstate.pystate +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/statemachine/statemachine.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/statemachine/trafficLightDemo.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/statemachine/trafficlightstate.pystate +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/statemachine/vending_machine.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/statemachine/video_demo.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/statemachine/videostate.pystate +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/tag_emitter.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/tag_metadata.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/tag_metadata_diagram.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/test_bibparse.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/unicode_denormalizer.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/urlExtractor.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/urlExtractorNew.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/verilog_parse.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/withAttribute.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/wordsToNum.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/py.typed +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/tools/__init__.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/tools/cvt_pyparsing_pep8_names.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/unicode.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/README.md +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/__init__.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/diag_embed.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/diag_no_embed.html +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/json_parser_tests.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/karthik.ini +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/mypy-ignore-cases/forward_methods.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/parsefiletest_input_file.txt +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/requirements.txt +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/test_diagram.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/test_examples.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/test_matplotlib_cases.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/test_pep8_converter.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/test_simple_unit.py +0 -0
- {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/test_util.py +0 -0
|
@@ -35,7 +35,7 @@ Required Python versions by pyparsing version
|
|
|
35
35
|
+--------------------------------------------------+-------------------+
|
|
36
36
|
| pyparsing version | Required Python |
|
|
37
37
|
+==================================================+===================+
|
|
38
|
-
| 3.2.0 -
|
|
38
|
+
| 3.2.0 - later | 3.9 or later |
|
|
39
39
|
| 3.0.8 - 3.1.4 | 3.6.8 or later |
|
|
40
40
|
| 3.0.0 - 3.0.7 (these versions are discouraged) | 3.6 or later |
|
|
41
41
|
| 2.4.7 | 2.7 or later |
|
|
@@ -43,6 +43,41 @@ Required Python versions by pyparsing version
|
|
|
43
43
|
+--------------------------------------------------+-------------------+
|
|
44
44
|
|
|
45
45
|
|
|
46
|
+
Version 3.2.4 - September, 2025
|
|
47
|
+
-------------------------------
|
|
48
|
+
- Barring any catastrophic bugs in this release, this will be the last release in
|
|
49
|
+
the 3.2.x line. The next release, 3.3.0, will begin emitting `DeprecationWarnings`
|
|
50
|
+
when the pre-PEP8 methods are used (see header notes above for more information,
|
|
51
|
+
including available automation for converting any existing code using
|
|
52
|
+
pyparsing with the old names).
|
|
53
|
+
|
|
54
|
+
- Fixed bug when using a copy of a `Word` expression (either by using the explicit
|
|
55
|
+
`copy()` method, or attaching a results name), and setting a new expression name,
|
|
56
|
+
a raised `ParseException` still used the original expression name. Also affected
|
|
57
|
+
`Regex` expressions with `as_match` or `as_group_list` = True. Reported by
|
|
58
|
+
Waqas Ilyas, in Issue #612 - good catch!
|
|
59
|
+
|
|
60
|
+
- Fixed type annotation for `replace_with`, to accept `Any` type. Fixes Issue #602,
|
|
61
|
+
reported by esquonk.
|
|
62
|
+
|
|
63
|
+
- Added locking around potential race condition in `ParserElement.reset_cache`, as
|
|
64
|
+
well as other cache-related methods. Fixes Issue #604, reported by CarlosDescalziIM.
|
|
65
|
+
|
|
66
|
+
- Substantial update to docstrings and doc generation in preparation for 3.3.0,
|
|
67
|
+
great effort by FeRD, thanks!
|
|
68
|
+
|
|
69
|
+
- Notable addition by FeRD to convert docstring examples to work with doctest! This
|
|
70
|
+
was long overdue, thanks so much!
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
Version 3.2.3 - March, 2025
|
|
74
|
+
---------------------------
|
|
75
|
+
- Fixed bug released in 3.2.2 in which `nested_expr` could overwrite parse actions
|
|
76
|
+
for defined content, and could truncate list of items within a nested list.
|
|
77
|
+
Fixes Issue #600, reported by hoxbro and luisglft, with helpful diag logs and
|
|
78
|
+
repro code.
|
|
79
|
+
|
|
80
|
+
|
|
46
81
|
Version 3.2.2 - March, 2025
|
|
47
82
|
---------------------------
|
|
48
83
|
- Released `cvt_pyparsing_pep8_names.py` conversion utility to upgrade pyparsing-based
|
|
@@ -248,7 +283,7 @@ Version 3.1.3 - August, 2024
|
|
|
248
283
|
Example:
|
|
249
284
|
|
|
250
285
|
# add tag indicating mood
|
|
251
|
-
end_punc = "." | ("!" + Tag("enthusiastic"))
|
|
286
|
+
end_punc = "." | ("!" + Tag("enthusiastic"))
|
|
252
287
|
greeting = "Hello" + Word(alphas) + end_punc
|
|
253
288
|
|
|
254
289
|
result = greeting.parse_string("Hello World.")
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Contributing to Pyparsing
|
|
2
2
|
|
|
3
3
|
Thank you for your interest in working on pyparsing! Pyparsing has become a popular module for creating simple
|
|
4
4
|
text parsing and data scraping applications. It has been incorporated in several widely-used packages, and is
|
|
@@ -38,41 +38,49 @@ If you have a question on using pyparsing, there are a number of resources avail
|
|
|
38
38
|
|
|
39
39
|
If you have an example you wish to submit, please follow these guidelines.
|
|
40
40
|
|
|
41
|
-
- **License - Submitted example code must be available for distribution with the rest of pyparsing under the MIT
|
|
41
|
+
- **License - Submitted example code must be available for distribution with the rest of pyparsing under the MIT
|
|
42
42
|
open source license.**
|
|
43
43
|
|
|
44
44
|
- Please follow PEP8 name and coding guidelines, and use the black formatter
|
|
45
|
-
to auto-format code.
|
|
45
|
+
to auto-format code.
|
|
46
46
|
|
|
47
47
|
- Examples should import pyparsing and the common namespace classes as:
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
```python
|
|
50
|
+
import pyparsing as pp
|
|
51
|
+
# if necessary
|
|
52
|
+
ppc = pp.pyparsing_common
|
|
53
|
+
ppu = pp.pyparsing_unicode
|
|
54
|
+
```
|
|
53
55
|
|
|
54
|
-
- Submitted examples
|
|
55
|
-
features added after 3.6)
|
|
56
|
+
- Submitted examples _must_ be Python 3.6.8 or later compatible.
|
|
57
|
+
(It is acceptable if examples use Python features added after 3.6)
|
|
56
58
|
|
|
57
59
|
- Where possible use operators to create composite parse expressions:
|
|
58
60
|
|
|
59
|
-
|
|
61
|
+
```python
|
|
62
|
+
expr = expr_a + expr_b | expr_c
|
|
63
|
+
```
|
|
60
64
|
|
|
61
65
|
instead of:
|
|
62
66
|
|
|
63
|
-
|
|
67
|
+
```python
|
|
68
|
+
expr = pp.MatchFirst([pp.And([expr_a, expr_b]), expr_c])
|
|
69
|
+
```
|
|
64
70
|
|
|
65
71
|
Exception: if using a generator to create an expression:
|
|
66
72
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
73
|
+
```python
|
|
74
|
+
import keyword
|
|
75
|
+
python_keywords = keyword.kwlist
|
|
76
|
+
any_keyword = pp.MatchFirst(pp.Keyword(kw)
|
|
77
|
+
for kw in python_keywords))
|
|
78
|
+
```
|
|
71
79
|
|
|
72
|
-
- Learn [Common Pitfalls When Writing Parsers]
|
|
80
|
+
- Learn [Common Pitfalls When Writing Parsers][pitfalls] and
|
|
73
81
|
how to avoid them when developing new examples.
|
|
74
82
|
|
|
75
|
-
- See additional notes under [Some
|
|
83
|
+
- See additional notes under [Some coding points](#some-coding-points).
|
|
76
84
|
|
|
77
85
|
## Submitting changes
|
|
78
86
|
|
|
@@ -88,11 +96,11 @@ intended on prior versions of Python (currently back to Python 3.6.8).
|
|
|
88
96
|
|
|
89
97
|
## Some design points
|
|
90
98
|
|
|
91
|
-
- Minimize additions to the module namespace. Over time, pyparsing's namespace has acquired a
|
|
99
|
+
- Minimize additions to the module namespace. Over time, pyparsing's namespace has acquired a _lot_ of names.
|
|
92
100
|
New features have been encapsulated into namespace classes to try to hold back the name flooding when importing
|
|
93
101
|
pyparsing.
|
|
94
102
|
|
|
95
|
-
- New operator overloads for ParserElement will need to show broad applicability, and should be related to
|
|
103
|
+
- New operator overloads for ParserElement will need to show broad applicability, and should be related to
|
|
96
104
|
parser construction.
|
|
97
105
|
|
|
98
106
|
- Performance tuning should focus on parse time performance. Optimizing parser definition performance is secondary.
|
|
@@ -108,28 +116,87 @@ These coding styles are encouraged whether submitting code for core pyparsing or
|
|
|
108
116
|
name casing. I had just finished several years of Java and Smalltalk development, and camel case seemed to be the
|
|
109
117
|
future trend in coding styles. As of version 3.0.0, pyparsing is moving over to PEP8 naming, while maintaining
|
|
110
118
|
compatibility with existing parser code by defining synonyms using the legacy names. These names will be
|
|
111
|
-
retained until a future release (probably 4.0), to provide a migration path for current pyparsing-dependent
|
|
119
|
+
retained until a future release (probably 4.0), to provide a migration path for current pyparsing-dependent
|
|
112
120
|
applications - DO NOT MODIFY OR REMOVE THESE NAMES.
|
|
113
121
|
See more information at the [PEP8 wiki page](https://github.com/pyparsing/pyparsing/wiki/PEP-8-planning).
|
|
114
122
|
|
|
115
123
|
- No backslashes for line continuations.
|
|
116
|
-
Continuation lines for expressions in ()'s should start with the continuing operator:
|
|
124
|
+
Continuation lines for expressions in `()`'s should start with the continuing operator:
|
|
117
125
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
126
|
+
```python
|
|
127
|
+
really_long_line = (something
|
|
128
|
+
+ some_other_long_thing
|
|
129
|
+
+ even_another_long_thing)
|
|
130
|
+
```
|
|
121
131
|
|
|
122
132
|
- Maximum line length is 120 characters. (Black will override this.)
|
|
123
133
|
|
|
124
134
|
- Changes to core pyparsing must be compatible back to Py3.6 without conditionalizing. Later Py3 features may be
|
|
125
135
|
used in examples by way of illustration.
|
|
126
136
|
|
|
127
|
-
- str.format() statements should use named format arguments (unless this proves to be a slowdown at parse time).
|
|
137
|
+
- `str.format()` statements should use named format arguments (unless this proves to be a slowdown at parse time).
|
|
128
138
|
|
|
129
139
|
- List, tuple, and dict literals should include a trailing comma after the last element, which reduces changeset
|
|
130
140
|
clutter when another element gets added to the end.
|
|
131
141
|
|
|
132
|
-
- New features should be accompanied by updates to unitTests.py and a bullet in the CHANGES file.
|
|
142
|
+
- New features should be accompanied by updates to `unitTests.py` and a bullet in the CHANGES file.
|
|
133
143
|
|
|
134
|
-
- Do not modify pyparsing_archive.py
|
|
144
|
+
- Do not modify `pyparsing_archive.py`. This file is kept as a reference artifact from when pyparsing was distributed
|
|
135
145
|
as a single source file.
|
|
146
|
+
|
|
147
|
+
## Some documentation points
|
|
148
|
+
|
|
149
|
+
- The docstrings in pyparsing (which are generated into the package's
|
|
150
|
+
API documentation by Sphinx) make heavy use of doctests for their
|
|
151
|
+
example code. This allows examples to be tested and verified as
|
|
152
|
+
working, and ensures that any changes to the code which affect
|
|
153
|
+
output are accompanied by corresponding changes in the examples.
|
|
154
|
+
|
|
155
|
+
- The codebase's docstring tests can be verified by running the
|
|
156
|
+
command `make doctest` from the `docs/` directory. The output
|
|
157
|
+
should ideally look something like this:
|
|
158
|
+
|
|
159
|
+
```console
|
|
160
|
+
$ make doctest
|
|
161
|
+
[...documentation build...]
|
|
162
|
+
running tests...
|
|
163
|
+
|
|
164
|
+
Document: pyparsing
|
|
165
|
+
-------------------
|
|
166
|
+
1 item passed all tests:
|
|
167
|
+
204 tests in default
|
|
168
|
+
204 tests in 1 item.
|
|
169
|
+
204 passed.
|
|
170
|
+
Test passed.
|
|
171
|
+
|
|
172
|
+
Document: whats_new_in_3_1
|
|
173
|
+
--------------------------
|
|
174
|
+
1 item passed all tests:
|
|
175
|
+
15 tests in default
|
|
176
|
+
15 tests in 1 item.
|
|
177
|
+
15 passed.
|
|
178
|
+
Test passed.
|
|
179
|
+
|
|
180
|
+
Doctest summary
|
|
181
|
+
===============
|
|
182
|
+
219 tests
|
|
183
|
+
0 failures in tests
|
|
184
|
+
0 failures in setup code
|
|
185
|
+
0 failures in cleanup code
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Any failed tests will be displayed in detail.
|
|
189
|
+
|
|
190
|
+
- Much more information about doctests can be found in the
|
|
191
|
+
[Pyparsing documentation][pyparsing-docs], in the chapter titled
|
|
192
|
+
"Writing doctest examples". Even if you have never worked with them
|
|
193
|
+
before, it should guide you through everything you need to know in
|
|
194
|
+
order to write Pyparsing doctest examples. If you are already familiar
|
|
195
|
+
with doctests and with `sphinx.ext.doctest` in general, you may wish
|
|
196
|
+
to skip over the introductory content and go straight to the section
|
|
197
|
+
on "Doctests in Pyparsing" which covers some issues specific to the
|
|
198
|
+
project.
|
|
199
|
+
|
|
200
|
+
<!-- Named hyperlink targets, used in the preceding text -->
|
|
201
|
+
[pitfalls]: https://github.com/pyparsing/pyparsing/wiki/Common-Pitfalls-When-Writing-Parsers
|
|
202
|
+
[pyparsing-docs]: https://pyparsing-docs.readthedocs.io/en/latest/
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: pyparsing
|
|
3
|
-
Version: 3.2.
|
|
4
|
-
Summary: pyparsing
|
|
3
|
+
Version: 3.2.4
|
|
4
|
+
Summary: pyparsing - Classes and methods to define and execute parsing grammars
|
|
5
5
|
Author-email: Paul McGuire <ptmcg.gm+pyparsing@gmail.com>
|
|
6
6
|
Requires-Python: >=3.9
|
|
7
7
|
Description-Content-Type: text/x-rst
|
|
8
|
+
License-Expression: MIT
|
|
8
9
|
Classifier: Development Status :: 5 - Production/Stable
|
|
9
10
|
Classifier: Intended Audience :: Developers
|
|
10
11
|
Classifier: Intended Audience :: Information Technology
|
|
11
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
12
12
|
Classifier: Operating System :: OS Independent
|
|
13
13
|
Classifier: Programming Language :: Python
|
|
14
14
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -24,6 +24,7 @@ Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
|
24
24
|
Classifier: Topic :: Software Development :: Compilers
|
|
25
25
|
Classifier: Topic :: Text Processing
|
|
26
26
|
Classifier: Typing :: Typed
|
|
27
|
+
License-File: LICENSE
|
|
27
28
|
Requires-Dist: railroad-diagrams ; extra == "diagrams"
|
|
28
29
|
Requires-Dist: jinja2 ; extra == "diagrams"
|
|
29
30
|
Project-URL: Homepage, https://github.com/pyparsing/pyparsing/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
../CONTRIBUTING.md
|
|
@@ -19,8 +19,6 @@ Using the pyparsing module
|
|
|
19
19
|
expressions, processing custom application language commands, or
|
|
20
20
|
extracting data from formatted reports.
|
|
21
21
|
|
|
22
|
-
.. sectnum:: :depth: 4
|
|
23
|
-
|
|
24
22
|
.. contents:: :depth: 4
|
|
25
23
|
|
|
26
24
|
Note: While this content is still valid, there are more detailed
|