algorand-python-testing 1.1.0b1__tar.gz → 1.2.0b2__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-1.1.0b1 → algorand_python_testing-1.2.0b2}/CHANGELOG.md +14 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/PKG-INFO +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/coverage.md +3 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/index.md +4 -4
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/avm-types.md +16 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/concepts.md +2 -2
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/contract-testing.md +5 -5
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/subroutines.md +3 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/transactions.md +2 -2
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/marketplace/contract.py +0 -3
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/proof_of_attendance/contract.py +13 -13
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/simple_voting/contract.py +0 -4
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/pyproject.toml +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/__init__.py +7 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/decorators/arc4.py +3 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/primitives/__init__.py +2 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/primitives/bytes.py +7 -8
- algorand_python_testing-1.2.0b2/src/_algopy_testing/primitives/fixed_bytes.py +336 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/serialize.py +10 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/state/utils.py +2 -5
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/utils.py +2 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/value_generators/avm.py +15 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/algopy/__init__.py +7 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_abi_call.py +2 -2
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_arc4_method_signature.py +9 -3
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/AVM12/data/Contract.approval.teal +7 -7
- algorand_python_testing-1.2.0b2/tests/artifacts/AVM12/data/Contract.arc56.json +119 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/AVM12/data/Contract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/AVM12/data/ContractV0.approval.teal +3 -5
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/AVM12/data/ContractV0.arc56.json +6 -18
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/AVM12/data/ContractV0.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/AVM12/data/ContractV1.approval.teal +3 -5
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/AVM12/data/ContractV1.arc56.json +6 -18
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/AVM12/data/ContractV1.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4ABIMethod/contract.py +5 -2
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.approval.teal +96 -84
- algorand_python_testing-1.2.0b2/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc56.json +496 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.approval.teal +3 -5
- algorand_python_testing-1.2.0b2/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc56.json +88 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.approval.teal +13 -15
- algorand_python_testing-1.2.0b2/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc56.json +1575 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/Contract.approval.teal +186 -178
- algorand_python_testing-1.2.0b2/tests/artifacts/Arrays/data/Contract.arc56.json +367 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/Contract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/DynamicArrayInitContract.approval.teal +48 -82
- algorand_python_testing-1.2.0b2/tests/artifacts/Arrays/data/DynamicArrayInitContract.arc56.json +131 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/DynamicArrayInitContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/ImmutableArrayContract.approval.teal +106 -108
- algorand_python_testing-1.2.0b2/tests/artifacts/Arrays/data/ImmutableArrayContract.arc56.json +828 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/ImmutableArrayContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/StaticSizeContract.approval.teal +60 -66
- algorand_python_testing-1.2.0b2/tests/artifacts/Arrays/data/StaticSizeContract.arc56.json +322 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/StaticSizeContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/static_size.py +0 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/BoxContract/data/BoxContract.approval.teal +49 -47
- algorand_python_testing-1.2.0b2/tests/artifacts/BoxContract/data/BoxContract.arc56.json +768 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/BoxContract/data/BoxContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Contains/contract.py +0 -5
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Contains/data/MyContract.approval.teal +13 -16
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Contains/data/MyContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CreatedAppAsset/data/AppCall.approval.teal +3 -5
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CreatedAppAsset/data/AppCall.arc56.json +6 -19
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CreatedAppAsset/data/AppCall.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.approval.teal +10 -5
- algorand_python_testing-1.2.0b2/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc56.json +169 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CryptoOps/data/CryptoOpsContract.approval.teal +7 -9
- algorand_python_testing-1.2.0b2/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc56.json +437 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CryptoOps/data/CryptoOpsContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.approval.teal +5 -5
- algorand_python_testing-1.2.0b2/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc56.json +99 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.approval.teal +2 -4
- algorand_python_testing-1.2.0b2/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc56.json +999 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/PrimitiveOps/contract.py +3 -2
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.approval.teal +11 -8
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc56.json +10 -19
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateMutations/data/StateMutations.approval.teal +2 -4
- algorand_python_testing-1.2.0b2/tests/artifacts/StateMutations/data/StateMutations.arc56.json +258 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateMutations/data/StateMutations.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/GlobalStateContract.approval.teal +1 -3
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/GlobalStateContract.arc56.json +20 -32
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/GlobalStateContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/ITxnOpsContract.approval.teal +3 -3
- algorand_python_testing-1.2.0b2/tests/artifacts/StateOps/data/ITxnOpsContract.arc56.json +83 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/ITxnOpsContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/LocalStateContract.approval.teal +2 -4
- algorand_python_testing-1.2.0b2/tests/artifacts/StateOps/data/LocalStateContract.arc56.json +565 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/LocalStateContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.approval.teal +2 -4
- algorand_python_testing-1.2.0b2/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc56.json +466 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppGlobalContract.approval.teal +1 -3
- algorand_python_testing-1.2.0b2/tests/artifacts/StateOps/data/StateAppGlobalContract.arc56.json +241 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppGlobalContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppGlobalExContract.approval.teal +2 -4
- algorand_python_testing-1.2.0b2/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc56.json +97 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppGlobalExContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppLocalContract.approval.teal +4 -6
- algorand_python_testing-1.2.0b2/tests/artifacts/StateOps/data/StateAppLocalContract.arc56.json +310 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppLocalContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppLocalExContract.approval.teal +5 -7
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppLocalExContract.arc56.json +6 -19
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppLocalExContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppParamsContract.approval.teal +1 -3
- algorand_python_testing-1.2.0b2/tests/artifacts/StateOps/data/StateAppParamsContract.arc56.json +285 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppParamsContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAssetHoldingContract.approval.teal +4 -6
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc56.json +6 -19
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAssetHoldingContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAssetParamsContract.approval.teal +2 -4
- algorand_python_testing-1.2.0b2/tests/artifacts/StateOps/data/StateAssetParamsContract.arc56.json +354 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAssetParamsContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Tuples/data/TuplesContract.approval.teal +2 -4
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Tuples/data/TuplesContract.arc56.json +6 -19
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Tuples/data/TuplesContract.clear.teal +1 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/models/test_box.py +15 -1
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/models/test_contract.py +1 -3
- algorand_python_testing-1.2.0b2/tests/primitives/test_fixed_bytes.py +695 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/utilities/test_log.py +5 -3
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/utilities/test_size_of.py +4 -2
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/value_generators/test_avm.py +15 -2
- algorand_python_testing-1.1.0b1/tests/artifacts/AVM12/data/Contract.arc56.json +0 -131
- algorand_python_testing-1.1.0b1/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc56.json +0 -498
- algorand_python_testing-1.1.0b1/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc56.json +0 -101
- algorand_python_testing-1.1.0b1/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc56.json +0 -1587
- algorand_python_testing-1.1.0b1/tests/artifacts/Arrays/data/Contract.arc56.json +0 -379
- algorand_python_testing-1.1.0b1/tests/artifacts/Arrays/data/DynamicArrayInitContract.arc56.json +0 -144
- algorand_python_testing-1.1.0b1/tests/artifacts/Arrays/data/ImmutableArrayContract.arc56.json +0 -840
- algorand_python_testing-1.1.0b1/tests/artifacts/Arrays/data/StaticSizeContract.arc56.json +0 -334
- algorand_python_testing-1.1.0b1/tests/artifacts/BoxContract/data/BoxContract.arc56.json +0 -780
- algorand_python_testing-1.1.0b1/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc56.json +0 -181
- algorand_python_testing-1.1.0b1/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc56.json +0 -450
- algorand_python_testing-1.1.0b1/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc56.json +0 -111
- algorand_python_testing-1.1.0b1/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc56.json +0 -1012
- algorand_python_testing-1.1.0b1/tests/artifacts/StateMutations/data/StateMutations.arc56.json +0 -276
- algorand_python_testing-1.1.0b1/tests/artifacts/StateOps/data/ITxnOpsContract.arc56.json +0 -96
- algorand_python_testing-1.1.0b1/tests/artifacts/StateOps/data/LocalStateContract.arc56.json +0 -583
- algorand_python_testing-1.1.0b1/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc56.json +0 -478
- algorand_python_testing-1.1.0b1/tests/artifacts/StateOps/data/StateAppGlobalContract.arc56.json +0 -254
- algorand_python_testing-1.1.0b1/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc56.json +0 -104
- algorand_python_testing-1.1.0b1/tests/artifacts/StateOps/data/StateAppLocalContract.arc56.json +0 -329
- algorand_python_testing-1.1.0b1/tests/artifacts/StateOps/data/StateAppParamsContract.arc56.json +0 -297
- algorand_python_testing-1.1.0b1/tests/artifacts/StateOps/data/StateAssetParamsContract.arc56.json +0 -366
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.coveragerc +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.editorconfig +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.github/dependabot.yml +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.github/pull_request_template.md +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.github/workflows/cd.yaml +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.github/workflows/ci.yaml +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.github/workflows/gh-pages.yaml +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.gitignore +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.pre-commit-config.yaml +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.vscode/extensions.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.vscode/launch.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/.vscode/settings.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/CONTRIBUTING.md +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/LICENSE +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/README.md +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/Makefile +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/_static/custom.css +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/algopy.md +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/api.md +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/conf.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/examples.md +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/faq.md +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/make.bat +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/arc4-types.md +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/index.md +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/opcodes.md +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/signature-testing.md +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/state-management.md +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/README.md +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/auction/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/auction/contract.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/auction/test_contract.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/htlc_logicsig/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/htlc_logicsig/signature.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/htlc_logicsig/test_signature.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/marketplace/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/marketplace/test_contract.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/proof_of_attendance/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/proof_of_attendance/test_contract.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/scratch_storage/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/scratch_storage/contract.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/scratch_storage/test_contract.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/simple_voting/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/simple_voting/test_contract.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/zk_whitelist/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/zk_whitelist/contract.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/zk_whitelist/test_contract.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/scripts/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/scripts/check_stubs_cov.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/scripts/refresh_test_artifacts.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/scripts/validate_examples.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/arc4.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/compiled.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/constants.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/context.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/context_helpers/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/context_helpers/context_storage.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/context_helpers/ledger_context.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/context_helpers/txn_context.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/decorators/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/decorators/subroutine.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/enums.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/gtxn.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/itxn.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/itxn_loader.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/models/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/models/account.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/models/application.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/models/asset.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/models/contract.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/models/logicsig.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/models/template_variable.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/models/txn_fields.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/models/unsigned_builtins.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/mutable.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/op/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/op/block.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/op/constants.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/op/crypto.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/op/global_values.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/op/itxn.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/op/misc.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/op/pure.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/op/txn.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/primitives/array.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/primitives/biguint.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/primitives/string.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/primitives/uint64.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/protocols.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/py.typed +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/state/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/state/box.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/state/global_state.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/state/local_state.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/utilities/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/utilities/budget.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/utilities/log.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/utilities/size_of.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/value_generators/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/value_generators/arc4.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/value_generators/txn.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/algopy/arc4.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/algopy/gtxn.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/algopy/itxn.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/algopy/op.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/algopy/py.typed +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/algopy_testing/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/algopy_testing/py.typed +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/templates/.macros.j2 +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/templates/.release_notes.md.j2 +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/templates/CHANGELOG.md.j2 +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/conftest.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_address.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_bool.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_dynamic_array.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_dynamic_bytes.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_emit.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_static_array.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_string.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_struct.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_tuple.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_ufixednxm.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/arc4/test_uintn.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/AVM12/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/AVM12/contract.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4ABIMethod/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4InnerTxns/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4InnerTxns/contract.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4PrimitiveOps/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4PrimitiveOps/contract.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/Contract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/ImmutableArrayContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/ImmutableArrayInitContract.approval.teal +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/ImmutableArrayInitContract.arc56.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/ImmutableArrayInitContract.clear.teal +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/data/StaticSizeContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/immutable.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Arrays/uint64.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/BoxContract/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/BoxContract/contract.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/BoxContract/data/BoxContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Contains/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CreatedAppAsset/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CreatedAppAsset/contract.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CreatedAppAsset/data/AppCall.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CreatedAppAsset/other.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CryptoOps/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CryptoOps/contract.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/GlobalStateValidator/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/GlobalStateValidator/contract.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/MiscellaneousOps/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/MiscellaneousOps/contract.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/PrimitiveOps/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateMutations/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateMutations/data/Contract.approval.teal +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateMutations/data/Contract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateMutations/data/Contract.clear.teal +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateMutations/data/StateMutations.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateMutations/statemutations.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/contract.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/GlobalStateContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/ITxnOpsContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/LocalStateContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAcctParamsGet.approval.teal +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAcctParamsGet.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAcctParamsGet.clear.teal +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppGlobalContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppLocalContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppLocalExContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAppParamsContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/StateOps/data/StateAssetParamsContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Tuples/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Tuples/contract.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/Tuples/data/TuplesContract.arc32.json +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/artifacts/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/avm12/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/avm12/conftest.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/avm12/test_avm12.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/common.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/conftest.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/contexts/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/models/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/models/test_asset.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/models/test_box_map.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/models/test_box_ref.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/models/test_uenumerate.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/models/test_urange.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/primitives/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/primitives/conftest.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/primitives/test_biguint.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/primitives/test_bytes.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/primitives/test_string.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/primitives/test_uint64.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/state/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/state/conftest.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/state/test_global_state.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/state/test_local_state.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/state/test_mutations.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/test_array.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/test_context.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/test_miscellaneous_op.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/test_op.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/util.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/utilities/__init__.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/utilities/conftest.py +0 -0
- {algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/tests/value_generators/__init__.py +0 -0
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
|
+
## v1.2.0-beta.2 (2025-12-08)
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* add algopy.public alias for algopy.arc4.abimethod decorator ([`32a2787`](https://github.com/algorandfoundation/algorand-python-testing/commit/32a27877a30f03e5330aa1bdb7a4fadbea543529))
|
|
7
|
+
|
|
8
|
+
## v1.2.0-beta.1 (2025-12-05)
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
* add fixed size variant of bytes as a separate `FixedBytes` type ([`9a2ab8e`](https://github.com/algorandfoundation/algorand-python-testing/commit/9a2ab8e3f94e9e7a2a416a94a54cf51b57599089))
|
|
13
|
+
|
|
14
|
+
## v1.1.0 (2025-10-20)
|
|
15
|
+
|
|
2
16
|
## v1.1.0-beta.1 (2025-10-20)
|
|
3
17
|
|
|
4
18
|
### Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: algorand-python-testing
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2.0b2
|
|
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
|
|
@@ -3,7 +3,7 @@
|
|
|
3
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 stubs for which the `algorand-python-testing` library provides implementations referenced in the table below.
|
|
4
4
|
|
|
5
5
|
| Name | Implementation type |
|
|
6
|
-
|
|
6
|
+
| ------------------------------------------- | ------------------- |
|
|
7
7
|
| algopy.Account | Emulated |
|
|
8
8
|
| algopy.Application | Emulated |
|
|
9
9
|
| algopy.Asset | Emulated |
|
|
@@ -18,6 +18,7 @@ See which `algorand-python` stubs are implemented by the `algorand-python-testin
|
|
|
18
18
|
| algopy.CompiledLogicSig | Mockable |
|
|
19
19
|
| algopy.Contract | Emulated |
|
|
20
20
|
| algopy.FixedArray | Native |
|
|
21
|
+
| algopy.FixedBytes | Native |
|
|
21
22
|
| algopy.Global | Emulated |
|
|
22
23
|
| algopy.GlobalState | Emulated |
|
|
23
24
|
| algopy.ImmutableArray | Native |
|
|
@@ -39,6 +40,7 @@ See which `algorand-python` stubs are implemented by the `algorand-python-testin
|
|
|
39
40
|
| algopy.ensure_budget | Emulated |
|
|
40
41
|
| algopy.log | Emulated |
|
|
41
42
|
| algopy.logicsig | Emulated |
|
|
43
|
+
| algopy.public | Emulated |
|
|
42
44
|
| algopy.size_of | Emulated |
|
|
43
45
|
| algopy.subroutine | Native |
|
|
44
46
|
| algopy.uenumerate | Native |
|
|
@@ -62,7 +62,7 @@ class VotingContract(algopy.ARC4Contract):
|
|
|
62
62
|
)
|
|
63
63
|
self.voted = algopy.LocalState(algopy.UInt64, key="voted", description="Tracks if an account has voted")
|
|
64
64
|
|
|
65
|
-
@
|
|
65
|
+
@algopy.public
|
|
66
66
|
def set_topic(self, topic: arc4.String) -> None:
|
|
67
67
|
self.topic.value = topic.bytes
|
|
68
68
|
|
|
@@ -79,7 +79,7 @@ class VotingContract(algopy.ARC4Contract):
|
|
|
79
79
|
self.voted[algopy.Txn.sender] = algopy.UInt64(1)
|
|
80
80
|
return arc4.Bool(True)
|
|
81
81
|
|
|
82
|
-
@
|
|
82
|
+
@algopy.public(readonly=True)
|
|
83
83
|
def get_votes(self) -> arc4.UInt64:
|
|
84
84
|
return arc4.UInt64(self.votes.value)
|
|
85
85
|
|
|
@@ -141,9 +141,9 @@ This example demonstrates key aspects of testing with `algorand-python-testing`
|
|
|
141
141
|
1. ARC4 Contract Features:
|
|
142
142
|
|
|
143
143
|
- Use of `algopy.ARC4Contract` as the base class for the contract.
|
|
144
|
-
- ABI methods defined using the `@arc4.abimethod
|
|
144
|
+
- ABI methods defined using the `@arc4.abimethod`, or its alias `@algopy.public`, decorator.
|
|
145
145
|
- Use of ARC4-specific types like `arc4.String`, `arc4.Bool`, and `arc4.UInt64`.
|
|
146
|
-
- Readonly method annotation with `@arc4.abimethod(readonly=True)
|
|
146
|
+
- Readonly method annotation with `@arc4.abimethod(readonly=True)` or `@algopy.public(readonly=True)` .
|
|
147
147
|
|
|
148
148
|
2. Testing ARC4 Contracts:
|
|
149
149
|
|
{algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/avm-types.md
RENAMED
|
@@ -50,6 +50,22 @@ random_bytes = context.any.bytes()
|
|
|
50
50
|
random_bytes = context.any.bytes(length=32)
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
+
## FixedBytes
|
|
54
|
+
|
|
55
|
+
```{testcode}
|
|
56
|
+
import typing
|
|
57
|
+
|
|
58
|
+
# Direct instantiation
|
|
59
|
+
bytes_value = algopy.FixedBytes[typing.Literal[16]](b"Hello, Algorand!")
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
# Instantiate test context
|
|
63
|
+
...
|
|
64
|
+
|
|
65
|
+
# Generate random byte sequences of length 32
|
|
66
|
+
random_bytes = context.any.fixed_bytes(algopy.FixedBytes[typing.Literal[32]])
|
|
67
|
+
```
|
|
68
|
+
|
|
53
69
|
## String
|
|
54
70
|
|
|
55
71
|
```{testcode}
|
{algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/docs/testing-guide/concepts.md
RENAMED
|
@@ -61,5 +61,5 @@ For a full list of all public `algopy` types and their corresponding implementat
|
|
|
61
61
|
|
|
62
62
|
## Data Validation
|
|
63
63
|
|
|
64
|
-
Algorand Python and the puya compiler have functionality to perform validation of transaction inputs via the `--validate-abi-args`, `--validate-abi-return` CLI arguments, `arc4.abimethod(validate_encoding=...)` decorator and `.validate()` methods.
|
|
65
|
-
The Algorand Python Testing library does
|
|
64
|
+
Algorand Python and the puya compiler have functionality to perform validation of transaction inputs via the `--validate-abi-args`, `--validate-abi-return` CLI arguments, `arc4.abimethod(validate_encoding=...)` decorator (or its alias, `algopy.public`) and `.validate()` methods.
|
|
65
|
+
The Algorand Python Testing library does _NOT_ implement this validation behaviour, as you should test invalid inputs using an integrated test against a real Algorand network.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Smart Contract Testing
|
|
2
2
|
|
|
3
|
-
This guide provides an overview of how to test smart contracts using the Algorand Python SDK (`algopy`). It covers the basics of testing `ARC4Contract` and `Contract` classes, focusing on the `abimethod` and `
|
|
3
|
+
This guide provides an overview of how to test smart contracts using the Algorand Python SDK (`algopy`). It covers the basics of testing `ARC4Contract` and `Contract` classes, focusing on the `baremethod`, `abimethod` and `public` (an alias of `abimethod`) decorators.
|
|
4
4
|
|
|
5
5
|

|
|
6
6
|
|
|
@@ -24,7 +24,7 @@ context = ctx_manager.__enter__()
|
|
|
24
24
|
|
|
25
25
|
Subclasses of `algopy.ARC4Contract` are **required** to be instantiated with an active test context. As part of instantiation, the test context will automatically create a matching `algopy.Application` object instance.
|
|
26
26
|
|
|
27
|
-
Within the class implementation, methods decorated with `algopy.arc4.abimethod` and `algopy.arc4.baremethod` will automatically assemble an `algopy.gtxn.ApplicationCallTransaction` to emulate the AVM application call. This behaviour can be overridden by setting the transaction group manually as part of test setup; this is done via implicit invocation of the `algopy_testing.context.any_application()` _value generator_ (refer to the [API](../api.md) for more details).
|
|
27
|
+
Within the class implementation, methods decorated with `algopy.arc4.abimethod` (or its alias, `algopy.public`) and `algopy.arc4.baremethod` will automatically assemble an `algopy.gtxn.ApplicationCallTransaction` to emulate the AVM application call. This behaviour can be overridden by setting the transaction group manually as part of test setup; this is done via implicit invocation of the `algopy_testing.context.any_application()` _value generator_ (refer to the [API](../api.md) for more details).
|
|
28
28
|
|
|
29
29
|
```{testcode}
|
|
30
30
|
class SimpleVotingContract(algopy.ARC4Contract):
|
|
@@ -42,14 +42,14 @@ class SimpleVotingContract(algopy.ARC4Contract):
|
|
|
42
42
|
self.topic.value = initial_topic
|
|
43
43
|
self.votes.value = algopy.UInt64(0)
|
|
44
44
|
|
|
45
|
-
@algopy.
|
|
45
|
+
@algopy.public
|
|
46
46
|
def vote(self) -> algopy.UInt64:
|
|
47
47
|
assert self.voted[algopy.Txn.sender] == algopy.UInt64(0), "Account has already voted"
|
|
48
48
|
self.votes.value += algopy.UInt64(1)
|
|
49
49
|
self.voted[algopy.Txn.sender] = algopy.UInt64(1)
|
|
50
50
|
return self.votes.value
|
|
51
51
|
|
|
52
|
-
@algopy.
|
|
52
|
+
@algopy.public(readonly=True)
|
|
53
53
|
def get_votes(self) -> algopy.UInt64:
|
|
54
54
|
return self.votes.value
|
|
55
55
|
|
|
@@ -74,7 +74,7 @@ assert contract.topic.value == initial_topic
|
|
|
74
74
|
assert contract.votes.value == algopy.UInt64(0)
|
|
75
75
|
|
|
76
76
|
# Act - Vote
|
|
77
|
-
# The method `.vote()` is decorated with `algopy.arc4.abimethod`, which means it will assemble a transaction to emulate the AVM application call
|
|
77
|
+
# The method `.vote()` is decorated with `algopy.public`, an alias of `algopy.arc4.abimethod`, which means it will assemble a transaction to emulate the AVM application call
|
|
78
78
|
result = contract.vote()
|
|
79
79
|
|
|
80
80
|
# Assert - you can access the corresponding auto generated application call transaction via test context
|
|
@@ -18,6 +18,8 @@ context = ctx_manager.__enter__()
|
|
|
18
18
|
|
|
19
19
|
The `@algopy.subroutine` decorator exposes contract methods for isolated testing within the Algorand Python Testing framework. This enables focused validation of core business logic without the overhead of full application deployment and execution.
|
|
20
20
|
|
|
21
|
+
`@algopy.subroutine` decorator is optional for the methods in a contract which are not callable externally.
|
|
22
|
+
|
|
21
23
|
## Usage
|
|
22
24
|
|
|
23
25
|
1. Decorate internal methods with `@algopy.subroutine`:
|
|
@@ -26,7 +28,7 @@ The `@algopy.subroutine` decorator exposes contract methods for isolated testing
|
|
|
26
28
|
from algopy import subroutine, UInt64
|
|
27
29
|
|
|
28
30
|
class MyContract:
|
|
29
|
-
@subroutine
|
|
31
|
+
@subroutine # optional
|
|
30
32
|
def calculate_value(self, input: UInt64) -> UInt64:
|
|
31
33
|
return input * UInt64(2)
|
|
32
34
|
```
|
|
@@ -143,7 +143,7 @@ When testing smart contracts, to stay consistent with AVM, the framework _does n
|
|
|
143
143
|
|
|
144
144
|
```{testcode}
|
|
145
145
|
class MyContract(algopy.ARC4Contract):
|
|
146
|
-
@algopy.
|
|
146
|
+
@algopy.public
|
|
147
147
|
def pay_via_itxn(self, asset: algopy.Asset) -> None:
|
|
148
148
|
algopy.itxn.Payment(
|
|
149
149
|
receiver=algopy.Txn.sender,
|
|
@@ -180,7 +180,7 @@ first_payment_txn = first_itxn_group.payment(0)
|
|
|
180
180
|
|
|
181
181
|
In this example, we define a contract method `pay_via_itxn` that creates and submits an inner payment transaction. The test context automatically captures and stores the inner transactions submitted by the contract method.
|
|
182
182
|
|
|
183
|
-
Note that we don't need to wrap the execution in a `create_group` context manager because the method is decorated with `@algopy.arc4.abimethod`, which automatically creates a transaction group for the method. The `create_group` context manager is only needed when you want to create more complex transaction groups or patch transaction fields for various transaction-related opcodes in AVM.
|
|
183
|
+
Note that we don't need to wrap the execution in a `create_group` context manager because the method is decorated with `@algopy.public`, an alias of `@algopy.arc4.abimethod`, which automatically creates a transaction group for the method. The `create_group` context manager is only needed when you want to create more complex transaction groups or patch transaction fields for various transaction-related opcodes in AVM.
|
|
184
184
|
|
|
185
185
|
To access the submitted inner transactions:
|
|
186
186
|
|
{algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/examples/marketplace/contract.py
RENAMED
|
@@ -9,7 +9,6 @@ from algopy import (
|
|
|
9
9
|
gtxn,
|
|
10
10
|
itxn,
|
|
11
11
|
op,
|
|
12
|
-
subroutine,
|
|
13
12
|
)
|
|
14
13
|
from algopy.arc4 import abimethod
|
|
15
14
|
|
|
@@ -32,7 +31,6 @@ class DigitalMarketplace(ARC4Contract):
|
|
|
32
31
|
def __init__(self) -> None:
|
|
33
32
|
self.listings = BoxMap(ListingKey, ListingValue)
|
|
34
33
|
|
|
35
|
-
@subroutine
|
|
36
34
|
def listings_box_mbr(self) -> UInt64:
|
|
37
35
|
return (
|
|
38
36
|
2_500
|
|
@@ -55,7 +53,6 @@ class DigitalMarketplace(ARC4Contract):
|
|
|
55
53
|
* 400
|
|
56
54
|
)
|
|
57
55
|
|
|
58
|
-
@subroutine
|
|
59
56
|
def quantity_price(self, quantity: UInt64, price: UInt64, asset_decimals: UInt64) -> UInt64:
|
|
60
57
|
amount_not_scaled_high, amount_not_scaled_low = op.mulw(price, quantity)
|
|
61
58
|
scaling_factor_high, scaling_factor_low = op.expw(10, asset_decimals)
|
|
@@ -8,12 +8,12 @@ class ProofOfAttendance(algopy.ARC4Contract):
|
|
|
8
8
|
self.total_attendees = algopy.UInt64(0)
|
|
9
9
|
self.box_map = algopy.BoxMap(algopy.Bytes, algopy.UInt64)
|
|
10
10
|
|
|
11
|
-
@algopy.
|
|
11
|
+
@algopy.public(create="require")
|
|
12
12
|
def init(self, max_attendees: algopy.UInt64) -> None:
|
|
13
13
|
assert algopy.Txn.sender == algopy.Global.creator_address, "Only creator can initialize"
|
|
14
14
|
self.max_attendees = max_attendees
|
|
15
15
|
|
|
16
|
-
@algopy.
|
|
16
|
+
@algopy.public()
|
|
17
17
|
def confirm_attendance(self) -> None:
|
|
18
18
|
assert self.total_attendees < self.max_attendees, "Max attendees reached"
|
|
19
19
|
|
|
@@ -25,7 +25,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
|
|
|
25
25
|
|
|
26
26
|
algopy.op.Box.put(algopy.Txn.sender.bytes, algopy.op.itob(minted_asset.id))
|
|
27
27
|
|
|
28
|
-
@algopy.
|
|
28
|
+
@algopy.public()
|
|
29
29
|
def confirm_attendance_with_box(self) -> None:
|
|
30
30
|
assert self.total_attendees < self.max_attendees, "Max attendees reached"
|
|
31
31
|
|
|
@@ -38,7 +38,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
|
|
|
38
38
|
|
|
39
39
|
box.value = minted_asset.id
|
|
40
40
|
|
|
41
|
-
@algopy.
|
|
41
|
+
@algopy.public()
|
|
42
42
|
def confirm_attendance_with_box_ref(self) -> None:
|
|
43
43
|
assert self.total_attendees < self.max_attendees, "Max attendees reached"
|
|
44
44
|
|
|
@@ -51,7 +51,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
|
|
|
51
51
|
|
|
52
52
|
box_ref.value = algopy.op.itob(minted_asset.id)
|
|
53
53
|
|
|
54
|
-
@algopy.
|
|
54
|
+
@algopy.public()
|
|
55
55
|
def confirm_attendance_with_box_map(self) -> None:
|
|
56
56
|
assert self.total_attendees < self.max_attendees, "Max attendees reached"
|
|
57
57
|
|
|
@@ -63,33 +63,33 @@ class ProofOfAttendance(algopy.ARC4Contract):
|
|
|
63
63
|
|
|
64
64
|
self.box_map[algopy.Txn.sender.bytes] = minted_asset.id
|
|
65
65
|
|
|
66
|
-
@algopy.
|
|
66
|
+
@algopy.public(readonly=True)
|
|
67
67
|
def get_poa_id(self) -> algopy.UInt64:
|
|
68
68
|
poa_id, exists = algopy.op.Box.get(algopy.Txn.sender.bytes)
|
|
69
69
|
assert exists, "POA not found"
|
|
70
70
|
return algopy.op.btoi(poa_id)
|
|
71
71
|
|
|
72
|
-
@algopy.
|
|
72
|
+
@algopy.public(readonly=True)
|
|
73
73
|
def get_poa_id_with_box(self) -> algopy.UInt64:
|
|
74
74
|
box = algopy.Box(algopy.UInt64, key=algopy.Txn.sender.bytes)
|
|
75
75
|
poa_id, exists = box.maybe()
|
|
76
76
|
assert exists, "POA not found"
|
|
77
77
|
return poa_id
|
|
78
78
|
|
|
79
|
-
@algopy.
|
|
79
|
+
@algopy.public(readonly=True)
|
|
80
80
|
def get_poa_id_with_box_ref(self) -> algopy.UInt64:
|
|
81
81
|
box_ref = algopy.Box(algopy.Bytes, key=algopy.Txn.sender.bytes)
|
|
82
82
|
poa_id, exists = box_ref.maybe()
|
|
83
83
|
assert exists, "POA not found"
|
|
84
84
|
return algopy.op.btoi(poa_id)
|
|
85
85
|
|
|
86
|
-
@algopy.
|
|
86
|
+
@algopy.public(readonly=True)
|
|
87
87
|
def get_poa_id_with_box_map(self) -> algopy.UInt64:
|
|
88
88
|
poa_id, exists = self.box_map.maybe(algopy.Txn.sender.bytes)
|
|
89
89
|
assert exists, "POA not found"
|
|
90
90
|
return poa_id
|
|
91
91
|
|
|
92
|
-
@algopy.
|
|
92
|
+
@algopy.public()
|
|
93
93
|
def claim_poa(self, opt_in_txn: algopy.gtxn.AssetTransferTransaction) -> None:
|
|
94
94
|
poa_id, exists = algopy.op.Box.get(algopy.Txn.sender.bytes)
|
|
95
95
|
assert exists, "POA not found, attendance validation failed!"
|
|
@@ -108,7 +108,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
|
|
|
108
108
|
algopy.op.btoi(poa_id),
|
|
109
109
|
)
|
|
110
110
|
|
|
111
|
-
@algopy.
|
|
111
|
+
@algopy.public()
|
|
112
112
|
def claim_poa_with_box(self, opt_in_txn: algopy.gtxn.AssetTransferTransaction) -> None:
|
|
113
113
|
box = algopy.Box(algopy.UInt64, key=algopy.Txn.sender.bytes)
|
|
114
114
|
poa_id, exists = box.maybe()
|
|
@@ -128,7 +128,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
|
|
|
128
128
|
poa_id,
|
|
129
129
|
)
|
|
130
130
|
|
|
131
|
-
@algopy.
|
|
131
|
+
@algopy.public()
|
|
132
132
|
def claim_poa_with_box_ref(self, opt_in_txn: algopy.gtxn.AssetTransferTransaction) -> None:
|
|
133
133
|
box_ref = algopy.Box(algopy.Bytes, key=algopy.Txn.sender.bytes)
|
|
134
134
|
poa_id, exists = box_ref.maybe()
|
|
@@ -148,7 +148,7 @@ class ProofOfAttendance(algopy.ARC4Contract):
|
|
|
148
148
|
algopy.op.btoi(poa_id),
|
|
149
149
|
)
|
|
150
150
|
|
|
151
|
-
@algopy.
|
|
151
|
+
@algopy.public()
|
|
152
152
|
def claim_poa_with_box_map(self, opt_in_txn: algopy.gtxn.AssetTransferTransaction) -> None:
|
|
153
153
|
poa_id, exists = self.box_map.maybe(algopy.Txn.sender.bytes)
|
|
154
154
|
assert exists, "POA not found, attendance validation failed!"
|
|
@@ -8,7 +8,6 @@ from algopy import (
|
|
|
8
8
|
Txn,
|
|
9
9
|
UInt64,
|
|
10
10
|
op,
|
|
11
|
-
subroutine,
|
|
12
11
|
)
|
|
13
12
|
|
|
14
13
|
VOTE_PRICE = 10_000
|
|
@@ -24,11 +23,9 @@ class VotingContract(Contract):
|
|
|
24
23
|
)
|
|
25
24
|
self.voted = LocalState(UInt64, key="voted", description="Tracks if an account has voted")
|
|
26
25
|
|
|
27
|
-
@subroutine
|
|
28
26
|
def set_topic(self, topic: Bytes) -> None:
|
|
29
27
|
self.topic.value = topic
|
|
30
28
|
|
|
31
|
-
@subroutine
|
|
32
29
|
def vote(self, voter: Account) -> bool:
|
|
33
30
|
assert op.Global.group_size == UInt64(2)
|
|
34
31
|
assert op.GTxn.amount(1) == UInt64(VOTE_PRICE)
|
|
@@ -40,7 +37,6 @@ class VotingContract(Contract):
|
|
|
40
37
|
self.voted[voter] = UInt64(1)
|
|
41
38
|
return True
|
|
42
39
|
|
|
43
|
-
@subroutine
|
|
44
40
|
def get_votes(self) -> UInt64:
|
|
45
41
|
return self.votes.value
|
|
46
42
|
|
{algorand_python_testing-1.1.0b1 → algorand_python_testing-1.2.0b2}/src/_algopy_testing/__init__.py
RENAMED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# ruff: noqa: I001
|
|
1
2
|
from _algopy_testing import arc4, gtxn, itxn
|
|
2
3
|
from _algopy_testing.context import AlgopyTestContext
|
|
3
4
|
from _algopy_testing.context_helpers.context_storage import algopy_testing_context
|
|
@@ -19,11 +20,14 @@ from _algopy_testing.models import (
|
|
|
19
20
|
uenumerate,
|
|
20
21
|
urange,
|
|
21
22
|
)
|
|
22
|
-
from _algopy_testing.primitives import BigUInt, Bytes, String, UInt64
|
|
23
|
+
from _algopy_testing.primitives import BigUInt, Bytes, FixedBytes, String, UInt64
|
|
23
24
|
from _algopy_testing.state import Box, BoxMap, BoxRef, GlobalState, LocalState
|
|
24
25
|
from _algopy_testing.value_generators.arc4 import ARC4ValueGenerator
|
|
25
26
|
from _algopy_testing.value_generators.avm import AVMValueGenerator
|
|
26
27
|
from _algopy_testing.value_generators.txn import TxnValueGenerator
|
|
28
|
+
from _algopy_testing.decorators.arc4 import (
|
|
29
|
+
abimethod as public,
|
|
30
|
+
)
|
|
27
31
|
|
|
28
32
|
__all__ = [
|
|
29
33
|
"ARC4Contract",
|
|
@@ -39,6 +43,7 @@ __all__ = [
|
|
|
39
43
|
"BoxRef",
|
|
40
44
|
"Bytes",
|
|
41
45
|
"Contract",
|
|
46
|
+
"FixedBytes",
|
|
42
47
|
"GlobalState",
|
|
43
48
|
"ITxnGroupLoader",
|
|
44
49
|
"ITxnLoader",
|
|
@@ -59,6 +64,7 @@ __all__ = [
|
|
|
59
64
|
"gtxn",
|
|
60
65
|
"itxn",
|
|
61
66
|
"logicsig",
|
|
67
|
+
"public",
|
|
62
68
|
"subroutine",
|
|
63
69
|
"uenumerate",
|
|
64
70
|
"urange",
|
|
@@ -12,7 +12,7 @@ import _algopy_testing
|
|
|
12
12
|
from _algopy_testing.constants import ALWAYS_APPROVE_TEAL_PROGRAM, ARC4_RETURN_PREFIX
|
|
13
13
|
from _algopy_testing.context_helpers import lazy_context
|
|
14
14
|
from _algopy_testing.enums import OnCompleteAction
|
|
15
|
-
from _algopy_testing.primitives import BigUInt, Bytes, String, UInt64
|
|
15
|
+
from _algopy_testing.primitives import BigUInt, Bytes, FixedBytes, String, UInt64
|
|
16
16
|
|
|
17
17
|
_P = typing.ParamSpec("_P")
|
|
18
18
|
_R = typing.TypeVar("_R")
|
|
@@ -418,6 +418,8 @@ def _type_to_arc4( # noqa: PLR0912 PLR0911
|
|
|
418
418
|
return "uint512"
|
|
419
419
|
if issubclass(annotation, Bytes):
|
|
420
420
|
return "byte[]"
|
|
421
|
+
if issubclass(annotation, FixedBytes):
|
|
422
|
+
return f"byte[{annotation._length}]"
|
|
421
423
|
if issubclass(annotation, bool):
|
|
422
424
|
return "bool"
|
|
423
425
|
raise TypeError(f"type not a valid ARC4 type: {annotation}")
|
|
@@ -9,6 +9,7 @@ from _algopy_testing.primitives.array import (
|
|
|
9
9
|
)
|
|
10
10
|
from _algopy_testing.primitives.biguint import BigUInt
|
|
11
11
|
from _algopy_testing.primitives.bytes import Bytes
|
|
12
|
+
from _algopy_testing.primitives.fixed_bytes import FixedBytes
|
|
12
13
|
from _algopy_testing.primitives.string import String
|
|
13
14
|
from _algopy_testing.primitives.uint64 import UInt64
|
|
14
15
|
|
|
@@ -17,6 +18,7 @@ __all__ = [
|
|
|
17
18
|
"BigUInt",
|
|
18
19
|
"Bytes",
|
|
19
20
|
"FixedArray",
|
|
21
|
+
"FixedBytes",
|
|
20
22
|
"ImmutableArray",
|
|
21
23
|
"ImmutableFixedArray",
|
|
22
24
|
"ReferenceArray",
|
|
@@ -7,6 +7,8 @@ from typing import TYPE_CHECKING
|
|
|
7
7
|
if TYPE_CHECKING:
|
|
8
8
|
from collections.abc import Iterator
|
|
9
9
|
|
|
10
|
+
from _algopy_testing.primitives.fixed_bytes import FixedBytes
|
|
11
|
+
|
|
10
12
|
|
|
11
13
|
from itertools import zip_longest
|
|
12
14
|
|
|
@@ -27,7 +29,7 @@ class Bytes:
|
|
|
27
29
|
check_type(value, bytes)
|
|
28
30
|
self.value = as_bytes(value)
|
|
29
31
|
|
|
30
|
-
def __contains__(self, item: Bytes | bytes) -> bool:
|
|
32
|
+
def __contains__(self, item: Bytes | FixedBytes | bytes) -> bool: # type: ignore[type-arg]
|
|
31
33
|
item_bytes = as_bytes(item)
|
|
32
34
|
return item_bytes in self.value
|
|
33
35
|
|
|
@@ -43,11 +45,8 @@ class Bytes:
|
|
|
43
45
|
def __add__(self, other: Bytes | bytes) -> Bytes:
|
|
44
46
|
"""Concatenate Bytes with another Bytes or bytes literal e.g. `Bytes(b"Hello ")
|
|
45
47
|
+ b"World"`."""
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
else:
|
|
49
|
-
result = self.value + as_bytes(other)
|
|
50
|
-
return _checked_result(result, "+")
|
|
48
|
+
result = self.value + as_bytes(other)
|
|
49
|
+
return _checked_result(result, "+")
|
|
51
50
|
|
|
52
51
|
def __radd__(self, other: bytes) -> Bytes:
|
|
53
52
|
"""Concatenate Bytes with another Bytes or bytes literal e.g. `b"Hello " +
|
|
@@ -70,7 +69,7 @@ class Bytes:
|
|
|
70
69
|
self, index: UInt64 | int | slice
|
|
71
70
|
) -> Bytes: # maps to substring/substring3 if slice, extract/extract3 otherwise?
|
|
72
71
|
"""Returns a Bytes containing a single byte if indexed with UInt64 or int
|
|
73
|
-
otherwise the substring
|
|
72
|
+
otherwise the substring of bytes described by the slice."""
|
|
74
73
|
if isinstance(index, slice):
|
|
75
74
|
return Bytes(self.value[index])
|
|
76
75
|
else:
|
|
@@ -181,7 +180,7 @@ def _checked_result(result: bytes, op: str) -> Bytes:
|
|
|
181
180
|
"""Ensures `result` is a valid Bytes value.
|
|
182
181
|
|
|
183
182
|
Raises:
|
|
184
|
-
|
|
183
|
+
OverflowError: If `result` of `op` is out of bounds
|
|
185
184
|
"""
|
|
186
185
|
if len(result) > MAX_BYTES_SIZE:
|
|
187
186
|
raise OverflowError(f"{op} overflows")
|