algorand-python-testing 0.4.1__tar.gz → 0.5.0__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.
Files changed (349) hide show
  1. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/.github/workflows/cd.yaml +2 -2
  2. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/.gitignore +1 -0
  3. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/.vscode/settings.json +1 -2
  4. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/CHANGELOG.md +55 -19
  5. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/PKG-INFO +3 -3
  6. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/README.md +1 -1
  7. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/testing-guide/opcodes.md +10 -8
  8. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/pyproject.toml +3 -3
  9. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/scripts/check_stubs_cov.py +85 -29
  10. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/scripts/refresh_test_artifacts.py +2 -2
  11. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/arc4.py +65 -42
  12. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/compiled.py +2 -5
  13. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/context_helpers/ledger_context.py +38 -6
  14. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/decorators/arc4.py +27 -10
  15. algorand_python_testing-0.5.0/src/_algopy_testing/decorators/subroutine.py +25 -0
  16. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/models/account.py +6 -0
  17. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/models/contract.py +5 -2
  18. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/models/txn_fields.py +2 -1
  19. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/op/__init__.py +12 -0
  20. algorand_python_testing-0.5.0/src/_algopy_testing/op/block.py +51 -0
  21. algorand_python_testing-0.5.0/src/_algopy_testing/op/constants.py +30 -0
  22. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/op/crypto.py +30 -6
  23. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/op/global_values.py +5 -0
  24. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/op/misc.py +200 -34
  25. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/primitives/__init__.py +2 -1
  26. algorand_python_testing-0.5.0/src/_algopy_testing/primitives/array.py +144 -0
  27. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/primitives/bytes.py +4 -0
  28. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/protocols.py +12 -0
  29. algorand_python_testing-0.5.0/src/_algopy_testing/serialize.py +158 -0
  30. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/state/utils.py +7 -1
  31. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/utils.py +5 -0
  32. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/algopy/__init__.py +7 -5
  33. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/templates/.macros.j2 +1 -1
  34. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/arc4/conftest.py +3 -3
  35. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/arc4/test_arc4_method_signature.py +33 -27
  36. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/arc4/test_struct.py +10 -0
  37. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.approval.teal +158 -166
  38. algorand_python_testing-0.5.0/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc32.json +253 -0
  39. algorand_python_testing-0.5.0/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.clear.teal +7 -0
  40. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.approval.teal +23 -16
  41. algorand_python_testing-0.5.0/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc32.json +55 -0
  42. algorand_python_testing-0.5.0/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.clear.teal +7 -0
  43. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.approval.teal +692 -860
  44. algorand_python_testing-0.5.0/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc32.json +1029 -0
  45. algorand_python_testing-0.5.0/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.clear.teal +7 -0
  46. algorand_python_testing-0.5.0/tests/artifacts/Arrays/data/Contract.approval.teal +1675 -0
  47. algorand_python_testing-0.5.0/tests/artifacts/Arrays/data/Contract.arc32.json +172 -0
  48. algorand_python_testing-0.5.0/tests/artifacts/Arrays/data/Contract.clear.teal +7 -0
  49. algorand_python_testing-0.5.0/tests/artifacts/Arrays/data/ImmutableArrayContract.approval.teal +3421 -0
  50. algorand_python_testing-0.5.0/tests/artifacts/Arrays/data/ImmutableArrayContract.arc32.json +450 -0
  51. algorand_python_testing-0.5.0/tests/artifacts/Arrays/data/ImmutableArrayContract.clear.teal +7 -0
  52. algorand_python_testing-0.5.0/tests/artifacts/Arrays/data/StaticSizeContract.approval.teal +902 -0
  53. algorand_python_testing-0.5.0/tests/artifacts/Arrays/data/StaticSizeContract.arc32.json +162 -0
  54. algorand_python_testing-0.5.0/tests/artifacts/Arrays/data/StaticSizeContract.clear.teal +7 -0
  55. algorand_python_testing-0.5.0/tests/artifacts/Arrays/immutable.py +428 -0
  56. algorand_python_testing-0.5.0/tests/artifacts/Arrays/static_size.py +135 -0
  57. algorand_python_testing-0.5.0/tests/artifacts/Arrays/uint64.py +255 -0
  58. algorand_python_testing-0.5.0/tests/artifacts/BoxContract/data/BoxContract.approval.teal +128 -0
  59. algorand_python_testing-0.5.0/tests/artifacts/BoxContract/data/BoxContract.arc32.json +63 -0
  60. algorand_python_testing-0.5.0/tests/artifacts/BoxContract/data/BoxContract.clear.teal +7 -0
  61. algorand_python_testing-0.5.0/tests/artifacts/Contains/data/MyContract.approval.teal +192 -0
  62. algorand_python_testing-0.5.0/tests/artifacts/Contains/data/MyContract.clear.teal +9 -0
  63. algorand_python_testing-0.5.0/tests/artifacts/CreatedAppAsset/data/AppCall.approval.teal +58 -0
  64. algorand_python_testing-0.5.0/tests/artifacts/CreatedAppAsset/data/AppCall.arc32.json +50 -0
  65. algorand_python_testing-0.5.0/tests/artifacts/CreatedAppAsset/data/AppCall.clear.teal +7 -0
  66. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.approval.teal +56 -49
  67. algorand_python_testing-0.5.0/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc32.json +77 -0
  68. algorand_python_testing-0.5.0/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.clear.teal +7 -0
  69. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/CryptoOps/data/CryptoOpsContract.approval.teal +304 -329
  70. algorand_python_testing-0.5.0/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc32.json +368 -0
  71. algorand_python_testing-0.5.0/tests/artifacts/CryptoOps/data/CryptoOpsContract.clear.teal +7 -0
  72. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.approval.teal +26 -18
  73. algorand_python_testing-0.5.0/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc32.json +59 -0
  74. algorand_python_testing-0.5.0/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.clear.teal +7 -0
  75. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.approval.teal +421 -464
  76. algorand_python_testing-0.5.0/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc32.json +858 -0
  77. algorand_python_testing-0.5.0/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.clear.teal +7 -0
  78. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.approval.teal +750 -801
  79. algorand_python_testing-0.5.0/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc32.json +1393 -0
  80. algorand_python_testing-0.5.0/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.clear.teal +7 -0
  81. algorand_python_testing-0.5.0/tests/artifacts/StateMutations/data/StateMutations.approval.teal +766 -0
  82. algorand_python_testing-0.5.0/tests/artifacts/StateMutations/data/StateMutations.arc32.json +95 -0
  83. algorand_python_testing-0.5.0/tests/artifacts/StateMutations/data/StateMutations.clear.teal +7 -0
  84. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/StateOps/contract.py +25 -1
  85. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/GlobalStateContract.approval.teal +935 -0
  86. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/GlobalStateContract.arc32.json +528 -0
  87. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/GlobalStateContract.clear.teal +7 -0
  88. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/StateOps/data/ITxnOpsContract.approval.teal +53 -49
  89. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/ITxnOpsContract.arc32.json +50 -0
  90. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/ITxnOpsContract.clear.teal +7 -0
  91. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/LocalStateContract.approval.teal +695 -0
  92. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/LocalStateContract.arc32.json +359 -0
  93. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/LocalStateContract.clear.teal +7 -0
  94. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/StateOps/data/StateAcctParamsGetContract.approval.teal +377 -214
  95. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc32.json +307 -0
  96. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/StateAcctParamsGetContract.clear.teal +7 -0
  97. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/StateOps/data/StateAppGlobalContract.approval.teal +135 -134
  98. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/StateAppGlobalContract.arc32.json +188 -0
  99. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/StateAppGlobalContract.clear.teal +7 -0
  100. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/StateAppGlobalExContract.approval.teal +75 -0
  101. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc32.json +60 -0
  102. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/StateAppGlobalExContract.clear.teal +7 -0
  103. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/StateOps/data/StateAppLocalContract.approval.teal +162 -175
  104. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/StateAppLocalContract.arc32.json +251 -0
  105. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/StateAppLocalContract.clear.teal +7 -0
  106. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/StateAppLocalExContract.approval.teal +67 -0
  107. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/StateAppLocalExContract.arc32.json +63 -0
  108. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/StateAppLocalExContract.clear.teal +7 -0
  109. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/StateOps/data/StateAppParamsContract.approval.teal +220 -224
  110. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/StateAppParamsContract.arc32.json +199 -0
  111. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/StateAppParamsContract.clear.teal +7 -0
  112. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/StateOps/data/StateAssetHoldingContract.approval.teal +49 -42
  113. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc32.json +81 -0
  114. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/StateAssetHoldingContract.clear.teal +7 -0
  115. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/StateOps/data/StateAssetParamsContract.approval.teal +288 -292
  116. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/StateAssetParamsContract.arc32.json +253 -0
  117. algorand_python_testing-0.5.0/tests/artifacts/StateOps/data/StateAssetParamsContract.clear.teal +7 -0
  118. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/common.py +46 -53
  119. algorand_python_testing-0.5.0/tests/conftest.py +24 -0
  120. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/primitives/conftest.py +3 -3
  121. algorand_python_testing-0.5.0/tests/state/conftest.py +26 -0
  122. algorand_python_testing-0.5.0/tests/test_array.py +228 -0
  123. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/test_miscellaneous_op.py +3 -3
  124. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/test_op.py +160 -102
  125. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/utilities/conftest.py +3 -3
  126. algorand_python_testing-0.5.0/tests/value_generators/__init__.py +0 -0
  127. algorand_python_testing-0.4.1/src/_algopy_testing/decorators/subroutine.py +0 -9
  128. algorand_python_testing-0.4.1/src/_algopy_testing/op/block.py +0 -28
  129. algorand_python_testing-0.4.1/src/_algopy_testing/op/constants.py +0 -7
  130. algorand_python_testing-0.4.1/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.arc32.json +0 -253
  131. algorand_python_testing-0.4.1/tests/artifacts/Arc4ABIMethod/data/SignaturesContract.clear.teal +0 -7
  132. algorand_python_testing-0.4.1/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.arc32.json +0 -55
  133. algorand_python_testing-0.4.1/tests/artifacts/Arc4InnerTxns/data/Arc4InnerTxnsContract.clear.teal +0 -7
  134. algorand_python_testing-0.4.1/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.arc32.json +0 -1029
  135. algorand_python_testing-0.4.1/tests/artifacts/Arc4PrimitiveOps/data/Arc4PrimitiveOpsContract.clear.teal +0 -7
  136. algorand_python_testing-0.4.1/tests/artifacts/BoxContract/data/BoxContract.approval.teal +0 -151
  137. algorand_python_testing-0.4.1/tests/artifacts/BoxContract/data/BoxContract.arc32.json +0 -63
  138. algorand_python_testing-0.4.1/tests/artifacts/BoxContract/data/BoxContract.clear.teal +0 -7
  139. algorand_python_testing-0.4.1/tests/artifacts/Contains/data/MyContract.approval.teal +0 -1479
  140. algorand_python_testing-0.4.1/tests/artifacts/Contains/data/MyContract.clear.teal +0 -7
  141. algorand_python_testing-0.4.1/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.arc32.json +0 -77
  142. algorand_python_testing-0.4.1/tests/artifacts/CreatedAppAsset/data/AppExpectingEffects.clear.teal +0 -7
  143. algorand_python_testing-0.4.1/tests/artifacts/CryptoOps/data/CryptoOpsContract.arc32.json +0 -368
  144. algorand_python_testing-0.4.1/tests/artifacts/CryptoOps/data/CryptoOpsContract.clear.teal +0 -7
  145. algorand_python_testing-0.4.1/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.arc32.json +0 -59
  146. algorand_python_testing-0.4.1/tests/artifacts/GlobalStateValidator/data/GlobalStateValidator.clear.teal +0 -7
  147. algorand_python_testing-0.4.1/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.arc32.json +0 -858
  148. algorand_python_testing-0.4.1/tests/artifacts/MiscellaneousOps/data/MiscellaneousOpsContract.clear.teal +0 -7
  149. algorand_python_testing-0.4.1/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.arc32.json +0 -1393
  150. algorand_python_testing-0.4.1/tests/artifacts/PrimitiveOps/data/PrimitiveOpsContract.clear.teal +0 -7
  151. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/GlobalStateContract.approval.teal +0 -1109
  152. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/GlobalStateContract.arc32.json +0 -528
  153. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/GlobalStateContract.clear.teal +0 -7
  154. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/ITxnOpsContract.arc32.json +0 -50
  155. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/ITxnOpsContract.clear.teal +0 -7
  156. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/LocalStateContract.approval.teal +0 -817
  157. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/LocalStateContract.arc32.json +0 -359
  158. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/LocalStateContract.clear.teal +0 -7
  159. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/StateAcctParamsGetContract.arc32.json +0 -253
  160. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/StateAcctParamsGetContract.clear.teal +0 -7
  161. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/StateAppGlobalContract.arc32.json +0 -188
  162. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/StateAppGlobalContract.clear.teal +0 -7
  163. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/StateAppGlobalExContract.approval.teal +0 -77
  164. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/StateAppGlobalExContract.arc32.json +0 -60
  165. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/StateAppGlobalExContract.clear.teal +0 -7
  166. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/StateAppLocalContract.arc32.json +0 -251
  167. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/StateAppLocalContract.clear.teal +0 -7
  168. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/StateAppLocalExContract.approval.teal +0 -77
  169. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/StateAppLocalExContract.arc32.json +0 -63
  170. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/StateAppLocalExContract.clear.teal +0 -7
  171. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/StateAppParamsContract.arc32.json +0 -199
  172. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/StateAppParamsContract.clear.teal +0 -7
  173. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/StateAssetHoldingContract.arc32.json +0 -81
  174. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/StateAssetHoldingContract.clear.teal +0 -7
  175. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/StateAssetParamsContract.arc32.json +0 -253
  176. algorand_python_testing-0.4.1/tests/artifacts/StateOps/data/StateAssetParamsContract.clear.teal +0 -7
  177. algorand_python_testing-0.4.1/tests/conftest.py +0 -54
  178. algorand_python_testing-0.4.1/tests/state/conftest.py +0 -23
  179. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/.coveragerc +0 -0
  180. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/.editorconfig +0 -0
  181. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  182. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  183. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/.github/dependabot.yml +0 -0
  184. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/.github/pull_request_template.md +0 -0
  185. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/.github/workflows/ci.yaml +0 -0
  186. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/.github/workflows/gh-pages.yaml +0 -0
  187. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/.pre-commit-config.yaml +0 -0
  188. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/.vscode/extensions.json +0 -0
  189. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/.vscode/launch.json +0 -0
  190. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/CONTRIBUTING.md +0 -0
  191. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/LICENSE +0 -0
  192. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/Makefile +0 -0
  193. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/__init__.py +0 -0
  194. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/_static/custom.css +0 -0
  195. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/algopy.md +0 -0
  196. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/api.md +0 -0
  197. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/conf.py +0 -0
  198. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/coverage.md +0 -0
  199. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/examples.md +0 -0
  200. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/faq.md +0 -0
  201. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/index.md +0 -0
  202. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/make.bat +0 -0
  203. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/testing-guide/arc4-types.md +0 -0
  204. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/testing-guide/avm-types.md +0 -0
  205. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/testing-guide/concepts.md +0 -0
  206. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/testing-guide/contract-testing.md +0 -0
  207. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/testing-guide/index.md +0 -0
  208. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/testing-guide/signature-testing.md +0 -0
  209. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/testing-guide/state-management.md +0 -0
  210. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/testing-guide/subroutines.md +0 -0
  211. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/docs/testing-guide/transactions.md +0 -0
  212. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/README.md +0 -0
  213. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/__init__.py +0 -0
  214. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/auction/__init__.py +0 -0
  215. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/auction/contract.py +0 -0
  216. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/auction/test_contract.py +0 -0
  217. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/htlc_logicsig/__init__.py +0 -0
  218. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/htlc_logicsig/signature.py +0 -0
  219. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/htlc_logicsig/test_signature.py +0 -0
  220. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/marketplace/__init__.py +0 -0
  221. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/marketplace/contract.py +0 -0
  222. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/marketplace/test_contract.py +0 -0
  223. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/proof_of_attendance/__init__.py +0 -0
  224. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/proof_of_attendance/contract.py +0 -0
  225. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/proof_of_attendance/test_contract.py +0 -0
  226. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/scratch_storage/__init__.py +0 -0
  227. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/scratch_storage/contract.py +0 -0
  228. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/scratch_storage/test_contract.py +0 -0
  229. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/simple_voting/__init__.py +0 -0
  230. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/simple_voting/contract.py +0 -0
  231. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/simple_voting/test_contract.py +0 -0
  232. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/zk_whitelist/__init__.py +0 -0
  233. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/zk_whitelist/contract.py +0 -0
  234. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/examples/zk_whitelist/test_contract.py +0 -0
  235. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/scripts/__init__.py +0 -0
  236. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/scripts/validate_examples.py +0 -0
  237. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/__init__.py +6 -6
  238. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/constants.py +0 -0
  239. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/context.py +0 -0
  240. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/context_helpers/__init__.py +0 -0
  241. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/context_helpers/context_storage.py +0 -0
  242. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/context_helpers/txn_context.py +0 -0
  243. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/decorators/__init__.py +0 -0
  244. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/enums.py +0 -0
  245. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/gtxn.py +0 -0
  246. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/itxn.py +0 -0
  247. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/itxn_loader.py +0 -0
  248. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/models/__init__.py +0 -0
  249. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/models/application.py +0 -0
  250. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/models/asset.py +0 -0
  251. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/models/logicsig.py +0 -0
  252. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/models/template_variable.py +0 -0
  253. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/models/unsigned_builtins.py +0 -0
  254. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/mutable.py +0 -0
  255. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/op/itxn.py +0 -0
  256. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/op/pure.py +0 -0
  257. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/op/txn.py +0 -0
  258. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/primitives/biguint.py +0 -0
  259. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/primitives/string.py +0 -0
  260. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/primitives/uint64.py +0 -0
  261. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/py.typed +0 -0
  262. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/state/__init__.py +0 -0
  263. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/state/box.py +0 -0
  264. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/state/global_state.py +0 -0
  265. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/state/local_state.py +0 -0
  266. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/utilities/__init__.py +0 -0
  267. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/utilities/budget.py +0 -0
  268. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/utilities/log.py +0 -0
  269. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/value_generators/__init__.py +0 -0
  270. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/value_generators/arc4.py +0 -0
  271. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/value_generators/avm.py +0 -0
  272. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/_algopy_testing/value_generators/txn.py +0 -0
  273. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/algopy/arc4.py +0 -0
  274. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/algopy/gtxn.py +0 -0
  275. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/algopy/itxn.py +0 -0
  276. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/algopy/op.py +0 -0
  277. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/algopy/py.typed +0 -0
  278. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/algopy_testing/__init__.py +0 -0
  279. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/src/algopy_testing/py.typed +0 -0
  280. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/templates/.release_notes.md.j2 +0 -0
  281. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/templates/CHANGELOG.md.j2 +0 -0
  282. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/__init__.py +0 -0
  283. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/arc4/__init__.py +0 -0
  284. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/arc4/test_abi_call.py +0 -0
  285. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/arc4/test_address.py +0 -0
  286. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/arc4/test_bool.py +0 -0
  287. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/arc4/test_dynamic_array.py +0 -0
  288. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/arc4/test_dynamic_bytes.py +0 -0
  289. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/arc4/test_emit.py +0 -0
  290. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/arc4/test_static_array.py +0 -0
  291. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/arc4/test_string.py +0 -0
  292. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/arc4/test_tuple.py +0 -0
  293. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/arc4/test_ufixednxm.py +0 -0
  294. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/arc4/test_uintn.py +0 -0
  295. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/Arc4ABIMethod/__init__.py +0 -0
  296. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/Arc4ABIMethod/contract.py +0 -0
  297. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/Arc4InnerTxns/__init__.py +0 -0
  298. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/Arc4InnerTxns/contract.py +0 -0
  299. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/Arc4PrimitiveOps/__init__.py +0 -0
  300. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/Arc4PrimitiveOps/contract.py +0 -0
  301. {algorand_python_testing-0.4.1/tests/artifacts/BoxContract → algorand_python_testing-0.5.0/tests/artifacts/Arrays}/__init__.py +0 -0
  302. {algorand_python_testing-0.4.1/tests/artifacts/Contains → algorand_python_testing-0.5.0/tests/artifacts/BoxContract}/__init__.py +0 -0
  303. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/BoxContract/contract.py +0 -0
  304. {algorand_python_testing-0.4.1/tests/artifacts/CreatedAppAsset → algorand_python_testing-0.5.0/tests/artifacts/Contains}/__init__.py +0 -0
  305. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/Contains/contract.py +0 -0
  306. {algorand_python_testing-0.4.1/tests/artifacts/CryptoOps → algorand_python_testing-0.5.0/tests/artifacts/CreatedAppAsset}/__init__.py +0 -0
  307. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/CreatedAppAsset/contract.py +0 -0
  308. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/CreatedAppAsset/other.py +0 -0
  309. {algorand_python_testing-0.4.1/tests/artifacts/GlobalStateValidator → algorand_python_testing-0.5.0/tests/artifacts/CryptoOps}/__init__.py +0 -0
  310. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/CryptoOps/contract.py +0 -0
  311. {algorand_python_testing-0.4.1/tests/artifacts/MiscellaneousOps → algorand_python_testing-0.5.0/tests/artifacts/GlobalStateValidator}/__init__.py +0 -0
  312. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/GlobalStateValidator/contract.py +0 -0
  313. {algorand_python_testing-0.4.1/tests/artifacts/PrimitiveOps → algorand_python_testing-0.5.0/tests/artifacts/MiscellaneousOps}/__init__.py +0 -0
  314. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/MiscellaneousOps/contract.py +0 -0
  315. {algorand_python_testing-0.4.1/tests/artifacts/StateMutations → algorand_python_testing-0.5.0/tests/artifacts/PrimitiveOps}/__init__.py +0 -0
  316. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/PrimitiveOps/contract.py +0 -0
  317. {algorand_python_testing-0.4.1/tests/artifacts/StateOps → algorand_python_testing-0.5.0/tests/artifacts/StateMutations}/__init__.py +0 -0
  318. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/StateMutations/data/Contract.approval.teal +0 -0
  319. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/StateMutations/data/Contract.arc32.json +0 -0
  320. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/StateMutations/data/Contract.clear.teal +0 -0
  321. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/StateMutations/statemutations.py +0 -0
  322. {algorand_python_testing-0.4.1/tests/artifacts → algorand_python_testing-0.5.0/tests/artifacts/StateOps}/__init__.py +0 -0
  323. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/StateOps/data/StateAcctParamsGet.approval.teal +0 -0
  324. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/StateOps/data/StateAcctParamsGet.arc32.json +0 -0
  325. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/artifacts/StateOps/data/StateAcctParamsGet.clear.teal +0 -0
  326. {algorand_python_testing-0.4.1/tests/contexts → algorand_python_testing-0.5.0/tests/artifacts}/__init__.py +0 -0
  327. {algorand_python_testing-0.4.1/tests/models → algorand_python_testing-0.5.0/tests/contexts}/__init__.py +0 -0
  328. {algorand_python_testing-0.4.1/tests/primitives → algorand_python_testing-0.5.0/tests/models}/__init__.py +0 -0
  329. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/models/test_asset.py +0 -0
  330. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/models/test_box.py +0 -0
  331. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/models/test_box_map.py +0 -0
  332. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/models/test_box_ref.py +0 -0
  333. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/models/test_contract.py +0 -0
  334. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/models/test_uenumerate.py +0 -0
  335. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/models/test_urange.py +0 -0
  336. {algorand_python_testing-0.4.1/tests/state → algorand_python_testing-0.5.0/tests/primitives}/__init__.py +0 -0
  337. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/primitives/test_biguint.py +0 -0
  338. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/primitives/test_bytes.py +0 -0
  339. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/primitives/test_string.py +0 -0
  340. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/primitives/test_uint64.py +0 -0
  341. {algorand_python_testing-0.4.1/tests/utilities → algorand_python_testing-0.5.0/tests/state}/__init__.py +0 -0
  342. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/state/test_global_state.py +0 -0
  343. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/state/test_local_state.py +0 -0
  344. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/state/test_mutations.py +0 -0
  345. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/test_context.py +0 -0
  346. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/util.py +0 -0
  347. {algorand_python_testing-0.4.1/tests/value_generators → algorand_python_testing-0.5.0/tests/utilities}/__init__.py +0 -0
  348. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/utilities/test_log.py +0 -0
  349. {algorand_python_testing-0.4.1 → algorand_python_testing-0.5.0}/tests/value_generators/test_avm.py +0 -0
@@ -45,7 +45,7 @@ jobs:
45
45
  - uses: actions/checkout@v4
46
46
  with:
47
47
  fetch-depth: 0
48
- token: ${{ secrets.RELEASE_GITHUB_TOKEN }}
48
+ token: ${{ secrets.GITHUB_TOKEN }}
49
49
 
50
50
  - name: Install hatch
51
51
  run: pipx install hatch
@@ -79,7 +79,7 @@ jobs:
79
79
  if: ${{ github.ref == 'refs/heads/main' }}
80
80
  uses: python-semantic-release/python-semantic-release@master
81
81
  with:
82
- github_token: ${{ secrets.RELEASE_GITHUB_TOKEN }}
82
+ github_token: ${{ secrets.GITHUB_TOKEN }}
83
83
  prerelease: ${{ env.PRERELEASE == 'true' }}
84
84
  root_options: $DRY_RUN
85
85
 
@@ -17,3 +17,4 @@ coverage.xml
17
17
  .venv*
18
18
 
19
19
  .cursorignore
20
+ *.puya.map
@@ -17,8 +17,7 @@
17
17
  "python.analysis.typeCheckingMode": "off",
18
18
 
19
19
  "ruff.enable": true,
20
- "ruff.lint.run": "onSave",
21
- "ruff.lint.args": ["--config=pyproject.toml"],
20
+ "ruff.configuration": "pyproject.toml",
22
21
  "ruff.importStrategy": "fromEnvironment",
23
22
  "ruff.fixAll": true, //lint and fix all files in workspace
24
23
  "ruff.organizeImports": true, //organize imports on save
@@ -1,9 +1,45 @@
1
1
  # CHANGELOG
2
+ ## v0.5.0 (2025-02-20)
3
+
4
+ ## v0.5.0-beta.1 (2025-02-19)
5
+
6
+ ### Features
7
+
8
+ * support `algopy.Array` and `algopy.ImmutableArray` from algorand-python 2.7 ([`fd8d19f`](https://github.com/algorandfoundation/algorand-python-testing/commit/fd8d19f25b9f8e0a48f58ae8f45e4d546b965f83))
9
+
10
+ * support mocking new `algopy.op` functions `falcon_verify`, `mimc`, `online_stake`, `sumhash512` and `VoterParamsGet` ([`83ddcbb`](https://github.com/algorandfoundation/algorand-python-testing/commit/83ddcbb8f83f72a5e0bc247c14e250c55496febf))
11
+
12
+ * update `algopy.op.Block` with fields added in AVM 11 ([`90d857d`](https://github.com/algorandfoundation/algorand-python-testing/commit/90d857d248d7b1b5a4b3791ccb0e10c20c478325))
13
+
14
+ * update `algopy.op.AcctParamsGet` with fields added in AVM 11 ([`059b669`](https://github.com/algorandfoundation/algorand-python-testing/commit/059b6690441e99a709fc47691bcb0e4f2453cd26))
15
+
16
+ * add `avm_version` to `algopy.Contract` class options ([`fc53b0f`](https://github.com/algorandfoundation/algorand-python-testing/commit/fc53b0fda5f0d22b6dbb99abf1ba024284fa52a4))
17
+
18
+ * update `algopy.op.Global` with fields added in AVM 11 ([`0cc9807`](https://github.com/algorandfoundation/algorand-python-testing/commit/0cc9807bbfc7084d54425c40889065ae2fd7d856))
19
+
20
+ * add `algopy.arc4.Struct._replace` introduced in algorand-python 2.5.0 ([`75d6847`](https://github.com/algorandfoundation/algorand-python-testing/commit/75d6847b80498d637c7f0b0e3915afd7af6f132c))
21
+
22
+ * add inline option to subroutine decorator ([`2cc15b3`](https://github.com/algorandfoundation/algorand-python-testing/commit/2cc15b3dc706eb8585b9658bf67b38da215e2e38))
23
+
24
+ ### Bug fixes
25
+
26
+ * add missing mappings for `algopy.op.Txn` members ([`fddfe6f`](https://github.com/algorandfoundation/algorand-python-testing/commit/fddfe6f7ff9d6d4e0434f65e19dd0b0cf2aef6bd))
27
+
28
+ * include `ARC4Contract` in `algopy.arc4` namespace ([`f19d46f`](https://github.com/algorandfoundation/algorand-python-testing/commit/f19d46f5663c9fbe4e9b2e8c3bd1e2f7ddc89c3a))
29
+
30
+ * update `algopy.CompiledContract` and `algopy.CompiledLogicSig` to be NamedTuples ([`84be408`](https://github.com/algorandfoundation/algorand-python-testing/commit/84be4082348e3d89b40a65a69b599594a5531828))
31
+
32
+ * added missing __contains__ implementation for `algopy.Bytes` ([`8b2efa2`](https://github.com/algorandfoundation/algorand-python-testing/commit/8b2efa20b37e3043ac6a228d6706da4203373a7e))
33
+
34
+ ### Documentation
35
+
36
+ * fix doctest example for `algopy.EllipticCurve` ([`7d0bb0d`](https://github.com/algorandfoundation/algorand-python-testing/commit/7d0bb0dfe9a5ea2d67b130fa300fb80cef52fda5))
37
+
2
38
  ## v0.4.1 (2024-09-03)
3
39
 
4
40
  ## v0.4.1-beta.1 (2024-09-03)
5
41
 
6
- ### Fix
42
+ ### Bug fixes
7
43
 
8
44
  * ability to pass kw_only flag to dataclass when defining struct subclass (#23) ([`24bcf9d`](https://github.com/algorandfoundation/algorand-python-testing/commit/24bcf9d8af34eb2675ddf85ce9d71802f82f2d6a))
9
45
 
@@ -19,7 +55,7 @@
19
55
 
20
56
  ## v0.4.0-beta.1 (2024-08-27)
21
57
 
22
- ### Feature
58
+ ### Features
23
59
 
24
60
  * add support for frozen on asset holdings, including a new ledger function `update_asset_holdings` for setting asset holding balances and frozen states ([`d777ca0`](https://github.com/algorandfoundation/algorand-python-testing/commit/d777ca0a318a8ade7a20363c9ce77fe8a8bf5d68))
25
61
 
@@ -29,7 +65,7 @@
29
65
 
30
66
  * replaced `account_exists` with `account_is_funded` as the later is more useful ([`4d08690`](https://github.com/algorandfoundation/algorand-python-testing/commit/4d086903eb93a70ce1d485cdd7b12d8472ef16db))
31
67
 
32
- ### Fix
68
+ ### Bug fixes
33
69
 
34
70
  * use correct type for Globals.caller_application_id ([`a30d85a`](https://github.com/algorandfoundation/algorand-python-testing/commit/a30d85a4416dfc2c5d901f3ace2265384ef60c01))
35
71
 
@@ -55,9 +91,9 @@
55
91
 
56
92
  ## v0.3.0-beta.8 (2024-08-22)
57
93
 
58
- ### Feature
94
+ ### Features
59
95
 
60
- * include ARC4 results in log, and handle > 15 ARC4 arguments (#18) ([`fd83ee8`](https://github.com/algorandfoundation/algorand-python-testing/commit/fd83ee8525a393d4a1a66f20acdb661906d84b51))
96
+ * include ARC4 results in log, and handle > 15 ARC4 arguments (#18) ([`fd83ee8`](https://github.com/algorandfoundation/algorand-python-testing/commit/fd83ee8525a393d4a1a66f20acdb661906d84b51))
61
97
 
62
98
  ## v0.3.0-beta.7 (2024-08-21)
63
99
 
@@ -87,13 +123,13 @@
87
123
 
88
124
  * chore: apply suggestions from code review
89
125
 
90
- Co-authored-by: Daniel McGregor <daniel.mcgregor@makerx.com.au>
126
+ Co-authored-by: Daniel McGregor <daniel.mcgregor@makerx.com.au>
91
127
 
92
128
  * docs: addressing docs pr comments
93
129
 
94
130
  ## v0.3.0-beta.5 (2024-08-21)
95
131
 
96
- ### Fix
132
+ ### Bug fixes
97
133
 
98
134
  * ensure mutable types (ARC4 tuple, array and structs) have their changes propagated back to container-like types (global/local state, boxes, ARC4 mutable types) (#14) ([`1f1f2ea`](https://github.com/algorandfoundation/algorand-python-testing/commit/1f1f2ea43a2f4f906cbcd5709b8e86b5c1f2bc63))
99
135
 
@@ -111,19 +147,19 @@
111
147
 
112
148
  ## v0.3.0-beta.4 (2024-08-21)
113
149
 
114
- ### Feature
150
+ ### Features
115
151
 
116
152
  * rename txn_op_fields to active_txn_overrides to better reflect purpose, add additional checks to ensure crate_group parameters are used correctly ([`973fc28`](https://github.com/algorandfoundation/algorand-python-testing/commit/973fc288836d09ba4657642c980ca9f916d38823))
117
153
 
118
- ### Fix
154
+ ### Bug fixes
119
155
 
120
156
  * fix equality implementation for Account, to allow comparison with arc4.Address ([`6ec2dd4`](https://github.com/algorandfoundation/algorand-python-testing/commit/6ec2dd4f2b4119987a5ea7c3c670bdd554c4fe30))
121
157
 
122
- * ensure new Account&#39;s have field defaults populated ([`54432b0`](https://github.com/algorandfoundation/algorand-python-testing/commit/54432b03cef13008b16fab84dcc250824e2e2da1))
158
+ * ensure new Account's have field defaults populated ([`54432b0`](https://github.com/algorandfoundation/algorand-python-testing/commit/54432b03cef13008b16fab84dcc250824e2e2da1))
123
159
 
124
160
  * ensure Global.current_application* properties match AVM ([`ae84ae2`](https://github.com/algorandfoundation/algorand-python-testing/commit/ae84ae27e49ef977babe7abb10d8994446d6b5f7))
125
161
 
126
- * when generating app/asset id&#39;s skip any that might already be reserved ([`0bb5eba`](https://github.com/algorandfoundation/algorand-python-testing/commit/0bb5eba3ec75ffdb16cfbac5b3c4837f64f8a58a))
162
+ * when generating app/asset id's skip any that might already be reserved ([`0bb5eba`](https://github.com/algorandfoundation/algorand-python-testing/commit/0bb5eba3ec75ffdb16cfbac5b3c4837f64f8a58a))
127
163
 
128
164
  ### Documentation
129
165
 
@@ -135,7 +171,7 @@
135
171
 
136
172
  ## v0.3.0-beta.1 (2024-08-14)
137
173
 
138
- ### Feature
174
+ ### Features
139
175
 
140
176
  * deferred app calls, modular test context, refined access to value generators, numerous fixes/improvements (#4) ([`85dd58a`](https://github.com/algorandfoundation/algorand-python-testing/commit/85dd58a60f56a0737de84dcb549c01ca5a7a2851))
141
177
 
@@ -149,7 +185,7 @@
149
185
 
150
186
  * chore: update src/algopy_testing/op.py
151
187
 
152
- Co-authored-by: Daniel McGregor &lt;daniel.mcgregor@makerx.com.au&gt;
188
+ Co-authored-by: Daniel McGregor <daniel.mcgregor@makerx.com.au>
153
189
 
154
190
  * feat: adding acctparamsget; extra tests; pr comments
155
191
 
@@ -175,7 +211,7 @@
175
211
 
176
212
  * remove lazy algopy imports from utils remove some unnecessary ignores add TODO
177
213
 
178
- * simplify abimethod and add TODO&#39;s
214
+ * simplify abimethod and add TODO's
179
215
 
180
216
  * add TODO for state totals
181
217
 
@@ -189,7 +225,7 @@
189
225
 
190
226
  * refactor: use implementation types in internal mappings
191
227
 
192
- * refactor: remove usages of `import algopy` from op.py, remove explicit imports from typing module add TODO&#39;s
228
+ * refactor: remove usages of `import algopy` from op.py, remove explicit imports from typing module add TODO's
193
229
 
194
230
  * test: use non-abstract contract base
195
231
 
@@ -223,7 +259,7 @@
223
259
 
224
260
  * test: adding tests for scratch slots
225
261
 
226
- * refactor: renaming set_txn_fields -&gt; scoped_txn_fields
262
+ * refactor: renaming set_txn_fields -> scoped_txn_fields
227
263
 
228
264
  * chore: adding `amount` field and open question under TODO;
229
265
 
@@ -245,7 +281,7 @@
245
281
 
246
282
  * refactor: adding tests for ITxn, ITxnCreate and GITxn, fixing related bugs
247
283
 
248
- * refactor: default_creator -&gt; default_sender; setting creator as default_sender
284
+ * refactor: default_creator -> default_sender; setting creator as default_sender
249
285
 
250
286
  * chore: parsing name to op name in ITxn
251
287
 
@@ -257,7 +293,7 @@
257
293
 
258
294
  * add stricter type checks for primitives
259
295
 
260
- * track when contracts are in a &#34;creating&#34; state or not
296
+ * track when contracts are in a "creating" state or not
261
297
 
262
298
  * todos
263
299
 
@@ -331,7 +367,7 @@
331
367
 
332
368
  * chore: remove scoped_txn_fields methods
333
369
 
334
- * add some additional TODO&#39;s for scoped_execution
370
+ * add some additional TODO's for scoped_execution
335
371
 
336
372
  * remove TODO
337
373
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: algorand-python-testing
3
- Version: 0.4.1
3
+ Version: 0.5.0
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
@@ -48,7 +48,7 @@ Alternatively, if you want to start from scratch:
48
48
  2. Install [AlgoKit CLI](https://github.com/algorandfoundation/algokit-cli?tab=readme-ov-file#install)
49
49
  3. Install Algorand Python Testing into your project:
50
50
  ```bash
51
- pip install algorand-testing-python
51
+ pip install algorand-python-testing
52
52
  ```
53
53
  4. Create a test file (e.g., `test_contract.py`):
54
54
 
@@ -25,7 +25,7 @@ Alternatively, if you want to start from scratch:
25
25
  2. Install [AlgoKit CLI](https://github.com/algorandfoundation/algokit-cli?tab=readme-ov-file#install)
26
26
  3. Install Algorand Python Testing into your project:
27
27
  ```bash
28
- pip install algorand-testing-python
28
+ pip install algorand-python-testing
29
29
  ```
30
30
  4. Create a test file (e.g., `test_contract.py`):
31
31
 
@@ -353,20 +353,22 @@ test_mock_vrf_verify()
353
353
  from unittest.mock import patch, MagicMock
354
354
  import algopy
355
355
 
356
- def test_mock_elliptic_curve_decompress():
357
- mock_result = (algopy.Bytes(b'x_coord'), algopy.Bytes(b'y_coord'))
358
- with patch('algopy.op.EllipticCurve.decompress', return_value=mock_result) as mock_decompress:
359
- result = algopy.op.EllipticCurve.decompress(
356
+ def test_mock_elliptic_curve_add():
357
+ mock_result = algopy.Bytes(b'result')
358
+ with patch('algopy.op.EllipticCurve.add', return_value=mock_result) as mock_add:
359
+ result = algopy.op.EllipticCurve.add(
360
360
  algopy.op.EC.BN254g1,
361
- algopy.Bytes(b'compressed_point')
361
+ algopy.Bytes(b'a'),
362
+ algopy.Bytes(b'b')
362
363
  )
363
364
  assert result == mock_result
364
- mock_decompress.assert_called_once_with(
365
+ mock_add.assert_called_once_with(
365
366
  algopy.op.EC.BN254g1,
366
- algopy.Bytes(b'compressed_point')
367
+ algopy.Bytes(b'a'),
368
+ algopy.Bytes(b'b'),
367
369
  )
368
370
 
369
- test_mock_elliptic_curve_decompress()
371
+ test_mock_elliptic_curve_add()
370
372
  ```
371
373
 
372
374
  These examples demonstrate how to mock key mockable opcodes in `algorand-python-testing`. Use similar techniques (in your preferred testing framework) for other mockable opcodes like `algopy.compile_logicsig`, `algopy.arc4.arc4_create`, and `algopy.arc4.arc4_update`.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "algorand-python-testing"
7
- version = "0.4.1"
7
+ version = "0.5.0"
8
8
  description = 'Algorand Python testing library'
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -57,7 +57,7 @@ dependencies = [
57
57
  "pytest-mock>=3.10.0",
58
58
  "pytest-xdist[psutil]>=3.3",
59
59
  "py-algorand-sdk>=2.4.0",
60
- "algokit-utils>=2.2.1",
60
+ "algokit-utils>=3.0.0",
61
61
  "pytest-cov>=4.1.0",
62
62
  "prettytable>=3.9.0",
63
63
  "mypy==1.10",
@@ -171,7 +171,7 @@ dependencies = [
171
171
  "pytest-mock>=3.10.0",
172
172
  "pytest-xdist[psutil]>=3.3",
173
173
  "py-algorand-sdk>=2.4.0",
174
- "algokit-utils>=2.2.1",
174
+ "algokit-utils>=3.0.0",
175
175
  "pytest-cov>=4.1.0",
176
176
  "mypy==1.10",
177
177
  ]
@@ -1,7 +1,9 @@
1
1
  import ast
2
+ import importlib
2
3
  import inspect
3
4
  import site
4
5
  import sys
6
+ import typing
5
7
  from collections.abc import Iterable
6
8
  from pathlib import Path
7
9
  from typing import NamedTuple
@@ -13,6 +15,40 @@ SITE_PACKAGES = Path(site.getsitepackages()[0])
13
15
  STUBS_ROOT = SITE_PACKAGES / "algopy-stubs"
14
16
  IMPL = PROJECT_ROOT / "src"
15
17
  ROOT_MODULE = "algopy"
18
+ _ADDITIONAL_GLOBAL_IMPLS = [
19
+ "_algopy_testing.op.global_values._Global",
20
+ "_algopy_testing.op.global_values.GlobalFields",
21
+ ]
22
+ _ADDITIONAL_TXN_IMPLS = [
23
+ "_algopy_testing.models.txn_fields.TransactionFields",
24
+ "_algopy_testing.models.txn_fields.TransactionFieldsGetter",
25
+ "_algopy_testing.op.constants.OP_MEMBER_TO_TXN_MEMBER",
26
+ ]
27
+
28
+ # mapping of stub types to additional implementation types to scan for members
29
+ _ADDITIONAL_TYPE_IMPLS = {
30
+ "algopy.Asset": ["_algopy_testing.models.asset.AssetFields"],
31
+ "algopy.Account": ["_algopy_testing.models.account.AccountFields"],
32
+ "algopy.Application": ["_algopy_testing.models.application.ApplicationFields"],
33
+ "algopy.Global": _ADDITIONAL_GLOBAL_IMPLS,
34
+ "algopy.Txn": _ADDITIONAL_TXN_IMPLS,
35
+ "algopy.op.Global": _ADDITIONAL_GLOBAL_IMPLS,
36
+ "algopy.op.GTxn": _ADDITIONAL_TXN_IMPLS,
37
+ "algopy.op.GITxn": _ADDITIONAL_TXN_IMPLS,
38
+ "algopy.op.Txn": _ADDITIONAL_TXN_IMPLS,
39
+ "algopy.op.ITxn": _ADDITIONAL_TXN_IMPLS,
40
+ "algopy.op.ITxnCreate": _ADDITIONAL_TXN_IMPLS,
41
+ "algopy.op.AppParamsGet": ["_algopy_testing.op.misc._AppParamsGet"],
42
+ "algopy.op.AssetHoldingGet": ["_algopy_testing.op.misc._AssetHoldingGet"],
43
+ "algopy.op.AppGlobal": ["_algopy_testing.op.misc._AppGlobal"],
44
+ "algopy.op.AppLocal": ["_algopy_testing.op.misc._AppLocal"],
45
+ "algopy.op.Scratch": ["_algopy_testing.op.misc._Scratch"],
46
+ }
47
+
48
+ # mapping of stub types to members that may be present but not found when discovering members
49
+ _ADDITIONAL_MEMBERS = {
50
+ "algopy.Asset": ["id"],
51
+ }
16
52
 
17
53
 
18
54
  class ASTNodeDefinition(NamedTuple):
@@ -127,9 +163,6 @@ def collect_stubs(stubs_dir: Path, relative_module: str) -> dict[str, ASTNodeDef
127
163
  def collect_coverage(stubs: dict[str, ASTNodeDefinition]) -> list[CoverageResult]:
128
164
  result = []
129
165
  for full_name, stub in stubs.items():
130
- if "GTxn" in full_name:
131
- print("stop")
132
-
133
166
  coverage = _get_impl_coverage(full_name, stub)
134
167
  if coverage:
135
168
  try:
@@ -145,7 +178,7 @@ def collect_coverage(stubs: dict[str, ASTNodeDefinition]) -> list[CoverageResult
145
178
  CoverageResult(
146
179
  full_name=full_name,
147
180
  stub_file=str(stub.path.relative_to(STUBS_ROOT)),
148
- impl_file=impl_file,
181
+ impl_file=impl_file or "MISSING!",
149
182
  coverage=coverage.coverage if coverage else 0,
150
183
  missing=", ".join(coverage.missing if coverage else []),
151
184
  )
@@ -156,18 +189,16 @@ def collect_coverage(stubs: dict[str, ASTNodeDefinition]) -> list[CoverageResult
156
189
  def print_results(results: list[CoverageResult]) -> None:
157
190
  table = PrettyTable(
158
191
  field_names=["Name", "Implementation", "Source Stub", "Coverage", "Missing"],
159
- sortby="Coverage",
160
192
  header=True,
161
193
  border=True,
162
194
  padding_width=2,
163
- reversesort=True,
164
195
  left_padding_width=0,
165
196
  right_padding_width=1,
166
197
  align="l",
167
198
  max_width=100,
168
199
  )
169
200
 
170
- for result in results:
201
+ for result in sorted(results, key=lambda c: c.coverage):
171
202
  table.add_row(
172
203
  [
173
204
  result.full_name,
@@ -209,7 +240,6 @@ def _get_impl_coverage(symbol: str, stub: ASTNodeDefinition) -> ImplCoverage | N
209
240
  try:
210
241
  impl = getattr(mod, name)
211
242
  except AttributeError:
212
- print(f"Attribute {name} not found in module {module}")
213
243
  return None
214
244
 
215
245
  try:
@@ -219,20 +249,6 @@ def _get_impl_coverage(symbol: str, stub: ASTNodeDefinition) -> ImplCoverage | N
219
249
  if hasattr(impl, "__class__"):
220
250
  try:
221
251
  impl_path = Path(inspect.getfile(impl.__class__))
222
- # For special cases like GTxn and GITxn, assume full implementation
223
- if name in [
224
- "GTxn",
225
- "GITxn",
226
- "Txn",
227
- "ITxn",
228
- "Global",
229
- "AssetConfigInnerTransaction",
230
- "Contract",
231
- "ApplicationCallInnerTransaction",
232
- "UFixedNxM",
233
- "BigUFixedNxM",
234
- ]:
235
- return ImplCoverage(impl_path)
236
252
  except TypeError:
237
253
  print(f"Warning: Could not determine file for {symbol}")
238
254
  return None
@@ -240,18 +256,56 @@ def _get_impl_coverage(symbol: str, stub: ASTNodeDefinition) -> ImplCoverage | N
240
256
  print(f"Warning: Could not determine file for {symbol}")
241
257
  return None
242
258
 
243
- return _compare_stub_impl(stub.node, impl, impl_path)
259
+ return _compare_stub_impl(stub.node, symbol, impl, impl_path)
260
+
261
+
262
+ def _get_impl_members(impl_name: str, impl: object) -> set[str]:
263
+ if isinstance(impl, type):
264
+ impl_mros: list[object] = [
265
+ typ for typ in impl.mro() if typ.__module__.startswith("_algopy_testing")
266
+ ]
267
+ else:
268
+ impl_mros = []
269
+ for additional_type in _ADDITIONAL_TYPE_IMPLS.get(impl_name, []):
270
+ impl_mros.append(_resolve_fullname(additional_type))
271
+
272
+ impl_members = set[str](_ADDITIONAL_MEMBERS.get(impl_name, []))
273
+ for impl_typ in impl_mros:
274
+ if typing.is_typeddict(impl_typ) and isinstance(impl_typ, type):
275
+ for typed_dict_mro in impl_typ.mro():
276
+ ann = getattr(typed_dict_mro, "__annotations__", None)
277
+ if isinstance(ann, dict):
278
+ impl_members.update(ann.keys())
279
+ elif isinstance(impl_typ, dict):
280
+ impl_members.update(impl_typ.keys())
281
+ elif isinstance(impl_typ, type):
282
+ members = list(vars(impl_typ).keys())
283
+ impl_members.update(members)
284
+ else:
285
+ raise ValueError(f"unexpected implementation type, {impl_typ}")
286
+ # special case for ITxnCreate
287
+ if impl_name == "algopy.op.ITxnCreate":
288
+ impl_members = {f"set_{member}" for member in impl_members}
289
+ impl_members.update(("begin", "next", "submit"))
290
+ return impl_members
291
+
244
292
 
293
+ def _resolve_fullname(fullname: str) -> object:
294
+ # note this assumes no nested classes
295
+ module_name, type_name = fullname.rsplit(".", maxsplit=1)
296
+ module = importlib.import_module(module_name)
297
+ return getattr(module, type_name)
245
298
 
246
- def _compare_stub_impl(stub: ast.AST, impl: object, impl_path: Path) -> ImplCoverage:
299
+
300
+ def _compare_stub_impl(
301
+ stub: ast.AST, impl_name: str, impl: object, impl_path: Path
302
+ ) -> ImplCoverage:
247
303
  # classes are really the only types that can be "partially implemented"
248
304
  # from a typing perspective
249
- if not isinstance(stub, ast.ClassDef):
305
+ # algopy.uenumerate is typed as a class, but is really just a function
306
+ if not isinstance(stub, ast.ClassDef) or impl_name == "algopy.uenumerate":
250
307
  return ImplCoverage(impl_path)
251
-
252
- # using vars to only get explicitly implemented members
253
- # need more sophisticated approach if implementations start using inheritance
254
- impl_members = set(vars(impl))
308
+ impl_members = _get_impl_members(impl_name, impl)
255
309
  stub_members = set()
256
310
  for stmt in stub.body:
257
311
  if isinstance(stmt, ast.FunctionDef):
@@ -287,6 +341,8 @@ def _compare_stub_impl(stub: ast.AST, impl: object, impl_path: Path) -> ImplCove
287
341
  "ne",
288
342
  )
289
343
  }
344
+ # excluding special fields used in typing hints
345
+ default_impls.update(("__match_args__", "__match_value__"))
290
346
  missing = sorted(stub_members.difference({*impl_members, *default_impls}))
291
347
  return ImplCoverage(impl_path, sorted(stub_members), missing)
292
348
 
@@ -16,13 +16,13 @@ ENV_WITH_NO_COLOR = dict(os.environ) | {
16
16
 
17
17
  def get_artifact_folders(root_dir: str) -> Iterator[Path]:
18
18
  for folder in Path(root_dir).iterdir():
19
- if folder.is_dir() and (folder / "contract.py").exists():
19
+ if folder.is_dir() and not str(folder.stem).startswith((".", "__")):
20
20
  yield folder
21
21
 
22
22
 
23
23
  def compile_contract(folder: Path) -> None:
24
24
  logger.info(f"Compiling: {folder}")
25
- contract_path = folder / "contract.py"
25
+ contract_path = folder
26
26
  (folder / "data").mkdir(exist_ok=True)
27
27
  compile_cmd = [
28
28
  "hatch",