ya-tagscript 1.4.2__tar.gz → 1.4.3__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.
- ya_tagscript-1.4.3/.github/dependabot.yml +14 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/.github/workflows/black.yml +1 -1
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/.github/workflows/publish.yml +3 -3
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/.github/workflows/test.yml +2 -2
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/.pre-commit-config.yaml +7 -1
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/CHANGELOG.md +8 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/PKG-INFO +6 -3
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/README.md +2 -2
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/_ext/glossary_backlink_checker.py +2 -2
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/conf.py +1 -1
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/make_release.py +6 -6
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/pyproject.toml +10 -7
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/discord/cooldown_block.py +2 -1
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/discord/embed_block.py +2 -2
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/math/math_block.py +3 -3
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/strings/urlencode_block.py +2 -2
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/interfaces/blockabc.py +1 -1
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/interpreter/interpreter.py +3 -1
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/interpreter/parse_state.py +2 -2
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/util/conditionals.py +3 -1
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/.coveragerc +0 -1
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/adapters/discord_adapters/test_guild_adapter.py +4 -4
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/adapters/test_int_adapter.py +1 -1
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/adapters/test_string_adapter.py +4 -4
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/actions/test_command_block.py +12 -22
- ya_tagscript-1.4.3/tests/ya_tagscript/blocks/actions/test_override_block.py +87 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/actions/test_react_block.py +111 -144
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/conditional/test_all_block.py +1 -1
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/conditional/test_if_block.py +18 -67
- ya_tagscript-1.4.3/tests/ya_tagscript/blocks/discord/test_embed_block.py +1010 -0
- ya_tagscript-1.4.3/tests/ya_tagscript/blocks/math/test_math_block.py +404 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/rng/test_random_block.py +32 -45
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/strings/test_substring_block.py +24 -51
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/strings/test_urlencode_block.py +2 -2
- ya_tagscript-1.4.3/tests/ya_tagscript/blocks/time/test_timedelta_block.py +502 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/interpreter/test_ts_parser.py +5 -5
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/uv.lock +86 -65
- ya_tagscript-1.4.2/tests/ya_tagscript/blocks/actions/test_override_block.py +0 -100
- ya_tagscript-1.4.2/tests/ya_tagscript/blocks/discord/test_embed_block.py +0 -2129
- ya_tagscript-1.4.2/tests/ya_tagscript/blocks/math/test_math_block.py +0 -1366
- ya_tagscript-1.4.2/tests/ya_tagscript/blocks/time/test_timedelta_block.py +0 -598
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/.gitignore +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/.python-version +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/.readthedocs.yaml +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/LICENSE.md +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/Makefile +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/_ext/styled_list_directive.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/adapters.rst +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/blocks.rst +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/changelog.rst +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/code_examples/adapters/int_adapter_example.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/code_examples/adapters/member_adapter_example.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/code_examples/nested_blocks_example.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/code_examples/quickstart_example.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/credits.rst +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/exceptions.rst +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/glossary.rst +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/index.rst +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/interfaces.rst +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/interpreter.rst +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/intro.rst +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/make.bat +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/numeric_parser.rst +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/quickstart.rst +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/docs/requirements.txt +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/adapters/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/adapters/discord_adapters/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/adapters/discord_adapters/attribute_adapter.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/adapters/discord_adapters/channel_adapter.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/adapters/discord_adapters/guild_adapter.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/adapters/discord_adapters/member_adapter.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/adapters/function_adapter.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/adapters/int_adapter.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/adapters/object_adapter.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/adapters/string_adapter.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/actions/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/actions/command_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/actions/delete_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/actions/override_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/actions/react_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/actions/redirect_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/actions/silence_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/conditional/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/conditional/all_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/conditional/any_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/conditional/if_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/discord/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/flow/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/flow/break_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/flow/shortcutredirect_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/flow/stop_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/limiters/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/limiters/blacklist_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/limiters/require_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/lists/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/lists/cycle_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/lists/list_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/math/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/math/ordinal_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/meta/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/meta/comment_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/meta/debug_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/rng/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/rng/fiftyfifty_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/rng/random_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/rng/range_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/strings/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/strings/case_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/strings/join_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/strings/python_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/strings/replace_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/strings/substring_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/strings/urldecode_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/time/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/time/strf_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/time/timedelta_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/variables/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/variables/assign_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/variables/loose_variable_getter_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/variables/strict_variable_getter_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/exceptions/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/exceptions/exceptions.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/interfaces/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/interfaces/adapterabc.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/interfaces/interpreterabc.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/interfaces/nodeabc.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/interpreter/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/interpreter/context.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/interpreter/node.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/interpreter/response.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/interpreter/ts_parser.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/py.typed +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/util/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/util/escaping.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/util/splitter.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/adapters/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/adapters/discord_adapters/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/adapters/discord_adapters/test_attribute_adapter.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/adapters/discord_adapters/test_channel_adapter.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/adapters/discord_adapters/test_member_adapter.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/adapters/test_function_adapter.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/adapters/test_object_adapter.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/actions/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/actions/test_delete_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/actions/test_redirect_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/actions/test_silence_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/conditional/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/conditional/test_any_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/discord/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/discord/test_cooldown_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/flow/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/flow/test_break_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/flow/test_shortcutredirect_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/flow/test_stop_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/limiters/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/limiters/test_blacklist_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/limiters/test_require_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/lists/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/lists/test_cycle_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/lists/test_list_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/math/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/math/test_ordinal_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/meta/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/meta/test_comment_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/meta/test_debug_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/rng/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/rng/test_fiftyfifty_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/rng/test_range_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/strings/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/strings/test_case_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/strings/test_join_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/strings/test_python_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/strings/test_replace_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/strings/test_urldecode_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/time/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/time/test_strf_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/variables/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/variables/test_assign_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/variables/test_loose_variable_getter_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/variables/test_strict_variable_getter_block.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/interpreter/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/interpreter/test_interpreter.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/interpreter/test_node.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/interpreter/test_parse_state.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/util/__init__.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/util/test_conditionals.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/util/test_escaping.py +0 -0
- {ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/util/test_splitter.py +0 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Set update schedule for GitHub Actions
|
|
2
|
+
|
|
3
|
+
version: 2
|
|
4
|
+
updates:
|
|
5
|
+
|
|
6
|
+
- package-ecosystem: github-actions
|
|
7
|
+
directory: /
|
|
8
|
+
groups:
|
|
9
|
+
github-actions:
|
|
10
|
+
patterns:
|
|
11
|
+
- "*"
|
|
12
|
+
schedule:
|
|
13
|
+
# Check for updates to GitHub Actions every week
|
|
14
|
+
interval: weekly
|
|
@@ -8,7 +8,7 @@ jobs:
|
|
|
8
8
|
runs-on: ubuntu-latest
|
|
9
9
|
|
|
10
10
|
steps:
|
|
11
|
-
- uses: actions/checkout@
|
|
11
|
+
- uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493
|
|
12
12
|
with:
|
|
13
13
|
persist-credentials: false
|
|
14
14
|
|
|
@@ -47,7 +47,7 @@ jobs:
|
|
|
47
47
|
|
|
48
48
|
steps:
|
|
49
49
|
- name: Download all the dists
|
|
50
|
-
uses: actions/download-artifact@
|
|
50
|
+
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0
|
|
51
51
|
with:
|
|
52
52
|
name: python-package-distributions
|
|
53
53
|
path: dist/
|
|
@@ -67,7 +67,7 @@ jobs:
|
|
|
67
67
|
|
|
68
68
|
steps:
|
|
69
69
|
- name: Download all the dists
|
|
70
|
-
uses: actions/download-artifact@
|
|
70
|
+
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0
|
|
71
71
|
with:
|
|
72
72
|
name: python-package-distributions
|
|
73
73
|
path: dist/
|
|
@@ -9,10 +9,10 @@ jobs:
|
|
|
9
9
|
strategy:
|
|
10
10
|
fail-fast: false
|
|
11
11
|
matrix:
|
|
12
|
-
python-version: [ "3.11", "3.12", "3.13" ]
|
|
12
|
+
python-version: [ "3.11", "3.12", "3.13", "3.14" ]
|
|
13
13
|
|
|
14
14
|
steps:
|
|
15
|
-
- uses: actions/checkout@
|
|
15
|
+
- uses: actions/checkout@v5
|
|
16
16
|
|
|
17
17
|
- name: Install uv
|
|
18
18
|
uses: astral-sh/setup-uv@v6
|
|
@@ -3,9 +3,10 @@ default_language_version:
|
|
|
3
3
|
fail_fast: false
|
|
4
4
|
repos:
|
|
5
5
|
- repo: https://github.com/astral-sh/uv-pre-commit
|
|
6
|
-
rev: 0.
|
|
6
|
+
rev: 0.8.8
|
|
7
7
|
hooks:
|
|
8
8
|
- id: uv-lock
|
|
9
|
+
require_serial: true
|
|
9
10
|
|
|
10
11
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
11
12
|
rev: v5.0.0
|
|
@@ -24,6 +25,11 @@ repos:
|
|
|
24
25
|
- id: mixed-line-ending
|
|
25
26
|
args: [ --fix=crlf ]
|
|
26
27
|
|
|
28
|
+
- repo: https://github.com/asottile/add-trailing-comma
|
|
29
|
+
rev: v3.2.0
|
|
30
|
+
hooks:
|
|
31
|
+
- id: add-trailing-comma
|
|
32
|
+
|
|
27
33
|
- repo: https://github.com/psf/black
|
|
28
34
|
rev: 25.1.0
|
|
29
35
|
hooks:
|
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
*Currently none*
|
|
4
4
|
|
|
5
|
+
# v1.4.3
|
|
6
|
+
|
|
7
|
+
- Refactor tests to use pytest.parametrize
|
|
8
|
+
|
|
9
|
+
- Fix accidental dict literal instead of empty set constructor in `BlockABC.will_accept`
|
|
10
|
+
- Should not have had any user-facing consequences since it is just an empty
|
|
11
|
+
fallback
|
|
12
|
+
|
|
5
13
|
# v1.4.2
|
|
6
14
|
|
|
7
15
|
- Catch `ParseBaseException` in `MathBlock` instead of `ParseSyntaxException`
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ya_tagscript
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.3
|
|
4
4
|
Summary: Yet Another TagScript fork. An easy drop in user-provided Templating system.
|
|
5
|
+
Project-URL: Changelog, https://ya-tagscript.readthedocs.io/en/latest/changelog.html
|
|
6
|
+
Project-URL: Documentation, https://ya-tagscript.readthedocs.io
|
|
5
7
|
Project-URL: GitHub, https://github.com/MajorTanya/ya_tagscript
|
|
6
8
|
Project-URL: Issues, https://github.com/MajorTanya/ya_tagscript/issues
|
|
7
9
|
Author-email: MajorTanya <tanya@majortanya.eu>
|
|
@@ -14,6 +16,7 @@ Classifier: Operating System :: OS Independent
|
|
|
14
16
|
Classifier: Programming Language :: Python :: 3.11
|
|
15
17
|
Classifier: Programming Language :: Python :: 3.12
|
|
16
18
|
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
17
20
|
Requires-Python: >=3.11
|
|
18
21
|
Requires-Dist: discord-py>=2.5.0
|
|
19
22
|
Requires-Dist: pyparsing>=3.2.0
|
|
@@ -22,7 +25,7 @@ Description-Content-Type: text/markdown
|
|
|
22
25
|
|
|
23
26
|
# ya_tagscript - Yet Another TagScript fork
|
|
24
27
|
|
|
25
|
-
Current stable version: v1.4.
|
|
28
|
+
Current stable version: v1.4.3
|
|
26
29
|
|
|
27
30
|
## Information
|
|
28
31
|
|
|
@@ -84,7 +87,7 @@ or
|
|
|
84
87
|
<!--VERSIONED TAG SECTION START-->
|
|
85
88
|
|
|
86
89
|
```
|
|
87
|
-
pip install git+https://github.com/MajorTanya/ya_tagscript.git@v1.4.
|
|
90
|
+
pip install git+https://github.com/MajorTanya/ya_tagscript.git@v1.4.3
|
|
88
91
|
```
|
|
89
92
|
|
|
90
93
|
<!--VERSIONED TAG SECTION END-->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ya_tagscript - Yet Another TagScript fork
|
|
2
2
|
|
|
3
|
-
Current stable version: v1.4.
|
|
3
|
+
Current stable version: v1.4.3
|
|
4
4
|
|
|
5
5
|
## Information
|
|
6
6
|
|
|
@@ -62,7 +62,7 @@ or
|
|
|
62
62
|
<!--VERSIONED TAG SECTION START-->
|
|
63
63
|
|
|
64
64
|
```
|
|
65
|
-
pip install git+https://github.com/MajorTanya/ya_tagscript.git@v1.4.
|
|
65
|
+
pip install git+https://github.com/MajorTanya/ya_tagscript.git@v1.4.3
|
|
66
66
|
```
|
|
67
67
|
|
|
68
68
|
<!--VERSIONED TAG SECTION END-->
|
|
@@ -48,7 +48,7 @@ class GlossaryRefChecker:
|
|
|
48
48
|
app.env.glossary_term_refs = {} # type: ignore
|
|
49
49
|
|
|
50
50
|
for node in doctree.findall(
|
|
51
|
-
lambda n: isinstance(n, (pending_xref, nodes.reference))
|
|
51
|
+
lambda n: isinstance(n, (pending_xref, nodes.reference)),
|
|
52
52
|
):
|
|
53
53
|
if node.get("reftype") != "term":
|
|
54
54
|
continue
|
|
@@ -169,5 +169,5 @@ class GlossaryRefChecker:
|
|
|
169
169
|
)
|
|
170
170
|
else:
|
|
171
171
|
_logger.info(
|
|
172
|
-
"[GlossaryRefCheck] All glossary term references back-referenced correctly!"
|
|
172
|
+
"[GlossaryRefCheck] All glossary term references back-referenced correctly!",
|
|
173
173
|
)
|
|
@@ -137,7 +137,7 @@ def update_changelog(project_version: str, *, dry_run: bool, verbose: bool):
|
|
|
137
137
|
if already_released_version is not None:
|
|
138
138
|
raise RuntimeError(
|
|
139
139
|
f"v{project_version} already has a CHANGELOG entry. Aborting "
|
|
140
|
-
f"docs update process without changes..."
|
|
140
|
+
f"docs update process without changes...",
|
|
141
141
|
)
|
|
142
142
|
|
|
143
143
|
match = re.match(
|
|
@@ -147,7 +147,7 @@ def update_changelog(project_version: str, *, dry_run: bool, verbose: bool):
|
|
|
147
147
|
)
|
|
148
148
|
if match is None or (release_content := match.group(2)) == "":
|
|
149
149
|
raise RuntimeError(
|
|
150
|
-
"Nothing to update in CHANGELOG.md — Did something go wrong?"
|
|
150
|
+
"Nothing to update in CHANGELOG.md — Did something go wrong?",
|
|
151
151
|
)
|
|
152
152
|
|
|
153
153
|
updated_changelog_text = (
|
|
@@ -159,7 +159,7 @@ def update_changelog(project_version: str, *, dry_run: bool, verbose: bool):
|
|
|
159
159
|
|
|
160
160
|
# v{project_version}
|
|
161
161
|
|
|
162
|
-
"""
|
|
162
|
+
""",
|
|
163
163
|
)
|
|
164
164
|
+ release_content
|
|
165
165
|
+ old_changelog_text[len(match.group(1)) :]
|
|
@@ -199,7 +199,7 @@ def update_pyproject(project_version: str, *, dry_run: bool, verbose: bool):
|
|
|
199
199
|
f'''\
|
|
200
200
|
[project]
|
|
201
201
|
name = "ya_tagscript"
|
|
202
|
-
version = "{project_version}"'''
|
|
202
|
+
version = "{project_version}"''',
|
|
203
203
|
)
|
|
204
204
|
+ old_pyproject_content[len(match.group(1)) + len(match.group(2)) :]
|
|
205
205
|
)
|
|
@@ -239,7 +239,7 @@ def update_readme(project_version: str, *, dry_run: bool, verbose: bool):
|
|
|
239
239
|
pip install git+https://github.com/MajorTanya/ya_tagscript.git@v{project_version}
|
|
240
240
|
```
|
|
241
241
|
|
|
242
|
-
<!--VERSIONED TAG SECTION END-->"""
|
|
242
|
+
<!--VERSIONED TAG SECTION END-->""",
|
|
243
243
|
)
|
|
244
244
|
new_readme_text = re.sub(
|
|
245
245
|
r"^<!--VERSIONED TAG SECTION START-->$.+?^<!--VERSIONED TAG SECTION END-->$",
|
|
@@ -272,7 +272,7 @@ def update_sphinx_conf(project_version: str, *, dry_run: bool, verbose: bool):
|
|
|
272
272
|
f"""\
|
|
273
273
|
### VERSION SECTION START
|
|
274
274
|
version = "{project_version}"
|
|
275
|
-
### VERSION SECTION END"""
|
|
275
|
+
### VERSION SECTION END""",
|
|
276
276
|
)
|
|
277
277
|
new_sphinx_conf = re.sub(
|
|
278
278
|
r"^### VERSION SECTION START$\n^version = .+?$\n^### VERSION SECTION END$",
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ya_tagscript"
|
|
7
|
-
version = "1.4.
|
|
7
|
+
version = "1.4.3"
|
|
8
8
|
description = "Yet Another TagScript fork. An easy drop in user-provided Templating system."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "CC-BY-4.0"
|
|
@@ -18,6 +18,7 @@ classifiers = [
|
|
|
18
18
|
"Programming Language :: Python :: 3.11",
|
|
19
19
|
"Programming Language :: Python :: 3.12",
|
|
20
20
|
"Programming Language :: Python :: 3.13",
|
|
21
|
+
"Programming Language :: Python :: 3.14",
|
|
21
22
|
"Operating System :: OS Independent",
|
|
22
23
|
]
|
|
23
24
|
requires-python = ">=3.11"
|
|
@@ -29,26 +30,28 @@ dependencies = [
|
|
|
29
30
|
keywords = ["tagscript"]
|
|
30
31
|
|
|
31
32
|
[project.urls]
|
|
33
|
+
Changelog = "https://ya-tagscript.readthedocs.io/en/latest/changelog.html"
|
|
34
|
+
Documentation = "https://ya-tagscript.readthedocs.io"
|
|
32
35
|
GitHub = "https://github.com/MajorTanya/ya_tagscript"
|
|
33
36
|
Issues = "https://github.com/MajorTanya/ya_tagscript/issues"
|
|
34
37
|
|
|
35
38
|
[dependency-groups]
|
|
36
39
|
dev = [
|
|
37
40
|
"black>=25.1.0",
|
|
38
|
-
"coverage>=7.
|
|
41
|
+
"coverage>=7.10.4",
|
|
39
42
|
"docutils-stubs>=0.0.22",
|
|
40
43
|
"enum-tools[sphinx]>=0.13.0",
|
|
41
44
|
"hatchling>=1.27.0",
|
|
42
45
|
"isort>=6.0.1",
|
|
43
46
|
"jinja2>=3.1.6",
|
|
44
47
|
"myst-parser>=4.0.1",
|
|
45
|
-
"pre-commit>=4.
|
|
46
|
-
"pyright>=1.1.
|
|
48
|
+
"pre-commit>=4.3.0",
|
|
49
|
+
"pyright>=1.1.404",
|
|
47
50
|
"pytest>=8.4.1",
|
|
48
51
|
"sphinx>=8.2.3",
|
|
49
52
|
"sphinx-autobuild>=2024.10.3",
|
|
50
53
|
"sphinx-rtd-theme>=3.0.2",
|
|
51
|
-
"types-python-dateutil>=2.9.0.
|
|
54
|
+
"types-python-dateutil>=2.9.0.20250822",
|
|
52
55
|
]
|
|
53
56
|
|
|
54
57
|
[tool.black]
|
|
@@ -58,7 +61,6 @@ target-version = ["py311", "py312", "py313"]
|
|
|
58
61
|
fail_under = 98
|
|
59
62
|
show_missing = true
|
|
60
63
|
exclude_also = [
|
|
61
|
-
'if TYPE_CHECKING:',
|
|
62
64
|
'@(abc\.)?abstractmethod',
|
|
63
65
|
'def __repr__',
|
|
64
66
|
'(?:case _|else):\n\s*assert_never',
|
|
@@ -87,7 +89,7 @@ filterwarnings = [
|
|
|
87
89
|
|
|
88
90
|
[tool.tox]
|
|
89
91
|
requires = ["tox>=4"]
|
|
90
|
-
env_list = ["3.13", "3.12", "3.11", "type"]
|
|
92
|
+
env_list = ["3.14", "3.13", "3.12", "3.11", "type"]
|
|
91
93
|
|
|
92
94
|
[tool.tox.env_run_base]
|
|
93
95
|
description = "Run tests under {base_python}"
|
|
@@ -100,6 +102,7 @@ deps = ["pyright>=1.1.402", "pytest>=8"]
|
|
|
100
102
|
commands = [["pyright", "src", "tests", { replace = "posargs", extend = true }]]
|
|
101
103
|
|
|
102
104
|
[tool.tox.gh.python]
|
|
105
|
+
"3.14" = ["3.14"]
|
|
103
106
|
"3.13" = ["3.13", "type"]
|
|
104
107
|
"3.12" = ["3.12"]
|
|
105
108
|
"3.11" = ["3.11"]
|
|
@@ -112,7 +112,8 @@ class CooldownBlock(BlockABC):
|
|
|
112
112
|
retry_after = round(retry_after, 2)
|
|
113
113
|
if message is not None:
|
|
114
114
|
message = message.replace("{key}", str(key)).replace(
|
|
115
|
-
"{retry_after}",
|
|
115
|
+
"{retry_after}",
|
|
116
|
+
str(retry_after),
|
|
116
117
|
)
|
|
117
118
|
else:
|
|
118
119
|
message = (
|
|
@@ -40,7 +40,7 @@ def _add_field(embed: Embed, _: str, value: str | None) -> None:
|
|
|
40
40
|
if inline is None:
|
|
41
41
|
raise EmbedParseError(
|
|
42
42
|
f"`inline` argument for `add_field` is not a boolean value "
|
|
43
|
-
f"(was `{data[2]}`)."
|
|
43
|
+
f"(was `{data[2]}`).",
|
|
44
44
|
)
|
|
45
45
|
embed.add_field(name=name, value=value, inline=inline)
|
|
46
46
|
|
|
@@ -144,7 +144,7 @@ def _value_to_colour(value: Any) -> Colour | None:
|
|
|
144
144
|
else:
|
|
145
145
|
raise EmbedParseError(
|
|
146
146
|
f"Received invalid type for colour key (expected Colour | str | int"
|
|
147
|
-
f" | None, got {type(value).__qualname__})."
|
|
147
|
+
f" | None, got {type(value).__qualname__}).",
|
|
148
148
|
)
|
|
149
149
|
|
|
150
150
|
|
|
@@ -137,14 +137,14 @@ class NumericStringParser:
|
|
|
137
137
|
expr_list = DelimitedList(Group(expr))
|
|
138
138
|
|
|
139
139
|
fn_call = (ident + lpar - Group(expr_list) + rpar).set_parse_action(
|
|
140
|
-
self._insert_fn_arg_count_tuple
|
|
140
|
+
self._insert_fn_arg_count_tuple,
|
|
141
141
|
)
|
|
142
142
|
|
|
143
143
|
atom = (
|
|
144
144
|
addop[...]
|
|
145
145
|
+ (
|
|
146
146
|
(consts | fn_call | float_num | ident).set_parse_action(
|
|
147
|
-
self._push_first
|
|
147
|
+
self._push_first,
|
|
148
148
|
)
|
|
149
149
|
| Group(lpar + expr + rpar)
|
|
150
150
|
)
|
|
@@ -175,7 +175,7 @@ class NumericStringParser:
|
|
|
175
175
|
return self._operations[op](op1, op2)
|
|
176
176
|
elif op in self._functions:
|
|
177
177
|
args = list(
|
|
178
|
-
reversed([self._evaluate_stack(stack) for _ in range(num_args)])
|
|
178
|
+
reversed([self._evaluate_stack(stack) for _ in range(num_args)]),
|
|
179
179
|
)
|
|
180
180
|
if op == "round" and num_args == 2: # round needs the second arg to be int
|
|
181
181
|
args[1] = int(args[1])
|
{ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/src/ya_tagscript/blocks/strings/urlencode_block.py
RENAMED
|
@@ -31,8 +31,8 @@ class URLEncodeBlock(BlockABC):
|
|
|
31
31
|
|
|
32
32
|
# the following tagscript can be used to search up tag blocks
|
|
33
33
|
# assume {args} = "command block"
|
|
34
|
-
<https://
|
|
35
|
-
# <https://
|
|
34
|
+
<https://ya-tagscript.readthedocs.io/en/latest/search.html?q={urlencode(+):{args}}&check_keywords=yes&area=default>
|
|
35
|
+
# <https://ya-tagscript.readthedocs.io/en/latest/search.html?q=command+block&check_keywords=yes&area=default>
|
|
36
36
|
"""
|
|
37
37
|
|
|
38
38
|
requires_any_payload = True
|
|
@@ -133,7 +133,7 @@ class BlockABC(ABC):
|
|
|
133
133
|
bool
|
|
134
134
|
Whether the block will accept processing of the Context
|
|
135
135
|
"""
|
|
136
|
-
names = self._accepted_names if self._accepted_names is not None else
|
|
136
|
+
names = self._accepted_names if self._accepted_names is not None else set()
|
|
137
137
|
node = ctx.node
|
|
138
138
|
declaration = node.declaration
|
|
139
139
|
|
|
@@ -56,7 +56,9 @@ class TagScriptInterpreter(InterpreterABC):
|
|
|
56
56
|
response.body = self._interpret(output, response, input_string).strip()
|
|
57
57
|
else:
|
|
58
58
|
response.body = self._interpret(
|
|
59
|
-
response.body,
|
|
59
|
+
response.body,
|
|
60
|
+
response,
|
|
61
|
+
input_string,
|
|
60
62
|
).strip()
|
|
61
63
|
self.total_work = 0
|
|
62
64
|
return response
|
|
@@ -22,11 +22,11 @@ class ParseState(Enum):
|
|
|
22
22
|
VALID_TRANSITIONS: dict[int, frozenset[ParseState]] = {
|
|
23
23
|
ParseState.EXPECTING_DECLARATION.value: frozenset({ParseState.IN_DECLARATION}),
|
|
24
24
|
ParseState.IN_DECLARATION.value: frozenset(
|
|
25
|
-
{ParseState.IN_PARAMETER, ParseState.IN_PAYLOAD}
|
|
25
|
+
{ParseState.IN_PARAMETER, ParseState.IN_PAYLOAD},
|
|
26
26
|
),
|
|
27
27
|
ParseState.IN_PARAMETER.value: frozenset({ParseState.POST_PARAMETER}),
|
|
28
28
|
ParseState.POST_PARAMETER.value: frozenset(
|
|
29
|
-
{ParseState.IN_PAYLOAD}
|
|
29
|
+
{ParseState.IN_PAYLOAD},
|
|
30
30
|
), # Or pop (not a state)
|
|
31
31
|
ParseState.IN_PAYLOAD.value: frozenset(), # Only pop gets out of payload
|
|
32
32
|
}
|
|
@@ -36,7 +36,9 @@ def parse_condition(ctx: Context, condition: str) -> bool | None:
|
|
|
36
36
|
right_parsed = ctx.interpret_segment(right_cond)
|
|
37
37
|
|
|
38
38
|
condition_fulfilled = _execute_operator(
|
|
39
|
-
left_parsed,
|
|
39
|
+
left_parsed,
|
|
40
|
+
found_op.operator,
|
|
41
|
+
right_parsed,
|
|
40
42
|
)
|
|
41
43
|
|
|
42
44
|
return condition_fulfilled
|
|
@@ -143,7 +143,7 @@ def test_bots_attr_is_supported(
|
|
|
143
143
|
MagicMock(discord.Member, id=1, bot=True),
|
|
144
144
|
MagicMock(discord.Member, id=2, bot=False),
|
|
145
145
|
MagicMock(discord.Member, id=3, bot=False),
|
|
146
|
-
]
|
|
146
|
+
],
|
|
147
147
|
)
|
|
148
148
|
data = {"my_guild": adapters.GuildAdapter(obj)}
|
|
149
149
|
result = ts_interpreter.process(script, data).body
|
|
@@ -159,7 +159,7 @@ def test_bots_attr_is_supported_oops_all_human(
|
|
|
159
159
|
MagicMock(discord.Member, id=1, bot=False),
|
|
160
160
|
MagicMock(discord.Member, id=2, bot=False),
|
|
161
161
|
MagicMock(discord.Member, id=3, bot=False),
|
|
162
|
-
]
|
|
162
|
+
],
|
|
163
163
|
)
|
|
164
164
|
data = {"my_guild": adapters.GuildAdapter(obj)}
|
|
165
165
|
result = ts_interpreter.process(script, data).body
|
|
@@ -175,7 +175,7 @@ def test_humans_attr_is_supported(
|
|
|
175
175
|
MagicMock(discord.Member, id=1, bot=True),
|
|
176
176
|
MagicMock(discord.Member, id=2, bot=True),
|
|
177
177
|
MagicMock(discord.Member, id=3, bot=False),
|
|
178
|
-
]
|
|
178
|
+
],
|
|
179
179
|
)
|
|
180
180
|
data = {"my_guild": adapters.GuildAdapter(obj)}
|
|
181
181
|
result = ts_interpreter.process(script, data).body
|
|
@@ -191,7 +191,7 @@ def test_humans_attr_is_supported_oops_all_bots(
|
|
|
191
191
|
MagicMock(discord.Member, id=1, bot=True),
|
|
192
192
|
MagicMock(discord.Member, id=2, bot=True),
|
|
193
193
|
MagicMock(discord.Member, id=3, bot=True),
|
|
194
|
-
]
|
|
194
|
+
],
|
|
195
195
|
)
|
|
196
196
|
data = {"my_guild": adapters.GuildAdapter(obj)}
|
|
197
197
|
result = ts_interpreter.process(script, data).body
|
|
@@ -35,7 +35,7 @@ def test_failed_int_conversion_raises():
|
|
|
35
35
|
with pytest.raises(
|
|
36
36
|
ValueError,
|
|
37
37
|
match=re.escape(
|
|
38
|
-
"invalid literal for int() with base 10: 'really broken input'"
|
|
38
|
+
"invalid literal for int() with base 10: 'really broken input'",
|
|
39
39
|
),
|
|
40
40
|
):
|
|
41
41
|
adapters.IntAdapter("really broken input") # type: ignore
|
{ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/adapters/test_string_adapter.py
RENAMED
|
@@ -90,8 +90,8 @@ def test_parameter_plus_in_middle_removed(
|
|
|
90
90
|
script = "{my_str(1+1)}" # plus is removed -> "1+1" into "11" into 11 (int) into index 10 (int)
|
|
91
91
|
data = {
|
|
92
92
|
"my_str": adapters.StringAdapter(
|
|
93
|
-
"my secret message is actually very long if you think about it"
|
|
94
|
-
)
|
|
93
|
+
"my secret message is actually very long if you think about it",
|
|
94
|
+
),
|
|
95
95
|
}
|
|
96
96
|
result = ts_interpreter.process(script, data).body
|
|
97
97
|
assert result == "about"
|
|
@@ -103,8 +103,8 @@ def test_parameter_plus_in_middle_removed_with_payload(
|
|
|
103
103
|
script = "{my_str(1+1):,}" # plus is removed -> "1+1" into "11" into 11 (int) into index 10 (int)
|
|
104
104
|
data = {
|
|
105
105
|
"my_str": adapters.StringAdapter(
|
|
106
|
-
"my,secret,message,is,actually,very,long,if,you,think,about it"
|
|
107
|
-
)
|
|
106
|
+
"my,secret,message,is,actually,very,long,if,you,think,about it",
|
|
107
|
+
),
|
|
108
108
|
}
|
|
109
109
|
result = ts_interpreter.process(script, data).body
|
|
110
110
|
assert result == "about it"
|
{ya_tagscript-1.4.2 → ya_tagscript-1.4.3}/tests/ya_tagscript/blocks/actions/test_command_block.py
RENAMED
|
@@ -19,30 +19,20 @@ def test_accepted_names():
|
|
|
19
19
|
assert block._accepted_names == {"c", "com", "cmd", "command"}
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
mock_ctx = MagicMock(spec=interpreter.Context)
|
|
34
|
-
mock_ctx.node = MagicMock(spec=interfaces.NodeABC)
|
|
35
|
-
mock_ctx.node.payload = ""
|
|
36
|
-
|
|
37
|
-
block = blocks.CommandBlock()
|
|
38
|
-
returned = block.process(mock_ctx)
|
|
39
|
-
assert returned is None
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
def test_process_method_rejects_whitespace_only_payload():
|
|
22
|
+
@pytest.mark.parametrize(
|
|
23
|
+
"payload",
|
|
24
|
+
(
|
|
25
|
+
pytest.param(None, id="missing"),
|
|
26
|
+
pytest.param("", id="empty"),
|
|
27
|
+
pytest.param(" ", id="whitespace"),
|
|
28
|
+
),
|
|
29
|
+
)
|
|
30
|
+
def test_process_method_rejects_invalid_payloads(
|
|
31
|
+
payload: str | None,
|
|
32
|
+
):
|
|
43
33
|
mock_ctx = MagicMock(spec=interpreter.Context)
|
|
44
34
|
mock_ctx.node = MagicMock(spec=interfaces.NodeABC)
|
|
45
|
-
mock_ctx.node.payload =
|
|
35
|
+
mock_ctx.node.payload = payload
|
|
46
36
|
|
|
47
37
|
block = blocks.CommandBlock()
|
|
48
38
|
returned = block.process(mock_ctx)
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
|
|
3
|
+
from ya_tagscript import TagScriptInterpreter, adapters, blocks
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@pytest.fixture
|
|
7
|
+
def ts_interpreter():
|
|
8
|
+
b = [
|
|
9
|
+
blocks.OverrideBlock(),
|
|
10
|
+
blocks.StrictVariableGetterBlock(),
|
|
11
|
+
]
|
|
12
|
+
return TagScriptInterpreter(b)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def test_accepted_names():
|
|
16
|
+
block = blocks.OverrideBlock()
|
|
17
|
+
assert block._accepted_names == {"override"}
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@pytest.mark.parametrize(
|
|
21
|
+
("script", "overrides_out"),
|
|
22
|
+
(
|
|
23
|
+
pytest.param(
|
|
24
|
+
"{override}",
|
|
25
|
+
{"admin": True, "mod": True, "permissions": True},
|
|
26
|
+
id="no_parameter_sets_all_overrides",
|
|
27
|
+
),
|
|
28
|
+
pytest.param(
|
|
29
|
+
"{override(admin)}",
|
|
30
|
+
{"admin": True, "mod": False, "permissions": False},
|
|
31
|
+
id="admin_parameter_only_sets_admin_override",
|
|
32
|
+
),
|
|
33
|
+
pytest.param(
|
|
34
|
+
"{override(mod)}",
|
|
35
|
+
{"admin": False, "mod": True, "permissions": False},
|
|
36
|
+
id="mod_parameter_only_sets_mod_override",
|
|
37
|
+
),
|
|
38
|
+
pytest.param(
|
|
39
|
+
"{override(permissions)}",
|
|
40
|
+
{"admin": False, "mod": False, "permissions": True},
|
|
41
|
+
id="permissions_parameter_only_sets_permissions_override",
|
|
42
|
+
),
|
|
43
|
+
pytest.param(
|
|
44
|
+
"{override(admin)}{override(mod)}",
|
|
45
|
+
{"admin": True, "mod": True, "permissions": False},
|
|
46
|
+
id="multiple_overrides_are_combined",
|
|
47
|
+
),
|
|
48
|
+
),
|
|
49
|
+
)
|
|
50
|
+
def test_dec_override_valid_settings(
|
|
51
|
+
script: str,
|
|
52
|
+
overrides_out: dict[str, bool],
|
|
53
|
+
ts_interpreter: TagScriptInterpreter,
|
|
54
|
+
):
|
|
55
|
+
response = ts_interpreter.process(script)
|
|
56
|
+
assert response.body == ""
|
|
57
|
+
overrides = response.actions.get("overrides")
|
|
58
|
+
assert overrides is not None
|
|
59
|
+
assert overrides == overrides_out
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def test_dec_override_other_parameter_is_rejected(
|
|
63
|
+
ts_interpreter: TagScriptInterpreter,
|
|
64
|
+
):
|
|
65
|
+
script = "{override(parameter)}"
|
|
66
|
+
result = ts_interpreter.process(script).body
|
|
67
|
+
assert result == script
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def test_dec_override_cannot_set_multiple_overrides_in_one_block(
|
|
71
|
+
ts_interpreter: TagScriptInterpreter,
|
|
72
|
+
):
|
|
73
|
+
script = "{override(admin,mod)}"
|
|
74
|
+
result = ts_interpreter.process(script).body
|
|
75
|
+
assert result == script
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def test_dec_override_parameter_is_interpreted(
|
|
79
|
+
ts_interpreter: TagScriptInterpreter,
|
|
80
|
+
):
|
|
81
|
+
script = "{override({my_var})}"
|
|
82
|
+
data = {"my_var": adapters.StringAdapter("admin")}
|
|
83
|
+
response = ts_interpreter.process(script, data)
|
|
84
|
+
assert response.body == ""
|
|
85
|
+
overrides = response.actions.get("overrides")
|
|
86
|
+
assert overrides is not None
|
|
87
|
+
assert overrides == {"admin": True, "mod": False, "permissions": False}
|