From 365f772eca20267bb431421f7c6b5dc37aae98da Mon Sep 17 00:00:00 2001 From: Negar Abbasi Date: Thu, 7 Sep 2023 13:10:52 +1000 Subject: [PATCH 01/22] fix: removing simulate transaction on 315 version --- src/algokit_utils/application_client.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/algokit_utils/application_client.py b/src/algokit_utils/application_client.py index bd7bdab5..88a465f3 100644 --- a/src/algokit_utils/application_client.py +++ b/src/algokit_utils/application_client.py @@ -32,7 +32,6 @@ import algokit_utils.application_specification as au_spec import algokit_utils.deploy as au_deploy -from algokit_utils._simulate_315_compat import simulate_atc_315 from algokit_utils.logic_error import LogicError, parse_logic_error from algokit_utils.models import ( ABIArgsDict, @@ -169,7 +168,6 @@ def __init__( self._approval_program: Program | None = None self._approval_source_map: SourceMap | None = None self._clear_program: Program | None = None - self._use_simulate_315 = False # flag to determine if old simulate 3.15 encoding should be used self.template_values: au_deploy.TemplateValueMapping = template_values or {} self.existing_deployments = existing_deployments @@ -883,21 +881,9 @@ def _simulate_readonly_call( return TransactionResponse.from_atr(simulate_response) def _simulate_atc(self, atc: AtomicTransactionComposer) -> SimulateAtomicTransactionResponse: - # TODO: remove this once 3.16 is in mainnet - # there was a breaking change in algod 3.16 to the simulate endpoint - # attempt to transparently handle this by calling the endpoint with the old behaviour if - # 3.15 is detected - if self._use_simulate_315: - return simulate_atc_315(atc, self.algod_client) try: return atc.simulate(self.algod_client) except AlgodHTTPError as ex: - if ex.code == HTTPStatus.BAD_REQUEST.value and ( - "msgpack decode error [pos 12]: no matching struct field found when decoding stream map with key " - "txn-groups" in ex.args - ): - self._use_simulate_315 = True - return simulate_atc_315(atc, self.algod_client) raise ex def _load_reference_and_check_app_id(self) -> None: From 2316a60f5ab82ee54760f44372cc9901534cd3fb Mon Sep 17 00:00:00 2001 From: Negar Abbasi Date: Thu, 7 Sep 2023 13:41:07 +1000 Subject: [PATCH 02/22] chore: updating project dependencies --- poetry.lock | 187 ++++++++++++++++++++++++++++++++++++++++--------- pyproject.toml | 3 + 2 files changed, 158 insertions(+), 32 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3c96d9be..562c054d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,9 +1,10 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. [[package]] name = "aiohttp" version = "3.8.5" description = "Async http client/server framework (asyncio)" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -112,6 +113,7 @@ speedups = ["Brotli", "aiodns", "cchardet"] name = "aiosignal" version = "1.3.1" description = "aiosignal: a list of registered asynchronous callbacks" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -126,6 +128,7 @@ frozenlist = ">=1.1.0" name = "alabaster" version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -137,6 +140,7 @@ files = [ name = "astroid" version = "2.15.5" description = "An abstract syntax tree for Python with inference support." +category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -156,6 +160,7 @@ wrapt = [ name = "async-timeout" version = "4.0.2" description = "Timeout context manager for asyncio programs" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -167,6 +172,7 @@ files = [ name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -185,6 +191,7 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "babel" version = "2.12.1" description = "Internationalization utilities" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -196,6 +203,7 @@ files = [ name = "beaker-pyteal" version = "1.0.1" description = "A Framework for building PyTeal Applications" +category = "dev" optional = false python-versions = ">=3.10,<4.0" files = [ @@ -211,6 +219,7 @@ pyteal = ">=0.24,<0.25" name = "black" version = "23.3.0" description = "The uncompromising code formatter." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -260,6 +269,7 @@ uvloop = ["uvloop (>=0.15.2)"] name = "bleach" version = "6.0.0" description = "An easy safelist-based HTML-sanitizing tool." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -278,6 +288,7 @@ css = ["tinycss2 (>=1.1.0,<1.2)"] name = "cachecontrol" version = "0.13.0" description = "httplib2 caching for requests" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -296,19 +307,21 @@ redis = ["redis (>=2.10.5)"] [[package]] name = "certifi" -version = "2023.5.7" +version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." +category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, - {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, ] [[package]] name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." +category = "main" optional = false python-versions = "*" files = [ @@ -385,6 +398,7 @@ pycparser = "*" name = "cfgv" version = "3.3.1" description = "Validate configuration and produce human readable error messages." +category = "dev" optional = false python-versions = ">=3.6.1" files = [ @@ -396,6 +410,7 @@ files = [ name = "charset-normalizer" version = "3.1.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -480,6 +495,7 @@ files = [ name = "click" version = "8.1.3" description = "Composable command line interface toolkit" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -494,6 +510,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "click-log" version = "0.4.0" description = "Logging integration for Click" +category = "dev" optional = false python-versions = "*" files = [ @@ -508,6 +525,7 @@ click = "*" name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." +category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -519,6 +537,7 @@ files = [ name = "coverage" version = "7.2.7" description = "Code coverage measurement for Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -592,34 +611,35 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "41.0.2" +version = "41.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-41.0.2-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:01f1d9e537f9a15b037d5d9ee442b8c22e3ae11ce65ea1f3316a41c78756b711"}, - {file = "cryptography-41.0.2-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:079347de771f9282fbfe0e0236c716686950c19dee1b76240ab09ce1624d76d7"}, - {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:439c3cc4c0d42fa999b83ded80a9a1fb54d53c58d6e59234cfe97f241e6c781d"}, - {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f14ad275364c8b4e525d018f6716537ae7b6d369c094805cae45300847e0894f"}, - {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:84609ade00a6ec59a89729e87a503c6e36af98ddcd566d5f3be52e29ba993182"}, - {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:49c3222bb8f8e800aead2e376cbef687bc9e3cb9b58b29a261210456a7783d83"}, - {file = "cryptography-41.0.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d73f419a56d74fef257955f51b18d046f3506270a5fd2ac5febbfa259d6c0fa5"}, - {file = "cryptography-41.0.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:2a034bf7d9ca894720f2ec1d8b7b5832d7e363571828037f9e0c4f18c1b58a58"}, - {file = "cryptography-41.0.2-cp37-abi3-win32.whl", hash = "sha256:d124682c7a23c9764e54ca9ab5b308b14b18eba02722b8659fb238546de83a76"}, - {file = "cryptography-41.0.2-cp37-abi3-win_amd64.whl", hash = "sha256:9c3fe6534d59d071ee82081ca3d71eed3210f76ebd0361798c74abc2bcf347d4"}, - {file = "cryptography-41.0.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a719399b99377b218dac6cf547b6ec54e6ef20207b6165126a280b0ce97e0d2a"}, - {file = "cryptography-41.0.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:182be4171f9332b6741ee818ec27daff9fb00349f706629f5cbf417bd50e66fd"}, - {file = "cryptography-41.0.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7a9a3bced53b7f09da251685224d6a260c3cb291768f54954e28f03ef14e3766"}, - {file = "cryptography-41.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f0dc40e6f7aa37af01aba07277d3d64d5a03dc66d682097541ec4da03cc140ee"}, - {file = "cryptography-41.0.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:674b669d5daa64206c38e507808aae49904c988fa0a71c935e7006a3e1e83831"}, - {file = "cryptography-41.0.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7af244b012711a26196450d34f483357e42aeddb04128885d95a69bd8b14b69b"}, - {file = "cryptography-41.0.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9b6d717393dbae53d4e52684ef4f022444fc1cce3c48c38cb74fca29e1f08eaa"}, - {file = "cryptography-41.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:192255f539d7a89f2102d07d7375b1e0a81f7478925b3bc2e0549ebf739dae0e"}, - {file = "cryptography-41.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f772610fe364372de33d76edcd313636a25684edb94cee53fd790195f5989d14"}, - {file = "cryptography-41.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:b332cba64d99a70c1e0836902720887fb4529ea49ea7f5462cf6640e095e11d2"}, - {file = "cryptography-41.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9a6673c1828db6270b76b22cc696f40cde9043eb90373da5c2f8f2158957f42f"}, - {file = "cryptography-41.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:342f3767e25876751e14f8459ad85e77e660537ca0a066e10e75df9c9e9099f0"}, - {file = "cryptography-41.0.2.tar.gz", hash = "sha256:7d230bf856164de164ecb615ccc14c7fc6de6906ddd5b491f3af90d3514c925c"}, + {file = "cryptography-41.0.3-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507"}, + {file = "cryptography-41.0.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922"}, + {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81"}, + {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd"}, + {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47"}, + {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116"}, + {file = "cryptography-41.0.3-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c"}, + {file = "cryptography-41.0.3-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae"}, + {file = "cryptography-41.0.3-cp37-abi3-win32.whl", hash = "sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306"}, + {file = "cryptography-41.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574"}, + {file = "cryptography-41.0.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087"}, + {file = "cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858"}, + {file = "cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906"}, + {file = "cryptography-41.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e"}, + {file = "cryptography-41.0.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd"}, + {file = "cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207"}, + {file = "cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84"}, + {file = "cryptography-41.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7"}, + {file = "cryptography-41.0.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d"}, + {file = "cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de"}, + {file = "cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1"}, + {file = "cryptography-41.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4"}, + {file = "cryptography-41.0.3.tar.gz", hash = "sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34"}, ] [package.dependencies] @@ -639,6 +659,7 @@ test-randomorder = ["pytest-randomly"] name = "cyclonedx-python-lib" version = "2.7.1" description = "A library for producing CycloneDX SBOM (Software Bill of Materials) files." +category = "dev" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -656,6 +677,7 @@ toml = ">=0.10.0,<0.11.0" name = "deprecated" version = "1.2.14" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -673,6 +695,7 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] name = "distlib" version = "0.3.6" description = "Distribution utilities" +category = "dev" optional = false python-versions = "*" files = [ @@ -684,6 +707,7 @@ files = [ name = "docstring-parser" version = "0.14.1" description = "Parse Python docstrings in reST, Google and Numpydoc format" +category = "dev" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -695,6 +719,7 @@ files = [ name = "docutils" version = "0.18.1" description = "Docutils -- Python Documentation Utilities" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -706,6 +731,7 @@ files = [ name = "dotty-dict" version = "1.3.1" description = "Dictionary wrapper for quick access to deeply nested keys." +category = "dev" optional = false python-versions = ">=3.5,<4.0" files = [ @@ -717,6 +743,7 @@ files = [ name = "exceptiongroup" version = "1.1.1" description = "Backport of PEP 654 (exception groups)" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -731,6 +758,7 @@ test = ["pytest (>=6)"] name = "executing" version = "1.2.0" description = "Get the currently executing AST node of a frame, and other information" +category = "dev" optional = false python-versions = "*" files = [ @@ -745,6 +773,7 @@ tests = ["asttokens", "littleutils", "pytest", "rich"] name = "filelock" version = "3.12.0" description = "A platform independent file lock." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -760,6 +789,7 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "diff-cover (>=7.5)", "p name = "frozenlist" version = "1.3.3" description = "A list-like structure which implements collections.abc.MutableSequence" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -843,6 +873,7 @@ files = [ name = "gitdb" version = "4.0.10" description = "Git Object Database" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -855,13 +886,14 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.31" +version = "3.1.34" description = "GitPython is a Python library used to interact with Git repositories" +category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.31-py3-none-any.whl", hash = "sha256:f04893614f6aa713a60cbbe1e6a97403ef633103cdd0ef5eb6efe0deb98dbe8d"}, - {file = "GitPython-3.1.31.tar.gz", hash = "sha256:8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573"}, + {file = "GitPython-3.1.34-py3-none-any.whl", hash = "sha256:5d3802b98a3bae1c2b8ae0e1ff2e4aa16bcdf02c145da34d092324f599f01395"}, + {file = "GitPython-3.1.34.tar.gz", hash = "sha256:85f7d365d1f6bf677ae51039c1ef67ca59091c7ebd5a3509aa399d4eda02d6dd"}, ] [package.dependencies] @@ -871,6 +903,7 @@ gitdb = ">=4.0.1,<5" name = "html5lib" version = "1.1" description = "HTML parser based on the WHATWG HTML specification" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -892,6 +925,7 @@ lxml = ["lxml"] name = "identify" version = "2.5.24" description = "File identification library for Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -906,6 +940,7 @@ license = ["ukkonen"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -917,6 +952,7 @@ files = [ name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -928,6 +964,7 @@ files = [ name = "importlib-metadata" version = "6.6.0" description = "Read metadata from Python packages" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -947,6 +984,7 @@ testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packag name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -958,6 +996,7 @@ files = [ name = "invoke" version = "1.7.3" description = "Pythonic task execution" +category = "dev" optional = false python-versions = "*" files = [ @@ -969,6 +1008,7 @@ files = [ name = "jaraco-classes" version = "3.2.3" description = "Utility functions for Python class constructs" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -987,6 +1027,7 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "jeepney" version = "0.8.0" description = "Low-level, pure Python DBus protocol wrapper." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1002,6 +1043,7 @@ trio = ["async_generator", "trio"] name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1019,6 +1061,7 @@ i18n = ["Babel (>=2.7)"] name = "keyring" version = "23.13.1" description = "Store and access your passwords safely." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1042,6 +1085,7 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "lazy-object-proxy" version = "1.9.0" description = "A fast and thorough lazy object proxy." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1087,6 +1131,7 @@ files = [ name = "markdown-it-py" version = "2.2.0" description = "Python port of markdown-it. Markdown parsing, done right!" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1111,6 +1156,7 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1170,6 +1216,7 @@ files = [ name = "mdit-py-plugins" version = "0.3.5" description = "Collection of plugins for markdown-it-py" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1189,6 +1236,7 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1200,6 +1248,7 @@ files = [ name = "more-itertools" version = "9.1.0" description = "More routines for operating on iterables, beyond itertools" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1211,6 +1260,7 @@ files = [ name = "msgpack" version = "1.0.5" description = "MessagePack serializer" +category = "main" optional = false python-versions = "*" files = [ @@ -1283,6 +1333,7 @@ files = [ name = "multidict" version = "6.0.4" description = "multidict implementation" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1366,6 +1417,7 @@ files = [ name = "mypy" version = "1.3.0" description = "Optional static typing for Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1412,6 +1464,7 @@ reports = ["lxml"] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1423,6 +1476,7 @@ files = [ name = "myst-parser" version = "1.0.0" description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1449,6 +1503,7 @@ testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4, name = "nodeenv" version = "1.8.0" description = "Node.js virtual environment builder" +category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ @@ -1463,6 +1518,7 @@ setuptools = "*" name = "packageurl-python" version = "0.11.1" description = "A purl aka. Package URL parser and builder" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1479,6 +1535,7 @@ test = ["pytest"] name = "packaging" version = "23.1" description = "Core utilities for Python packages" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1490,6 +1547,7 @@ files = [ name = "pastel" version = "0.2.1" description = "Bring colors to your terminal." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1501,6 +1559,7 @@ files = [ name = "pathspec" version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1512,6 +1571,7 @@ files = [ name = "pip" version = "23.1.2" description = "The PyPA recommended tool for installing Python packages." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1523,6 +1583,7 @@ files = [ name = "pip-api" version = "0.0.30" description = "An unofficial, importable pip API" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1537,6 +1598,7 @@ pip = "*" name = "pip-audit" version = "2.5.6" description = "A tool for scanning Python environments for known vulnerabilities" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1566,6 +1628,7 @@ test = ["coverage[toml]", "pretend", "pytest", "pytest-cov"] name = "pip-requirements-parser" version = "32.0.1" description = "pip requirements parser - a mostly correct pip requirements parsing library because it uses pip's own code." +category = "dev" optional = false python-versions = ">=3.6.0" files = [ @@ -1585,6 +1648,7 @@ testing = ["aboutcode-toolkit (>=6.0.0)", "black", "pytest (>=6,!=7.0.0)", "pyte name = "pkginfo" version = "1.9.6" description = "Query metadata from sdists / bdists / installed packages." +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1599,6 +1663,7 @@ testing = ["pytest", "pytest-cov"] name = "platformdirs" version = "3.5.1" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1614,6 +1679,7 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest- name = "pluggy" version = "1.0.0" description = "plugin and hook calling mechanisms for python" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1629,6 +1695,7 @@ testing = ["pytest", "pytest-benchmark"] name = "poethepoet" version = "0.19.0" description = "A task runner that works well with poetry." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1647,6 +1714,7 @@ poetry-plugin = ["poetry (>=1.0,<2.0)"] name = "pre-commit" version = "3.3.2" description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1665,6 +1733,7 @@ virtualenv = ">=20.10.0" name = "py-algorand-sdk" version = "2.2.0" description = "Algorand SDK in Python" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1681,6 +1750,7 @@ pynacl = ">=1.4.0,<2" name = "pycparser" version = "2.21" description = "C parser in Python" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1692,6 +1762,7 @@ files = [ name = "pycryptodomex" version = "3.18.0" description = "Cryptographic library for Python" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -1733,6 +1804,7 @@ files = [ name = "pygments" version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1747,6 +1819,7 @@ plugins = ["importlib-metadata"] name = "pynacl" version = "1.5.0" description = "Python binding to the Networking and Cryptography (NaCl) library" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1773,6 +1846,7 @@ tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] name = "pyparsing" version = "3.0.9" description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "dev" optional = false python-versions = ">=3.6.8" files = [ @@ -1787,6 +1861,7 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pyteal" version = "0.24.1" description = "Algorand Smart Contracts in Python" +category = "dev" optional = false python-versions = ">=3.10" files = [ @@ -1805,6 +1880,7 @@ tabulate = ">=0.9.0,<0.10.0" name = "pytest" version = "7.3.1" description = "pytest: simple powerful testing with Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1827,6 +1903,7 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-cov" version = "4.1.0" description = "Pytest plugin for measuring coverage." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1845,6 +1922,7 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale name = "pytest-mock" version = "3.10.0" description = "Thin-wrapper around the mock package for easier use with pytest" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1862,6 +1940,7 @@ dev = ["pre-commit", "pytest-asyncio", "tox"] name = "python-dotenv" version = "1.0.0" description = "Read key-value pairs from a .env file and set them as environment variables" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1876,6 +1955,7 @@ cli = ["click (>=5.0)"] name = "python-gitlab" version = "3.14.0" description = "Interact with GitLab API" +category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -1895,6 +1975,7 @@ yaml = ["PyYaml (>=5.2)"] name = "python-semantic-release" version = "7.34.3" description = "Automatic Semantic Versioning for Python projects" +category = "dev" optional = false python-versions = "*" files = [ @@ -1926,6 +2007,7 @@ test = ["coverage (>=5,<6)", "mock (==1.3.0)", "pytest (>=7,<8)", "pytest-mock ( name = "pywin32-ctypes" version = "0.2.0" description = "" +category = "dev" optional = false python-versions = "*" files = [ @@ -1937,6 +2019,7 @@ files = [ name = "pyyaml" version = "6.0" description = "YAML parser and emitter for Python" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1986,6 +2069,7 @@ files = [ name = "readme-renderer" version = "37.3" description = "readme_renderer is a library for rendering \"readme\" descriptions for Warehouse" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2005,6 +2089,7 @@ md = ["cmarkgfm (>=0.8.0)"] name = "requests" version = "2.31.0" description = "Python HTTP for Humans." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2026,6 +2111,7 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "requests-toolbelt" version = "1.0.0" description = "A utility belt for advanced users of python-requests" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2040,6 +2126,7 @@ requests = ">=2.0.1,<3.0.0" name = "rfc3986" version = "2.0.0" description = "Validating URI References per RFC 3986" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2054,6 +2141,7 @@ idna2008 = ["idna"] name = "rich" version = "13.4.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -2072,6 +2160,7 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] name = "ruff" version = "0.0.261" description = "An extremely fast Python linter, written in Rust." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2098,6 +2187,7 @@ files = [ name = "secretstorage" version = "3.3.3" description = "Python bindings to FreeDesktop.org Secret Service API" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2113,6 +2203,7 @@ jeepney = ">=0.6" name = "semantic-version" version = "2.10.0" description = "A library implementing the 'SemVer' scheme." +category = "dev" optional = false python-versions = ">=2.7" files = [ @@ -2128,6 +2219,7 @@ doc = ["Sphinx", "sphinx-rtd-theme"] name = "semver" version = "2.13.0" description = "Python helper for Semantic Versioning (http://semver.org/)" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2139,6 +2231,7 @@ files = [ name = "setuptools" version = "67.8.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2155,6 +2248,7 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -2166,6 +2260,7 @@ files = [ name = "smmap" version = "5.0.0" description = "A pure Python implementation of a sliding window memory map manager" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2177,6 +2272,7 @@ files = [ name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "dev" optional = false python-versions = "*" files = [ @@ -2188,6 +2284,7 @@ files = [ name = "sortedcontainers" version = "2.4.0" description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +category = "dev" optional = false python-versions = "*" files = [ @@ -2199,6 +2296,7 @@ files = [ name = "sphinx" version = "6.2.1" description = "Python documentation generator" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2233,6 +2331,7 @@ test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] name = "sphinx-autodoc2" version = "0.4.2" description = "Analyse a python project and create documentation for it." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2255,6 +2354,7 @@ testing = ["pytest", "pytest-cov", "pytest-regressions", "sphinx (>=4.0.0)"] name = "sphinx-copybutton" version = "0.5.2" description = "Add a copy button to each of your code cells." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2273,6 +2373,7 @@ rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] name = "sphinx-rtd-theme" version = "1.2.1" description = "Read the Docs theme for Sphinx" +category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -2292,6 +2393,7 @@ dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] name = "sphinxcontrib-applehelp" version = "1.0.4" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2307,6 +2409,7 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "1.0.2" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2322,6 +2425,7 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2337,6 +2441,7 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jquery" version = "4.1" description = "Extension to include jQuery on newer Sphinx releases" +category = "dev" optional = false python-versions = ">=2.7" files = [ @@ -2351,6 +2456,7 @@ Sphinx = ">=1.8" name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2365,6 +2471,7 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-qthelp" version = "1.0.3" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2380,6 +2487,7 @@ test = ["pytest"] name = "sphinxcontrib-serializinghtml" version = "1.1.5" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2395,6 +2503,7 @@ test = ["pytest"] name = "tabulate" version = "0.9.0" description = "Pretty-print tabular data" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2409,6 +2518,7 @@ widechars = ["wcwidth"] name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" +category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -2420,6 +2530,7 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2431,6 +2542,7 @@ files = [ name = "tomlkit" version = "0.11.8" description = "Style preserving TOML library" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2442,6 +2554,7 @@ files = [ name = "tqdm" version = "4.65.0" description = "Fast, Extensible Progress Meter" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2462,6 +2575,7 @@ telegram = ["requests"] name = "twine" version = "3.8.0" description = "Collection of utilities for publishing packages on PyPI" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2485,6 +2599,7 @@ urllib3 = ">=1.26.0" name = "types-deprecated" version = "1.2.9.2" description = "Typing stubs for Deprecated" +category = "dev" optional = false python-versions = "*" files = [ @@ -2496,6 +2611,7 @@ files = [ name = "typing-extensions" version = "4.6.3" description = "Backported and Experimental Type Hints for Python 3.7+" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2507,6 +2623,7 @@ files = [ name = "urllib3" version = "1.26.16" description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -2523,6 +2640,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] name = "virtualenv" version = "20.23.0" description = "Virtual Python Environment builder" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2543,6 +2661,7 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "coverage-enable-subprocess name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" +category = "dev" optional = false python-versions = "*" files = [ @@ -2554,6 +2673,7 @@ files = [ name = "wheel" version = "0.40.0" description = "A built-package format for Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2568,6 +2688,7 @@ test = ["pytest (>=6.0.0)"] name = "wrapt" version = "1.15.0" description = "Module for decorators, wrappers and monkey patching." +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -2652,6 +2773,7 @@ files = [ name = "yarl" version = "1.9.2" description = "Yet another URL library" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2739,6 +2861,7 @@ multidict = ">=4.0" name = "zipp" version = "3.15.0" description = "Backport of pathlib-compatible object wrapper for zip files" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2753,4 +2876,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "7e408024f836b99d8049311d338c6cb2cbc4973c3389218292df2103d53af618" +content-hash = "77b1d2affaa8596a9a14e12e05920be20b4b0032fe3a7e71f1ae47d8ac134b75" diff --git a/pyproject.toml b/pyproject.toml index 39e2b0e6..b672cd72 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,6 +10,9 @@ readme = "README.md" python = "^3.10" py-algorand-sdk = "^2.2.0" deprecated = "^1.2.14" +certifi = "^2023.7.22" +cryptography = "^41.0.3" +gitpython = "^3.1.34" [tool.poetry.group.dev.dependencies] pytest = "^7.2.0" From bcf9c3ab3dc276f86297d0de09b60626e8c6e9f1 Mon Sep 17 00:00:00 2001 From: Negar Abbasi Date: Thu, 7 Sep 2023 15:51:12 +1000 Subject: [PATCH 03/22] refactor: deleting unwanted modules and functions --- src/algokit_utils/_simulate_315_compat.py | 73 ----------------------- src/algokit_utils/application_client.py | 8 +-- 2 files changed, 1 insertion(+), 80 deletions(-) delete mode 100644 src/algokit_utils/_simulate_315_compat.py diff --git a/src/algokit_utils/_simulate_315_compat.py b/src/algokit_utils/_simulate_315_compat.py deleted file mode 100644 index b6c65cee..00000000 --- a/src/algokit_utils/_simulate_315_compat.py +++ /dev/null @@ -1,73 +0,0 @@ -import base64 -from typing import Any - -from algosdk import encoding -from algosdk.atomic_transaction_composer import ( - AtomicTransactionComposer, - AtomicTransactionComposerStatus, - SimulateABIResult, - SimulateAtomicTransactionResponse, -) -from algosdk.error import AtomicTransactionComposerError -from algosdk.v2client.algod import AlgodClient - - -def simulate_atc_315(atc: AtomicTransactionComposer, client: AlgodClient) -> SimulateAtomicTransactionResponse: - """ - Ported from algosdk 2.1.2 - - Send the transaction group to the `simulate` endpoint and wait for results. - An error will be thrown if submission or execution fails. - The composer's status must be SUBMITTED or lower before calling this method, - since execution is only allowed once. - - Returns: - SimulateAtomicTransactionResponse: Object with simulation results for this - transaction group, a list of txIDs of the simulated transactions, - an array of results for each method call transaction in this group. - If a method has no return value (void), then the method results array - will contain None for that method's return value. - """ - - if atc.status > AtomicTransactionComposerStatus.SUBMITTED: - raise AtomicTransactionComposerError( # type: ignore[no-untyped-call] - "AtomicTransactionComposerStatus must be submitted or lower to simulate a group" - ) - - signed_txns = atc.gather_signatures() - txn = b"".join( - base64.b64decode(encoding.msgpack_encode(txn)) for txn in signed_txns # type: ignore[no-untyped-call] - ) - simulation_result = client.algod_request( - "POST", "/transactions/simulate", data=txn, headers={"Content-Type": "application/x-binary"} - ) - assert isinstance(simulation_result, dict) - - # Only take the first group in the simulate response - txn_group: dict[str, Any] = simulation_result["txn-groups"][0] - txn_results = txn_group["txn-results"] - - # Parse out abi results - results = [] - for method_index, method in atc.method_dict.items(): - tx_info = txn_results[method_index]["txn-result"] - - result = atc.parse_result(method, atc.tx_ids[method_index], tx_info) - sim_result = SimulateABIResult( - tx_id=result.tx_id, - raw_value=result.raw_value, - return_value=result.return_value, - decode_error=result.decode_error, - tx_info=result.tx_info, - method=result.method, - ) - results.append(sim_result) - - return SimulateAtomicTransactionResponse( - version=simulation_result.get("version", 0), - failure_message=txn_group.get("failure-message", ""), - failed_at=txn_group.get("failed-at"), - simulate_response=simulation_result, - tx_ids=atc.tx_ids, - results=results, - ) diff --git a/src/algokit_utils/application_client.py b/src/algokit_utils/application_client.py index 88a465f3..07cc798d 100644 --- a/src/algokit_utils/application_client.py +++ b/src/algokit_utils/application_client.py @@ -868,7 +868,7 @@ def _check_is_compiled(self) -> tuple[Program, Program]: def _simulate_readonly_call( self, method: Method, atc: AtomicTransactionComposer ) -> ABITransactionResponse | TransactionResponse: - simulate_response = self._simulate_atc(atc) + simulate_response = atc.simulate(self.algod_client) if simulate_response.failure_message: raise _try_convert_to_logic_error( simulate_response.failure_message, @@ -880,12 +880,6 @@ def _simulate_readonly_call( return TransactionResponse.from_atr(simulate_response) - def _simulate_atc(self, atc: AtomicTransactionComposer) -> SimulateAtomicTransactionResponse: - try: - return atc.simulate(self.algod_client) - except AlgodHTTPError as ex: - raise ex - def _load_reference_and_check_app_id(self) -> None: self._load_app_reference() self._check_app_id() From 3be22ddee740acd7381e29b4f2e5d935e3471ad4 Mon Sep 17 00:00:00 2001 From: Negar Abbasi Date: Thu, 7 Sep 2023 16:04:36 +1000 Subject: [PATCH 04/22] refactor: refactoring simulate readonly function --- src/algokit_utils/application_client.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/algokit_utils/application_client.py b/src/algokit_utils/application_client.py index 07cc798d..3126445a 100644 --- a/src/algokit_utils/application_client.py +++ b/src/algokit_utils/application_client.py @@ -4,7 +4,6 @@ import logging import re import typing -from http import HTTPStatus from math import ceil from pathlib import Path from typing import Any, Literal, cast, overload @@ -21,7 +20,6 @@ AtomicTransactionResponse, LogicSigTransactionSigner, MultisigTransactionSigner, - SimulateAtomicTransactionResponse, TransactionSigner, TransactionWithSigner, ) @@ -868,7 +866,10 @@ def _check_is_compiled(self) -> tuple[Program, Program]: def _simulate_readonly_call( self, method: Method, atc: AtomicTransactionComposer ) -> ABITransactionResponse | TransactionResponse: - simulate_response = atc.simulate(self.algod_client) + try: + simulate_response = atc.simulate(self.algod_client) + except AlgodHTTPError as ex: + raise ex if simulate_response.failure_message: raise _try_convert_to_logic_error( simulate_response.failure_message, From 98f57a267a93eb7a27a6a5daa7bbd215b9a523a7 Mon Sep 17 00:00:00 2001 From: Negar Abbasi Date: Fri, 8 Sep 2023 16:22:25 +1000 Subject: [PATCH 05/22] fix: adding simulation on failed transactions and debug mode --- src/algokit_utils/application_client.py | 9 +++++++-- src/algokit_utils/config.py | 22 ++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 src/algokit_utils/config.py diff --git a/src/algokit_utils/application_client.py b/src/algokit_utils/application_client.py index 3126445a..d7d4e044 100644 --- a/src/algokit_utils/application_client.py +++ b/src/algokit_utils/application_client.py @@ -30,6 +30,7 @@ import algokit_utils.application_specification as au_spec import algokit_utils.deploy as au_deploy +from algokit_utils.config import UpdatableConfig from algokit_utils.logic_error import LogicError, parse_logic_error from algokit_utils.models import ( ABIArgsDict, @@ -52,6 +53,8 @@ logger = logging.getLogger(__name__) +config = UpdatableConfig() +config.configure(debug=True) """A dictionary `dict[str, Any]` representing ABI argument names and values""" @@ -1259,8 +1262,10 @@ def execute_atc_with_logic_error( return atc.execute(algod_client, wait_rounds=wait_rounds) except Exception as ex: logic_error = _try_convert_to_logic_error(ex, approval_program, approval_source_map) - if logic_error: - raise logic_error from ex + if logic_error and config.debug: + simulate_response = atc.simulate(algod_client) + if simulate_response.failure_message: + raise logic_error from ex raise ex diff --git a/src/algokit_utils/config.py b/src/algokit_utils/config.py new file mode 100644 index 00000000..3955e9d8 --- /dev/null +++ b/src/algokit_utils/config.py @@ -0,0 +1,22 @@ +from collections.abc import Callable + + +class UpdatableConfig: + def __init__(self) -> None: + self._debug: bool = False + + @property + def debug(self) -> bool: + return self._debug + + def with_debug(self, lambda_func: Callable[[], None | str]) -> None: + original = self._debug + try: + self._debug = True + lambda_func() + finally: + self._debug = original + + def configure(self, *, debug: bool) -> None: + if debug is not None: + self._debug = debug From e9839df8f9a6baeee2cc793bb1ae9bf857bf5366 Mon Sep 17 00:00:00 2001 From: Negar Abbasi Date: Mon, 11 Sep 2023 10:47:23 +1000 Subject: [PATCH 06/22] fix: fixing the tests to use debug mode on default --- src/algokit_utils/application_client.py | 5 ++--- src/algokit_utils/config.py | 3 +++ tests/conftest.py | 7 +++++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/algokit_utils/application_client.py b/src/algokit_utils/application_client.py index d7d4e044..f7c1191d 100644 --- a/src/algokit_utils/application_client.py +++ b/src/algokit_utils/application_client.py @@ -30,7 +30,7 @@ import algokit_utils.application_specification as au_spec import algokit_utils.deploy as au_deploy -from algokit_utils.config import UpdatableConfig +from algokit_utils.config import config from algokit_utils.logic_error import LogicError, parse_logic_error from algokit_utils.models import ( ABIArgsDict, @@ -53,8 +53,7 @@ logger = logging.getLogger(__name__) -config = UpdatableConfig() -config.configure(debug=True) + """A dictionary `dict[str, Any]` representing ABI argument names and values""" diff --git a/src/algokit_utils/config.py b/src/algokit_utils/config.py index 3955e9d8..acd2635f 100644 --- a/src/algokit_utils/config.py +++ b/src/algokit_utils/config.py @@ -20,3 +20,6 @@ def with_debug(self, lambda_func: Callable[[], None | str]) -> None: def configure(self, *, debug: bool) -> None: if debug is not None: self._debug = debug + + +config = UpdatableConfig() diff --git a/tests/conftest.py b/tests/conftest.py index 75831888..5dee323b 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -19,6 +19,7 @@ ) from dotenv import load_dotenv +from algokit_utils.config import config from tests import app_client_test if TYPE_CHECKING: @@ -154,3 +155,9 @@ def app_spec() -> ApplicationSpecification: path = Path(__file__).parent / "app_client_test.json" path.write_text(app_spec.to_json()) return read_spec("app_client_test.json", deletable=True, updatable=True, template_values={"VERSION": 1}) + + +@pytest.fixture(autouse=True, scope="session") +def debug_mode() -> None: + config.configure(debug=True) + From d0b1a2b6c80af097917b6fa2982a106ca390f483 Mon Sep 17 00:00:00 2001 From: Negar Abbasi Date: Mon, 11 Sep 2023 10:50:34 +1000 Subject: [PATCH 07/22] chore: removing unnecessary packages from dependency --- pyproject.toml | 3 --- 1 file changed, 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index b672cd72..39e2b0e6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,9 +10,6 @@ readme = "README.md" python = "^3.10" py-algorand-sdk = "^2.2.0" deprecated = "^1.2.14" -certifi = "^2023.7.22" -cryptography = "^41.0.3" -gitpython = "^3.1.34" [tool.poetry.group.dev.dependencies] pytest = "^7.2.0" From efe040296a3d0c22ece456a71bab3dda6d830c4a Mon Sep 17 00:00:00 2001 From: Negar Abbasi Date: Mon, 11 Sep 2023 11:24:00 +1000 Subject: [PATCH 08/22] chore: updating poetry lock file --- poetry.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/poetry.lock b/poetry.lock index 562c054d..d4dd9f39 100644 --- a/poetry.lock +++ b/poetry.lock @@ -309,7 +309,7 @@ redis = ["redis (>=2.10.5)"] name = "certifi" version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." -category = "main" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -613,7 +613,7 @@ toml = ["tomli"] name = "cryptography" version = "41.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "main" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -873,7 +873,7 @@ files = [ name = "gitdb" version = "4.0.10" description = "Git Object Database" -category = "main" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -886,14 +886,14 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.34" +version = "3.1.35" description = "GitPython is a Python library used to interact with Git repositories" -category = "main" +category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.34-py3-none-any.whl", hash = "sha256:5d3802b98a3bae1c2b8ae0e1ff2e4aa16bcdf02c145da34d092324f599f01395"}, - {file = "GitPython-3.1.34.tar.gz", hash = "sha256:85f7d365d1f6bf677ae51039c1ef67ca59091c7ebd5a3509aa399d4eda02d6dd"}, + {file = "GitPython-3.1.35-py3-none-any.whl", hash = "sha256:c19b4292d7a1d3c0f653858db273ff8a6614100d1eb1528b014ec97286193c09"}, + {file = "GitPython-3.1.35.tar.gz", hash = "sha256:9cbefbd1789a5fe9bcf621bb34d3f441f3a90c8461d377f84eda73e721d9b06b"}, ] [package.dependencies] @@ -2260,7 +2260,7 @@ files = [ name = "smmap" version = "5.0.0" description = "A pure Python implementation of a sliding window memory map manager" -category = "main" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2876,4 +2876,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "77b1d2affaa8596a9a14e12e05920be20b4b0032fe3a7e71f1ae47d8ac134b75" +content-hash = "7e408024f836b99d8049311d338c6cb2cbc4973c3389218292df2103d53af618" From 7789becd8dcfa40a42c76a4fa3b0aa99da65029c Mon Sep 17 00:00:00 2001 From: Negar Abbasi Date: Mon, 11 Sep 2023 11:27:56 +1000 Subject: [PATCH 09/22] chore: reformatting with black and fixing mypy errors --- tests/conftest.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 5dee323b..fd89d866 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -17,9 +17,9 @@ get_kmd_client_from_algod_client, replace_template_variables, ) +from algokit_utils.config import config from dotenv import load_dotenv -from algokit_utils.config import config from tests import app_client_test if TYPE_CHECKING: @@ -158,6 +158,5 @@ def app_spec() -> ApplicationSpecification: @pytest.fixture(autouse=True, scope="session") -def debug_mode() -> None: +def _debug_mode() -> None: config.configure(debug=True) - From f660de58cfd29dcc786539cc9c1b0a42cb86d822 Mon Sep 17 00:00:00 2001 From: Negar Abbasi Date: Mon, 11 Sep 2023 13:57:42 +1000 Subject: [PATCH 10/22] chore: updating poetry lock file --- poetry.lock | 125 +--------------------------------------------------- 1 file changed, 1 insertion(+), 124 deletions(-) diff --git a/poetry.lock b/poetry.lock index d4dd9f39..110e6336 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "aiohttp" version = "3.8.5" description = "Async http client/server framework (asyncio)" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -113,7 +112,6 @@ speedups = ["Brotli", "aiodns", "cchardet"] name = "aiosignal" version = "1.3.1" description = "aiosignal: a list of registered asynchronous callbacks" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -128,7 +126,6 @@ frozenlist = ">=1.1.0" name = "alabaster" version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -140,7 +137,6 @@ files = [ name = "astroid" version = "2.15.5" description = "An abstract syntax tree for Python with inference support." -category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -160,7 +156,6 @@ wrapt = [ name = "async-timeout" version = "4.0.2" description = "Timeout context manager for asyncio programs" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -172,7 +167,6 @@ files = [ name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -191,7 +185,6 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "babel" version = "2.12.1" description = "Internationalization utilities" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -203,7 +196,6 @@ files = [ name = "beaker-pyteal" version = "1.0.1" description = "A Framework for building PyTeal Applications" -category = "dev" optional = false python-versions = ">=3.10,<4.0" files = [ @@ -219,7 +211,6 @@ pyteal = ">=0.24,<0.25" name = "black" version = "23.3.0" description = "The uncompromising code formatter." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -269,7 +260,6 @@ uvloop = ["uvloop (>=0.15.2)"] name = "bleach" version = "6.0.0" description = "An easy safelist-based HTML-sanitizing tool." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -288,7 +278,6 @@ css = ["tinycss2 (>=1.1.0,<1.2)"] name = "cachecontrol" version = "0.13.0" description = "httplib2 caching for requests" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -309,7 +298,6 @@ redis = ["redis (>=2.10.5)"] name = "certifi" version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -321,7 +309,6 @@ files = [ name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false python-versions = "*" files = [ @@ -398,7 +385,6 @@ pycparser = "*" name = "cfgv" version = "3.3.1" description = "Validate configuration and produce human readable error messages." -category = "dev" optional = false python-versions = ">=3.6.1" files = [ @@ -410,7 +396,6 @@ files = [ name = "charset-normalizer" version = "3.1.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -495,7 +480,6 @@ files = [ name = "click" version = "8.1.3" description = "Composable command line interface toolkit" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -510,7 +494,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "click-log" version = "0.4.0" description = "Logging integration for Click" -category = "dev" optional = false python-versions = "*" files = [ @@ -525,7 +508,6 @@ click = "*" name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -537,7 +519,6 @@ files = [ name = "coverage" version = "7.2.7" description = "Code coverage measurement for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -613,7 +594,6 @@ toml = ["tomli"] name = "cryptography" version = "41.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -659,7 +639,6 @@ test-randomorder = ["pytest-randomly"] name = "cyclonedx-python-lib" version = "2.7.1" description = "A library for producing CycloneDX SBOM (Software Bill of Materials) files." -category = "dev" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -677,7 +656,6 @@ toml = ">=0.10.0,<0.11.0" name = "deprecated" version = "1.2.14" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -695,7 +673,6 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] name = "distlib" version = "0.3.6" description = "Distribution utilities" -category = "dev" optional = false python-versions = "*" files = [ @@ -707,7 +684,6 @@ files = [ name = "docstring-parser" version = "0.14.1" description = "Parse Python docstrings in reST, Google and Numpydoc format" -category = "dev" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -719,7 +695,6 @@ files = [ name = "docutils" version = "0.18.1" description = "Docutils -- Python Documentation Utilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -731,7 +706,6 @@ files = [ name = "dotty-dict" version = "1.3.1" description = "Dictionary wrapper for quick access to deeply nested keys." -category = "dev" optional = false python-versions = ">=3.5,<4.0" files = [ @@ -743,7 +717,6 @@ files = [ name = "exceptiongroup" version = "1.1.1" description = "Backport of PEP 654 (exception groups)" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -758,7 +731,6 @@ test = ["pytest (>=6)"] name = "executing" version = "1.2.0" description = "Get the currently executing AST node of a frame, and other information" -category = "dev" optional = false python-versions = "*" files = [ @@ -773,7 +745,6 @@ tests = ["asttokens", "littleutils", "pytest", "rich"] name = "filelock" version = "3.12.0" description = "A platform independent file lock." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -789,7 +760,6 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "diff-cover (>=7.5)", "p name = "frozenlist" version = "1.3.3" description = "A list-like structure which implements collections.abc.MutableSequence" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -873,7 +843,6 @@ files = [ name = "gitdb" version = "4.0.10" description = "Git Object Database" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -888,7 +857,6 @@ smmap = ">=3.0.1,<6" name = "gitpython" version = "3.1.35" description = "GitPython is a Python library used to interact with Git repositories" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -903,7 +871,6 @@ gitdb = ">=4.0.1,<5" name = "html5lib" version = "1.1" description = "HTML parser based on the WHATWG HTML specification" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -925,7 +892,6 @@ lxml = ["lxml"] name = "identify" version = "2.5.24" description = "File identification library for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -940,7 +906,6 @@ license = ["ukkonen"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -952,7 +917,6 @@ files = [ name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -964,7 +928,6 @@ files = [ name = "importlib-metadata" version = "6.6.0" description = "Read metadata from Python packages" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -984,7 +947,6 @@ testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packag name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -996,7 +958,6 @@ files = [ name = "invoke" version = "1.7.3" description = "Pythonic task execution" -category = "dev" optional = false python-versions = "*" files = [ @@ -1008,7 +969,6 @@ files = [ name = "jaraco-classes" version = "3.2.3" description = "Utility functions for Python class constructs" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1027,7 +987,6 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "jeepney" version = "0.8.0" description = "Low-level, pure Python DBus protocol wrapper." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1043,7 +1002,6 @@ trio = ["async_generator", "trio"] name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1061,7 +1019,6 @@ i18n = ["Babel (>=2.7)"] name = "keyring" version = "23.13.1" description = "Store and access your passwords safely." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1085,7 +1042,6 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "lazy-object-proxy" version = "1.9.0" description = "A fast and thorough lazy object proxy." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1131,7 +1087,6 @@ files = [ name = "markdown-it-py" version = "2.2.0" description = "Python port of markdown-it. Markdown parsing, done right!" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1156,7 +1111,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1216,7 +1170,6 @@ files = [ name = "mdit-py-plugins" version = "0.3.5" description = "Collection of plugins for markdown-it-py" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1236,7 +1189,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1248,7 +1200,6 @@ files = [ name = "more-itertools" version = "9.1.0" description = "More routines for operating on iterables, beyond itertools" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1260,7 +1211,6 @@ files = [ name = "msgpack" version = "1.0.5" description = "MessagePack serializer" -category = "main" optional = false python-versions = "*" files = [ @@ -1333,7 +1283,6 @@ files = [ name = "multidict" version = "6.0.4" description = "multidict implementation" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1417,7 +1366,6 @@ files = [ name = "mypy" version = "1.3.0" description = "Optional static typing for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1464,7 +1412,6 @@ reports = ["lxml"] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1476,7 +1423,6 @@ files = [ name = "myst-parser" version = "1.0.0" description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1503,7 +1449,6 @@ testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4, name = "nodeenv" version = "1.8.0" description = "Node.js virtual environment builder" -category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ @@ -1518,7 +1463,6 @@ setuptools = "*" name = "packageurl-python" version = "0.11.1" description = "A purl aka. Package URL parser and builder" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1535,7 +1479,6 @@ test = ["pytest"] name = "packaging" version = "23.1" description = "Core utilities for Python packages" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1547,7 +1490,6 @@ files = [ name = "pastel" version = "0.2.1" description = "Bring colors to your terminal." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1559,7 +1501,6 @@ files = [ name = "pathspec" version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1571,7 +1512,6 @@ files = [ name = "pip" version = "23.1.2" description = "The PyPA recommended tool for installing Python packages." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1583,7 +1523,6 @@ files = [ name = "pip-api" version = "0.0.30" description = "An unofficial, importable pip API" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1598,7 +1537,6 @@ pip = "*" name = "pip-audit" version = "2.5.6" description = "A tool for scanning Python environments for known vulnerabilities" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1628,7 +1566,6 @@ test = ["coverage[toml]", "pretend", "pytest", "pytest-cov"] name = "pip-requirements-parser" version = "32.0.1" description = "pip requirements parser - a mostly correct pip requirements parsing library because it uses pip's own code." -category = "dev" optional = false python-versions = ">=3.6.0" files = [ @@ -1648,7 +1585,6 @@ testing = ["aboutcode-toolkit (>=6.0.0)", "black", "pytest (>=6,!=7.0.0)", "pyte name = "pkginfo" version = "1.9.6" description = "Query metadata from sdists / bdists / installed packages." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1663,7 +1599,6 @@ testing = ["pytest", "pytest-cov"] name = "platformdirs" version = "3.5.1" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1679,7 +1614,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest- name = "pluggy" version = "1.0.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1695,7 +1629,6 @@ testing = ["pytest", "pytest-benchmark"] name = "poethepoet" version = "0.19.0" description = "A task runner that works well with poetry." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1714,7 +1647,6 @@ poetry-plugin = ["poetry (>=1.0,<2.0)"] name = "pre-commit" version = "3.3.2" description = "A framework for managing and maintaining multi-language pre-commit hooks." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1733,7 +1665,6 @@ virtualenv = ">=20.10.0" name = "py-algorand-sdk" version = "2.2.0" description = "Algorand SDK in Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1750,7 +1681,6 @@ pynacl = ">=1.4.0,<2" name = "pycparser" version = "2.21" description = "C parser in Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1762,7 +1692,6 @@ files = [ name = "pycryptodomex" version = "3.18.0" description = "Cryptographic library for Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -1804,7 +1733,6 @@ files = [ name = "pygments" version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1819,7 +1747,6 @@ plugins = ["importlib-metadata"] name = "pynacl" version = "1.5.0" description = "Python binding to the Networking and Cryptography (NaCl) library" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1846,7 +1773,6 @@ tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] name = "pyparsing" version = "3.0.9" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "dev" optional = false python-versions = ">=3.6.8" files = [ @@ -1861,7 +1787,6 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pyteal" version = "0.24.1" description = "Algorand Smart Contracts in Python" -category = "dev" optional = false python-versions = ">=3.10" files = [ @@ -1880,7 +1805,6 @@ tabulate = ">=0.9.0,<0.10.0" name = "pytest" version = "7.3.1" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1903,7 +1827,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-cov" version = "4.1.0" description = "Pytest plugin for measuring coverage." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1922,7 +1845,6 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale name = "pytest-mock" version = "3.10.0" description = "Thin-wrapper around the mock package for easier use with pytest" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1940,7 +1862,6 @@ dev = ["pre-commit", "pytest-asyncio", "tox"] name = "python-dotenv" version = "1.0.0" description = "Read key-value pairs from a .env file and set them as environment variables" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1955,7 +1876,6 @@ cli = ["click (>=5.0)"] name = "python-gitlab" version = "3.14.0" description = "Interact with GitLab API" -category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -1975,7 +1895,6 @@ yaml = ["PyYaml (>=5.2)"] name = "python-semantic-release" version = "7.34.3" description = "Automatic Semantic Versioning for Python projects" -category = "dev" optional = false python-versions = "*" files = [ @@ -2007,7 +1926,6 @@ test = ["coverage (>=5,<6)", "mock (==1.3.0)", "pytest (>=7,<8)", "pytest-mock ( name = "pywin32-ctypes" version = "0.2.0" description = "" -category = "dev" optional = false python-versions = "*" files = [ @@ -2019,7 +1937,6 @@ files = [ name = "pyyaml" version = "6.0" description = "YAML parser and emitter for Python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2069,7 +1986,6 @@ files = [ name = "readme-renderer" version = "37.3" description = "readme_renderer is a library for rendering \"readme\" descriptions for Warehouse" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2089,7 +2005,6 @@ md = ["cmarkgfm (>=0.8.0)"] name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2111,7 +2026,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "requests-toolbelt" version = "1.0.0" description = "A utility belt for advanced users of python-requests" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2126,7 +2040,6 @@ requests = ">=2.0.1,<3.0.0" name = "rfc3986" version = "2.0.0" description = "Validating URI References per RFC 3986" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2141,7 +2054,6 @@ idna2008 = ["idna"] name = "rich" version = "13.4.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -2160,7 +2072,6 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] name = "ruff" version = "0.0.261" description = "An extremely fast Python linter, written in Rust." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2187,7 +2098,6 @@ files = [ name = "secretstorage" version = "3.3.3" description = "Python bindings to FreeDesktop.org Secret Service API" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2203,7 +2113,6 @@ jeepney = ">=0.6" name = "semantic-version" version = "2.10.0" description = "A library implementing the 'SemVer' scheme." -category = "dev" optional = false python-versions = ">=2.7" files = [ @@ -2219,7 +2128,6 @@ doc = ["Sphinx", "sphinx-rtd-theme"] name = "semver" version = "2.13.0" description = "Python helper for Semantic Versioning (http://semver.org/)" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2231,7 +2139,6 @@ files = [ name = "setuptools" version = "67.8.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2248,7 +2155,6 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -2260,7 +2166,6 @@ files = [ name = "smmap" version = "5.0.0" description = "A pure Python implementation of a sliding window memory map manager" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2272,7 +2177,6 @@ files = [ name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "dev" optional = false python-versions = "*" files = [ @@ -2284,7 +2188,6 @@ files = [ name = "sortedcontainers" version = "2.4.0" description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" -category = "dev" optional = false python-versions = "*" files = [ @@ -2296,7 +2199,6 @@ files = [ name = "sphinx" version = "6.2.1" description = "Python documentation generator" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2331,7 +2233,6 @@ test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] name = "sphinx-autodoc2" version = "0.4.2" description = "Analyse a python project and create documentation for it." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2354,7 +2255,6 @@ testing = ["pytest", "pytest-cov", "pytest-regressions", "sphinx (>=4.0.0)"] name = "sphinx-copybutton" version = "0.5.2" description = "Add a copy button to each of your code cells." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2373,7 +2273,6 @@ rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] name = "sphinx-rtd-theme" version = "1.2.1" description = "Read the Docs theme for Sphinx" -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -2393,7 +2292,6 @@ dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] name = "sphinxcontrib-applehelp" version = "1.0.4" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2409,7 +2307,6 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "1.0.2" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2425,7 +2322,6 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2441,7 +2337,6 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jquery" version = "4.1" description = "Extension to include jQuery on newer Sphinx releases" -category = "dev" optional = false python-versions = ">=2.7" files = [ @@ -2456,7 +2351,6 @@ Sphinx = ">=1.8" name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2471,7 +2365,6 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-qthelp" version = "1.0.3" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2487,7 +2380,6 @@ test = ["pytest"] name = "sphinxcontrib-serializinghtml" version = "1.1.5" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2503,7 +2395,6 @@ test = ["pytest"] name = "tabulate" version = "0.9.0" description = "Pretty-print tabular data" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2518,7 +2409,6 @@ widechars = ["wcwidth"] name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -2530,7 +2420,6 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2542,7 +2431,6 @@ files = [ name = "tomlkit" version = "0.11.8" description = "Style preserving TOML library" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2554,7 +2442,6 @@ files = [ name = "tqdm" version = "4.65.0" description = "Fast, Extensible Progress Meter" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2575,7 +2462,6 @@ telegram = ["requests"] name = "twine" version = "3.8.0" description = "Collection of utilities for publishing packages on PyPI" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2599,7 +2485,6 @@ urllib3 = ">=1.26.0" name = "types-deprecated" version = "1.2.9.2" description = "Typing stubs for Deprecated" -category = "dev" optional = false python-versions = "*" files = [ @@ -2611,7 +2496,6 @@ files = [ name = "typing-extensions" version = "4.6.3" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2623,7 +2507,6 @@ files = [ name = "urllib3" version = "1.26.16" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -2640,7 +2523,6 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] name = "virtualenv" version = "20.23.0" description = "Virtual Python Environment builder" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2661,7 +2543,6 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "coverage-enable-subprocess name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" -category = "dev" optional = false python-versions = "*" files = [ @@ -2673,7 +2554,6 @@ files = [ name = "wheel" version = "0.40.0" description = "A built-package format for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2688,7 +2568,6 @@ test = ["pytest (>=6.0.0)"] name = "wrapt" version = "1.15.0" description = "Module for decorators, wrappers and monkey patching." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -2773,7 +2652,6 @@ files = [ name = "yarl" version = "1.9.2" description = "Yet another URL library" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2861,7 +2739,6 @@ multidict = ">=4.0" name = "zipp" version = "3.15.0" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "dev" optional = false python-versions = ">=3.7" files = [ From 59ca4a1221691aa6b648d1c25604867d05f90e40 Mon Sep 17 00:00:00 2001 From: Negar Abbasi Date: Mon, 11 Sep 2023 13:57:42 +1000 Subject: [PATCH 11/22] Revert "chore: updating poetry lock file" This reverts commit f660de58cfd29dcc786539cc9c1b0a42cb86d822. --- poetry.lock | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 124 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index 110e6336..d4dd9f39 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,9 +1,10 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. [[package]] name = "aiohttp" version = "3.8.5" description = "Async http client/server framework (asyncio)" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -112,6 +113,7 @@ speedups = ["Brotli", "aiodns", "cchardet"] name = "aiosignal" version = "1.3.1" description = "aiosignal: a list of registered asynchronous callbacks" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -126,6 +128,7 @@ frozenlist = ">=1.1.0" name = "alabaster" version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -137,6 +140,7 @@ files = [ name = "astroid" version = "2.15.5" description = "An abstract syntax tree for Python with inference support." +category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -156,6 +160,7 @@ wrapt = [ name = "async-timeout" version = "4.0.2" description = "Timeout context manager for asyncio programs" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -167,6 +172,7 @@ files = [ name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -185,6 +191,7 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "babel" version = "2.12.1" description = "Internationalization utilities" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -196,6 +203,7 @@ files = [ name = "beaker-pyteal" version = "1.0.1" description = "A Framework for building PyTeal Applications" +category = "dev" optional = false python-versions = ">=3.10,<4.0" files = [ @@ -211,6 +219,7 @@ pyteal = ">=0.24,<0.25" name = "black" version = "23.3.0" description = "The uncompromising code formatter." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -260,6 +269,7 @@ uvloop = ["uvloop (>=0.15.2)"] name = "bleach" version = "6.0.0" description = "An easy safelist-based HTML-sanitizing tool." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -278,6 +288,7 @@ css = ["tinycss2 (>=1.1.0,<1.2)"] name = "cachecontrol" version = "0.13.0" description = "httplib2 caching for requests" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -298,6 +309,7 @@ redis = ["redis (>=2.10.5)"] name = "certifi" version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -309,6 +321,7 @@ files = [ name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." +category = "main" optional = false python-versions = "*" files = [ @@ -385,6 +398,7 @@ pycparser = "*" name = "cfgv" version = "3.3.1" description = "Validate configuration and produce human readable error messages." +category = "dev" optional = false python-versions = ">=3.6.1" files = [ @@ -396,6 +410,7 @@ files = [ name = "charset-normalizer" version = "3.1.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -480,6 +495,7 @@ files = [ name = "click" version = "8.1.3" description = "Composable command line interface toolkit" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -494,6 +510,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "click-log" version = "0.4.0" description = "Logging integration for Click" +category = "dev" optional = false python-versions = "*" files = [ @@ -508,6 +525,7 @@ click = "*" name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." +category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -519,6 +537,7 @@ files = [ name = "coverage" version = "7.2.7" description = "Code coverage measurement for Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -594,6 +613,7 @@ toml = ["tomli"] name = "cryptography" version = "41.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -639,6 +659,7 @@ test-randomorder = ["pytest-randomly"] name = "cyclonedx-python-lib" version = "2.7.1" description = "A library for producing CycloneDX SBOM (Software Bill of Materials) files." +category = "dev" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -656,6 +677,7 @@ toml = ">=0.10.0,<0.11.0" name = "deprecated" version = "1.2.14" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -673,6 +695,7 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] name = "distlib" version = "0.3.6" description = "Distribution utilities" +category = "dev" optional = false python-versions = "*" files = [ @@ -684,6 +707,7 @@ files = [ name = "docstring-parser" version = "0.14.1" description = "Parse Python docstrings in reST, Google and Numpydoc format" +category = "dev" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -695,6 +719,7 @@ files = [ name = "docutils" version = "0.18.1" description = "Docutils -- Python Documentation Utilities" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -706,6 +731,7 @@ files = [ name = "dotty-dict" version = "1.3.1" description = "Dictionary wrapper for quick access to deeply nested keys." +category = "dev" optional = false python-versions = ">=3.5,<4.0" files = [ @@ -717,6 +743,7 @@ files = [ name = "exceptiongroup" version = "1.1.1" description = "Backport of PEP 654 (exception groups)" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -731,6 +758,7 @@ test = ["pytest (>=6)"] name = "executing" version = "1.2.0" description = "Get the currently executing AST node of a frame, and other information" +category = "dev" optional = false python-versions = "*" files = [ @@ -745,6 +773,7 @@ tests = ["asttokens", "littleutils", "pytest", "rich"] name = "filelock" version = "3.12.0" description = "A platform independent file lock." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -760,6 +789,7 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "diff-cover (>=7.5)", "p name = "frozenlist" version = "1.3.3" description = "A list-like structure which implements collections.abc.MutableSequence" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -843,6 +873,7 @@ files = [ name = "gitdb" version = "4.0.10" description = "Git Object Database" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -857,6 +888,7 @@ smmap = ">=3.0.1,<6" name = "gitpython" version = "3.1.35" description = "GitPython is a Python library used to interact with Git repositories" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -871,6 +903,7 @@ gitdb = ">=4.0.1,<5" name = "html5lib" version = "1.1" description = "HTML parser based on the WHATWG HTML specification" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -892,6 +925,7 @@ lxml = ["lxml"] name = "identify" version = "2.5.24" description = "File identification library for Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -906,6 +940,7 @@ license = ["ukkonen"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -917,6 +952,7 @@ files = [ name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -928,6 +964,7 @@ files = [ name = "importlib-metadata" version = "6.6.0" description = "Read metadata from Python packages" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -947,6 +984,7 @@ testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packag name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -958,6 +996,7 @@ files = [ name = "invoke" version = "1.7.3" description = "Pythonic task execution" +category = "dev" optional = false python-versions = "*" files = [ @@ -969,6 +1008,7 @@ files = [ name = "jaraco-classes" version = "3.2.3" description = "Utility functions for Python class constructs" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -987,6 +1027,7 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "jeepney" version = "0.8.0" description = "Low-level, pure Python DBus protocol wrapper." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1002,6 +1043,7 @@ trio = ["async_generator", "trio"] name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1019,6 +1061,7 @@ i18n = ["Babel (>=2.7)"] name = "keyring" version = "23.13.1" description = "Store and access your passwords safely." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1042,6 +1085,7 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "lazy-object-proxy" version = "1.9.0" description = "A fast and thorough lazy object proxy." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1087,6 +1131,7 @@ files = [ name = "markdown-it-py" version = "2.2.0" description = "Python port of markdown-it. Markdown parsing, done right!" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1111,6 +1156,7 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1170,6 +1216,7 @@ files = [ name = "mdit-py-plugins" version = "0.3.5" description = "Collection of plugins for markdown-it-py" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1189,6 +1236,7 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1200,6 +1248,7 @@ files = [ name = "more-itertools" version = "9.1.0" description = "More routines for operating on iterables, beyond itertools" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1211,6 +1260,7 @@ files = [ name = "msgpack" version = "1.0.5" description = "MessagePack serializer" +category = "main" optional = false python-versions = "*" files = [ @@ -1283,6 +1333,7 @@ files = [ name = "multidict" version = "6.0.4" description = "multidict implementation" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1366,6 +1417,7 @@ files = [ name = "mypy" version = "1.3.0" description = "Optional static typing for Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1412,6 +1464,7 @@ reports = ["lxml"] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1423,6 +1476,7 @@ files = [ name = "myst-parser" version = "1.0.0" description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1449,6 +1503,7 @@ testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4, name = "nodeenv" version = "1.8.0" description = "Node.js virtual environment builder" +category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ @@ -1463,6 +1518,7 @@ setuptools = "*" name = "packageurl-python" version = "0.11.1" description = "A purl aka. Package URL parser and builder" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1479,6 +1535,7 @@ test = ["pytest"] name = "packaging" version = "23.1" description = "Core utilities for Python packages" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1490,6 +1547,7 @@ files = [ name = "pastel" version = "0.2.1" description = "Bring colors to your terminal." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1501,6 +1559,7 @@ files = [ name = "pathspec" version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1512,6 +1571,7 @@ files = [ name = "pip" version = "23.1.2" description = "The PyPA recommended tool for installing Python packages." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1523,6 +1583,7 @@ files = [ name = "pip-api" version = "0.0.30" description = "An unofficial, importable pip API" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1537,6 +1598,7 @@ pip = "*" name = "pip-audit" version = "2.5.6" description = "A tool for scanning Python environments for known vulnerabilities" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1566,6 +1628,7 @@ test = ["coverage[toml]", "pretend", "pytest", "pytest-cov"] name = "pip-requirements-parser" version = "32.0.1" description = "pip requirements parser - a mostly correct pip requirements parsing library because it uses pip's own code." +category = "dev" optional = false python-versions = ">=3.6.0" files = [ @@ -1585,6 +1648,7 @@ testing = ["aboutcode-toolkit (>=6.0.0)", "black", "pytest (>=6,!=7.0.0)", "pyte name = "pkginfo" version = "1.9.6" description = "Query metadata from sdists / bdists / installed packages." +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1599,6 +1663,7 @@ testing = ["pytest", "pytest-cov"] name = "platformdirs" version = "3.5.1" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1614,6 +1679,7 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest- name = "pluggy" version = "1.0.0" description = "plugin and hook calling mechanisms for python" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1629,6 +1695,7 @@ testing = ["pytest", "pytest-benchmark"] name = "poethepoet" version = "0.19.0" description = "A task runner that works well with poetry." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1647,6 +1714,7 @@ poetry-plugin = ["poetry (>=1.0,<2.0)"] name = "pre-commit" version = "3.3.2" description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1665,6 +1733,7 @@ virtualenv = ">=20.10.0" name = "py-algorand-sdk" version = "2.2.0" description = "Algorand SDK in Python" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1681,6 +1750,7 @@ pynacl = ">=1.4.0,<2" name = "pycparser" version = "2.21" description = "C parser in Python" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1692,6 +1762,7 @@ files = [ name = "pycryptodomex" version = "3.18.0" description = "Cryptographic library for Python" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -1733,6 +1804,7 @@ files = [ name = "pygments" version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1747,6 +1819,7 @@ plugins = ["importlib-metadata"] name = "pynacl" version = "1.5.0" description = "Python binding to the Networking and Cryptography (NaCl) library" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1773,6 +1846,7 @@ tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] name = "pyparsing" version = "3.0.9" description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "dev" optional = false python-versions = ">=3.6.8" files = [ @@ -1787,6 +1861,7 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pyteal" version = "0.24.1" description = "Algorand Smart Contracts in Python" +category = "dev" optional = false python-versions = ">=3.10" files = [ @@ -1805,6 +1880,7 @@ tabulate = ">=0.9.0,<0.10.0" name = "pytest" version = "7.3.1" description = "pytest: simple powerful testing with Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1827,6 +1903,7 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-cov" version = "4.1.0" description = "Pytest plugin for measuring coverage." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1845,6 +1922,7 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale name = "pytest-mock" version = "3.10.0" description = "Thin-wrapper around the mock package for easier use with pytest" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1862,6 +1940,7 @@ dev = ["pre-commit", "pytest-asyncio", "tox"] name = "python-dotenv" version = "1.0.0" description = "Read key-value pairs from a .env file and set them as environment variables" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1876,6 +1955,7 @@ cli = ["click (>=5.0)"] name = "python-gitlab" version = "3.14.0" description = "Interact with GitLab API" +category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -1895,6 +1975,7 @@ yaml = ["PyYaml (>=5.2)"] name = "python-semantic-release" version = "7.34.3" description = "Automatic Semantic Versioning for Python projects" +category = "dev" optional = false python-versions = "*" files = [ @@ -1926,6 +2007,7 @@ test = ["coverage (>=5,<6)", "mock (==1.3.0)", "pytest (>=7,<8)", "pytest-mock ( name = "pywin32-ctypes" version = "0.2.0" description = "" +category = "dev" optional = false python-versions = "*" files = [ @@ -1937,6 +2019,7 @@ files = [ name = "pyyaml" version = "6.0" description = "YAML parser and emitter for Python" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1986,6 +2069,7 @@ files = [ name = "readme-renderer" version = "37.3" description = "readme_renderer is a library for rendering \"readme\" descriptions for Warehouse" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2005,6 +2089,7 @@ md = ["cmarkgfm (>=0.8.0)"] name = "requests" version = "2.31.0" description = "Python HTTP for Humans." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2026,6 +2111,7 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "requests-toolbelt" version = "1.0.0" description = "A utility belt for advanced users of python-requests" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2040,6 +2126,7 @@ requests = ">=2.0.1,<3.0.0" name = "rfc3986" version = "2.0.0" description = "Validating URI References per RFC 3986" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2054,6 +2141,7 @@ idna2008 = ["idna"] name = "rich" version = "13.4.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -2072,6 +2160,7 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] name = "ruff" version = "0.0.261" description = "An extremely fast Python linter, written in Rust." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2098,6 +2187,7 @@ files = [ name = "secretstorage" version = "3.3.3" description = "Python bindings to FreeDesktop.org Secret Service API" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2113,6 +2203,7 @@ jeepney = ">=0.6" name = "semantic-version" version = "2.10.0" description = "A library implementing the 'SemVer' scheme." +category = "dev" optional = false python-versions = ">=2.7" files = [ @@ -2128,6 +2219,7 @@ doc = ["Sphinx", "sphinx-rtd-theme"] name = "semver" version = "2.13.0" description = "Python helper for Semantic Versioning (http://semver.org/)" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2139,6 +2231,7 @@ files = [ name = "setuptools" version = "67.8.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2155,6 +2248,7 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -2166,6 +2260,7 @@ files = [ name = "smmap" version = "5.0.0" description = "A pure Python implementation of a sliding window memory map manager" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2177,6 +2272,7 @@ files = [ name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "dev" optional = false python-versions = "*" files = [ @@ -2188,6 +2284,7 @@ files = [ name = "sortedcontainers" version = "2.4.0" description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +category = "dev" optional = false python-versions = "*" files = [ @@ -2199,6 +2296,7 @@ files = [ name = "sphinx" version = "6.2.1" description = "Python documentation generator" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2233,6 +2331,7 @@ test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] name = "sphinx-autodoc2" version = "0.4.2" description = "Analyse a python project and create documentation for it." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2255,6 +2354,7 @@ testing = ["pytest", "pytest-cov", "pytest-regressions", "sphinx (>=4.0.0)"] name = "sphinx-copybutton" version = "0.5.2" description = "Add a copy button to each of your code cells." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2273,6 +2373,7 @@ rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] name = "sphinx-rtd-theme" version = "1.2.1" description = "Read the Docs theme for Sphinx" +category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -2292,6 +2393,7 @@ dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] name = "sphinxcontrib-applehelp" version = "1.0.4" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2307,6 +2409,7 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "1.0.2" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2322,6 +2425,7 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2337,6 +2441,7 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jquery" version = "4.1" description = "Extension to include jQuery on newer Sphinx releases" +category = "dev" optional = false python-versions = ">=2.7" files = [ @@ -2351,6 +2456,7 @@ Sphinx = ">=1.8" name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2365,6 +2471,7 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-qthelp" version = "1.0.3" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2380,6 +2487,7 @@ test = ["pytest"] name = "sphinxcontrib-serializinghtml" version = "1.1.5" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2395,6 +2503,7 @@ test = ["pytest"] name = "tabulate" version = "0.9.0" description = "Pretty-print tabular data" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2409,6 +2518,7 @@ widechars = ["wcwidth"] name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" +category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -2420,6 +2530,7 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2431,6 +2542,7 @@ files = [ name = "tomlkit" version = "0.11.8" description = "Style preserving TOML library" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2442,6 +2554,7 @@ files = [ name = "tqdm" version = "4.65.0" description = "Fast, Extensible Progress Meter" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2462,6 +2575,7 @@ telegram = ["requests"] name = "twine" version = "3.8.0" description = "Collection of utilities for publishing packages on PyPI" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2485,6 +2599,7 @@ urllib3 = ">=1.26.0" name = "types-deprecated" version = "1.2.9.2" description = "Typing stubs for Deprecated" +category = "dev" optional = false python-versions = "*" files = [ @@ -2496,6 +2611,7 @@ files = [ name = "typing-extensions" version = "4.6.3" description = "Backported and Experimental Type Hints for Python 3.7+" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2507,6 +2623,7 @@ files = [ name = "urllib3" version = "1.26.16" description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -2523,6 +2640,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] name = "virtualenv" version = "20.23.0" description = "Virtual Python Environment builder" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2543,6 +2661,7 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "coverage-enable-subprocess name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" +category = "dev" optional = false python-versions = "*" files = [ @@ -2554,6 +2673,7 @@ files = [ name = "wheel" version = "0.40.0" description = "A built-package format for Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2568,6 +2688,7 @@ test = ["pytest (>=6.0.0)"] name = "wrapt" version = "1.15.0" description = "Module for decorators, wrappers and monkey patching." +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -2652,6 +2773,7 @@ files = [ name = "yarl" version = "1.9.2" description = "Yet another URL library" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2739,6 +2861,7 @@ multidict = ">=4.0" name = "zipp" version = "3.15.0" description = "Backport of pathlib-compatible object wrapper for zip files" +category = "dev" optional = false python-versions = ">=3.7" files = [ From cae7f1f6a43ad5ddcebedea3bc1c2d963bb9f333 Mon Sep 17 00:00:00 2001 From: Negar Abbasi Date: Mon, 11 Sep 2023 14:09:42 +1000 Subject: [PATCH 12/22] chore: updating poetry lock file --- poetry.lock | 125 +--------------------------------------------------- 1 file changed, 1 insertion(+), 124 deletions(-) diff --git a/poetry.lock b/poetry.lock index d4dd9f39..110e6336 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "aiohttp" version = "3.8.5" description = "Async http client/server framework (asyncio)" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -113,7 +112,6 @@ speedups = ["Brotli", "aiodns", "cchardet"] name = "aiosignal" version = "1.3.1" description = "aiosignal: a list of registered asynchronous callbacks" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -128,7 +126,6 @@ frozenlist = ">=1.1.0" name = "alabaster" version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -140,7 +137,6 @@ files = [ name = "astroid" version = "2.15.5" description = "An abstract syntax tree for Python with inference support." -category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -160,7 +156,6 @@ wrapt = [ name = "async-timeout" version = "4.0.2" description = "Timeout context manager for asyncio programs" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -172,7 +167,6 @@ files = [ name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -191,7 +185,6 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "babel" version = "2.12.1" description = "Internationalization utilities" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -203,7 +196,6 @@ files = [ name = "beaker-pyteal" version = "1.0.1" description = "A Framework for building PyTeal Applications" -category = "dev" optional = false python-versions = ">=3.10,<4.0" files = [ @@ -219,7 +211,6 @@ pyteal = ">=0.24,<0.25" name = "black" version = "23.3.0" description = "The uncompromising code formatter." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -269,7 +260,6 @@ uvloop = ["uvloop (>=0.15.2)"] name = "bleach" version = "6.0.0" description = "An easy safelist-based HTML-sanitizing tool." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -288,7 +278,6 @@ css = ["tinycss2 (>=1.1.0,<1.2)"] name = "cachecontrol" version = "0.13.0" description = "httplib2 caching for requests" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -309,7 +298,6 @@ redis = ["redis (>=2.10.5)"] name = "certifi" version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -321,7 +309,6 @@ files = [ name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false python-versions = "*" files = [ @@ -398,7 +385,6 @@ pycparser = "*" name = "cfgv" version = "3.3.1" description = "Validate configuration and produce human readable error messages." -category = "dev" optional = false python-versions = ">=3.6.1" files = [ @@ -410,7 +396,6 @@ files = [ name = "charset-normalizer" version = "3.1.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -495,7 +480,6 @@ files = [ name = "click" version = "8.1.3" description = "Composable command line interface toolkit" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -510,7 +494,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "click-log" version = "0.4.0" description = "Logging integration for Click" -category = "dev" optional = false python-versions = "*" files = [ @@ -525,7 +508,6 @@ click = "*" name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -537,7 +519,6 @@ files = [ name = "coverage" version = "7.2.7" description = "Code coverage measurement for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -613,7 +594,6 @@ toml = ["tomli"] name = "cryptography" version = "41.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -659,7 +639,6 @@ test-randomorder = ["pytest-randomly"] name = "cyclonedx-python-lib" version = "2.7.1" description = "A library for producing CycloneDX SBOM (Software Bill of Materials) files." -category = "dev" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -677,7 +656,6 @@ toml = ">=0.10.0,<0.11.0" name = "deprecated" version = "1.2.14" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -695,7 +673,6 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] name = "distlib" version = "0.3.6" description = "Distribution utilities" -category = "dev" optional = false python-versions = "*" files = [ @@ -707,7 +684,6 @@ files = [ name = "docstring-parser" version = "0.14.1" description = "Parse Python docstrings in reST, Google and Numpydoc format" -category = "dev" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -719,7 +695,6 @@ files = [ name = "docutils" version = "0.18.1" description = "Docutils -- Python Documentation Utilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -731,7 +706,6 @@ files = [ name = "dotty-dict" version = "1.3.1" description = "Dictionary wrapper for quick access to deeply nested keys." -category = "dev" optional = false python-versions = ">=3.5,<4.0" files = [ @@ -743,7 +717,6 @@ files = [ name = "exceptiongroup" version = "1.1.1" description = "Backport of PEP 654 (exception groups)" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -758,7 +731,6 @@ test = ["pytest (>=6)"] name = "executing" version = "1.2.0" description = "Get the currently executing AST node of a frame, and other information" -category = "dev" optional = false python-versions = "*" files = [ @@ -773,7 +745,6 @@ tests = ["asttokens", "littleutils", "pytest", "rich"] name = "filelock" version = "3.12.0" description = "A platform independent file lock." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -789,7 +760,6 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "diff-cover (>=7.5)", "p name = "frozenlist" version = "1.3.3" description = "A list-like structure which implements collections.abc.MutableSequence" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -873,7 +843,6 @@ files = [ name = "gitdb" version = "4.0.10" description = "Git Object Database" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -888,7 +857,6 @@ smmap = ">=3.0.1,<6" name = "gitpython" version = "3.1.35" description = "GitPython is a Python library used to interact with Git repositories" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -903,7 +871,6 @@ gitdb = ">=4.0.1,<5" name = "html5lib" version = "1.1" description = "HTML parser based on the WHATWG HTML specification" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -925,7 +892,6 @@ lxml = ["lxml"] name = "identify" version = "2.5.24" description = "File identification library for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -940,7 +906,6 @@ license = ["ukkonen"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -952,7 +917,6 @@ files = [ name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -964,7 +928,6 @@ files = [ name = "importlib-metadata" version = "6.6.0" description = "Read metadata from Python packages" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -984,7 +947,6 @@ testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packag name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -996,7 +958,6 @@ files = [ name = "invoke" version = "1.7.3" description = "Pythonic task execution" -category = "dev" optional = false python-versions = "*" files = [ @@ -1008,7 +969,6 @@ files = [ name = "jaraco-classes" version = "3.2.3" description = "Utility functions for Python class constructs" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1027,7 +987,6 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "jeepney" version = "0.8.0" description = "Low-level, pure Python DBus protocol wrapper." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1043,7 +1002,6 @@ trio = ["async_generator", "trio"] name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1061,7 +1019,6 @@ i18n = ["Babel (>=2.7)"] name = "keyring" version = "23.13.1" description = "Store and access your passwords safely." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1085,7 +1042,6 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "lazy-object-proxy" version = "1.9.0" description = "A fast and thorough lazy object proxy." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1131,7 +1087,6 @@ files = [ name = "markdown-it-py" version = "2.2.0" description = "Python port of markdown-it. Markdown parsing, done right!" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1156,7 +1111,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1216,7 +1170,6 @@ files = [ name = "mdit-py-plugins" version = "0.3.5" description = "Collection of plugins for markdown-it-py" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1236,7 +1189,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1248,7 +1200,6 @@ files = [ name = "more-itertools" version = "9.1.0" description = "More routines for operating on iterables, beyond itertools" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1260,7 +1211,6 @@ files = [ name = "msgpack" version = "1.0.5" description = "MessagePack serializer" -category = "main" optional = false python-versions = "*" files = [ @@ -1333,7 +1283,6 @@ files = [ name = "multidict" version = "6.0.4" description = "multidict implementation" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1417,7 +1366,6 @@ files = [ name = "mypy" version = "1.3.0" description = "Optional static typing for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1464,7 +1412,6 @@ reports = ["lxml"] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1476,7 +1423,6 @@ files = [ name = "myst-parser" version = "1.0.0" description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1503,7 +1449,6 @@ testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4, name = "nodeenv" version = "1.8.0" description = "Node.js virtual environment builder" -category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ @@ -1518,7 +1463,6 @@ setuptools = "*" name = "packageurl-python" version = "0.11.1" description = "A purl aka. Package URL parser and builder" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1535,7 +1479,6 @@ test = ["pytest"] name = "packaging" version = "23.1" description = "Core utilities for Python packages" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1547,7 +1490,6 @@ files = [ name = "pastel" version = "0.2.1" description = "Bring colors to your terminal." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1559,7 +1501,6 @@ files = [ name = "pathspec" version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1571,7 +1512,6 @@ files = [ name = "pip" version = "23.1.2" description = "The PyPA recommended tool for installing Python packages." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1583,7 +1523,6 @@ files = [ name = "pip-api" version = "0.0.30" description = "An unofficial, importable pip API" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1598,7 +1537,6 @@ pip = "*" name = "pip-audit" version = "2.5.6" description = "A tool for scanning Python environments for known vulnerabilities" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1628,7 +1566,6 @@ test = ["coverage[toml]", "pretend", "pytest", "pytest-cov"] name = "pip-requirements-parser" version = "32.0.1" description = "pip requirements parser - a mostly correct pip requirements parsing library because it uses pip's own code." -category = "dev" optional = false python-versions = ">=3.6.0" files = [ @@ -1648,7 +1585,6 @@ testing = ["aboutcode-toolkit (>=6.0.0)", "black", "pytest (>=6,!=7.0.0)", "pyte name = "pkginfo" version = "1.9.6" description = "Query metadata from sdists / bdists / installed packages." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1663,7 +1599,6 @@ testing = ["pytest", "pytest-cov"] name = "platformdirs" version = "3.5.1" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1679,7 +1614,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest- name = "pluggy" version = "1.0.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1695,7 +1629,6 @@ testing = ["pytest", "pytest-benchmark"] name = "poethepoet" version = "0.19.0" description = "A task runner that works well with poetry." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1714,7 +1647,6 @@ poetry-plugin = ["poetry (>=1.0,<2.0)"] name = "pre-commit" version = "3.3.2" description = "A framework for managing and maintaining multi-language pre-commit hooks." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1733,7 +1665,6 @@ virtualenv = ">=20.10.0" name = "py-algorand-sdk" version = "2.2.0" description = "Algorand SDK in Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1750,7 +1681,6 @@ pynacl = ">=1.4.0,<2" name = "pycparser" version = "2.21" description = "C parser in Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1762,7 +1692,6 @@ files = [ name = "pycryptodomex" version = "3.18.0" description = "Cryptographic library for Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -1804,7 +1733,6 @@ files = [ name = "pygments" version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1819,7 +1747,6 @@ plugins = ["importlib-metadata"] name = "pynacl" version = "1.5.0" description = "Python binding to the Networking and Cryptography (NaCl) library" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1846,7 +1773,6 @@ tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] name = "pyparsing" version = "3.0.9" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "dev" optional = false python-versions = ">=3.6.8" files = [ @@ -1861,7 +1787,6 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pyteal" version = "0.24.1" description = "Algorand Smart Contracts in Python" -category = "dev" optional = false python-versions = ">=3.10" files = [ @@ -1880,7 +1805,6 @@ tabulate = ">=0.9.0,<0.10.0" name = "pytest" version = "7.3.1" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1903,7 +1827,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-cov" version = "4.1.0" description = "Pytest plugin for measuring coverage." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1922,7 +1845,6 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale name = "pytest-mock" version = "3.10.0" description = "Thin-wrapper around the mock package for easier use with pytest" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1940,7 +1862,6 @@ dev = ["pre-commit", "pytest-asyncio", "tox"] name = "python-dotenv" version = "1.0.0" description = "Read key-value pairs from a .env file and set them as environment variables" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1955,7 +1876,6 @@ cli = ["click (>=5.0)"] name = "python-gitlab" version = "3.14.0" description = "Interact with GitLab API" -category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -1975,7 +1895,6 @@ yaml = ["PyYaml (>=5.2)"] name = "python-semantic-release" version = "7.34.3" description = "Automatic Semantic Versioning for Python projects" -category = "dev" optional = false python-versions = "*" files = [ @@ -2007,7 +1926,6 @@ test = ["coverage (>=5,<6)", "mock (==1.3.0)", "pytest (>=7,<8)", "pytest-mock ( name = "pywin32-ctypes" version = "0.2.0" description = "" -category = "dev" optional = false python-versions = "*" files = [ @@ -2019,7 +1937,6 @@ files = [ name = "pyyaml" version = "6.0" description = "YAML parser and emitter for Python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2069,7 +1986,6 @@ files = [ name = "readme-renderer" version = "37.3" description = "readme_renderer is a library for rendering \"readme\" descriptions for Warehouse" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2089,7 +2005,6 @@ md = ["cmarkgfm (>=0.8.0)"] name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2111,7 +2026,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "requests-toolbelt" version = "1.0.0" description = "A utility belt for advanced users of python-requests" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2126,7 +2040,6 @@ requests = ">=2.0.1,<3.0.0" name = "rfc3986" version = "2.0.0" description = "Validating URI References per RFC 3986" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2141,7 +2054,6 @@ idna2008 = ["idna"] name = "rich" version = "13.4.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -2160,7 +2072,6 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] name = "ruff" version = "0.0.261" description = "An extremely fast Python linter, written in Rust." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2187,7 +2098,6 @@ files = [ name = "secretstorage" version = "3.3.3" description = "Python bindings to FreeDesktop.org Secret Service API" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2203,7 +2113,6 @@ jeepney = ">=0.6" name = "semantic-version" version = "2.10.0" description = "A library implementing the 'SemVer' scheme." -category = "dev" optional = false python-versions = ">=2.7" files = [ @@ -2219,7 +2128,6 @@ doc = ["Sphinx", "sphinx-rtd-theme"] name = "semver" version = "2.13.0" description = "Python helper for Semantic Versioning (http://semver.org/)" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2231,7 +2139,6 @@ files = [ name = "setuptools" version = "67.8.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2248,7 +2155,6 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -2260,7 +2166,6 @@ files = [ name = "smmap" version = "5.0.0" description = "A pure Python implementation of a sliding window memory map manager" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2272,7 +2177,6 @@ files = [ name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "dev" optional = false python-versions = "*" files = [ @@ -2284,7 +2188,6 @@ files = [ name = "sortedcontainers" version = "2.4.0" description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" -category = "dev" optional = false python-versions = "*" files = [ @@ -2296,7 +2199,6 @@ files = [ name = "sphinx" version = "6.2.1" description = "Python documentation generator" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2331,7 +2233,6 @@ test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] name = "sphinx-autodoc2" version = "0.4.2" description = "Analyse a python project and create documentation for it." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2354,7 +2255,6 @@ testing = ["pytest", "pytest-cov", "pytest-regressions", "sphinx (>=4.0.0)"] name = "sphinx-copybutton" version = "0.5.2" description = "Add a copy button to each of your code cells." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2373,7 +2273,6 @@ rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] name = "sphinx-rtd-theme" version = "1.2.1" description = "Read the Docs theme for Sphinx" -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -2393,7 +2292,6 @@ dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] name = "sphinxcontrib-applehelp" version = "1.0.4" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2409,7 +2307,6 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "1.0.2" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2425,7 +2322,6 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2441,7 +2337,6 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jquery" version = "4.1" description = "Extension to include jQuery on newer Sphinx releases" -category = "dev" optional = false python-versions = ">=2.7" files = [ @@ -2456,7 +2351,6 @@ Sphinx = ">=1.8" name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2471,7 +2365,6 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-qthelp" version = "1.0.3" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2487,7 +2380,6 @@ test = ["pytest"] name = "sphinxcontrib-serializinghtml" version = "1.1.5" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2503,7 +2395,6 @@ test = ["pytest"] name = "tabulate" version = "0.9.0" description = "Pretty-print tabular data" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2518,7 +2409,6 @@ widechars = ["wcwidth"] name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -2530,7 +2420,6 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2542,7 +2431,6 @@ files = [ name = "tomlkit" version = "0.11.8" description = "Style preserving TOML library" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2554,7 +2442,6 @@ files = [ name = "tqdm" version = "4.65.0" description = "Fast, Extensible Progress Meter" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2575,7 +2462,6 @@ telegram = ["requests"] name = "twine" version = "3.8.0" description = "Collection of utilities for publishing packages on PyPI" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2599,7 +2485,6 @@ urllib3 = ">=1.26.0" name = "types-deprecated" version = "1.2.9.2" description = "Typing stubs for Deprecated" -category = "dev" optional = false python-versions = "*" files = [ @@ -2611,7 +2496,6 @@ files = [ name = "typing-extensions" version = "4.6.3" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2623,7 +2507,6 @@ files = [ name = "urllib3" version = "1.26.16" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -2640,7 +2523,6 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] name = "virtualenv" version = "20.23.0" description = "Virtual Python Environment builder" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2661,7 +2543,6 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "coverage-enable-subprocess name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" -category = "dev" optional = false python-versions = "*" files = [ @@ -2673,7 +2554,6 @@ files = [ name = "wheel" version = "0.40.0" description = "A built-package format for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2688,7 +2568,6 @@ test = ["pytest (>=6.0.0)"] name = "wrapt" version = "1.15.0" description = "Module for decorators, wrappers and monkey patching." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -2773,7 +2652,6 @@ files = [ name = "yarl" version = "1.9.2" description = "Yet another URL library" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2861,7 +2739,6 @@ multidict = ">=4.0" name = "zipp" version = "3.15.0" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "dev" optional = false python-versions = ">=3.7" files = [ From 1a69ad9215c5f332ddab7e3562c0ddd83d6b194e Mon Sep 17 00:00:00 2001 From: Negar Abbasi Date: Mon, 11 Sep 2023 15:50:41 +1000 Subject: [PATCH 13/22] refactor: removing redundant try except block --- src/algokit_utils/application_client.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/algokit_utils/application_client.py b/src/algokit_utils/application_client.py index f7c1191d..030f01c9 100644 --- a/src/algokit_utils/application_client.py +++ b/src/algokit_utils/application_client.py @@ -868,10 +868,7 @@ def _check_is_compiled(self) -> tuple[Program, Program]: def _simulate_readonly_call( self, method: Method, atc: AtomicTransactionComposer ) -> ABITransactionResponse | TransactionResponse: - try: - simulate_response = atc.simulate(self.algod_client) - except AlgodHTTPError as ex: - raise ex + simulate_response = atc.simulate(self.algod_client) if simulate_response.failure_message: raise _try_convert_to_logic_error( simulate_response.failure_message, From 304a75a77ee3a52265514fc7a80b2268272c714d Mon Sep 17 00:00:00 2001 From: Negar Abbasi Date: Mon, 11 Sep 2023 16:31:21 +1000 Subject: [PATCH 14/22] fix: using simulate response in failed transaction --- src/algokit_utils/application_client.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/algokit_utils/application_client.py b/src/algokit_utils/application_client.py index 030f01c9..b0cb5478 100644 --- a/src/algokit_utils/application_client.py +++ b/src/algokit_utils/application_client.py @@ -24,7 +24,6 @@ TransactionWithSigner, ) from algosdk.constants import APP_PAGE_MAX_SIZE -from algosdk.error import AlgodHTTPError from algosdk.logic import get_application_address from algosdk.source_map import SourceMap @@ -1261,7 +1260,11 @@ def execute_atc_with_logic_error( if logic_error and config.debug: simulate_response = atc.simulate(algod_client) if simulate_response.failure_message: - raise logic_error from ex + raise _try_convert_to_logic_error( + simulate_response.failure_message, + approval_program, + approval_source_map, + ) or Exception(f"Simulate failed: {simulate_response.failure_message}") from ex raise ex From 7be1379ab98917783795c77f482fab232e36a793 Mon Sep 17 00:00:00 2001 From: Negar Abbasi Date: Wed, 13 Sep 2023 10:05:41 +1000 Subject: [PATCH 15/22] chore: adding comments --- tests/conftest.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/conftest.py b/tests/conftest.py index fd89d866..720137ca 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -157,6 +157,8 @@ def app_spec() -> ApplicationSpecification: return read_spec("app_client_test.json", deletable=True, updatable=True, template_values={"VERSION": 1}) +# This fixture is automatically applied to all tests in the session to enable debug mode. +# If you need to run a test without debug mode, you can manually set config.configure(debug=False) within the test. @pytest.fixture(autouse=True, scope="session") def _debug_mode() -> None: config.configure(debug=True) From 364fff493f38c105ad053d739528723733805db4 Mon Sep 17 00:00:00 2001 From: Negar Abbasi Date: Tue, 19 Sep 2023 13:52:16 +1000 Subject: [PATCH 16/22] chore: updating py-algorand-sdk to latest --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- src/algokit_utils/application_client.py | 21 +++++++++++++++++++++ 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 110e6336..5dccc418 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1663,13 +1663,13 @@ virtualenv = ">=20.10.0" [[package]] name = "py-algorand-sdk" -version = "2.2.0" +version = "2.4.0" description = "Algorand SDK in Python" optional = false python-versions = ">=3.8" files = [ - {file = "py-algorand-sdk-2.2.0.tar.gz", hash = "sha256:50044aed40c5e0319a48d7f4fbc3cdbc3246703c10dd2ceebc06b546cddd8186"}, - {file = "py_algorand_sdk-2.2.0-py3-none-any.whl", hash = "sha256:a17cad8fb97d401522cf2dc415ef48e2ac4bf7bfa68ef1849e704bc800aa28e5"}, + {file = "py-algorand-sdk-2.4.0.tar.gz", hash = "sha256:92fd321ffbb449fc8138b45f12b81fd7fb4958cc1405939f1567fba6f41969a1"}, + {file = "py_algorand_sdk-2.4.0-py3-none-any.whl", hash = "sha256:a5dbc8d16d67479cf3af8cf9a245c5f1aeb228e01b7252f81169ed38dcce015e"}, ] [package.dependencies] @@ -2753,4 +2753,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "7e408024f836b99d8049311d338c6cb2cbc4973c3389218292df2103d53af618" +content-hash = "8e68cb991a47bae277ebe1b394cdfa0c1902e8ead5c477a245313ebb9274a9ae" diff --git a/pyproject.toml b/pyproject.toml index 39e2b0e6..a66fd30e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.10" -py-algorand-sdk = "^2.2.0" +py-algorand-sdk = "^2.4.0" deprecated = "^1.2.14" [tool.poetry.group.dev.dependencies] diff --git a/src/algokit_utils/application_client.py b/src/algokit_utils/application_client.py index b0cb5478..2f0b6e2a 100644 --- a/src/algokit_utils/application_client.py +++ b/src/algokit_utils/application_client.py @@ -26,6 +26,8 @@ from algosdk.constants import APP_PAGE_MAX_SIZE from algosdk.logic import get_application_address from algosdk.source_map import SourceMap +from algosdk.transaction import SignedTransaction +from algosdk.v2client.models import SimulateTraceConfig, SimulateRequest, SimulateRequestTransactionGroup import algokit_utils.application_specification as au_spec import algokit_utils.deploy as au_deploy @@ -879,6 +881,14 @@ def _simulate_readonly_call( return TransactionResponse.from_atr(simulate_response) + def _simulate_response(self, atc: AtomicTransactionComposer, algod_client) -> None: + trace_config = SimulateTraceConfig(enable=True, stack_change=True, scratch_change=True) + unsigned_txn_groups = atc.build_group() + txn_group = SimulateRequestTransactionGroup(txns=unsigned_txn_groups) + simulate_request = SimulateRequest(txn_groups=txn_group, allow_more_logs=True, allow_empty_signatures=True, exec_trace_config=trace_config) + simulate_response = atc.simulate(algod_client, simulate_request) + + def _load_reference_and_check_app_id(self) -> None: self._load_app_reference() self._check_app_id() @@ -1258,6 +1268,17 @@ def execute_atc_with_logic_error( except Exception as ex: logic_error = _try_convert_to_logic_error(ex, approval_program, approval_source_map) if logic_error and config.debug: + # trace_config = SimulateTraceConfig(enable=True, stack_change=True, scratch_change=True) + # simulate_request = SimulateRequest(txn_groups=[], allow_more_logs=True, exec_trace_config=trace_config) + # simulate_response = atc.simulate(algod_client, simulate_request) + # e = [] + # if simulate_response.failure_message: + # for _ in simulate_response.tx_ids: + # e.append(simulate_response.exec_trace_config) + # e.append(simulate_response.abi_results) + # e.append(simulate_response.failure_message) + # raise e or Exception("\n".join(e)) from ex + simulate_response = atc.simulate(algod_client) if simulate_response.failure_message: raise _try_convert_to_logic_error( From ca8f779049553a08030e6bdc461f17ca95247556 Mon Sep 17 00:00:00 2001 From: Negar Abbasi Date: Tue, 19 Sep 2023 17:14:11 +1000 Subject: [PATCH 17/22] chore: adding simulate trace to error --- src/algokit_utils/application_client.py | 58 ++++++++++++------------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/src/algokit_utils/application_client.py b/src/algokit_utils/application_client.py index 2f0b6e2a..9e7681b2 100644 --- a/src/algokit_utils/application_client.py +++ b/src/algokit_utils/application_client.py @@ -18,16 +18,17 @@ AccountTransactionSigner, AtomicTransactionComposer, AtomicTransactionResponse, + EmptySigner, LogicSigTransactionSigner, MultisigTransactionSigner, + SimulateAtomicTransactionResponse, TransactionSigner, TransactionWithSigner, ) from algosdk.constants import APP_PAGE_MAX_SIZE from algosdk.logic import get_application_address from algosdk.source_map import SourceMap -from algosdk.transaction import SignedTransaction -from algosdk.v2client.models import SimulateTraceConfig, SimulateRequest, SimulateRequestTransactionGroup +from algosdk.v2client.models import SimulateRequest, SimulateRequestTransactionGroup, SimulateTraceConfig import algokit_utils.application_specification as au_spec import algokit_utils.deploy as au_deploy @@ -881,14 +882,6 @@ def _simulate_readonly_call( return TransactionResponse.from_atr(simulate_response) - def _simulate_response(self, atc: AtomicTransactionComposer, algod_client) -> None: - trace_config = SimulateTraceConfig(enable=True, stack_change=True, scratch_change=True) - unsigned_txn_groups = atc.build_group() - txn_group = SimulateRequestTransactionGroup(txns=unsigned_txn_groups) - simulate_request = SimulateRequest(txn_groups=txn_group, allow_more_logs=True, allow_empty_signatures=True, exec_trace_config=trace_config) - simulate_response = atc.simulate(algod_client, simulate_request) - - def _load_reference_and_check_app_id(self) -> None: self._load_app_reference() self._check_app_id() @@ -1266,29 +1259,34 @@ def execute_atc_with_logic_error( try: return atc.execute(algod_client, wait_rounds=wait_rounds) except Exception as ex: - logic_error = _try_convert_to_logic_error(ex, approval_program, approval_source_map) - if logic_error and config.debug: - # trace_config = SimulateTraceConfig(enable=True, stack_change=True, scratch_change=True) - # simulate_request = SimulateRequest(txn_groups=[], allow_more_logs=True, exec_trace_config=trace_config) - # simulate_response = atc.simulate(algod_client, simulate_request) - # e = [] - # if simulate_response.failure_message: - # for _ in simulate_response.tx_ids: - # e.append(simulate_response.exec_trace_config) - # e.append(simulate_response.abi_results) - # e.append(simulate_response.failure_message) - # raise e or Exception("\n".join(e)) from ex - - simulate_response = atc.simulate(algod_client) - if simulate_response.failure_message: - raise _try_convert_to_logic_error( - simulate_response.failure_message, - approval_program, - approval_source_map, - ) or Exception(f"Simulate failed: {simulate_response.failure_message}") from ex + _try_convert_to_logic_error(ex, approval_program, approval_source_map) + if config.debug: + simulate_response = _simulate_response(atc, algod_client) + ex.traces = [] + if simulate_response.failed_at: + ex.traces.append( + { + "trace": simulate_response.exec_trace_config, + "messege": simulate_response.failure_message, + } + ) raise ex +def _simulate_response(atc: AtomicTransactionComposer, algod_client: "AlgodClient") -> SimulateAtomicTransactionResponse: + unsigned_txn_groups = atc.build_group() + empty_signer = EmptySigner() + txn_list = [txn_group.txn for txn_group in unsigned_txn_groups] + fake_signed_transactions = empty_signer.sign_transactions(txn_list, []) + txn_group = [SimulateRequestTransactionGroup(txns=fake_signed_transactions)] + trace_config = SimulateTraceConfig(enable=True, stack_change=True, scratch_change=True) + + simulate_request = SimulateRequest( + txn_groups=txn_group, allow_more_logs=True, allow_empty_signatures=True, exec_trace_config=trace_config + ) + return atc.simulate(algod_client, simulate_request) + + def _convert_transaction_parameters( args: TransactionParameters | TransactionParametersDict | None, ) -> CreateCallParameters: From 60113d4d963903a6c32b240aec0d46a966559a2a Mon Sep 17 00:00:00 2001 From: Negar Abbasi Date: Wed, 20 Sep 2023 14:19:23 +1000 Subject: [PATCH 18/22] fix: fixing simulate to work on debug mode and added tests --- src/algokit_utils/application_client.py | 52 +++++++++++++++++++------ src/algokit_utils/logic_error.py | 2 + tests/test_app_client_call.py | 21 ++++++++++ 3 files changed, 63 insertions(+), 12 deletions(-) diff --git a/src/algokit_utils/application_client.py b/src/algokit_utils/application_client.py index 9e7681b2..ac11bb74 100644 --- a/src/algokit_utils/application_client.py +++ b/src/algokit_utils/application_client.py @@ -870,12 +870,16 @@ def _check_is_compiled(self) -> tuple[Program, Program]: def _simulate_readonly_call( self, method: Method, atc: AtomicTransactionComposer ) -> ABITransactionResponse | TransactionResponse: - simulate_response = atc.simulate(self.algod_client) + simulate_response = _simulate_response(atc, self.algod_client) + traces = None + if config.debug: + traces = _create_simulate_traces(simulate_response) if simulate_response.failure_message: raise _try_convert_to_logic_error( simulate_response.failure_message, self.app_spec.approval_program, self._get_approval_source_map, + traces, ) or Exception( f"Simulate failed for readonly method {method.get_signature()}: {simulate_response.failure_message}" ) @@ -1226,6 +1230,7 @@ def _try_convert_to_logic_error( source_ex: Exception | str, approval_program: str, approval_source_map: SourceMap | typing.Callable[[], SourceMap | None] | None = None, + simulate_traces: list | None = None, ) -> Exception | None: source_ex_str = str(source_ex) logic_error_data = parse_logic_error(source_ex_str) @@ -1236,6 +1241,7 @@ def _try_convert_to_logic_error( program=approval_program, source_map=approval_source_map() if callable(approval_source_map) else approval_source_map, **logic_error_data, + traces=simulate_traces, ) return None @@ -1259,21 +1265,43 @@ def execute_atc_with_logic_error( try: return atc.execute(algod_client, wait_rounds=wait_rounds) except Exception as ex: - _try_convert_to_logic_error(ex, approval_program, approval_source_map) if config.debug: - simulate_response = _simulate_response(atc, algod_client) - ex.traces = [] - if simulate_response.failed_at: - ex.traces.append( - { - "trace": simulate_response.exec_trace_config, - "messege": simulate_response.failure_message, - } - ) + simulate = _simulate_response(atc, algod_client) + traces = _create_simulate_traces(simulate) + else: + traces = None + logger.info("An error occurred while executing the transaction.") + logger.info("To see more details, enable debug mode by setting config.debug = True ") + + logic_error = _try_convert_to_logic_error(ex, approval_program, approval_source_map, traces) + if logic_error: + raise logic_error from ex raise ex -def _simulate_response(atc: AtomicTransactionComposer, algod_client: "AlgodClient") -> SimulateAtomicTransactionResponse: +def _create_simulate_traces(simulate: SimulateAtomicTransactionResponse) -> list[dict[str, Any]]: + traces = [] + if hasattr(simulate, "simulate_response") and hasattr(simulate, "failed_at") and simulate.failed_at: + for txn_group in simulate.simulate_response["txn-groups"]: + app_budget_added = txn_group.get("app-budget-added", None) + app_budget_consumed = txn_group.get("app-budget-consumed", None) + failure_message = txn_group.get("failure-message", None) + txn_result = txn_group.get("txn-results", [{}])[0] + exec_trace = txn_result.get("exec-trace", {}) + traces.append( + { + "app-budget-added": app_budget_added, + "app-budget-consumed": app_budget_consumed, + "failure-message": failure_message, + "exec-trace": exec_trace, + } + ) + return traces + + +def _simulate_response( + atc: AtomicTransactionComposer, algod_client: "AlgodClient" +) -> SimulateAtomicTransactionResponse: unsigned_txn_groups = atc.build_group() empty_signer = EmptySigner() txn_list = [txn_group.txn for txn_group in unsigned_txn_groups] diff --git a/src/algokit_utils/logic_error.py b/src/algokit_utils/logic_error.py index 3e495862..e9be4bce 100644 --- a/src/algokit_utils/logic_error.py +++ b/src/algokit_utils/logic_error.py @@ -47,6 +47,7 @@ def __init__( message: str, pc: int, logic_error: Exception | None = None, + traces: list | None = None, ): self.logic_error = logic_error self.logic_error_str = logic_error_str @@ -56,6 +57,7 @@ def __init__( self.transaction_id = transaction_id self.message = message self.pc = pc + self.traces = traces self.line_no = self.source_map.get_line_for_pc(self.pc) if self.source_map else None diff --git a/tests/test_app_client_call.py b/tests/test_app_client_call.py index 11ff5fbe..55bcd20b 100644 --- a/tests/test_app_client_call.py +++ b/tests/test_app_client_call.py @@ -10,6 +10,7 @@ CreateCallParameters, get_account, ) +from algokit_utils.config import config from algosdk.atomic_transaction_composer import ( AccountTransactionSigner, AtomicTransactionComposer, @@ -276,3 +277,23 @@ def test_readonly_call_with_error_with_new_client_missing_source_map( ) check_output_stability(str(ex.value).replace(ex.value.transaction_id, "{txn}")) + + +def test_readonly_call_with_error_debug_mode_disabled(client_fixture: ApplicationClient) -> None: + config.configure(debug=False) + with pytest.raises(algokit_utils.LogicError) as ex: + client_fixture.call( + "readonly", + error=1, + ) + assert ex.value.traces is None + config.configure(debug=True) + + +def test_readonly_call_with_error_debug_mode_enabled(client_fixture: ApplicationClient) -> None: + with pytest.raises(algokit_utils.LogicError) as ex: + client_fixture.call( + "readonly", + error=1, + ) + assert ex.value.traces is not None From 8e610e04bbbf358af29a3e7eee2ce2efcf04aa58 Mon Sep 17 00:00:00 2001 From: Negar Abbasi Date: Wed, 20 Sep 2023 14:37:50 +1000 Subject: [PATCH 19/22] docs: Adding document on debug mode and simulate --- docs/source/capabilities/app-client.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/source/capabilities/app-client.md b/docs/source/capabilities/app-client.md index 6db51d97..d76f27b7 100644 --- a/docs/source/capabilities/app-client.md +++ b/docs/source/capabilities/app-client.md @@ -136,6 +136,7 @@ When an error is thrown then the resulting error that is re-thrown will be a `Lo * `transaction_id`: Transaction ID of failing transaction * `message`: The error message * `line_no`: The line number in the TEAL program that +* `traces`: A list of Trace objects providing additional insights on simulation when debug mode is active. The function `trace()` will provide a formatted output of the surrounding TEAL where the error occurred. @@ -147,3 +148,10 @@ The extended information will only show if the Application Client has a source m 3.) `approval_source_map` on `ApplicationClient` has been set from a previously compiled approval program OR 4.) A source map has been exported/imported using `export_source_map`/`import_source_map`""" ``` + +### Debug Mode and traces Field +When debug mode is active, the LogicError will contain a field named traces. This field will include raw simulate execution traces, providing a detailed account of the transaction simulation. These traces are crucial for diagnosing complex issues and are automatically included in all application client calls when debug mode is active. + +```{note} +Remember to enable debug mode (`config.debug = True`) to include raw simulate execution traces in the `LogicError`. +``` \ No newline at end of file From 6a8e4cfa10cbed523163856cbba3f7f8304a3c2b Mon Sep 17 00:00:00 2001 From: Altynbek Orumbayev Date: Thu, 21 Sep 2023 12:48:56 +0200 Subject: [PATCH 20/22] chore: making config an actual mock; adding extra tests for non read only calls --- tests/conftest.py | 8 --- ...with_error_debug_mode_enabled.approved.txt | 13 ++++ ...ith_error_debug_mode_disabled.approved.txt | 1 + ...with_error_debug_mode_enabled.approved.txt | 1 + tests/test_app_client_call.py | 65 +++++++++++++++++-- tests/test_deploy_scenarios.py | 11 ++++ 6 files changed, 87 insertions(+), 12 deletions(-) create mode 100644 tests/test_app_client_call.approvals/test_app_call_with_error_debug_mode_enabled.approved.txt create mode 100644 tests/test_app_client_call.approvals/test_readonly_call_with_error_debug_mode_disabled.approved.txt create mode 100644 tests/test_app_client_call.approvals/test_readonly_call_with_error_debug_mode_enabled.approved.txt diff --git a/tests/conftest.py b/tests/conftest.py index 720137ca..75831888 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -17,7 +17,6 @@ get_kmd_client_from_algod_client, replace_template_variables, ) -from algokit_utils.config import config from dotenv import load_dotenv from tests import app_client_test @@ -155,10 +154,3 @@ def app_spec() -> ApplicationSpecification: path = Path(__file__).parent / "app_client_test.json" path.write_text(app_spec.to_json()) return read_spec("app_client_test.json", deletable=True, updatable=True, template_values={"VERSION": 1}) - - -# This fixture is automatically applied to all tests in the session to enable debug mode. -# If you need to run a test without debug mode, you can manually set config.configure(debug=False) within the test. -@pytest.fixture(autouse=True, scope="session") -def _debug_mode() -> None: - config.configure(debug=True) diff --git a/tests/test_app_client_call.approvals/test_app_call_with_error_debug_mode_enabled.approved.txt b/tests/test_app_client_call.approvals/test_app_call_with_error_debug_mode_enabled.approved.txt new file mode 100644 index 00000000..c234419f --- /dev/null +++ b/tests/test_app_client_call.approvals/test_app_call_with_error_debug_mode_enabled.approved.txt @@ -0,0 +1,13 @@ +Txn {txn} had error 'invalid Box reference 0x73737373' at PC 750 and Source Line 432: + + + // set_box + setbox_2: + proto 2 0 + frame_dig -2 + box_del <-- Error + pop + frame_dig -2 + frame_dig -1 + extract 2 0 +[{'app-budget-added': 700, 'app-budget-consumed': 40, 'failure-message': 'transaction {txn}: logic eval error: invalid Box reference 0x73737373. Details: pc=750, opcodes=proto 2 0; frame_dig -2; box_del', 'exec-trace': {'approval-program-hash': 'CO2ug98Zk0183ssuNBqmgNSpbfJmsAugNMWZsxZjjc0=', 'approval-program-trace': [{'pc': 1}, {'pc': 9}, {'pc': 38, 'stack-additions': [{'type': 2, 'uint': 3}]}, {'pc': 40, 'stack-additions': [{'type': 2}]}, {'pc': 41, 'stack-additions': [{'type': 2}], 'stack-pop-count': 2}, {'pc': 42, 'stack-pop-count': 1}, {'pc': 45, 'stack-additions': [{'bytes': 'pLSiMA==', 'type': 1}]}, {'pc': 48, 'stack-additions': [{'bytes': 'Gdaxhg==', 'type': 1}]}, {'pc': 54, 'stack-additions': [{'type': 2}], 'stack-pop-count': 2}, {'pc': 55, 'stack-pop-count': 1}, {'pc': 58, 'stack-additions': [{'bytes': 'pLSiMA==', 'type': 1}]}, {'pc': 61, 'stack-additions': [{'bytes': 'U71hhg==', 'type': 1}]}, {'pc': 67, 'stack-additions': [{'type': 2}], 'stack-pop-count': 2}, {'pc': 68, 'stack-pop-count': 1}, {'pc': 71, 'stack-additions': [{'bytes': 'pLSiMA==', 'type': 1}]}, {'pc': 74, 'stack-additions': [{'bytes': 'pLSiMA==', 'type': 1}]}, {'pc': 80, 'stack-additions': [{'type': 2, 'uint': 1}], 'stack-pop-count': 2}, {'pc': 81, 'stack-pop-count': 1}, {'pc': 591, 'stack-additions': [{'type': 2}]}, {'pc': 593, 'stack-additions': [{'type': 2}]}, {'pc': 594, 'stack-additions': [{'type': 2, 'uint': 1}], 'stack-pop-count': 2}, {'pc': 595, 'stack-additions': [{'type': 2, 'uint': 3405}]}, {'pc': 597, 'stack-additions': [{'type': 2}]}, {'pc': 598, 'stack-additions': [{'type': 2, 'uint': 1}], 'stack-pop-count': 2}, {'pc': 599, 'stack-additions': [{'type': 2, 'uint': 1}], 'stack-pop-count': 2}, {'pc': 600, 'stack-pop-count': 1}, {'pc': 601}, {'pc': 1299}, {'pc': 1302, 'stack-additions': [{'type': 1}]}, {'pc': 1303, 'stack-additions': [{'type': 1}, {'type': 1}], 'stack-pop-count': 1}, {'pc': 1304, 'stack-additions': [{'bytes': 'c3Nzcw==', 'type': 1}]}, {'pc': 1307, 'stack-additions': [{'bytes': 'c3Nzcw==', 'type': 1}, {'type': 1}], 'stack-pop-count': 3}, {'pc': 1309, 'stack-additions': [{'bytes': 'AAR0ZXN0', 'type': 1}]}, {'pc': 1312, 'stack-additions': [{'bytes': 'AAR0ZXN0', 'type': 1}], 'stack-pop-count': 2}, {'pc': 1314, 'stack-additions': [{'bytes': 'c3Nzcw==', 'type': 1}]}, {'pc': 1316, 'stack-additions': [{'bytes': 'AAR0ZXN0', 'type': 1}]}, {'pc': 1318}, {'pc': 745}, {'pc': 748, 'stack-additions': [{'bytes': 'c3Nzcw==', 'type': 1}]}, {'pc': 750, 'stack-pop-count': 1}]}}] \ No newline at end of file diff --git a/tests/test_app_client_call.approvals/test_readonly_call_with_error_debug_mode_disabled.approved.txt b/tests/test_app_client_call.approvals/test_readonly_call_with_error_debug_mode_disabled.approved.txt new file mode 100644 index 00000000..4af18322 --- /dev/null +++ b/tests/test_app_client_call.approvals/test_readonly_call_with_error_debug_mode_disabled.approved.txt @@ -0,0 +1 @@ +None \ No newline at end of file diff --git a/tests/test_app_client_call.approvals/test_readonly_call_with_error_debug_mode_enabled.approved.txt b/tests/test_app_client_call.approvals/test_readonly_call_with_error_debug_mode_enabled.approved.txt new file mode 100644 index 00000000..ad4e73be --- /dev/null +++ b/tests/test_app_client_call.approvals/test_readonly_call_with_error_debug_mode_enabled.approved.txt @@ -0,0 +1 @@ +[{'app-budget-added': 700, 'app-budget-consumed': 35, 'failure-message': 'transaction {txn}: logic eval error: assert failed pc=743. Details: pc=743, opcodes=return; label54:; intc_0 // 0; assert', 'exec-trace': {'approval-program-hash': 'CO2ug98Zk0183ssuNBqmgNSpbfJmsAugNMWZsxZjjc0=', 'approval-program-trace': [{'pc': 1}, {'pc': 9}, {'pc': 38, 'stack-additions': [{'type': 2, 'uint': 2}]}, {'pc': 40, 'stack-additions': [{'type': 2}]}, {'pc': 41, 'stack-additions': [{'type': 2}], 'stack-pop-count': 2}, {'pc': 42, 'stack-pop-count': 1}, {'pc': 45, 'stack-additions': [{'bytes': 'U71hhg==', 'type': 1}]}, {'pc': 48, 'stack-additions': [{'bytes': 'Gdaxhg==', 'type': 1}]}, {'pc': 54, 'stack-additions': [{'type': 2}], 'stack-pop-count': 2}, {'pc': 55, 'stack-pop-count': 1}, {'pc': 58, 'stack-additions': [{'bytes': 'U71hhg==', 'type': 1}]}, {'pc': 61, 'stack-additions': [{'bytes': 'U71hhg==', 'type': 1}]}, {'pc': 67, 'stack-additions': [{'type': 2, 'uint': 1}], 'stack-pop-count': 2}, {'pc': 68, 'stack-pop-count': 1}, {'pc': 606, 'stack-additions': [{'type': 2}]}, {'pc': 608, 'stack-additions': [{'type': 2}]}, {'pc': 609, 'stack-additions': [{'type': 2, 'uint': 1}], 'stack-pop-count': 2}, {'pc': 610, 'stack-additions': [{'type': 2, 'uint': 3405}]}, {'pc': 612, 'stack-additions': [{'type': 2}]}, {'pc': 613, 'stack-additions': [{'type': 2, 'uint': 1}], 'stack-pop-count': 2}, {'pc': 614, 'stack-additions': [{'type': 2, 'uint': 1}], 'stack-pop-count': 2}, {'pc': 615, 'stack-pop-count': 1}, {'pc': 616}, {'pc': 1283}, {'pc': 1286, 'stack-additions': [{'type': 2}]}, {'pc': 1287, 'stack-additions': [{'bytes': 'AAAAAAAAAAE=', 'type': 1}]}, {'pc': 1290, 'stack-additions': [{'type': 2, 'uint': 1}], 'stack-pop-count': 1}, {'pc': 1291, 'stack-additions': [{'type': 2, 'uint': 1}], 'stack-pop-count': 2}, {'pc': 1293, 'stack-additions': [{'type': 2, 'uint': 1}]}, {'pc': 1295}, {'pc': 732}, {'pc': 735, 'stack-additions': [{'type': 2, 'uint': 1}]}, {'pc': 737, 'stack-pop-count': 1}, {'pc': 742, 'stack-additions': [{'type': 2}]}, {'pc': 743, 'stack-pop-count': 1}]}}] \ No newline at end of file diff --git a/tests/test_app_client_call.py b/tests/test_app_client_call.py index 55bcd20b..d5f646cc 100644 --- a/tests/test_app_client_call.py +++ b/tests/test_app_client_call.py @@ -1,5 +1,7 @@ +from collections.abc import Generator from pathlib import Path from typing import TYPE_CHECKING +from unittest.mock import Mock, patch import algokit_utils import pytest @@ -10,7 +12,6 @@ CreateCallParameters, get_account, ) -from algokit_utils.config import config from algosdk.atomic_transaction_composer import ( AccountTransactionSigner, AtomicTransactionComposer, @@ -35,6 +36,15 @@ def client_fixture(algod_client: "AlgodClient", app_spec: ApplicationSpecificati return client +# This fixture is automatically applied to all application call tests. +# If you need to run a test without debug mode, you can reference this mock within the test and disable it explicitly. +@pytest.fixture(autouse=True) +def mock_config() -> Generator[Mock, None, None]: + with patch("algokit_utils.application_client.config", new_callable=Mock) as mock_config: + mock_config.debug = True + yield mock_config + + def test_app_client_from_app_spec_path(algod_client: "AlgodClient") -> None: client = ApplicationClient(algod_client, Path(__file__).parent / "app_client_test.json") @@ -279,15 +289,15 @@ def test_readonly_call_with_error_with_new_client_missing_source_map( check_output_stability(str(ex.value).replace(ex.value.transaction_id, "{txn}")) -def test_readonly_call_with_error_debug_mode_disabled(client_fixture: ApplicationClient) -> None: - config.configure(debug=False) +def test_readonly_call_with_error_debug_mode_disabled(mock_config: Mock, client_fixture: ApplicationClient) -> None: + mock_config.debug = False with pytest.raises(algokit_utils.LogicError) as ex: client_fixture.call( "readonly", error=1, ) assert ex.value.traces is None - config.configure(debug=True) + mock_config.debug = True def test_readonly_call_with_error_debug_mode_enabled(client_fixture: ApplicationClient) -> None: @@ -296,4 +306,51 @@ def test_readonly_call_with_error_debug_mode_enabled(client_fixture: Application "readonly", error=1, ) + + assert ex.value.traces is not None + + output_traces = str(ex.value.traces).replace(ex.value.transaction_id, "{txn}") + check_output_stability(output_traces) + + +def test_app_call_with_error_debug_mode_disabled(mock_config: Mock, client_fixture: ApplicationClient) -> None: + mock_config.debug = False + algokit_utils.ensure_funded( + client_fixture.algod_client, + algokit_utils.EnsureBalanceParameters( + account_to_fund=client_fixture.app_address, + min_spending_balance_micro_algos=200_000, + min_funding_increment_micro_algos=200_000, + ), + ) + with pytest.raises(algokit_utils.LogicError) as ex: + client_fixture.call( + "set_box", + name=b"ssss", + value="test", + ) + + assert ex.value.traces is None + mock_config.debug = True + + +def test_app_call_with_error_debug_mode_enabled(client_fixture: ApplicationClient) -> None: + algokit_utils.ensure_funded( + client_fixture.algod_client, + algokit_utils.EnsureBalanceParameters( + account_to_fund=client_fixture.app_address, + min_spending_balance_micro_algos=200_000, + min_funding_increment_micro_algos=200_000, + ), + ) + with pytest.raises(algokit_utils.LogicError) as ex: + client_fixture.call( + "set_box", + name=b"ssss", + value="test", + ) + assert ex.value.traces is not None + output_message = str(ex.value).replace(ex.value.transaction_id, "{txn}") + output_traces = str(ex.value.traces).replace(ex.value.transaction_id, "{txn}") + check_output_stability(f"{output_message}\n{output_traces}") diff --git a/tests/test_deploy_scenarios.py b/tests/test_deploy_scenarios.py index 7f502633..d5a3ba0b 100644 --- a/tests/test_deploy_scenarios.py +++ b/tests/test_deploy_scenarios.py @@ -1,6 +1,8 @@ import logging import re +from collections.abc import Generator from enum import Enum +from unittest.mock import Mock, patch import pytest from algokit_utils import ( @@ -22,6 +24,15 @@ logger = logging.getLogger(__name__) +# This fixture is automatically applied to all application deployment tests. +# If you need to run a test without debug mode, you can reference this mock within the test and disable it explicitly. +@pytest.fixture(autouse=True) +def mock_config() -> Generator[Mock, None, None]: + with patch("algokit_utils.application_client.config", new_callable=Mock) as mock_config: + mock_config.debug = True + yield mock_config + + class DeployFixture: def __init__( self, From f744af366737ba29ed97189fa8995659c2fd08a7 Mon Sep 17 00:00:00 2001 From: Altynbek Orumbayev Date: Thu, 21 Sep 2023 13:27:38 +0200 Subject: [PATCH 21/22] chore: fixing tests --- ..._call_with_error_debug_mode_enabled.approved.txt | 13 ------------- ..._call_with_error_debug_mode_enabled.approved.txt | 1 - tests/test_app_client_call.py | 8 ++------ 3 files changed, 2 insertions(+), 20 deletions(-) delete mode 100644 tests/test_app_client_call.approvals/test_app_call_with_error_debug_mode_enabled.approved.txt delete mode 100644 tests/test_app_client_call.approvals/test_readonly_call_with_error_debug_mode_enabled.approved.txt diff --git a/tests/test_app_client_call.approvals/test_app_call_with_error_debug_mode_enabled.approved.txt b/tests/test_app_client_call.approvals/test_app_call_with_error_debug_mode_enabled.approved.txt deleted file mode 100644 index c234419f..00000000 --- a/tests/test_app_client_call.approvals/test_app_call_with_error_debug_mode_enabled.approved.txt +++ /dev/null @@ -1,13 +0,0 @@ -Txn {txn} had error 'invalid Box reference 0x73737373' at PC 750 and Source Line 432: - - - // set_box - setbox_2: - proto 2 0 - frame_dig -2 - box_del <-- Error - pop - frame_dig -2 - frame_dig -1 - extract 2 0 -[{'app-budget-added': 700, 'app-budget-consumed': 40, 'failure-message': 'transaction {txn}: logic eval error: invalid Box reference 0x73737373. Details: pc=750, opcodes=proto 2 0; frame_dig -2; box_del', 'exec-trace': {'approval-program-hash': 'CO2ug98Zk0183ssuNBqmgNSpbfJmsAugNMWZsxZjjc0=', 'approval-program-trace': [{'pc': 1}, {'pc': 9}, {'pc': 38, 'stack-additions': [{'type': 2, 'uint': 3}]}, {'pc': 40, 'stack-additions': [{'type': 2}]}, {'pc': 41, 'stack-additions': [{'type': 2}], 'stack-pop-count': 2}, {'pc': 42, 'stack-pop-count': 1}, {'pc': 45, 'stack-additions': [{'bytes': 'pLSiMA==', 'type': 1}]}, {'pc': 48, 'stack-additions': [{'bytes': 'Gdaxhg==', 'type': 1}]}, {'pc': 54, 'stack-additions': [{'type': 2}], 'stack-pop-count': 2}, {'pc': 55, 'stack-pop-count': 1}, {'pc': 58, 'stack-additions': [{'bytes': 'pLSiMA==', 'type': 1}]}, {'pc': 61, 'stack-additions': [{'bytes': 'U71hhg==', 'type': 1}]}, {'pc': 67, 'stack-additions': [{'type': 2}], 'stack-pop-count': 2}, {'pc': 68, 'stack-pop-count': 1}, {'pc': 71, 'stack-additions': [{'bytes': 'pLSiMA==', 'type': 1}]}, {'pc': 74, 'stack-additions': [{'bytes': 'pLSiMA==', 'type': 1}]}, {'pc': 80, 'stack-additions': [{'type': 2, 'uint': 1}], 'stack-pop-count': 2}, {'pc': 81, 'stack-pop-count': 1}, {'pc': 591, 'stack-additions': [{'type': 2}]}, {'pc': 593, 'stack-additions': [{'type': 2}]}, {'pc': 594, 'stack-additions': [{'type': 2, 'uint': 1}], 'stack-pop-count': 2}, {'pc': 595, 'stack-additions': [{'type': 2, 'uint': 3405}]}, {'pc': 597, 'stack-additions': [{'type': 2}]}, {'pc': 598, 'stack-additions': [{'type': 2, 'uint': 1}], 'stack-pop-count': 2}, {'pc': 599, 'stack-additions': [{'type': 2, 'uint': 1}], 'stack-pop-count': 2}, {'pc': 600, 'stack-pop-count': 1}, {'pc': 601}, {'pc': 1299}, {'pc': 1302, 'stack-additions': [{'type': 1}]}, {'pc': 1303, 'stack-additions': [{'type': 1}, {'type': 1}], 'stack-pop-count': 1}, {'pc': 1304, 'stack-additions': [{'bytes': 'c3Nzcw==', 'type': 1}]}, {'pc': 1307, 'stack-additions': [{'bytes': 'c3Nzcw==', 'type': 1}, {'type': 1}], 'stack-pop-count': 3}, {'pc': 1309, 'stack-additions': [{'bytes': 'AAR0ZXN0', 'type': 1}]}, {'pc': 1312, 'stack-additions': [{'bytes': 'AAR0ZXN0', 'type': 1}], 'stack-pop-count': 2}, {'pc': 1314, 'stack-additions': [{'bytes': 'c3Nzcw==', 'type': 1}]}, {'pc': 1316, 'stack-additions': [{'bytes': 'AAR0ZXN0', 'type': 1}]}, {'pc': 1318}, {'pc': 745}, {'pc': 748, 'stack-additions': [{'bytes': 'c3Nzcw==', 'type': 1}]}, {'pc': 750, 'stack-pop-count': 1}]}}] \ No newline at end of file diff --git a/tests/test_app_client_call.approvals/test_readonly_call_with_error_debug_mode_enabled.approved.txt b/tests/test_app_client_call.approvals/test_readonly_call_with_error_debug_mode_enabled.approved.txt deleted file mode 100644 index ad4e73be..00000000 --- a/tests/test_app_client_call.approvals/test_readonly_call_with_error_debug_mode_enabled.approved.txt +++ /dev/null @@ -1 +0,0 @@ -[{'app-budget-added': 700, 'app-budget-consumed': 35, 'failure-message': 'transaction {txn}: logic eval error: assert failed pc=743. Details: pc=743, opcodes=return; label54:; intc_0 // 0; assert', 'exec-trace': {'approval-program-hash': 'CO2ug98Zk0183ssuNBqmgNSpbfJmsAugNMWZsxZjjc0=', 'approval-program-trace': [{'pc': 1}, {'pc': 9}, {'pc': 38, 'stack-additions': [{'type': 2, 'uint': 2}]}, {'pc': 40, 'stack-additions': [{'type': 2}]}, {'pc': 41, 'stack-additions': [{'type': 2}], 'stack-pop-count': 2}, {'pc': 42, 'stack-pop-count': 1}, {'pc': 45, 'stack-additions': [{'bytes': 'U71hhg==', 'type': 1}]}, {'pc': 48, 'stack-additions': [{'bytes': 'Gdaxhg==', 'type': 1}]}, {'pc': 54, 'stack-additions': [{'type': 2}], 'stack-pop-count': 2}, {'pc': 55, 'stack-pop-count': 1}, {'pc': 58, 'stack-additions': [{'bytes': 'U71hhg==', 'type': 1}]}, {'pc': 61, 'stack-additions': [{'bytes': 'U71hhg==', 'type': 1}]}, {'pc': 67, 'stack-additions': [{'type': 2, 'uint': 1}], 'stack-pop-count': 2}, {'pc': 68, 'stack-pop-count': 1}, {'pc': 606, 'stack-additions': [{'type': 2}]}, {'pc': 608, 'stack-additions': [{'type': 2}]}, {'pc': 609, 'stack-additions': [{'type': 2, 'uint': 1}], 'stack-pop-count': 2}, {'pc': 610, 'stack-additions': [{'type': 2, 'uint': 3405}]}, {'pc': 612, 'stack-additions': [{'type': 2}]}, {'pc': 613, 'stack-additions': [{'type': 2, 'uint': 1}], 'stack-pop-count': 2}, {'pc': 614, 'stack-additions': [{'type': 2, 'uint': 1}], 'stack-pop-count': 2}, {'pc': 615, 'stack-pop-count': 1}, {'pc': 616}, {'pc': 1283}, {'pc': 1286, 'stack-additions': [{'type': 2}]}, {'pc': 1287, 'stack-additions': [{'bytes': 'AAAAAAAAAAE=', 'type': 1}]}, {'pc': 1290, 'stack-additions': [{'type': 2, 'uint': 1}], 'stack-pop-count': 1}, {'pc': 1291, 'stack-additions': [{'type': 2, 'uint': 1}], 'stack-pop-count': 2}, {'pc': 1293, 'stack-additions': [{'type': 2, 'uint': 1}]}, {'pc': 1295}, {'pc': 732}, {'pc': 735, 'stack-additions': [{'type': 2, 'uint': 1}]}, {'pc': 737, 'stack-pop-count': 1}, {'pc': 742, 'stack-additions': [{'type': 2}]}, {'pc': 743, 'stack-pop-count': 1}]}}] \ No newline at end of file diff --git a/tests/test_app_client_call.py b/tests/test_app_client_call.py index d5f646cc..940a8560 100644 --- a/tests/test_app_client_call.py +++ b/tests/test_app_client_call.py @@ -308,9 +308,7 @@ def test_readonly_call_with_error_debug_mode_enabled(client_fixture: Application ) assert ex.value.traces is not None - - output_traces = str(ex.value.traces).replace(ex.value.transaction_id, "{txn}") - check_output_stability(output_traces) + assert ex.value.traces[0]["exec-trace"]["approval-program-trace"] is not None def test_app_call_with_error_debug_mode_disabled(mock_config: Mock, client_fixture: ApplicationClient) -> None: @@ -351,6 +349,4 @@ def test_app_call_with_error_debug_mode_enabled(client_fixture: ApplicationClien ) assert ex.value.traces is not None - output_message = str(ex.value).replace(ex.value.transaction_id, "{txn}") - output_traces = str(ex.value.traces).replace(ex.value.transaction_id, "{txn}") - check_output_stability(f"{output_message}\n{output_traces}") + assert ex.value.traces[0]["exec-trace"]["approval-program-trace"] is not None From ea72c6bf74edfbb99dace3eb015e558279e686cd Mon Sep 17 00:00:00 2001 From: Altynbek Orumbayev Date: Fri, 22 Sep 2023 09:45:15 +0200 Subject: [PATCH 22/22] chore: lockfile conflicts --- poetry.lock | 28 ++++------------------------ 1 file changed, 4 insertions(+), 24 deletions(-) diff --git a/poetry.lock b/poetry.lock index 48d06df2..82c74f00 100644 --- a/poetry.lock +++ b/poetry.lock @@ -838,20 +838,20 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.36" +version = "3.1.37" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.36-py3-none-any.whl", hash = "sha256:8d22b5cfefd17c79914226982bb7851d6ade47545b1735a9d010a2a4c26d8388"}, - {file = "GitPython-3.1.36.tar.gz", hash = "sha256:4bb0c2a6995e85064140d31a33289aa5dce80133a23d36fcd372d716c54d3ebf"}, + {file = "GitPython-3.1.37-py3-none-any.whl", hash = "sha256:5f4c4187de49616d710a77e98ddf17b4782060a1788df441846bddefbb89ab33"}, + {file = "GitPython-3.1.37.tar.gz", hash = "sha256:f9b9ddc0761c125d5780eab2d64be4873fc6817c2899cbcb34b02344bdc7bc54"}, ] [package.dependencies] gitdb = ">=4.0.1,<5" [package.extras] -test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-sugar", "virtualenv"] +test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-sugar"] [[package]] name = "html5lib" @@ -1138,16 +1138,6 @@ files = [ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, @@ -1991,7 +1981,6 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -1999,15 +1988,8 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -2024,7 +2006,6 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -2032,7 +2013,6 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},