algorand-python-testing 0.3.0b6__tar.gz → 0.3.0b8__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.
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/CHANGELOG.md +8 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/PKG-INFO +1 -1
- algorand_python_testing-0.3.0b8/docs/api.md +31 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/conf.py +5 -1
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/coverage.md +1 -4
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/testing-guide/arc4-types.md +0 -1
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/testing-guide/avm-types.md +0 -1
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/testing-guide/opcodes.md +23 -28
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/testing-guide/signature-testing.md +0 -1
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/testing-guide/state-management.md +0 -1
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/testing-guide/transactions.md +2 -2
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/zk_whitelist/test_contract.py +1 -2
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/pyproject.toml +9 -10
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/__init__.py +14 -15
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/arc4.py +20 -38
- algorand_python_testing-0.3.0b6/src/algopy_testing/_compiled.py → algorand_python_testing-0.3.0b8/src/_algopy_testing/compiled.py +1 -1
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/context.py +2 -2
- algorand_python_testing-0.3.0b8/src/_algopy_testing/context_helpers/__init__.py +13 -0
- {algorand_python_testing-0.3.0b6/src/algopy_testing/_context_helpers → algorand_python_testing-0.3.0b8/src/_algopy_testing/context_helpers}/context_storage.py +14 -9
- {algorand_python_testing-0.3.0b6/src/algopy_testing/_context_helpers → algorand_python_testing-0.3.0b8/src/_algopy_testing/context_helpers}/ledger_context.py +12 -12
- {algorand_python_testing-0.3.0b6/src/algopy_testing/_context_helpers → algorand_python_testing-0.3.0b8/src/_algopy_testing/context_helpers}/txn_context.py +41 -31
- algorand_python_testing-0.3.0b8/src/_algopy_testing/decorators/__init__.py +8 -0
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/decorators/arc4.py +61 -57
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/enums.py +1 -1
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/gtxn.py +7 -7
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/itxn.py +5 -5
- algorand_python_testing-0.3.0b6/src/algopy_testing/_itxn_loader.py → algorand_python_testing-0.3.0b8/src/_algopy_testing/itxn_loader.py +2 -2
- algorand_python_testing-0.3.0b8/src/_algopy_testing/models/__init__.py +21 -0
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/models/account.py +6 -6
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/models/application.py +5 -5
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/models/asset.py +3 -3
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/models/contract.py +43 -44
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/models/template_variable.py +1 -1
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/models/txn_fields.py +8 -8
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/models/unsigned_builtins.py +1 -1
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/op/__init__.py +7 -7
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/op/block.py +3 -3
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/op/crypto.py +5 -5
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/op/global_values.py +3 -3
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/op/itxn.py +2 -2
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/op/misc.py +7 -7
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/op/pure.py +3 -3
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/op/txn.py +2 -2
- algorand_python_testing-0.3.0b8/src/_algopy_testing/primitives/__init__.py +6 -0
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/primitives/biguint.py +5 -5
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/primitives/bytes.py +3 -3
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/primitives/string.py +3 -3
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/primitives/uint64.py +2 -2
- algorand_python_testing-0.3.0b8/src/_algopy_testing/state/__init__.py +5 -0
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/state/box.py +29 -25
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/state/global_state.py +4 -4
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/state/local_state.py +5 -5
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/state/utils.py +6 -7
- algorand_python_testing-0.3.0b8/src/_algopy_testing/utilities/__init__.py +4 -0
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/utilities/budget.py +1 -1
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/utilities/log.py +6 -6
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/utils.py +13 -28
- {algorand_python_testing-0.3.0b6/src/algopy_testing/_value_generators → algorand_python_testing-0.3.0b8/src/_algopy_testing/value_generators}/arc4.py +3 -3
- {algorand_python_testing-0.3.0b6/src/algopy_testing/_value_generators → algorand_python_testing-0.3.0b8/src/_algopy_testing/value_generators}/avm.py +20 -21
- {algorand_python_testing-0.3.0b6/src/algopy_testing/_value_generators → algorand_python_testing-0.3.0b8/src/_algopy_testing/value_generators}/txn.py +5 -5
- algorand_python_testing-0.3.0b8/src/algopy/__init__.py +62 -0
- algorand_python_testing-0.3.0b8/src/algopy/arc4.py +5 -0
- algorand_python_testing-0.3.0b8/src/algopy/gtxn.py +1 -0
- algorand_python_testing-0.3.0b8/src/algopy/itxn.py +1 -0
- algorand_python_testing-0.3.0b8/src/algopy/op.py +1 -0
- algorand_python_testing-0.3.0b8/src/algopy_testing/__init__.py +25 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/arc4/test_abi_call.py +2 -2
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/arc4/test_address.py +3 -3
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/arc4/test_arc4_method_signature.py +13 -13
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/arc4/test_bool.py +2 -2
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/arc4/test_dynamic_array.py +1 -1
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/arc4/test_dynamic_bytes.py +1 -1
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/arc4/test_emit.py +2 -2
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/arc4/test_static_array.py +1 -1
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/arc4/test_string.py +2 -2
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/arc4/test_struct.py +1 -1
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/arc4/test_tuple.py +1 -1
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/arc4/test_ufixednxm.py +3 -3
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/arc4/test_uintn.py +3 -3
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/models/test_asset.py +2 -2
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/models/test_box.py +27 -27
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/models/test_box_map.py +12 -13
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/models/test_box_ref.py +11 -12
- algorand_python_testing-0.3.0b8/tests/models/test_contract.py +108 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/models/test_uenumerate.py +2 -2
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/models/test_urange.py +2 -2
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/primitives/test_biguint.py +3 -3
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/primitives/test_bytes.py +2 -2
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/primitives/test_string.py +1 -1
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/primitives/test_uint64.py +1 -1
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/state/test_global_state.py +5 -5
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/state/test_local_state.py +3 -3
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/state/test_mutations.py +4 -4
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/test_context.py +6 -6
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/test_miscellaneous_op.py +1 -1
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/test_op.py +44 -49
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/utilities/test_log.py +3 -3
- algorand_python_testing-0.3.0b8/tests/value_generators/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/value_generators/test_avm.py +5 -5
- algorand_python_testing-0.3.0b6/docs/api.md +0 -14
- algorand_python_testing-0.3.0b6/src/algopy/__init__.py +0 -62
- algorand_python_testing-0.3.0b6/src/algopy/arc4.py +0 -5
- algorand_python_testing-0.3.0b6/src/algopy/gtxn.py +0 -1
- algorand_python_testing-0.3.0b6/src/algopy/itxn.py +0 -1
- algorand_python_testing-0.3.0b6/src/algopy/op.py +0 -1
- algorand_python_testing-0.3.0b6/src/algopy_testing/_context_helpers/__init__.py +0 -13
- algorand_python_testing-0.3.0b6/src/algopy_testing/decorators/__init__.py +0 -8
- algorand_python_testing-0.3.0b6/src/algopy_testing/models/__init__.py +0 -21
- algorand_python_testing-0.3.0b6/src/algopy_testing/primitives/__init__.py +0 -6
- algorand_python_testing-0.3.0b6/src/algopy_testing/state/__init__.py +0 -5
- algorand_python_testing-0.3.0b6/src/algopy_testing/utilities/__init__.py +0 -4
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/.coveragerc +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/.editorconfig +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/.github/pull_request_template.md +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/.github/workflows/cd.yaml +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/.github/workflows/ci.yaml +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/.github/workflows/gh-pages.yaml +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/.gitignore +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/.pre-commit-config.yaml +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/.vscode/extensions.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/.vscode/launch.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/.vscode/settings.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/CONTRIBUTING.md +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/LICENSE +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/README.md +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/Makefile +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/_static/custom.css +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/algopy.md +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/examples.md +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/glossary.md +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/index.md +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/make.bat +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/testing-guide/concepts.md +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/testing-guide/contract-testing.md +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/testing-guide/index.md +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/testing-guide/subroutines.md +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/README.md +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/auction/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/auction/contract.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/auction/test_contract.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/htlc_logicsig/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/htlc_logicsig/signature.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/htlc_logicsig/test_signature.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/marketplace/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/marketplace/contract.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/marketplace/test_contract.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/proof_of_attendance/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/proof_of_attendance/contract.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/proof_of_attendance/test_contract.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/scratch_storage/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/scratch_storage/contract.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/scratch_storage/test_contract.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/simple_voting/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/simple_voting/contract.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/simple_voting/test_contract.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/zk_whitelist/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/examples/zk_whitelist/contract.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/scripts/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/scripts/check_stubs_cov.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/scripts/refresh_test_artifacts.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/scripts/validate_examples.py +0 -0
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/constants.py +0 -0
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/decorators/subroutine.py +0 -0
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/models/logicsig.py +0 -0
- /algorand_python_testing-0.3.0b6/src/algopy_testing/_mutable.py → /algorand_python_testing-0.3.0b8/src/_algopy_testing/mutable.py +0 -0
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/op/constants.py +0 -0
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/_algopy_testing}/protocols.py +0 -0
- {algorand_python_testing-0.3.0b6/src/algopy → algorand_python_testing-0.3.0b8/src/_algopy_testing}/py.typed +0 -0
- {algorand_python_testing-0.3.0b6/src/algopy_testing/_value_generators → algorand_python_testing-0.3.0b8/src/_algopy_testing/value_generators}/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6/src/algopy_testing → algorand_python_testing-0.3.0b8/src/algopy}/py.typed +0 -0
- /algorand_python_testing-0.3.0b6/tests/__init__.py → /algorand_python_testing-0.3.0b8/src/algopy_testing/py.typed +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/templates/.macros.j2 +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/templates/.release_notes.md.j2 +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/templates/CHANGELOG.md.j2 +0 -0
- {algorand_python_testing-0.3.0b6/tests/arc4 → algorand_python_testing-0.3.0b8/tests}/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6/tests/artifacts/Arc4ABIMethod → algorand_python_testing-0.3.0b8/tests/arc4}/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/arc4/conftest.py +0 -0
- {algorand_python_testing-0.3.0b6/tests/artifacts/Arc4InnerTxns → algorand_python_testing-0.3.0b8/tests/artifacts/Arc4ABIMethod}/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/Arc4ABIMethod/contract.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6/tests/artifacts/Arc4PrimitiveOps → algorand_python_testing-0.3.0b8/tests/artifacts/Arc4InnerTxns}/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/Arc4InnerTxns/contract.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6/tests/artifacts/BoxContract → algorand_python_testing-0.3.0b8/tests/artifacts/Arc4PrimitiveOps}/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/Arc4PrimitiveOps/contract.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6/tests/artifacts/CryptoOps → algorand_python_testing-0.3.0b8/tests/artifacts/BoxContract}/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/BoxContract/contract.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/BoxContract/data/BoxContract.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/BoxContract/data/BoxContract.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/BoxContract/data/BoxContract.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6/tests/artifacts/GlobalStateValidator → algorand_python_testing-0.3.0b8/tests/artifacts/CryptoOps}/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/CryptoOps/contract.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/CryptoOps/data/CryptoOpsContract.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/CryptoOps/data/CryptoOpsContract.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6/tests/artifacts/MiscellaneousOps → algorand_python_testing-0.3.0b8/tests/artifacts/GlobalStateValidator}/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/GlobalStateValidator/contract.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6/tests/artifacts/PrimitiveOps → algorand_python_testing-0.3.0b8/tests/artifacts/MiscellaneousOps}/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/MiscellaneousOps/contract.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6/tests/artifacts/StateMutations → algorand_python_testing-0.3.0b8/tests/artifacts/PrimitiveOps}/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/PrimitiveOps/contract.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6/tests/artifacts/StateOps → algorand_python_testing-0.3.0b8/tests/artifacts/StateMutations}/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateMutations/data/Contract.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateMutations/data/Contract.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateMutations/data/Contract.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateMutations/statemutations.py +0 -0
- {algorand_python_testing-0.3.0b6/tests/artifacts → algorand_python_testing-0.3.0b8/tests/artifacts/StateOps}/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/contract.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/GlobalStateContract.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/GlobalStateContract.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/GlobalStateContract.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/ITxnOpsContract.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/ITxnOpsContract.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/ITxnOpsContract.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/LocalStateContract.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/LocalStateContract.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/LocalStateContract.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAcctParamsGet.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAcctParamsGet.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAcctParamsGet.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAppGlobalContract.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAppGlobalContract.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAppGlobalContract.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAppGlobalExContract.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAppGlobalExContract.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAppLocalContract.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAppLocalContract.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAppLocalContract.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAppLocalExContract.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAppLocalExContract.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAppLocalExContract.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAppParamsContract.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAppParamsContract.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAppParamsContract.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAssetHoldingContract.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAssetHoldingContract.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAssetParamsContract.approval.teal +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAssetParamsContract.arc32.json +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/artifacts/StateOps/data/StateAssetParamsContract.clear.teal +0 -0
- {algorand_python_testing-0.3.0b6/tests/contexts → algorand_python_testing-0.3.0b8/tests/artifacts}/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/common.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/conftest.py +0 -0
- {algorand_python_testing-0.3.0b6/tests/models → algorand_python_testing-0.3.0b8/tests/contexts}/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6/tests/primitives → algorand_python_testing-0.3.0b8/tests/models}/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6/tests/state → algorand_python_testing-0.3.0b8/tests/primitives}/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/primitives/conftest.py +0 -0
- {algorand_python_testing-0.3.0b6/tests/utilities → algorand_python_testing-0.3.0b8/tests/state}/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/state/conftest.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/util.py +0 -0
- {algorand_python_testing-0.3.0b6/tests/value_generators → algorand_python_testing-0.3.0b8/tests/utilities}/__init__.py +0 -0
- {algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/tests/utilities/conftest.py +0 -0
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
|
+
## v0.3.0-beta.8 (2024-08-22)
|
|
3
|
+
|
|
4
|
+
### Feature
|
|
5
|
+
|
|
6
|
+
* include ARC4 results in log, and handle > 15 ARC4 arguments (#18) ([`fd83ee8`](https://github.com/algorandfoundation/algorand-python-testing/commit/fd83ee8525a393d4a1a66f20acdb661906d84b51))
|
|
7
|
+
|
|
8
|
+
## v0.3.0-beta.7 (2024-08-21)
|
|
9
|
+
|
|
2
10
|
## v0.3.0-beta.6 (2024-08-21)
|
|
3
11
|
|
|
4
12
|
### Documentation
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: algorand-python-testing
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.0b8
|
|
4
4
|
Summary: Algorand Python testing library
|
|
5
5
|
Project-URL: Documentation, https://github.com/algorandfoundation/puya/tree/main/algopy_testing#README.md
|
|
6
6
|
Project-URL: Issues, https://github.com/algorandfoundation/puya/issues
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# API Reference
|
|
2
|
+
|
|
3
|
+
## Contexts
|
|
4
|
+
|
|
5
|
+
```{autodoc2-summary}
|
|
6
|
+
algopy_testing.AlgopyTestContext
|
|
7
|
+
algopy_testing.LedgerContext
|
|
8
|
+
algopy_testing.TransactionContext
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Value Generators
|
|
12
|
+
|
|
13
|
+
```{autodoc2-summary}
|
|
14
|
+
algopy_testing.AVMValueGenerator
|
|
15
|
+
algopy_testing.ARC4ValueGenerator
|
|
16
|
+
algopy_testing.TxnValueGenerator
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Inner transaction loaders
|
|
20
|
+
|
|
21
|
+
```{autodoc2-summary}
|
|
22
|
+
algopy_testing.ITxnGroupLoader
|
|
23
|
+
algopy_testing.ITxnLoader
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Utils
|
|
27
|
+
|
|
28
|
+
```{autodoc2-summary}
|
|
29
|
+
algopy_testing.algopy_testing_context
|
|
30
|
+
algopy_testing.arc4_prefix
|
|
31
|
+
```
|
|
@@ -61,7 +61,11 @@ myst_enable_extensions = ["colon_fence", "fieldlist"]
|
|
|
61
61
|
autodoc2_packages = [
|
|
62
62
|
{
|
|
63
63
|
"path": "../src/algopy_testing",
|
|
64
|
-
"auto_mode":
|
|
64
|
+
"auto_mode": True,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"path": "../src/_algopy_testing",
|
|
68
|
+
"auto_mode": True,
|
|
65
69
|
},
|
|
66
70
|
]
|
|
67
71
|
autodoc2_render_plugin = "myst"
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# Coverage
|
|
2
2
|
|
|
3
|
-
See which `algorand-python` stubs are implemented by the `algorand-python-testing` library. See the [Concepts](testing-guide/concepts.md#types-of-algopy-stub-implementations) section for more details on the implementation categories.
|
|
4
|
-
|
|
5
|
-
Based on the definitions provided and the implementation details in the `src` directory, here is the classification for the abstractions outlined in the table under the `Name` column:
|
|
3
|
+
See which `algorand-python` stubs are implemented by the `algorand-python-testing` library. See the [Concepts](testing-guide/concepts.md#types-of-algopy-stub-implementations) section for more details on the implementation categories. Refer to the [`algorand-python` stubs API](api.md) for the full list of the stubs for which the `algorand-python-testing` library provides implementations referenced in the table below.
|
|
6
4
|
|
|
7
5
|
| Name | Implementation type |
|
|
8
6
|
| ------------------------------------------- | ------------------- |
|
|
@@ -159,4 +157,3 @@ Based on the definitions provided and the implementation details in the `src` di
|
|
|
159
157
|
| algopy.op.EllipticCurve | Mockable |
|
|
160
158
|
| algopy.op.VrfVerify | Mockable |
|
|
161
159
|
| algopy.op.vrf_verify | Mockable |
|
|
162
|
-
|
{algorand_python_testing-0.3.0b6 → algorand_python_testing-0.3.0b8}/docs/testing-guide/opcodes.md
RENAMED
|
@@ -6,7 +6,6 @@ The [coverage](coverage.md) file provides a comprehensive list of all opcodes an
|
|
|
6
6
|
|
|
7
7
|
```{testsetup}
|
|
8
8
|
import algopy
|
|
9
|
-
import algopy_testing
|
|
10
9
|
from algopy_testing import algopy_testing_context
|
|
11
10
|
|
|
12
11
|
# Create the context manager for snippets below
|
|
@@ -29,7 +28,7 @@ The following opcodes are demonstrated:
|
|
|
29
28
|
- `op.ecdsa_verify`
|
|
30
29
|
|
|
31
30
|
```{testcode}
|
|
32
|
-
|
|
31
|
+
from algopy import op
|
|
33
32
|
|
|
34
33
|
# SHA256 hash
|
|
35
34
|
data = algopy.Bytes(b"Hello, World!")
|
|
@@ -59,7 +58,7 @@ The following opcodes are demonstrated:
|
|
|
59
58
|
- `op.setbit_uint64`
|
|
60
59
|
|
|
61
60
|
```{testcode}
|
|
62
|
-
|
|
61
|
+
from algopy import op
|
|
63
62
|
|
|
64
63
|
# Addition with carry
|
|
65
64
|
result, carry = op.addw(algopy.UInt64(2**63), algopy.UInt64(2**63))
|
|
@@ -80,7 +79,7 @@ These types necessitate interaction with the transaction context:
|
|
|
80
79
|
### algopy.op.Global
|
|
81
80
|
|
|
82
81
|
```{testcode}
|
|
83
|
-
|
|
82
|
+
from algopy import op
|
|
84
83
|
|
|
85
84
|
class MyContract(algopy.ARC4Contract):
|
|
86
85
|
@algopy.arc4.abimethod
|
|
@@ -102,12 +101,12 @@ assert result == algopy.UInt64(101000)
|
|
|
102
101
|
### algopy.op.Txn
|
|
103
102
|
|
|
104
103
|
```{testcode}
|
|
105
|
-
|
|
104
|
+
from algopy import op
|
|
106
105
|
|
|
107
106
|
class MyContract(algopy.ARC4Contract):
|
|
108
107
|
@algopy.arc4.abimethod
|
|
109
|
-
def check_txn_fields(self) -> algopy.
|
|
110
|
-
return op.Txn.sender
|
|
108
|
+
def check_txn_fields(self) -> algopy.arc4.Address:
|
|
109
|
+
return algopy.arc4.Address(op.Txn.sender)
|
|
111
110
|
|
|
112
111
|
... # setup context (below assumes available under 'ctx' variable)
|
|
113
112
|
|
|
@@ -121,7 +120,7 @@ assert result == custom_sender
|
|
|
121
120
|
### algopy.op.AssetHoldingGet
|
|
122
121
|
|
|
123
122
|
```{testcode}
|
|
124
|
-
|
|
123
|
+
from algopy import op
|
|
125
124
|
|
|
126
125
|
class AssetContract(algopy.ARC4Contract):
|
|
127
126
|
@algopy.arc4.abimethod
|
|
@@ -141,7 +140,7 @@ assert result == algopy.UInt64(5000)
|
|
|
141
140
|
### algopy.op.AppGlobal
|
|
142
141
|
|
|
143
142
|
```{testcode}
|
|
144
|
-
|
|
143
|
+
from algopy import op
|
|
145
144
|
|
|
146
145
|
class StateContract(algopy.ARC4Contract):
|
|
147
146
|
@algopy.arc4.abimethod
|
|
@@ -162,7 +161,7 @@ assert stored_value == 42
|
|
|
162
161
|
### algopy.op.Block
|
|
163
162
|
|
|
164
163
|
```{testcode}
|
|
165
|
-
|
|
164
|
+
from algopy import op
|
|
166
165
|
|
|
167
166
|
class BlockInfoContract(algopy.ARC4Contract):
|
|
168
167
|
@algopy.arc4.abimethod
|
|
@@ -180,7 +179,7 @@ assert seed == algopy.op.itob(123456)
|
|
|
180
179
|
### algopy.op.AcctParamsGet
|
|
181
180
|
|
|
182
181
|
```{testcode}
|
|
183
|
-
|
|
182
|
+
from algopy import op
|
|
184
183
|
|
|
185
184
|
class AccountParamsContract(algopy.ARC4Contract):
|
|
186
185
|
@algopy.arc4.abimethod
|
|
@@ -205,7 +204,7 @@ class AppParamsContract(algopy.ARC4Contract):
|
|
|
205
204
|
def get_app_creator(self, app_id: algopy.Application) -> algopy.arc4.Address:
|
|
206
205
|
creator, exists = algopy.op.AppParamsGet.app_creator(app_id)
|
|
207
206
|
assert exists
|
|
208
|
-
return creator
|
|
207
|
+
return algopy.arc4.Address(creator)
|
|
209
208
|
|
|
210
209
|
... # setup context (below assumes available under 'ctx' variable)
|
|
211
210
|
|
|
@@ -218,8 +217,7 @@ assert creator == context.default_sender
|
|
|
218
217
|
### algopy.op.AssetParamsGet
|
|
219
218
|
|
|
220
219
|
```{testcode}
|
|
221
|
-
from
|
|
222
|
-
import algopy.op as op
|
|
220
|
+
from algopy import op
|
|
223
221
|
|
|
224
222
|
class AssetParamsContract(algopy.ARC4Contract):
|
|
225
223
|
@algopy.arc4.abimethod
|
|
@@ -239,8 +237,7 @@ assert total == algopy.UInt64(1000000)
|
|
|
239
237
|
### algopy.op.Box
|
|
240
238
|
|
|
241
239
|
```{testcode}
|
|
242
|
-
from
|
|
243
|
-
import algopy.op as op
|
|
240
|
+
from algopy import op
|
|
244
241
|
|
|
245
242
|
class BoxStorageContract(algopy.ARC4Contract):
|
|
246
243
|
@algopy.arc4.abimethod
|
|
@@ -329,23 +326,22 @@ assert result == 11
|
|
|
329
326
|
```{testcode}
|
|
330
327
|
from unittest.mock import patch, MagicMock
|
|
331
328
|
import algopy
|
|
332
|
-
from algopy_testing.primitives import Bytes
|
|
333
329
|
|
|
334
330
|
def test_mock_vrf_verify():
|
|
335
|
-
mock_result = (Bytes(b'mock_output'), True)
|
|
331
|
+
mock_result = (algopy.Bytes(b'mock_output'), True)
|
|
336
332
|
with patch('algopy.op.vrf_verify', return_value=mock_result) as mock_vrf_verify:
|
|
337
333
|
result = algopy.op.vrf_verify(
|
|
338
334
|
algopy.op.VrfVerify.VrfAlgorand,
|
|
339
|
-
Bytes(b'proof'),
|
|
340
|
-
Bytes(b'message'),
|
|
341
|
-
Bytes(b'public_key')
|
|
335
|
+
algopy.Bytes(b'proof'),
|
|
336
|
+
algopy.Bytes(b'message'),
|
|
337
|
+
algopy.Bytes(b'public_key')
|
|
342
338
|
)
|
|
343
339
|
assert result == mock_result
|
|
344
340
|
mock_vrf_verify.assert_called_once_with(
|
|
345
341
|
algopy.op.VrfVerify.VrfAlgorand,
|
|
346
|
-
Bytes(b'proof'),
|
|
347
|
-
Bytes(b'message'),
|
|
348
|
-
Bytes(b'public_key')
|
|
342
|
+
algopy.Bytes(b'proof'),
|
|
343
|
+
algopy.Bytes(b'message'),
|
|
344
|
+
algopy.Bytes(b'public_key')
|
|
349
345
|
)
|
|
350
346
|
|
|
351
347
|
test_mock_vrf_verify()
|
|
@@ -356,19 +352,18 @@ test_mock_vrf_verify()
|
|
|
356
352
|
```{testcode}
|
|
357
353
|
from unittest.mock import patch, MagicMock
|
|
358
354
|
import algopy
|
|
359
|
-
from algopy_testing.primitives import Bytes
|
|
360
355
|
|
|
361
356
|
def test_mock_elliptic_curve_decompress():
|
|
362
|
-
mock_result = (Bytes(b'x_coord'), Bytes(b'y_coord'))
|
|
357
|
+
mock_result = (algopy.Bytes(b'x_coord'), algopy.Bytes(b'y_coord'))
|
|
363
358
|
with patch('algopy.op.EllipticCurve.decompress', return_value=mock_result) as mock_decompress:
|
|
364
359
|
result = algopy.op.EllipticCurve.decompress(
|
|
365
360
|
algopy.op.EC.BN254g1,
|
|
366
|
-
Bytes(b'compressed_point')
|
|
361
|
+
algopy.Bytes(b'compressed_point')
|
|
367
362
|
)
|
|
368
363
|
assert result == mock_result
|
|
369
364
|
mock_decompress.assert_called_once_with(
|
|
370
365
|
algopy.op.EC.BN254g1,
|
|
371
|
-
Bytes(b'compressed_point')
|
|
366
|
+
algopy.Bytes(b'compressed_point')
|
|
372
367
|
)
|
|
373
368
|
|
|
374
369
|
test_mock_elliptic_curve_decompress()
|
|
@@ -115,8 +115,8 @@ from algopy_testing import AlgopyTestContext, algopy_testing_context
|
|
|
115
115
|
|
|
116
116
|
class SimpleContract(algopy.ARC4Contract):
|
|
117
117
|
@algopy.arc4.abimethod
|
|
118
|
-
def check_sender(self) -> algopy.
|
|
119
|
-
return algopy.Txn.sender
|
|
118
|
+
def check_sender(self) -> algopy.arc4.Address:
|
|
119
|
+
return algopy.arc4.Address(algopy.Txn.sender)
|
|
120
120
|
...
|
|
121
121
|
|
|
122
122
|
# Create a contract instance
|
|
@@ -3,8 +3,7 @@ from collections.abc import Generator
|
|
|
3
3
|
|
|
4
4
|
import algopy
|
|
5
5
|
import pytest
|
|
6
|
-
from algopy_testing import AlgopyTestContext, algopy_testing_context
|
|
7
|
-
from algopy_testing.utils import arc4_prefix
|
|
6
|
+
from algopy_testing import AlgopyTestContext, algopy_testing_context, arc4_prefix
|
|
8
7
|
|
|
9
8
|
from .contract import ZkWhitelistContract
|
|
10
9
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "algorand-python-testing"
|
|
7
|
-
version = "0.3.0-beta.
|
|
7
|
+
version = "0.3.0-beta.8"
|
|
8
8
|
description = 'Algorand Python testing library'
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12"
|
|
@@ -41,7 +41,7 @@ Source = "https://github.com/algorandfoundation/puya/tree/main/algopy_testing"
|
|
|
41
41
|
allow-direct-references = true
|
|
42
42
|
|
|
43
43
|
[tool.hatch.build.targets.wheel]
|
|
44
|
-
packages = ["src/algopy", 'src/algopy_testing']
|
|
44
|
+
packages = ["src/algopy", 'src/algopy_testing', 'src/_algopy_testing']
|
|
45
45
|
|
|
46
46
|
[[tool.hatch.envs.all.matrix]]
|
|
47
47
|
python = ["3.12"]
|
|
@@ -126,7 +126,6 @@ clean_dist = "rm -rf dist"
|
|
|
126
126
|
|
|
127
127
|
# docs environment
|
|
128
128
|
[tool.hatch.envs.docs]
|
|
129
|
-
detached = true
|
|
130
129
|
path = ".venv.docs"
|
|
131
130
|
type = "virtual"
|
|
132
131
|
python = "3.12"
|
|
@@ -141,13 +140,13 @@ dependencies = [
|
|
|
141
140
|
"ipykernel",
|
|
142
141
|
"pytest",
|
|
143
142
|
"py-algorand-sdk",
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
143
|
+
]
|
|
144
|
+
# environment has algopy_testing included as an editable dependency
|
|
145
|
+
# however it also includes the package dependencies
|
|
146
|
+
# the stubs can't be in the same as the project when it is editable
|
|
147
|
+
# so explicitly remove them
|
|
148
|
+
post-install-commands = [
|
|
149
|
+
"hatch run docs:pip uninstall -y algorand-python",
|
|
151
150
|
]
|
|
152
151
|
|
|
153
152
|
[tool.hatch.envs.docs.scripts]
|
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
from
|
|
2
|
-
from
|
|
3
|
-
from
|
|
4
|
-
from
|
|
5
|
-
from
|
|
6
|
-
from
|
|
7
|
-
from
|
|
8
|
-
from
|
|
9
|
-
from
|
|
10
|
-
from algopy_testing.decorators.subroutine import subroutine
|
|
11
|
-
from algopy_testing.enums import OnCompleteAction, TransactionType
|
|
12
|
-
from algopy_testing.models import (
|
|
1
|
+
from _algopy_testing import arc4, gtxn, itxn
|
|
2
|
+
from _algopy_testing.context import AlgopyTestContext
|
|
3
|
+
from _algopy_testing.context_helpers.context_storage import algopy_testing_context
|
|
4
|
+
from _algopy_testing.context_helpers.ledger_context import LedgerContext
|
|
5
|
+
from _algopy_testing.context_helpers.txn_context import TransactionContext
|
|
6
|
+
from _algopy_testing.decorators.subroutine import subroutine
|
|
7
|
+
from _algopy_testing.enums import OnCompleteAction, TransactionType
|
|
8
|
+
from _algopy_testing.itxn_loader import ITxnGroupLoader, ITxnLoader
|
|
9
|
+
from _algopy_testing.models import (
|
|
13
10
|
Account,
|
|
14
11
|
Application,
|
|
15
12
|
ARC4Contract,
|
|
@@ -22,8 +19,11 @@ from algopy_testing.models import (
|
|
|
22
19
|
uenumerate,
|
|
23
20
|
urange,
|
|
24
21
|
)
|
|
25
|
-
from
|
|
26
|
-
from
|
|
22
|
+
from _algopy_testing.primitives import BigUInt, Bytes, String, UInt64
|
|
23
|
+
from _algopy_testing.state import Box, BoxMap, BoxRef, GlobalState, LocalState
|
|
24
|
+
from _algopy_testing.value_generators.arc4 import ARC4ValueGenerator
|
|
25
|
+
from _algopy_testing.value_generators.avm import AVMValueGenerator
|
|
26
|
+
from _algopy_testing.value_generators.txn import TxnValueGenerator
|
|
27
27
|
|
|
28
28
|
# TODO: clean up and ensure only algopy_testing namespace specific user facing abstractions
|
|
29
29
|
# are exposed Only keep the _value_generators, ledger_context, txn_context,
|
|
@@ -62,7 +62,6 @@ __all__ = [
|
|
|
62
62
|
"gtxn",
|
|
63
63
|
"itxn",
|
|
64
64
|
"logicsig",
|
|
65
|
-
"op",
|
|
66
65
|
"subroutine",
|
|
67
66
|
"uenumerate",
|
|
68
67
|
"urange",
|
|
@@ -8,22 +8,22 @@ import typing
|
|
|
8
8
|
import algosdk
|
|
9
9
|
from Cryptodome.Hash import SHA512
|
|
10
10
|
|
|
11
|
-
from
|
|
12
|
-
MutableBytes,
|
|
13
|
-
add_mutable_callback,
|
|
14
|
-
set_item_on_mutate,
|
|
15
|
-
)
|
|
16
|
-
from algopy_testing.constants import (
|
|
11
|
+
from _algopy_testing.constants import (
|
|
17
12
|
ARC4_RETURN_PREFIX,
|
|
18
13
|
BITS_IN_BYTE,
|
|
19
14
|
MAX_UINT64,
|
|
20
15
|
UINT64_SIZE,
|
|
21
16
|
UINT512_SIZE,
|
|
22
17
|
)
|
|
23
|
-
from
|
|
24
|
-
from
|
|
25
|
-
|
|
26
|
-
|
|
18
|
+
from _algopy_testing.models.account import Account
|
|
19
|
+
from _algopy_testing.mutable import (
|
|
20
|
+
MutableBytes,
|
|
21
|
+
add_mutable_callback,
|
|
22
|
+
set_item_on_mutate,
|
|
23
|
+
)
|
|
24
|
+
from _algopy_testing.primitives import Bytes
|
|
25
|
+
from _algopy_testing.protocols import BytesBacked
|
|
26
|
+
from _algopy_testing.utils import (
|
|
27
27
|
as_bytes,
|
|
28
28
|
as_int,
|
|
29
29
|
as_int16,
|
|
@@ -62,6 +62,8 @@ __all__ = [
|
|
|
62
62
|
"UInt8",
|
|
63
63
|
"UIntN",
|
|
64
64
|
"abi_call",
|
|
65
|
+
"arc4_create",
|
|
66
|
+
"arc4_update",
|
|
65
67
|
"arc4_signature",
|
|
66
68
|
"emit",
|
|
67
69
|
]
|
|
@@ -216,7 +218,7 @@ class String(_ABIEncoded):
|
|
|
216
218
|
f"value must be a string or String type, not {type(value).__name__!r}"
|
|
217
219
|
)
|
|
218
220
|
|
|
219
|
-
self._value = len(bytes_value)
|
|
221
|
+
self._value = as_bytes(_encode_length(len(bytes_value)) + bytes_value)
|
|
220
222
|
|
|
221
223
|
@property
|
|
222
224
|
def native(self) -> algopy.String:
|
|
@@ -533,25 +535,12 @@ class Byte(UIntN[typing.Literal[8]]):
|
|
|
533
535
|
|
|
534
536
|
|
|
535
537
|
UInt8: typing.TypeAlias = UIntN[typing.Literal[8]]
|
|
536
|
-
"""An ARC4 UInt8."""
|
|
537
|
-
|
|
538
538
|
UInt16: typing.TypeAlias = UIntN[typing.Literal[16]]
|
|
539
|
-
"""An ARC4 UInt16."""
|
|
540
|
-
|
|
541
539
|
UInt32: typing.TypeAlias = UIntN[typing.Literal[32]]
|
|
542
|
-
"""An ARC4 UInt32."""
|
|
543
|
-
|
|
544
540
|
UInt64: typing.TypeAlias = UIntN[typing.Literal[64]]
|
|
545
|
-
"""An ARC4 UInt64."""
|
|
546
|
-
|
|
547
541
|
UInt128: typing.TypeAlias = BigUIntN[typing.Literal[128]]
|
|
548
|
-
"""An ARC4 UInt128."""
|
|
549
|
-
|
|
550
542
|
UInt256: typing.TypeAlias = BigUIntN[typing.Literal[256]]
|
|
551
|
-
"""An ARC4 UInt256."""
|
|
552
|
-
|
|
553
543
|
UInt512: typing.TypeAlias = BigUIntN[typing.Literal[512]]
|
|
554
|
-
"""An ARC4 UInt512."""
|
|
555
544
|
|
|
556
545
|
|
|
557
546
|
class _BoolTypeInfo(_TypeInfo):
|
|
@@ -665,6 +654,8 @@ class StaticArray(
|
|
|
665
654
|
super().__init__()
|
|
666
655
|
items = _check_is_arc4(_items)
|
|
667
656
|
for item in items:
|
|
657
|
+
if len(items) != self._type_info.size:
|
|
658
|
+
raise TypeError(f"expected {self._type_info.size} items, not {len(items)}")
|
|
668
659
|
if self._type_info.item_type != item._type_info:
|
|
669
660
|
raise TypeError(
|
|
670
661
|
f"item must be of type {self._type_info.item_type!r}, not {item._type_info!r}"
|
|
@@ -735,10 +726,10 @@ class Address(StaticArray[Byte, typing.Literal[32]]):
|
|
|
735
726
|
bytes_value = algosdk.encoding.decode_address(value)
|
|
736
727
|
except Exception as e:
|
|
737
728
|
raise ValueError(f"cannot encode the following address: {value!r}") from e
|
|
729
|
+
elif isinstance(value, Account):
|
|
730
|
+
bytes_value = value.bytes.value
|
|
738
731
|
else:
|
|
739
|
-
bytes_value = (
|
|
740
|
-
value.bytes.value if isinstance(value, Account) else as_bytes(value, max_size=32)
|
|
741
|
-
)
|
|
732
|
+
bytes_value = as_bytes(value)
|
|
742
733
|
if len(bytes_value) != 32:
|
|
743
734
|
raise ValueError(f"expected 32 bytes, got: {len(bytes_value)}")
|
|
744
735
|
self._value = bytes_value
|
|
@@ -1124,14 +1115,6 @@ class Struct(MutableBytes, _ABIEncoded, metaclass=_StructMeta): # type: ignore[
|
|
|
1124
1115
|
tuple_value = tuple_type.from_bytes(value)
|
|
1125
1116
|
return cls(*tuple_value.native)
|
|
1126
1117
|
|
|
1127
|
-
@classmethod
|
|
1128
|
-
def from_log(cls, log: algopy.Bytes, /) -> typing.Self:
|
|
1129
|
-
"""Load an ABI type from application logs, checking for the ABI return prefix
|
|
1130
|
-
`0x151f7c75`"""
|
|
1131
|
-
if log[:4] == ARC4_RETURN_PREFIX:
|
|
1132
|
-
return cls.from_bytes(log[4:])
|
|
1133
|
-
raise ValueError("ABI return prefix not found")
|
|
1134
|
-
|
|
1135
1118
|
@property
|
|
1136
1119
|
def bytes(self) -> algopy.Bytes:
|
|
1137
1120
|
"""Get the underlying bytes[]"""
|
|
@@ -1150,7 +1133,6 @@ class ARC4Client:
|
|
|
1150
1133
|
|
|
1151
1134
|
|
|
1152
1135
|
class _ABICall:
|
|
1153
|
-
|
|
1154
1136
|
def __init__(self, func_name: str) -> None:
|
|
1155
1137
|
self.func_name = func_name
|
|
1156
1138
|
|
|
@@ -1175,7 +1157,7 @@ arc4_update = _ABICall("arc4_update")
|
|
|
1175
1157
|
|
|
1176
1158
|
|
|
1177
1159
|
def emit(event: str | Struct, /, *args: object) -> None:
|
|
1178
|
-
from
|
|
1160
|
+
from _algopy_testing.utilities.log import log
|
|
1179
1161
|
|
|
1180
1162
|
if isinstance(event, str):
|
|
1181
1163
|
arc4_args = tuple(_cast_arg_as_arc4(arg) for arg in args)
|
|
@@ -1213,7 +1195,7 @@ def native_value_to_arc4(value: object) -> _ABIEncoded: # noqa: PLR0911
|
|
|
1213
1195
|
if isinstance(value, algopy.String):
|
|
1214
1196
|
return String(value)
|
|
1215
1197
|
if isinstance(value, tuple):
|
|
1216
|
-
return Tuple(value)
|
|
1198
|
+
return Tuple(tuple(map(native_value_to_arc4, value)))
|
|
1217
1199
|
raise TypeError(f"Unsupported type: {type(value).__name__}")
|
|
1218
1200
|
|
|
1219
1201
|
|
|
@@ -4,7 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
import dataclasses
|
|
5
5
|
import typing
|
|
6
6
|
|
|
7
|
-
from
|
|
7
|
+
from _algopy_testing.utils import raise_mocked_function_error
|
|
8
8
|
|
|
9
9
|
if typing.TYPE_CHECKING:
|
|
10
10
|
from collections.abc import Mapping
|
|
@@ -4,8 +4,8 @@ import typing
|
|
|
4
4
|
|
|
5
5
|
import algosdk
|
|
6
6
|
|
|
7
|
-
from
|
|
8
|
-
from
|
|
7
|
+
from _algopy_testing.context_helpers import LedgerContext, TransactionContext
|
|
8
|
+
from _algopy_testing.value_generators import AlgopyValueGenerator
|
|
9
9
|
|
|
10
10
|
if typing.TYPE_CHECKING:
|
|
11
11
|
from collections.abc import Sequence
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from _algopy_testing.context_helpers.context_storage import (
|
|
2
|
+
algopy_testing_context,
|
|
3
|
+
lazy_context,
|
|
4
|
+
)
|
|
5
|
+
from _algopy_testing.context_helpers.ledger_context import LedgerContext
|
|
6
|
+
from _algopy_testing.context_helpers.txn_context import TransactionContext
|
|
7
|
+
|
|
8
|
+
__all__ = [
|
|
9
|
+
"LedgerContext",
|
|
10
|
+
"TransactionContext",
|
|
11
|
+
"algopy_testing_context",
|
|
12
|
+
"lazy_context",
|
|
13
|
+
]
|
|
@@ -9,13 +9,13 @@ if typing.TYPE_CHECKING:
|
|
|
9
9
|
|
|
10
10
|
import algopy
|
|
11
11
|
|
|
12
|
-
from
|
|
13
|
-
from
|
|
14
|
-
from
|
|
15
|
-
from
|
|
16
|
-
from
|
|
17
|
-
from
|
|
18
|
-
from
|
|
12
|
+
from _algopy_testing.context import AlgopyTestContext
|
|
13
|
+
from _algopy_testing.context_helpers.ledger_context import LedgerContext
|
|
14
|
+
from _algopy_testing.context_helpers.txn_context import TransactionContext, TransactionGroup
|
|
15
|
+
from _algopy_testing.models.account import AccountContextData
|
|
16
|
+
from _algopy_testing.models.application import ApplicationContextData
|
|
17
|
+
from _algopy_testing.models.asset import AssetFields
|
|
18
|
+
from _algopy_testing.value_generators import AlgopyValueGenerator
|
|
19
19
|
|
|
20
20
|
_var: ContextVar[AlgopyTestContext] = ContextVar("_var")
|
|
21
21
|
|
|
@@ -47,7 +47,7 @@ class _InternalContext:
|
|
|
47
47
|
def any(self) -> AlgopyValueGenerator:
|
|
48
48
|
return self.value.any
|
|
49
49
|
|
|
50
|
-
def
|
|
50
|
+
def get_active_txn_overrides(self) -> dict[str, typing.Any]:
|
|
51
51
|
active_group = self.txn._active_group
|
|
52
52
|
if active_group is None:
|
|
53
53
|
return {}
|
|
@@ -97,7 +97,12 @@ def algopy_testing_context(
|
|
|
97
97
|
*,
|
|
98
98
|
default_sender: str | None = None,
|
|
99
99
|
) -> Generator[AlgopyTestContext, None, None]:
|
|
100
|
-
|
|
100
|
+
"""Context manager for the AlgopyTestContext.
|
|
101
|
+
|
|
102
|
+
Args:
|
|
103
|
+
default_sender: The default sender for the context.
|
|
104
|
+
"""
|
|
105
|
+
from _algopy_testing.context import AlgopyTestContext
|
|
101
106
|
|
|
102
107
|
token = _var.set(
|
|
103
108
|
AlgopyTestContext(
|