diff --git a/.vscode/mcp.json b/.vscode/mcp.json new file mode 100644 index 000000000..755e159f1 --- /dev/null +++ b/.vscode/mcp.json @@ -0,0 +1,9 @@ +{ + "inputs": [], + "servers": { + "dipdup-sse": { + "type": "sse", + "url": "http://127.0.0.1:9999/sse" + } + } +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index de3df8c9e..2107a948c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,7 +2,7 @@ "yaml.schemas": { "schemas/dipdup-3.0.json": [ "**/dipdup*.y[a]ml", - "tests/configs/*.yml" + "tests/configs/*.y[a]ml" ], }, "files.associations": { diff --git a/CHANGELOG.md b/CHANGELOG.md index 60daaa672..1b9176df3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ The format is based on [Keep a Changelog], and this project adheres to [Semantic Releases prior to 7.0 has been removed from this file to declutter search results; see the [archived copy](https://github.com/dipdup-io/dipdup/blob/8.0.0b5/CHANGELOG.md) for the full list. -## [Unreleased] +## [8.3.2] - 2025-04-17 ### Added @@ -17,6 +17,7 @@ Releases prior to 7.0 has been removed from this file to declutter search result ### Fixed - cli: Fixed `new` command using incorrect template. +- mcp: Fixed handling exceptions in MCP tools. ### Changed @@ -696,7 +697,8 @@ Releases prior to 7.0 has been removed from this file to declutter search result [semantic versioning]: https://semver.org/spec/v2.0.0.html -[Unreleased]: https://github.com/dipdup-io/dipdup/compare/8.3.1...HEAD +[Unreleased]: https://github.com/dipdup-io/dipdup/compare/8.3.2...HEAD +[8.3.2]: https://github.com/dipdup-io/dipdup/compare/8.3.0...8.3.1 [8.3.1]: https://github.com/dipdup-io/dipdup/compare/8.3.0...8.3.1 [8.3.0]: https://github.com/dipdup-io/dipdup/compare/8.2.2...8.3.0 [8.2.2]: https://github.com/dipdup-io/dipdup/compare/8.2.1...8.2.2 diff --git a/docs/7.references/3.context.md b/docs/7.references/3.context.md index b5c9b0b09..a89782dfd 100644 --- a/docs/7.references/3.context.md +++ b/docs/7.references/3.context.md @@ -69,7 +69,7 @@ description: "Context reference" ## dipdup.context.McpContext -class dipdup.context.McpContext(config, package, datasources, transactions, logger, server) +class dipdup.context.McpContext(config, package, datasources, transactions, logger, server, api)

Execution context of MCP tools, resources and prompts.

Parameters:
@@ -80,6 +80,7 @@ description: "Context reference"
  • transactions (TransactionManager) – Transaction manager (low-level interface)

  • logger (Logger) – Context-aware logger instance

  • server (McpServer[Any]) – Running MCP server instance

  • +
  • api (HttpDatasource) – DipDup API datasource

  • diff --git a/docs/8.examples/_demos_table.md b/docs/8.examples/_demos_table.md index a424bf001..a2cb367ea 100644 --- a/docs/8.examples/_demos_table.md +++ b/docs/8.examples/_demos_table.md @@ -1,22 +1,22 @@ | name | network | description | source | |-|-|-|-| -| demo_blank | | Empty config for a fresh start | [link](https://github.com/dipdup-io/dipdup/tree/8.3.1/src/demo_blank) | -| demo_evm_events | EVM | ERC-20 token transfers (from event logs) | [link](https://github.com/dipdup-io/dipdup/tree/8.3.1/src/demo_evm_events) | -| demo_evm_transactions | EVM | ERC-20 token transfers (from transactions) | [link](https://github.com/dipdup-io/dipdup/tree/8.3.1/src/demo_evm_transactions) | -| demo_evm_uniswap | EVM | Uniswap V3 pools, positions, etc. (advanced, uses TimescaleDB) | [link](https://github.com/dipdup-io/dipdup/tree/8.3.1/src/demo_evm_uniswap) | -| demo_starknet_events | Starknet | ERC-20 token transfers (from events) | [link](https://github.com/dipdup-io/dipdup/tree/8.3.1/src/demo_starknet_events) | -| demo_substrate_events | Substrate | Substrate balance transfers | [link](https://github.com/dipdup-io/dipdup/tree/8.3.1/src/demo_substrate_events) | -| demo_tezos_auction | Tezos | NFT marketplace (TzColors) | [link](https://github.com/dipdup-io/dipdup/tree/8.3.1/src/demo_tezos_auction) | -| demo_tezos_dao | Tezos | DAO registry (Homebase DAO) | [link](https://github.com/dipdup-io/dipdup/tree/8.3.1/src/demo_tezos_dao) | -| demo_tezos_dex | Tezos | DEX balances and liquidity (Quipuswap) | [link](https://github.com/dipdup-io/dipdup/tree/8.3.1/src/demo_tezos_dex) | -| demo_tezos_domains | Tezos | Domain name service (Tezos Domains) | [link](https://github.com/dipdup-io/dipdup/tree/8.3.1/src/demo_tezos_domains) | -| demo_tezos_etherlink | Tezos | Etherlink smart rollup transactions | [link](https://github.com/dipdup-io/dipdup/tree/8.3.1/src/demo_tezos_etherlink) | -| demo_tezos_events | Tezos | Processing contract events | [link](https://github.com/dipdup-io/dipdup/tree/8.3.1/src/demo_tezos_events) | -| demo_tezos_factories | Tezos | Example of spawning indexes in runtime | [link](https://github.com/dipdup-io/dipdup/tree/8.3.1/src/demo_tezos_factories) | -| demo_tezos_head | Tezos | Processing head block metadata (realtime only) | [link](https://github.com/dipdup-io/dipdup/tree/8.3.1/src/demo_tezos_head) | -| demo_tezos_nft_marketplace | Tezos | NFT marketplace (hic at nunc) | [link](https://github.com/dipdup-io/dipdup/tree/8.3.1/src/demo_tezos_nft_marketplace) | -| demo_tezos_raw | Tezos | Process raw operations without filtering and typed payloads | [link](https://github.com/dipdup-io/dipdup/tree/8.3.1/src/demo_tezos_raw) | -| demo_tezos_token | Tezos | FA1.2 token contract operations | [link](https://github.com/dipdup-io/dipdup/tree/8.3.1/src/demo_tezos_token) | -| demo_tezos_token_balances | Tezos | FA1.2 token balances | [link](https://github.com/dipdup-io/dipdup/tree/8.3.1/src/demo_tezos_token_balances) | -| demo_tezos_token_transfers | Tezos | FA1.2 token transfers | [link](https://github.com/dipdup-io/dipdup/tree/8.3.1/src/demo_tezos_token_transfers) | +| demo_blank | | Empty config for a fresh start | [link](https://github.com/dipdup-io/dipdup/tree/8.3.2/src/demo_blank) | +| demo_evm_events | EVM | ERC-20 token transfers (from event logs) | [link](https://github.com/dipdup-io/dipdup/tree/8.3.2/src/demo_evm_events) | +| demo_evm_transactions | EVM | ERC-20 token transfers (from transactions) | [link](https://github.com/dipdup-io/dipdup/tree/8.3.2/src/demo_evm_transactions) | +| demo_evm_uniswap | EVM | Uniswap V3 pools, positions, etc. (advanced, uses TimescaleDB) | [link](https://github.com/dipdup-io/dipdup/tree/8.3.2/src/demo_evm_uniswap) | +| demo_starknet_events | Starknet | ERC-20 token transfers (from events) | [link](https://github.com/dipdup-io/dipdup/tree/8.3.2/src/demo_starknet_events) | +| demo_substrate_events | Substrate | Substrate balance transfers | [link](https://github.com/dipdup-io/dipdup/tree/8.3.2/src/demo_substrate_events) | +| demo_tezos_auction | Tezos | NFT marketplace (TzColors) | [link](https://github.com/dipdup-io/dipdup/tree/8.3.2/src/demo_tezos_auction) | +| demo_tezos_dao | Tezos | DAO registry (Homebase DAO) | [link](https://github.com/dipdup-io/dipdup/tree/8.3.2/src/demo_tezos_dao) | +| demo_tezos_dex | Tezos | DEX balances and liquidity (Quipuswap) | [link](https://github.com/dipdup-io/dipdup/tree/8.3.2/src/demo_tezos_dex) | +| demo_tezos_domains | Tezos | Domain name service (Tezos Domains) | [link](https://github.com/dipdup-io/dipdup/tree/8.3.2/src/demo_tezos_domains) | +| demo_tezos_etherlink | Tezos | Etherlink smart rollup transactions | [link](https://github.com/dipdup-io/dipdup/tree/8.3.2/src/demo_tezos_etherlink) | +| demo_tezos_events | Tezos | Processing contract events | [link](https://github.com/dipdup-io/dipdup/tree/8.3.2/src/demo_tezos_events) | +| demo_tezos_factories | Tezos | Example of spawning indexes in runtime | [link](https://github.com/dipdup-io/dipdup/tree/8.3.2/src/demo_tezos_factories) | +| demo_tezos_head | Tezos | Processing head block metadata (realtime only) | [link](https://github.com/dipdup-io/dipdup/tree/8.3.2/src/demo_tezos_head) | +| demo_tezos_nft_marketplace | Tezos | NFT marketplace (hic at nunc) | [link](https://github.com/dipdup-io/dipdup/tree/8.3.2/src/demo_tezos_nft_marketplace) | +| demo_tezos_raw | Tezos | Process raw operations without filtering and typed payloads | [link](https://github.com/dipdup-io/dipdup/tree/8.3.2/src/demo_tezos_raw) | +| demo_tezos_token | Tezos | FA1.2 token contract operations | [link](https://github.com/dipdup-io/dipdup/tree/8.3.2/src/demo_tezos_token) | +| demo_tezos_token_balances | Tezos | FA1.2 token balances | [link](https://github.com/dipdup-io/dipdup/tree/8.3.2/src/demo_tezos_token_balances) | +| demo_tezos_token_transfers | Tezos | FA1.2 token transfers | [link](https://github.com/dipdup-io/dipdup/tree/8.3.2/src/demo_tezos_token_transfers) | diff --git a/docs/9.release-notes/_8.0_changelog.md b/docs/9.release-notes/_8.0_changelog.md index ea9876d8c..e0555feed 100644 --- a/docs/9.release-notes/_8.0_changelog.md +++ b/docs/9.release-notes/_8.0_changelog.md @@ -6,7 +6,6 @@ - cli: Added `--pre` flag to `self` group commands to install pre-release versions. - cli: Added `--raw` option to `config export` command to dump config preserving the original structure. - cli: Added `-C` option, a shorthand for `-c . -c configs/dipdup..yaml`. -- cli: Added `init --no-base` option to skip creating the base template. - cli: Added `package verify` command to check the package consistency. - cli: Added full project migration support for 3.0 spec. - cli: Added spec_version 3.0 support to `migrate` command. @@ -14,7 +13,6 @@ - database: Added `dipdup_status` view to the schema. - env: Added `DIPDUP_JSON_LOG` environment variable to enable JSON logging. - env: Added `DIPDUP_LOW_MEMORY` variable to reduce the size of caches and buffers. -- env: Added `DIPDUP_NO_BASE` environment variable to skip creating the base template. - env: Added `DIPDUP_PACKAGE_PATH` environment variable to override discovered package path. - package: Added built-in `batch` handler to modify higher-level indexing logic. - starknet.events: Added `starknet.events` index kind to process Starknet events. @@ -27,7 +25,6 @@ - cli: Don't save reports for successful test runs. - cli: Don't update existing installation in `self install` command unless asked to. - cli: Fixed `--pre` installer flag. -- cli: Fixed `new` command using incorrect template. - cli: Fixed env files not being loaded in some commands. - cli: Fixed errors raised when the project package is invalid. - cli: Fixed progress estimation when there are indexes with `last_level` option set. @@ -57,7 +54,6 @@ ### Changed - api: `/performance` endpoint response format has been changed. -- cli: `init --base` option is now enabled by default. - config: Index configs accept `datasources` list instead of `datasource` field. - config: Index kinds have been renamed and grouped by the network. - config: Index template values now can be any JSON-serializable object. diff --git a/docs/9.release-notes/_8.3_changelog.md b/docs/9.release-notes/_8.3_changelog.md index cd1de93a1..402048388 100644 --- a/docs/9.release-notes/_8.3_changelog.md +++ b/docs/9.release-notes/_8.3_changelog.md @@ -3,9 +3,12 @@ ### Added +- cli: Added `init --no-base` option to skip creating the base template. - cli: Apply ruff linting and formating on init. - config: Added `api_url` and `compatibility` fields to MCP config. +- env: Added `DIPDUP_NO_BASE` environment variable to skip creating the base template. - mcp: Added Model Context Protocol (MCP) server implementation. +- mcp: Added `ctx.api` datasource and `ctx.call_api` helper to server context. - mcp: Added built-in resources for accessing indexer configuration and metrics. - mcp: Added support for exposing custom tools and resources via `@dipdup.mcp` decorators. @@ -13,8 +16,10 @@ - api: Fixed configuring uvicorn logging. - api: Strip secret fields from API responses. +- cli: Fixed `new` command using incorrect template. - cli: Fixed logging indexer status. - mcp: Expose resources as tools for clients that don't support MCP resources yet. +- mcp: Fixed handling exceptions in MCP tools. - package: Create package marker even if helper symlink is present. - project: Fixed built sdist/wheel artifacts which contained unrelated files. - project: Fixed generation of compose manifest and configs for MCP environment. @@ -22,6 +27,7 @@ ### Changed - api: Built-in management API is now using Starlette instead of plain aiohttp. +- cli: `init --base` option is now enabled by default. - cli: `install.py` script and `dipdup self` commands use `uv tool` instead of `pipx`. - cli: `new` command uses default values for some `replay.yaml` fields. - project: Replace `black` with `ruff` as default formatter. diff --git a/pyproject.toml b/pyproject.toml index c0a35fd12..ac2e77d0c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "dipdup" description = "Modular framework for creating selective indexers and featureful backends for dapps" -version = "8.3.1" +version = "8.3.2" license = { text = "MIT" } authors = [ { name = "Lev Gorodetskii", email = "dipdup@drsr.io" }, diff --git a/requirements.txt b/requirements.txt index 9ffd7fb46..cc2cc84e8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -231,9 +231,9 @@ h11==0.14.0 \ hexbytes==1.3.0 \ --hash=sha256:4a61840c24b0909a6534350e2d28ee50159ca1c9e89ce275fd31c110312cf684 \ --hash=sha256:83720b529c6e15ed21627962938dc2dec9bb1010f17bbbd66bf1e6a8287d522c -httpcore==1.0.7 \ - --hash=sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c \ - --hash=sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd +httpcore==1.0.8 \ + --hash=sha256:5254cf149bcb5f75e9d1b2b9f729ea4a4b883d1ad7379fc632b727cec23674be \ + --hash=sha256:86e94505ed24ea06514883fd44d2bc02d90e77e7979c8eb71b90f41d364a1bad httpx==0.28.1 \ --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \ --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad @@ -316,24 +316,26 @@ msgpack==1.1.0 \ --hash=sha256:ad33e8400e4ec17ba782f7b9cf868977d867ed784a1f5f2ab46e7ba53b6e1e1b \ --hash=sha256:d46cf9e3705ea9485687aa4001a76e44748b609d260af21c4ceea7f2212a501d \ --hash=sha256:dd432ccc2c72b914e4cb77afce64aab761c1137cc698be3984eee260bcb2896e -multidict==6.3.2 \ - --hash=sha256:029bbd7d782251a78975214b78ee632672310f9233d49531fc93e8e99154af25 \ - --hash=sha256:0d50eff89aa4d145a5486b171a2177042d08ea5105f813027eb1050abe91839f \ - --hash=sha256:13bec31375235a68457ab887ce1bbf4f59d5810d838ae5d7e5b416242e1f3ed4 \ - --hash=sha256:1fcab18e65cc555ac29981a581518c23311f2b1e72d8f658f9891590465383be \ - --hash=sha256:347eea2852ab7f697cc5ed9b1aae96b08f8529cca0c6468f747f0781b1842898 \ - --hash=sha256:430120c6ce3715a9c6075cabcee557daccbcca8ba25a9fedf05c7bf564532f2d \ - --hash=sha256:643e57b403d3e240045a3681f9e6a04d35a33eddc501b4cbbbdbc9c70122e7bc \ - --hash=sha256:68acd51fa94e63312b8ddf84bfc9c3d3442fe1f9988bbe1b6c703043af8867fe \ - --hash=sha256:71409d4579f716217f23be2f5e7afca5ca926aaeb398aa11b72d793bff637a1f \ - --hash=sha256:7cafdafb44c4e646118410368307693e49d19167e5f119cbe3a88697d2d1a636 \ - --hash=sha256:9ca57a841ffcf712e47875d026aa49d6e67f9560624d54b51628603700d5d287 \ - --hash=sha256:9d17b37b9715b30605b5bab1460569742d0c309e5c20079263b440f5d7746e7e \ - --hash=sha256:c1035eea471f759fa853dd6e76aaa1e389f93b3e1403093fa0fd3ab4db490678 \ - --hash=sha256:c3b6d7620e6e90c6d97eaf3a63bf7fbd2ba253aab89120a4a9c660bf2d675391 \ - --hash=sha256:d1e0ba1ce1b8cc79117196642d95f4365e118eaf5fb85f57cdbcc5a25640b2a4 \ - --hash=sha256:d7db41e3b56817d9175264e5fe00192fbcb8e1265307a59f53dede86161b150e \ - --hash=sha256:e4d3f8e57027dcda84a1aa181501c15c45eab9566eb6fcc274cbd1e7561224f8 +multidict==6.4.3 \ + --hash=sha256:11990b5c757d956cd1db7cb140be50a63216af32cd6506329c2c59d732d802db \ + --hash=sha256:1535cec6443bfd80d028052e9d17ba6ff8a5a3534c51d285ba56c18af97e9713 \ + --hash=sha256:1f1c2f58f08b36f8475f3ec6f5aeb95270921d418bf18f90dffd6be5c7b0e676 \ + --hash=sha256:26ae9ad364fc61b936fb7bf4c9d8bd53f3a5b4417142cd0be5c509d6f767e2f1 \ + --hash=sha256:30a3ebdc068c27e9d6081fca0e2c33fdf132ecea703a72ea216b81a66860adde \ + --hash=sha256:3ada0b058c9f213c5f95ba301f922d402ac234f1111a7d8fd70f1b99f3c281ec \ + --hash=sha256:3b73e7227681f85d19dec46e5b881827cd354aabe46049e1a61d2f9aaa4e285a \ + --hash=sha256:3cd06d88cb7398252284ee75c8db8e680aa0d321451132d0dba12bc995f0adcc \ + --hash=sha256:4543d8dc6470a82fde92b035a92529317191ce993533c3c0c68f56811164ed07 \ + --hash=sha256:59fe01ee8e2a1e8ceb3f6dbb216b09c8d9f4ef1c22c4fc825d045a147fa2ebc9 \ + --hash=sha256:659318c6c8a85f6ecfc06b4e57529e5a78dfdd697260cc81f683492ad7e9435a \ + --hash=sha256:66eb80dd0ab36dbd559635e62fba3083a48a252633164857a1d1684f14326427 \ + --hash=sha256:8bd2b875f4ca2bb527fe23e318ddd509b7df163407b0fb717df229041c6df5d3 \ + --hash=sha256:8eac0c49df91b88bf91f818e0a24c1c46f3622978e2c27035bfdca98e0e18124 \ + --hash=sha256:b038f10e23f277153f86f95c777ba1958bcd5993194fda26a1d06fae98b2f00c \ + --hash=sha256:c23831bdee0a2a3cf21be057b5e5326292f60472fb6c6f86392bbf0de70ba731 \ + --hash=sha256:c2e98c840c9c8e65c0e04b40c6c5066c8632678cd50c8721fdbcd2e09f21a507 \ + --hash=sha256:c605a2b2dc14282b580454b9b5d14ebe0668381a3a26d0ac39daa0ca115eb2ae \ + --hash=sha256:e1eb72c741fd24d5a28242ce72bb61bc91f8451877131fa3fe930edb195f7054 mypy-extensions==1.0.0 \ --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 @@ -514,25 +516,25 @@ ruamel-yaml-clib==0.2.12 ; platform_python_implementation == 'CPython' \ --hash=sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d \ --hash=sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31 \ --hash=sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5 -ruff==0.11.4 \ - --hash=sha256:0e9365a7dff9b93af933dab8aebce53b72d8f815e131796268709890b4a83270 \ - --hash=sha256:126b1bf13154aa18ae2d6c3c5efe144ec14b97c60844cfa6eb960c2a05188222 \ - --hash=sha256:193e6fac6eb60cc97b9f728e953c21cc38a20077ed64f912e9d62b97487f3f2d \ - --hash=sha256:3f171605f65f4fc49c87f41b456e882cd0c89e4ac9d58e149a2b07930e1d466f \ - --hash=sha256:51a6494209cacca79e121e9b244dc30d3414dac8cc5afb93f852173a2ecfc906 \ - --hash=sha256:5a9fa1c69c7815e39fcfb3646bbfd7f528fa8e2d4bebdcf4c2bd0fa037a255fb \ - --hash=sha256:5d94bb1cc2fc94a769b0eb975344f1b1f3d294da1da9ddbb5a77665feb3a3019 \ - --hash=sha256:7a37ca937e307ea18156e775a6ac6e02f34b99e8c23fe63c1996185a4efe0751 \ - --hash=sha256:7af4e5f69b7c138be8dcffa5b4a061bf6ba6a3301f632a6bce25d45daff9bc99 \ - --hash=sha256:8c1747d903447d45ca3d40c794d1a56458c51e5cc1bc77b7b64bd2cf0b1626cc \ - --hash=sha256:995071203d0fe2183fc7a268766fd7603afb9996785f086b0d76edee8755c896 \ - --hash=sha256:d435db6b9b93d02934cf61ef332e66af82da6d8c69aefdea5994c89997c7a0fc \ - --hash=sha256:d9f4a761ecbde448a2d3e12fb398647c7f0bf526dbc354a643ec505965824ed2 \ - --hash=sha256:e8806daaf9dfa881a0ed603f8a0e364e4f11b6ed461b56cae2b1c0cab0645304 \ - --hash=sha256:ebf99ea9af918878e6ce42098981fc8c1db3850fef2f1ada69fb1dcdb0f8e79e \ - --hash=sha256:edad2eac42279df12e176564a23fc6f4aaeeb09abba840627780b1bb11a9d223 \ - --hash=sha256:f103a848be9ff379fc19b5d656c1f911d0a0b4e3e0424f9532ececf319a4296e \ - --hash=sha256:f45bd2fb1a56a5a85fae3b95add03fb185a0b30cf47f5edc92aa0355ca1d7407 +ruff==0.11.5 \ + --hash=sha256:0947c0a1afa75dcb5db4b34b070ec2bccee869d40e6cc8ab25aca11a7d527794 \ + --hash=sha256:2561294e108eb648e50f210671cc56aee590fb6167b594144401532138c66c7b \ + --hash=sha256:3068befab73620b8a0cc2431bd46b3cd619bc17d6f7695a3e1bb166b652c382a \ + --hash=sha256:4bfd80a6ec559a5eeb96c33f832418bf0fb96752de0539905cf7b0cc1d31d779 \ + --hash=sha256:56145ee1478582f61c08f21076dc59153310d606ad663acc00ea3ab5b2125f82 \ + --hash=sha256:67e241b4314f4eacf14a601d586026a962f4002a475aa702c69980a38087aa4e \ + --hash=sha256:6c6dc38af3cfe2863213ea25b6dc616d679205732dc0fb673356c2d69608f800 \ + --hash=sha256:80b4df4d335a80315ab9afc81ed1cff62be112bd165e162b5eed8ac55bfc8470 \ + --hash=sha256:81be52e7519f3d1a0beadcf8e974715b2dfc808ae8ec729ecfc79bddf8dbb783 \ + --hash=sha256:ac12884b9e005c12d0bd121f56ccf8033e1614f736f766c118ad60780882a077 \ + --hash=sha256:ad871ff74b5ec9caa66cb725b85d4ef89b53f8170f47c3406e32ef040400b038 \ + --hash=sha256:b2a7cedf47244f431fd11aa5a7e2806dda2e0c365873bda7834e8f7d785ae159 \ + --hash=sha256:cae2e2439cb88853e421901ec040a758960b576126dab520fa08e9de431d1bef \ + --hash=sha256:e268da7b40f56e3eca571508a7e567e794f9bfcc0f412c4b607931d3af9c4afe \ + --hash=sha256:e5f66f8f1e8c9fc594cbd66fbc5f246a8d91f916cb9667e80208663ec3728304 \ + --hash=sha256:e6cf918390cfe46d240732d4d72fa6e18e528ca1f60e318a10835cf2fa3dc19f \ + --hash=sha256:ef39f19cb8ec98cbc762344921e216f3857a06c47412030374fffd413fb8fd3a \ + --hash=sha256:f5da2e710a9641828e09aa98b92c9ebbc60518fdf3921241326ca3e8f8e55b8b scalecodec==1.2.11 \ --hash=sha256:99a2cdbfccdcaf22bd86b86da55a730a2855514ad2309faef4a4a93ac6cbeb8d \ --hash=sha256:d15c94965f617caa25096f83a45f5f73031d05e6ee08d6039969f0a64fc35de1 @@ -579,9 +581,9 @@ typeguard==4.4.2 \ types-requests==2.32.0.20250328 \ --hash=sha256:72ff80f84b15eb3aa7a8e2625fffb6a93f2ad5a0c20215fc1dcfa61117bcb2a2 \ --hash=sha256:c9e67228ea103bd811c96984fac36ed2ae8da87a36a633964a21f199d60baf32 -typing-extensions==4.13.1 \ - --hash=sha256:4b6cf02909eb5495cfbc3f6e8fd49217e6cc7944e145cdda8caa3734777f9e69 \ - --hash=sha256:98795af00fb9640edec5b8e31fc647597b4691f099ad75f469a2616be1a76dff +typing-extensions==4.13.2 \ + --hash=sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c \ + --hash=sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef typing-inspect==0.9.0 \ --hash=sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f \ --hash=sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78 @@ -591,9 +593,9 @@ tzdata==2025.2 ; sys_platform == 'win32' \ tzlocal==5.3.1 \ --hash=sha256:cceffc7edecefea1f595541dbd6e990cb1ea3d19bf01b2809f362a03dd7921fd \ --hash=sha256:eb1a66c3ef5847adf7a834f1be0800581b683b5608e74f86ecbcef8ab91bb85d -urllib3==2.3.0 \ - --hash=sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df \ - --hash=sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d +urllib3==2.4.0 \ + --hash=sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466 \ + --hash=sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813 uvicorn==0.34.0 \ --hash=sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4 \ --hash=sha256:404051050cd7e905de2c9a7e61790943440b3416f49cb409f965d9dcd0fa73e9 diff --git a/src/demo_blank/Makefile b/src/demo_blank/Makefile index bf5239ee4..19a0c30ca 100644 --- a/src/demo_blank/Makefile +++ b/src/demo_blank/Makefile @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 .PHONY: $(MAKECMDGOALS) MAKEFLAGS += --no-print-directory ## diff --git a/src/demo_blank/pyproject.toml b/src/demo_blank/pyproject.toml index 74ccb8c0c..567723d74 100644 --- a/src/demo_blank/pyproject.toml +++ b/src/demo_blank/pyproject.toml @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 [project] name = "demo_blank" version = "0.0.1" diff --git a/src/demo_evm_events/Makefile b/src/demo_evm_events/Makefile index 671c7fc25..48aad38f6 100644 --- a/src/demo_evm_events/Makefile +++ b/src/demo_evm_events/Makefile @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 .PHONY: $(MAKECMDGOALS) MAKEFLAGS += --no-print-directory ## diff --git a/src/demo_evm_events/pyproject.toml b/src/demo_evm_events/pyproject.toml index 70ab2d1a1..665c71429 100644 --- a/src/demo_evm_events/pyproject.toml +++ b/src/demo_evm_events/pyproject.toml @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 [project] name = "demo_evm_events" version = "0.0.1" diff --git a/src/demo_evm_events/types/eth_usdt/evm_events/transfer.py b/src/demo_evm_events/types/eth_usdt/evm_events/transfer.py index 0756054cc..9b2896912 100644 --- a/src/demo_evm_events/types/eth_usdt/evm_events/transfer.py +++ b/src/demo_evm_events/types/eth_usdt/evm_events/transfer.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_evm_transactions/Makefile b/src/demo_evm_transactions/Makefile index ce576fbe7..9d482870d 100644 --- a/src/demo_evm_transactions/Makefile +++ b/src/demo_evm_transactions/Makefile @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 .PHONY: $(MAKECMDGOALS) MAKEFLAGS += --no-print-directory ## diff --git a/src/demo_evm_transactions/pyproject.toml b/src/demo_evm_transactions/pyproject.toml index 4d61218d9..78058c956 100644 --- a/src/demo_evm_transactions/pyproject.toml +++ b/src/demo_evm_transactions/pyproject.toml @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 [project] name = "demo_evm_transactions" version = "0.0.1" diff --git a/src/demo_evm_transactions/types/eth_usdt/evm_transactions/transfer.py b/src/demo_evm_transactions/types/eth_usdt/evm_transactions/transfer.py index e3115d974..46b25d958 100644 --- a/src/demo_evm_transactions/types/eth_usdt/evm_transactions/transfer.py +++ b/src/demo_evm_transactions/types/eth_usdt/evm_transactions/transfer.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_evm_uniswap/Makefile b/src/demo_evm_uniswap/Makefile index 8d6193513..bb92cddb0 100644 --- a/src/demo_evm_uniswap/Makefile +++ b/src/demo_evm_uniswap/Makefile @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 .PHONY: $(MAKECMDGOALS) MAKEFLAGS += --no-print-directory ## diff --git a/src/demo_evm_uniswap/pyproject.toml b/src/demo_evm_uniswap/pyproject.toml index 602036edf..b769b666b 100644 --- a/src/demo_evm_uniswap/pyproject.toml +++ b/src/demo_evm_uniswap/pyproject.toml @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 [project] name = "demo_evm_uniswap" version = "0.0.1" diff --git a/src/demo_evm_uniswap/types/factory/evm_events/pool_created.py b/src/demo_evm_uniswap/types/factory/evm_events/pool_created.py index 2d7b37961..55b7360bb 100644 --- a/src/demo_evm_uniswap/types/factory/evm_events/pool_created.py +++ b/src/demo_evm_uniswap/types/factory/evm_events/pool_created.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_evm_uniswap/types/pool/evm_events/burn.py b/src/demo_evm_uniswap/types/pool/evm_events/burn.py index f14adc014..75bebee27 100644 --- a/src/demo_evm_uniswap/types/pool/evm_events/burn.py +++ b/src/demo_evm_uniswap/types/pool/evm_events/burn.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_evm_uniswap/types/pool/evm_events/collect.py b/src/demo_evm_uniswap/types/pool/evm_events/collect.py index e5da768c3..a3b4b8fa2 100644 --- a/src/demo_evm_uniswap/types/pool/evm_events/collect.py +++ b/src/demo_evm_uniswap/types/pool/evm_events/collect.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_evm_uniswap/types/pool/evm_events/flash.py b/src/demo_evm_uniswap/types/pool/evm_events/flash.py index 0c425f103..8b10fd34f 100644 --- a/src/demo_evm_uniswap/types/pool/evm_events/flash.py +++ b/src/demo_evm_uniswap/types/pool/evm_events/flash.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_evm_uniswap/types/pool/evm_events/initialize.py b/src/demo_evm_uniswap/types/pool/evm_events/initialize.py index a94b7a88b..8ef77d592 100644 --- a/src/demo_evm_uniswap/types/pool/evm_events/initialize.py +++ b/src/demo_evm_uniswap/types/pool/evm_events/initialize.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_evm_uniswap/types/pool/evm_events/mint.py b/src/demo_evm_uniswap/types/pool/evm_events/mint.py index e7926e3d2..488d25b92 100644 --- a/src/demo_evm_uniswap/types/pool/evm_events/mint.py +++ b/src/demo_evm_uniswap/types/pool/evm_events/mint.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_evm_uniswap/types/pool/evm_events/swap.py b/src/demo_evm_uniswap/types/pool/evm_events/swap.py index 648348883..0ca065819 100644 --- a/src/demo_evm_uniswap/types/pool/evm_events/swap.py +++ b/src/demo_evm_uniswap/types/pool/evm_events/swap.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_evm_uniswap/types/position_manager/evm_events/collect.py b/src/demo_evm_uniswap/types/position_manager/evm_events/collect.py index 1e5d4e37d..a65c33fe6 100644 --- a/src/demo_evm_uniswap/types/position_manager/evm_events/collect.py +++ b/src/demo_evm_uniswap/types/position_manager/evm_events/collect.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_evm_uniswap/types/position_manager/evm_events/decrease_liquidity.py b/src/demo_evm_uniswap/types/position_manager/evm_events/decrease_liquidity.py index 74c843b8e..c402eb733 100644 --- a/src/demo_evm_uniswap/types/position_manager/evm_events/decrease_liquidity.py +++ b/src/demo_evm_uniswap/types/position_manager/evm_events/decrease_liquidity.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_evm_uniswap/types/position_manager/evm_events/increase_liquidity.py b/src/demo_evm_uniswap/types/position_manager/evm_events/increase_liquidity.py index 1308f3a1c..90dde38db 100644 --- a/src/demo_evm_uniswap/types/position_manager/evm_events/increase_liquidity.py +++ b/src/demo_evm_uniswap/types/position_manager/evm_events/increase_liquidity.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_evm_uniswap/types/position_manager/evm_events/transfer.py b/src/demo_evm_uniswap/types/position_manager/evm_events/transfer.py index cf2f7638b..68b4a1cb0 100644 --- a/src/demo_evm_uniswap/types/position_manager/evm_events/transfer.py +++ b/src/demo_evm_uniswap/types/position_manager/evm_events/transfer.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_starknet_events/Makefile b/src/demo_starknet_events/Makefile index 2b51e735e..3e9599e16 100644 --- a/src/demo_starknet_events/Makefile +++ b/src/demo_starknet_events/Makefile @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 .PHONY: $(MAKECMDGOALS) MAKEFLAGS += --no-print-directory ## diff --git a/src/demo_starknet_events/pyproject.toml b/src/demo_starknet_events/pyproject.toml index a64ecd737..d2cf63eeb 100644 --- a/src/demo_starknet_events/pyproject.toml +++ b/src/demo_starknet_events/pyproject.toml @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 [project] name = "demo_starknet_events" version = "0.0.1" diff --git a/src/demo_starknet_events/types/stark_usdt/starknet_events/transfer.py b/src/demo_starknet_events/types/stark_usdt/starknet_events/transfer.py index f91e925d9..9973dd70a 100644 --- a/src/demo_starknet_events/types/stark_usdt/starknet_events/transfer.py +++ b/src/demo_starknet_events/types/stark_usdt/starknet_events/transfer.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_substrate_events/Makefile b/src/demo_substrate_events/Makefile index 175e4d608..63cff58f9 100644 --- a/src/demo_substrate_events/Makefile +++ b/src/demo_substrate_events/Makefile @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 .PHONY: $(MAKECMDGOALS) MAKEFLAGS += --no-print-directory ## diff --git a/src/demo_substrate_events/pyproject.toml b/src/demo_substrate_events/pyproject.toml index e37a078dc..cec9e649c 100644 --- a/src/demo_substrate_events/pyproject.toml +++ b/src/demo_substrate_events/pyproject.toml @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 [project] name = "demo_substrate_events" version = "0.0.1" diff --git a/src/demo_substrate_events/types/assethub/substrate_events/assets_transferred/v601.py b/src/demo_substrate_events/types/assethub/substrate_events/assets_transferred/v601.py index de54781e5..564f41b8c 100644 --- a/src/demo_substrate_events/types/assethub/substrate_events/assets_transferred/v601.py +++ b/src/demo_substrate_events/types/assethub/substrate_events/assets_transferred/v601.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_auction/Makefile b/src/demo_tezos_auction/Makefile index 365a80462..d114083cf 100644 --- a/src/demo_tezos_auction/Makefile +++ b/src/demo_tezos_auction/Makefile @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 .PHONY: $(MAKECMDGOALS) MAKEFLAGS += --no-print-directory ## diff --git a/src/demo_tezos_auction/pyproject.toml b/src/demo_tezos_auction/pyproject.toml index d280c4359..9ee75d21f 100644 --- a/src/demo_tezos_auction/pyproject.toml +++ b/src/demo_tezos_auction/pyproject.toml @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 [project] name = "demo_tezos_auction" version = "0.0.1" diff --git a/src/demo_tezos_auction/types/tzcolors_auction/tezos_parameters/bid.py b/src/demo_tezos_auction/types/tzcolors_auction/tezos_parameters/bid.py index 147bb2491..5b4265f17 100644 --- a/src/demo_tezos_auction/types/tzcolors_auction/tezos_parameters/bid.py +++ b/src/demo_tezos_auction/types/tzcolors_auction/tezos_parameters/bid.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_auction/types/tzcolors_auction/tezos_parameters/create_auction.py b/src/demo_tezos_auction/types/tzcolors_auction/tezos_parameters/create_auction.py index ed0eb6ca2..fc54abe91 100644 --- a/src/demo_tezos_auction/types/tzcolors_auction/tezos_parameters/create_auction.py +++ b/src/demo_tezos_auction/types/tzcolors_auction/tezos_parameters/create_auction.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_auction/types/tzcolors_auction/tezos_parameters/withdraw.py b/src/demo_tezos_auction/types/tzcolors_auction/tezos_parameters/withdraw.py index d111fcb75..4e0b129c1 100644 --- a/src/demo_tezos_auction/types/tzcolors_auction/tezos_parameters/withdraw.py +++ b/src/demo_tezos_auction/types/tzcolors_auction/tezos_parameters/withdraw.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_auction/types/tzcolors_auction/tezos_storage.py b/src/demo_tezos_auction/types/tzcolors_auction/tezos_storage.py index abc42e6cb..9c2e9b2b7 100644 --- a/src/demo_tezos_auction/types/tzcolors_auction/tezos_storage.py +++ b/src/demo_tezos_auction/types/tzcolors_auction/tezos_storage.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_dao/Makefile b/src/demo_tezos_dao/Makefile index 64e552241..a8bb0a1be 100644 --- a/src/demo_tezos_dao/Makefile +++ b/src/demo_tezos_dao/Makefile @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 .PHONY: $(MAKECMDGOALS) MAKEFLAGS += --no-print-directory ## diff --git a/src/demo_tezos_dao/pyproject.toml b/src/demo_tezos_dao/pyproject.toml index 20faf8b5c..aa5a4916f 100644 --- a/src/demo_tezos_dao/pyproject.toml +++ b/src/demo_tezos_dao/pyproject.toml @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 [project] name = "demo_tezos_dao" version = "0.0.1" diff --git a/src/demo_tezos_dao/types/registry/tezos_parameters/propose.py b/src/demo_tezos_dao/types/registry/tezos_parameters/propose.py index cbcd2f9c4..833265ab1 100644 --- a/src/demo_tezos_dao/types/registry/tezos_parameters/propose.py +++ b/src/demo_tezos_dao/types/registry/tezos_parameters/propose.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_dao/types/registry/tezos_storage.py b/src/demo_tezos_dao/types/registry/tezos_storage.py index dec78e326..5dceb0442 100644 --- a/src/demo_tezos_dao/types/registry/tezos_storage.py +++ b/src/demo_tezos_dao/types/registry/tezos_storage.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_dex/Makefile b/src/demo_tezos_dex/Makefile index 5172e3ee4..17eb05581 100644 --- a/src/demo_tezos_dex/Makefile +++ b/src/demo_tezos_dex/Makefile @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 .PHONY: $(MAKECMDGOALS) MAKEFLAGS += --no-print-directory ## diff --git a/src/demo_tezos_dex/pyproject.toml b/src/demo_tezos_dex/pyproject.toml index 43d05b3bf..ea11f9956 100644 --- a/src/demo_tezos_dex/pyproject.toml +++ b/src/demo_tezos_dex/pyproject.toml @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 [project] name = "demo_tezos_dex" version = "0.0.1" diff --git a/src/demo_tezos_dex/types/fa12_token/tezos_parameters/transfer.py b/src/demo_tezos_dex/types/fa12_token/tezos_parameters/transfer.py index 335793b2b..7f226caad 100644 --- a/src/demo_tezos_dex/types/fa12_token/tezos_parameters/transfer.py +++ b/src/demo_tezos_dex/types/fa12_token/tezos_parameters/transfer.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_dex/types/fa12_token/tezos_storage.py b/src/demo_tezos_dex/types/fa12_token/tezos_storage.py index 92d04cf53..a6ba02577 100644 --- a/src/demo_tezos_dex/types/fa12_token/tezos_storage.py +++ b/src/demo_tezos_dex/types/fa12_token/tezos_storage.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_dex/types/fa2_token/tezos_parameters/transfer.py b/src/demo_tezos_dex/types/fa2_token/tezos_parameters/transfer.py index bdd81cbee..4dd1b7e34 100644 --- a/src/demo_tezos_dex/types/fa2_token/tezos_parameters/transfer.py +++ b/src/demo_tezos_dex/types/fa2_token/tezos_parameters/transfer.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_dex/types/fa2_token/tezos_storage.py b/src/demo_tezos_dex/types/fa2_token/tezos_storage.py index 259be34db..1a479d0e2 100644 --- a/src/demo_tezos_dex/types/fa2_token/tezos_storage.py +++ b/src/demo_tezos_dex/types/fa2_token/tezos_storage.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/divest_liquidity.py b/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/divest_liquidity.py index 820a98c4f..ed142b605 100644 --- a/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/divest_liquidity.py +++ b/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/divest_liquidity.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/invest_liquidity.py b/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/invest_liquidity.py index 5c9dd25ab..7dabce536 100644 --- a/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/invest_liquidity.py +++ b/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/invest_liquidity.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/tez_to_token_payment.py b/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/tez_to_token_payment.py index 61789d12a..87b735cd0 100644 --- a/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/tez_to_token_payment.py +++ b/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/tez_to_token_payment.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/token_to_tez_payment.py b/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/token_to_tez_payment.py index aad79fec5..8ccdcf4cb 100644 --- a/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/token_to_tez_payment.py +++ b/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/token_to_tez_payment.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/transfer.py b/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/transfer.py index 335793b2b..7f226caad 100644 --- a/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/transfer.py +++ b/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/transfer.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/withdraw_profit.py b/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/withdraw_profit.py index d3a9efc13..a2690fe4c 100644 --- a/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/withdraw_profit.py +++ b/src/demo_tezos_dex/types/quipu_fa12/tezos_parameters/withdraw_profit.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_dex/types/quipu_fa12/tezos_storage.py b/src/demo_tezos_dex/types/quipu_fa12/tezos_storage.py index 548104eee..2a1773838 100644 --- a/src/demo_tezos_dex/types/quipu_fa12/tezos_storage.py +++ b/src/demo_tezos_dex/types/quipu_fa12/tezos_storage.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/divest_liquidity.py b/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/divest_liquidity.py index 820a98c4f..ed142b605 100644 --- a/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/divest_liquidity.py +++ b/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/divest_liquidity.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/invest_liquidity.py b/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/invest_liquidity.py index 5c9dd25ab..7dabce536 100644 --- a/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/invest_liquidity.py +++ b/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/invest_liquidity.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/tez_to_token_payment.py b/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/tez_to_token_payment.py index 61789d12a..87b735cd0 100644 --- a/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/tez_to_token_payment.py +++ b/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/tez_to_token_payment.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/token_to_tez_payment.py b/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/token_to_tez_payment.py index aad79fec5..8ccdcf4cb 100644 --- a/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/token_to_tez_payment.py +++ b/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/token_to_tez_payment.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/transfer.py b/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/transfer.py index bdd81cbee..4dd1b7e34 100644 --- a/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/transfer.py +++ b/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/transfer.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/withdraw_profit.py b/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/withdraw_profit.py index d3a9efc13..a2690fe4c 100644 --- a/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/withdraw_profit.py +++ b/src/demo_tezos_dex/types/quipu_fa2/tezos_parameters/withdraw_profit.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_dex/types/quipu_fa2/tezos_storage.py b/src/demo_tezos_dex/types/quipu_fa2/tezos_storage.py index 904d38c0a..56944ad4d 100644 --- a/src/demo_tezos_dex/types/quipu_fa2/tezos_storage.py +++ b/src/demo_tezos_dex/types/quipu_fa2/tezos_storage.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_domains/Makefile b/src/demo_tezos_domains/Makefile index afbb69be9..5d44679c6 100644 --- a/src/demo_tezos_domains/Makefile +++ b/src/demo_tezos_domains/Makefile @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 .PHONY: $(MAKECMDGOALS) MAKEFLAGS += --no-print-directory ## diff --git a/src/demo_tezos_domains/pyproject.toml b/src/demo_tezos_domains/pyproject.toml index ca6c1bea0..61f731265 100644 --- a/src/demo_tezos_domains/pyproject.toml +++ b/src/demo_tezos_domains/pyproject.toml @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 [project] name = "demo_tezos_domains" version = "0.0.1" diff --git a/src/demo_tezos_domains/types/name_registry/tezos_big_maps/store_expiry_map_key.py b/src/demo_tezos_domains/types/name_registry/tezos_big_maps/store_expiry_map_key.py index 3adcad6ce..d56b99319 100644 --- a/src/demo_tezos_domains/types/name_registry/tezos_big_maps/store_expiry_map_key.py +++ b/src/demo_tezos_domains/types/name_registry/tezos_big_maps/store_expiry_map_key.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_domains/types/name_registry/tezos_big_maps/store_expiry_map_value.py b/src/demo_tezos_domains/types/name_registry/tezos_big_maps/store_expiry_map_value.py index 314d7c75a..ff1ed77cc 100644 --- a/src/demo_tezos_domains/types/name_registry/tezos_big_maps/store_expiry_map_value.py +++ b/src/demo_tezos_domains/types/name_registry/tezos_big_maps/store_expiry_map_value.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_domains/types/name_registry/tezos_big_maps/store_records_key.py b/src/demo_tezos_domains/types/name_registry/tezos_big_maps/store_records_key.py index c26ca07f0..631bbee02 100644 --- a/src/demo_tezos_domains/types/name_registry/tezos_big_maps/store_records_key.py +++ b/src/demo_tezos_domains/types/name_registry/tezos_big_maps/store_records_key.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_domains/types/name_registry/tezos_big_maps/store_records_value.py b/src/demo_tezos_domains/types/name_registry/tezos_big_maps/store_records_value.py index 32b50b9d2..a0bebf31e 100644 --- a/src/demo_tezos_domains/types/name_registry/tezos_big_maps/store_records_value.py +++ b/src/demo_tezos_domains/types/name_registry/tezos_big_maps/store_records_value.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_events/Makefile b/src/demo_tezos_events/Makefile index 6c3e7b3ab..28d261fc2 100644 --- a/src/demo_tezos_events/Makefile +++ b/src/demo_tezos_events/Makefile @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 .PHONY: $(MAKECMDGOALS) MAKEFLAGS += --no-print-directory ## diff --git a/src/demo_tezos_events/pyproject.toml b/src/demo_tezos_events/pyproject.toml index 8cc581b64..a9843f1a4 100644 --- a/src/demo_tezos_events/pyproject.toml +++ b/src/demo_tezos_events/pyproject.toml @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 [project] name = "demo_tezos_events" version = "0.0.1" diff --git a/src/demo_tezos_events/types/events_contract/tezos_events/move.py b/src/demo_tezos_events/types/events_contract/tezos_events/move.py index 547955479..d3f798df5 100644 --- a/src/demo_tezos_events/types/events_contract/tezos_events/move.py +++ b/src/demo_tezos_events/types/events_contract/tezos_events/move.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_events/types/events_contract/tezos_events/roll.py b/src/demo_tezos_events/types/events_contract/tezos_events/roll.py index b7942db71..5a9a2d336 100644 --- a/src/demo_tezos_events/types/events_contract/tezos_events/roll.py +++ b/src/demo_tezos_events/types/events_contract/tezos_events/roll.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_factories/Makefile b/src/demo_tezos_factories/Makefile index a8e058f04..a32369adf 100644 --- a/src/demo_tezos_factories/Makefile +++ b/src/demo_tezos_factories/Makefile @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 .PHONY: $(MAKECMDGOALS) MAKEFLAGS += --no-print-directory ## diff --git a/src/demo_tezos_factories/pyproject.toml b/src/demo_tezos_factories/pyproject.toml index 0df031bcb..71e5811f4 100644 --- a/src/demo_tezos_factories/pyproject.toml +++ b/src/demo_tezos_factories/pyproject.toml @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 [project] name = "demo_tezos_factories" version = "0.0.1" diff --git a/src/demo_tezos_factories/types/factory/tezos_storage.py b/src/demo_tezos_factories/types/factory/tezos_storage.py index 6d6cfab97..aaad7f7cd 100644 --- a/src/demo_tezos_factories/types/factory/tezos_storage.py +++ b/src/demo_tezos_factories/types/factory/tezos_storage.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_factories/types/token/tezos_parameters/transfer.py b/src/demo_tezos_factories/types/token/tezos_parameters/transfer.py index bdd81cbee..4dd1b7e34 100644 --- a/src/demo_tezos_factories/types/token/tezos_parameters/transfer.py +++ b/src/demo_tezos_factories/types/token/tezos_parameters/transfer.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_factories/types/token/tezos_storage.py b/src/demo_tezos_factories/types/token/tezos_storage.py index c21a236f8..3797a6907 100644 --- a/src/demo_tezos_factories/types/token/tezos_storage.py +++ b/src/demo_tezos_factories/types/token/tezos_storage.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_head/Makefile b/src/demo_tezos_head/Makefile index 5e9f45214..8a50f4a67 100644 --- a/src/demo_tezos_head/Makefile +++ b/src/demo_tezos_head/Makefile @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 .PHONY: $(MAKECMDGOALS) MAKEFLAGS += --no-print-directory ## diff --git a/src/demo_tezos_head/pyproject.toml b/src/demo_tezos_head/pyproject.toml index 9cd177128..37769188c 100644 --- a/src/demo_tezos_head/pyproject.toml +++ b/src/demo_tezos_head/pyproject.toml @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 [project] name = "demo_tezos_head" version = "0.0.1" diff --git a/src/demo_tezos_nft_marketplace/Makefile b/src/demo_tezos_nft_marketplace/Makefile index 23812558d..4fc86412d 100644 --- a/src/demo_tezos_nft_marketplace/Makefile +++ b/src/demo_tezos_nft_marketplace/Makefile @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 .PHONY: $(MAKECMDGOALS) MAKEFLAGS += --no-print-directory ## diff --git a/src/demo_tezos_nft_marketplace/pyproject.toml b/src/demo_tezos_nft_marketplace/pyproject.toml index dcb6b93bc..cfab26537 100644 --- a/src/demo_tezos_nft_marketplace/pyproject.toml +++ b/src/demo_tezos_nft_marketplace/pyproject.toml @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 [project] name = "demo_tezos_nft_marketplace" version = "0.0.1" diff --git a/src/demo_tezos_nft_marketplace/types/hen_minter/tezos_parameters/cancel_swap.py b/src/demo_tezos_nft_marketplace/types/hen_minter/tezos_parameters/cancel_swap.py index 3c2326b5a..9d7893041 100644 --- a/src/demo_tezos_nft_marketplace/types/hen_minter/tezos_parameters/cancel_swap.py +++ b/src/demo_tezos_nft_marketplace/types/hen_minter/tezos_parameters/cancel_swap.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_nft_marketplace/types/hen_minter/tezos_parameters/collect.py b/src/demo_tezos_nft_marketplace/types/hen_minter/tezos_parameters/collect.py index 7bfc8b1ea..6e6a706b0 100644 --- a/src/demo_tezos_nft_marketplace/types/hen_minter/tezos_parameters/collect.py +++ b/src/demo_tezos_nft_marketplace/types/hen_minter/tezos_parameters/collect.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_nft_marketplace/types/hen_minter/tezos_parameters/mint_objkt.py b/src/demo_tezos_nft_marketplace/types/hen_minter/tezos_parameters/mint_objkt.py index 9f0e6f87f..9b5abbd35 100644 --- a/src/demo_tezos_nft_marketplace/types/hen_minter/tezos_parameters/mint_objkt.py +++ b/src/demo_tezos_nft_marketplace/types/hen_minter/tezos_parameters/mint_objkt.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_nft_marketplace/types/hen_minter/tezos_parameters/swap.py b/src/demo_tezos_nft_marketplace/types/hen_minter/tezos_parameters/swap.py index 5566eade4..39b4c471e 100644 --- a/src/demo_tezos_nft_marketplace/types/hen_minter/tezos_parameters/swap.py +++ b/src/demo_tezos_nft_marketplace/types/hen_minter/tezos_parameters/swap.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_nft_marketplace/types/hen_minter/tezos_storage.py b/src/demo_tezos_nft_marketplace/types/hen_minter/tezos_storage.py index 11423523a..a2611d842 100644 --- a/src/demo_tezos_nft_marketplace/types/hen_minter/tezos_storage.py +++ b/src/demo_tezos_nft_marketplace/types/hen_minter/tezos_storage.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_nft_marketplace/types/hen_objkts/tezos_parameters/mint.py b/src/demo_tezos_nft_marketplace/types/hen_objkts/tezos_parameters/mint.py index 070dcb5e3..8c1c2b449 100644 --- a/src/demo_tezos_nft_marketplace/types/hen_objkts/tezos_parameters/mint.py +++ b/src/demo_tezos_nft_marketplace/types/hen_objkts/tezos_parameters/mint.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_nft_marketplace/types/hen_objkts/tezos_storage.py b/src/demo_tezos_nft_marketplace/types/hen_objkts/tezos_storage.py index 7c4504e71..850645268 100644 --- a/src/demo_tezos_nft_marketplace/types/hen_objkts/tezos_storage.py +++ b/src/demo_tezos_nft_marketplace/types/hen_objkts/tezos_storage.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_raw/Makefile b/src/demo_tezos_raw/Makefile index bc7b6a623..0a1a121b1 100644 --- a/src/demo_tezos_raw/Makefile +++ b/src/demo_tezos_raw/Makefile @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 .PHONY: $(MAKECMDGOALS) MAKEFLAGS += --no-print-directory ## diff --git a/src/demo_tezos_raw/pyproject.toml b/src/demo_tezos_raw/pyproject.toml index f7fd5196c..4f74c0081 100644 --- a/src/demo_tezos_raw/pyproject.toml +++ b/src/demo_tezos_raw/pyproject.toml @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 [project] name = "demo_tezos_raw" version = "0.0.1" diff --git a/src/demo_tezos_token/Makefile b/src/demo_tezos_token/Makefile index 587b3eddd..041c2e51a 100644 --- a/src/demo_tezos_token/Makefile +++ b/src/demo_tezos_token/Makefile @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 .PHONY: $(MAKECMDGOALS) MAKEFLAGS += --no-print-directory ## diff --git a/src/demo_tezos_token/pyproject.toml b/src/demo_tezos_token/pyproject.toml index 9d33f1300..d797cceae 100644 --- a/src/demo_tezos_token/pyproject.toml +++ b/src/demo_tezos_token/pyproject.toml @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 [project] name = "demo_tezos_token" version = "0.0.1" diff --git a/src/demo_tezos_token/types/tzbtc/tezos_parameters/mint.py b/src/demo_tezos_token/types/tzbtc/tezos_parameters/mint.py index a7c6895f2..9efb44476 100644 --- a/src/demo_tezos_token/types/tzbtc/tezos_parameters/mint.py +++ b/src/demo_tezos_token/types/tzbtc/tezos_parameters/mint.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_token/types/tzbtc/tezos_parameters/transfer.py b/src/demo_tezos_token/types/tzbtc/tezos_parameters/transfer.py index 335793b2b..7f226caad 100644 --- a/src/demo_tezos_token/types/tzbtc/tezos_parameters/transfer.py +++ b/src/demo_tezos_token/types/tzbtc/tezos_parameters/transfer.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_token/types/tzbtc/tezos_storage.py b/src/demo_tezos_token/types/tzbtc/tezos_storage.py index 5b04090ac..00c2bdd38 100644 --- a/src/demo_tezos_token/types/tzbtc/tezos_storage.py +++ b/src/demo_tezos_token/types/tzbtc/tezos_storage.py @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 from __future__ import annotations diff --git a/src/demo_tezos_token_balances/Makefile b/src/demo_tezos_token_balances/Makefile index 5e9adc07a..431fa477e 100644 --- a/src/demo_tezos_token_balances/Makefile +++ b/src/demo_tezos_token_balances/Makefile @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 .PHONY: $(MAKECMDGOALS) MAKEFLAGS += --no-print-directory ## diff --git a/src/demo_tezos_token_balances/pyproject.toml b/src/demo_tezos_token_balances/pyproject.toml index 3bae6847a..c1d466793 100644 --- a/src/demo_tezos_token_balances/pyproject.toml +++ b/src/demo_tezos_token_balances/pyproject.toml @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 [project] name = "demo_tezos_token_balances" version = "0.0.1" diff --git a/src/demo_tezos_token_transfers/Makefile b/src/demo_tezos_token_transfers/Makefile index 209b5aef1..723231514 100644 --- a/src/demo_tezos_token_transfers/Makefile +++ b/src/demo_tezos_token_transfers/Makefile @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 .PHONY: $(MAKECMDGOALS) MAKEFLAGS += --no-print-directory ## diff --git a/src/demo_tezos_token_transfers/pyproject.toml b/src/demo_tezos_token_transfers/pyproject.toml index 6d31a53e4..f671cde4e 100644 --- a/src/demo_tezos_token_transfers/pyproject.toml +++ b/src/demo_tezos_token_transfers/pyproject.toml @@ -1,4 +1,4 @@ -# generated by DipDup 8.3.1 +# generated by DipDup 8.3.2 [project] name = "demo_tezos_token_transfers" version = "0.0.1" diff --git a/src/dipdup/api.py b/src/dipdup/api.py index 214a0c5f1..1b13467cb 100644 --- a/src/dipdup/api.py +++ b/src/dipdup/api.py @@ -1,6 +1,5 @@ import functools import logging -import traceback from collections.abc import Awaitable from collections.abc import Callable @@ -12,6 +11,7 @@ import dipdup.performance from dipdup.context import DipDupContext +from dipdup.exceptions import Error _logger = logging.getLogger(__name__) @@ -24,21 +24,24 @@ def _method_wrapper( async def resolved_method(request: Request) -> Response: try: return await method(ctx, request) + except Error as e: + return Response(str(e), status_code=400) except Exception as e: - error_msg = f'ERROR: {e}\n' - error_msg += ''.join(traceback.format_exception(type(e), e, e.__traceback__)) + _logger.exception('Unhandled exception in API method') return Response(str(e), status_code=500) return resolved_method async def _add_index(ctx: 'DipDupContext', request: Request) -> Response: - await ctx.add_index(**request.query_params) + json = await request.json() + await ctx.add_index(**json) return Response() async def _add_contract(ctx: 'DipDupContext', request: Request) -> Response: - await ctx.add_contract(**request.query_params) + json = await request.json() + await ctx.add_contract(**json) return Response() @@ -65,5 +68,7 @@ async def create_api(ctx: DipDupContext) -> Starlette: Route('/add_contract', _method_wrapper(ctx, _add_contract), methods=['POST']), Route('/config', _method_wrapper(ctx, _config), methods=['GET']), ] - - return Starlette(routes=routes) + return Starlette( + debug=True, + routes=routes, + ) diff --git a/src/dipdup/cli.py b/src/dipdup/cli.py index a0b912a82..56b81fe6b 100644 --- a/src/dipdup/cli.py +++ b/src/dipdup/cli.py @@ -34,7 +34,7 @@ 'config', # this one too } -# NOTE: Click commands from `aerich` we use as is for database migration +# NOTE: Click commands from `aerich` we use as is for database migration AERICH_CMDS = { 'history', 'heads', @@ -634,17 +634,21 @@ async def handle_sse(request: Any) -> None: logging.getLogger('uvicorn').setLevel(logging.INFO) logging.getLogger('mcp').setLevel(logging.INFO) - async with AsyncExitStack() as stack: - # NOTE: Create, but doesn't initialize (no WS loop) - await dipdup._create_datasources() - await dipdup._set_up_database(stack) + async def wrapper() -> None: + async with AsyncExitStack() as stack: + # NOTE: Create, but don't initialize (no WS loop) + await dipdup._create_datasources() + await dipdup._set_up_database(stack) + + # NOTE: Not available in `ctx.datasources`, but directly as `ctx.api` + await stack.enter_async_context(api_datasource) - # NOTE: Not available in `ctx.datasources`, but directly as `ctx.api` - await stack.enter_async_context(api_datasource) + await server.serve() - # NOTE: Run MCP in a separate thread to avoid blocking the DB connection - portal = stack.enter_context(from_thread.start_blocking_portal()) - portal.call(server.serve) + # NOTE: Run MCP in a separate thread to avoid blocking the DB connection + # FIXME: SIGINT ignored + with from_thread.start_blocking_portal() as portal: + portal.call(wrapper) @hasura.command(name='configure') diff --git a/src/dipdup/context.py b/src/dipdup/context.py index 64ad6e55c..8fe19ec3c 100644 --- a/src/dipdup/context.py +++ b/src/dipdup/context.py @@ -974,14 +974,29 @@ async def call_api( path: str, params: dict[str, Any] | None = None, ) -> str: - _logger.info('Calling API: %s %s', method, path) + from mcp.shared.exceptions import McpError + from mcp.types import ErrorData + _logger.info('Calling API: %s %s', method, path) res = await self.api.request( method=method, url=path.lstrip('/'), json={k: v for k, v in (params or {}).items() if v is not None}, raw=True, ) - if res.status != 200: - return f'ERROR: {res.status} {res.reason}' - return await res.text() # type: ignore[no-any-return] + if res.status == 200: + return await res.text() # type: ignore[no-any-return] + + raise McpError( + ErrorData( + code=res.status, + message=await res.text(), + data=str( + { + 'method': method, + 'path': path, + 'params': params, + } + ), + ) + ) diff --git a/src/dipdup/dipdup.py b/src/dipdup/dipdup.py index 1b850a751..34182bbf0 100644 --- a/src/dipdup/dipdup.py +++ b/src/dipdup/dipdup.py @@ -197,7 +197,7 @@ def is_oneshot(self) -> bool: from dipdup.config.tezos_head import TezosHeadIndexConfig # NOTE: Empty config means indexes will be spawned later via API. - if not self._indexes: + if not self._indexes or self._ctx.config.api: return False if not self._ctx._pending_indexes.empty(): @@ -861,7 +861,6 @@ async def _set_up_api(self, stack: AsyncExitStack) -> None: ) import uvicorn - from anyio import from_thread from dipdup.api import create_api @@ -878,9 +877,13 @@ async def _set_up_api(self, stack: AsyncExitStack) -> None: @asynccontextmanager async def _api_wrapper() -> AsyncIterator[None]: - with from_thread.start_blocking_portal() as portal: - portal.start_task_soon(server.serve) + with suppress(KeyboardInterrupt, CancelledError): + api_task = create_task( + server.serve(), + name='api:server', + ) yield + api_task.cancel() await stack.enter_async_context(_api_wrapper()) diff --git a/src/dipdup/mcp.py b/src/dipdup/mcp.py index d7017988e..52c3df391 100644 --- a/src/dipdup/mcp.py +++ b/src/dipdup/mcp.py @@ -20,7 +20,6 @@ _logger = logging.getLogger(__name__) -_ctx: McpContext | None = None import mcp.server import mcp.types as types @@ -29,6 +28,24 @@ from collections.abc import Iterable +# NOTE: Global context management +_ctx: McpContext | None = None + + +def get_ctx() -> McpContext: + global _ctx + if _ctx is None: + raise FrameworkException('DipDup MCP context is not initialized') + return _ctx + + +def set_ctx(ctx: McpContext) -> None: + global _ctx + if _ctx is not None: + raise FrameworkException('DipDup MCP context is already initialized') + _ctx = ctx + + # NOTE: Resource and tool callbacks @@ -89,7 +106,7 @@ async def _tool_api_add_contract( code_hash: str | int | None = None, ) -> str: ctx = get_ctx() - await ctx.call_api( + return await ctx.call_api( method='post', path='/add_contract', params={ @@ -100,7 +117,6 @@ async def _tool_api_add_contract( 'code_hash': code_hash, }, ) - return await _tool_api_config() async def _tool_api_add_index( @@ -111,7 +127,7 @@ async def _tool_api_add_index( last_level: int | None = None, ) -> str: ctx = get_ctx() - await ctx.call_api( + return await ctx.call_api( method='post', path='/add_index', params={ @@ -122,7 +138,6 @@ async def _tool_api_add_index( 'last_level': last_level, }, ) - return await _tool_api_config() # NOTE: Built-in tools and resources @@ -163,22 +178,6 @@ async def _tool_api_add_index( DIPDUP_TOOLS: dict[str, types.Tool] = {} DIPDUP_TOOLS_FN: dict[str, Callable[..., Awaitable[Iterable[str]]]] = {} -# NOTE: Context management - - -def get_ctx() -> McpContext: - global _ctx - if _ctx is None: - raise FrameworkException('DipDup context is not initialized') - return _ctx - - -def set_ctx(ctx: McpContext) -> None: - global _ctx - if _ctx is not None: - raise FrameworkException('DipDup context is already initialized') - _ctx = ctx - # TODO: Add instructions server: mcp.server.Server[Any] = mcp.server.Server(name='DipDup') @@ -213,6 +212,9 @@ async def list_resource_templates() -> list[types.ResourceTemplate]: @server.call_tool() # type: ignore[no-untyped-call,misc] async def call_tool(name: str, arguments: dict[str, Any]) -> list[types.TextContent]: + from mcp.shared.exceptions import McpError + from mcp.types import ErrorData + if name in _user_tools_fn: fn = _user_tools_fn[name] elif name in DIPDUP_TOOLS_FN: @@ -225,15 +227,21 @@ async def call_tool(name: str, arguments: dict[str, Any]) -> list[types.TextCont res = await fn(**arguments) return [types.TextContent(type='text', text=res)] except Exception as e: - res = f'ERROR: {e}\n' - res += ''.join(traceback.format_exception(type(e), e, e.__traceback__)) - _logger.error(res, exc_info=e) - - return [types.TextContent(type='text', text=res)] + _logger.exception('Error while calling tool `%s`', name) + raise McpError( + ErrorData( + code=-1, + message=str(e), + data=''.join(traceback.format_exception(type(e), e, e.__traceback__)), + ) + ) from e @server.read_resource() # type: ignore[no-untyped-call,misc] async def read_resource(uri: AnyUrl) -> str: + from mcp.shared.exceptions import McpError + from mcp.types import ErrorData + if uri.scheme != 'dipdup': raise ValueError(f'Invalid scheme: {uri.scheme}') @@ -253,10 +261,14 @@ async def read_resource(uri: AnyUrl) -> str: # FIXME: mimeType is always `text/plain` return json_dumps(res, None).decode() except Exception as e: - error_msg = f'ERROR: {e}\n' - error_msg += ''.join(traceback.format_exception(type(e), e, e.__traceback__)) - _logger.error(error_msg, exc_info=e) - return error_msg + _logger.exception('Error while calling tool `%s`', name) + raise McpError( + ErrorData( + code=-1, + message=str(e), + data=''.join(traceback.format_exception(type(e), e, e.__traceback__)), + ) + ) from e def tool( diff --git a/tests/configs/asdf.yml b/tests/configs/asdf.yaml similarity index 100% rename from tests/configs/asdf.yml rename to tests/configs/asdf.yaml diff --git a/tests/configs/test_evm.yml b/tests/configs/common_evm.yaml similarity index 100% rename from tests/configs/test_evm.yml rename to tests/configs/common_evm.yaml diff --git a/tests/configs/test_postgres.yaml b/tests/configs/common_postgres.yaml similarity index 100% rename from tests/configs/test_postgres.yaml rename to tests/configs/common_postgres.yaml diff --git a/tests/configs/test_postgres_immune.yaml b/tests/configs/common_postgres_immune.yaml similarity index 100% rename from tests/configs/test_postgres_immune.yaml rename to tests/configs/common_postgres_immune.yaml diff --git a/tests/configs/test_sqlite.yaml b/tests/configs/common_sqlite.yaml similarity index 100% rename from tests/configs/test_sqlite.yaml rename to tests/configs/common_sqlite.yaml diff --git a/tests/configs/test_sqlite_immune.yaml b/tests/configs/common_sqlite_immune.yaml similarity index 100% rename from tests/configs/test_sqlite_immune.yaml rename to tests/configs/common_sqlite_immune.yaml diff --git a/tests/configs/common_starknet.yaml b/tests/configs/common_starknet.yaml new file mode 100644 index 000000000..66001b750 --- /dev/null +++ b/tests/configs/common_starknet.yaml @@ -0,0 +1,7 @@ +datasources: + subsquid: + kind: starknet.subsquid + url: ${SUBSQUID_URL:-https://v2.archive.subsquid.io/network/starknet-mainnet} + node: + kind: starknet.node + url: ${NODE_URL:-https://starknet-mainnet.g.alchemy.com/v2}/${ALCHEMY_API_KEY:-''} diff --git a/tests/configs/demo_substrate_events.yml b/tests/configs/common_substrate.yaml similarity index 51% rename from tests/configs/demo_substrate_events.yml rename to tests/configs/common_substrate.yaml index 63d921666..a9bdafff7 100644 --- a/tests/configs/demo_substrate_events.yml +++ b/tests/configs/common_substrate.yaml @@ -1,11 +1,3 @@ -spec_version: 3.0 -package: demo_substrate_events - -runtimes: - assethub: - kind: substrate - type_registry: statemint - datasources: subsquid: kind: substrate.subsquid @@ -17,17 +9,3 @@ datasources: kind: substrate.node url: https://statemint.api.onfinality.io/rpc?apikey=${ONFINALITY_API_KEY:-''} ws_url: wss://statemint.api.onfinality.io/ws?apikey=${ONFINALITY_API_KEY:-''} - -indexes: - assethub_transfers: - kind: substrate.events - runtime: assethub - datasources: - - subsquid - - subscan - - node - handlers: - - callback: on_transfer - name: Assets.Transferred - first_level: 7836000 - last_level: 7836100 diff --git a/tests/configs/common_tezos.yaml b/tests/configs/common_tezos.yaml new file mode 100644 index 000000000..cc96e496e --- /dev/null +++ b/tests/configs/common_tezos.yaml @@ -0,0 +1,2 @@ +# NOTE: Do not refactor test Tezos configs! This file is a placeholder. +{} diff --git a/tests/configs/demo_evm_events.yml b/tests/configs/demo_evm_events.yaml similarity index 100% rename from tests/configs/demo_evm_events.yml rename to tests/configs/demo_evm_events.yaml diff --git a/tests/configs/demo_evm_events_node.yml b/tests/configs/demo_evm_events_node.yaml similarity index 100% rename from tests/configs/demo_evm_events_node.yml rename to tests/configs/demo_evm_events_node.yaml diff --git a/tests/configs/demo_evm_transactions.yml b/tests/configs/demo_evm_transactions.yaml similarity index 100% rename from tests/configs/demo_evm_transactions.yml rename to tests/configs/demo_evm_transactions.yaml diff --git a/tests/configs/demo_evm_transactions_node.yml b/tests/configs/demo_evm_transactions_node.yaml similarity index 100% rename from tests/configs/demo_evm_transactions_node.yml rename to tests/configs/demo_evm_transactions_node.yaml diff --git a/tests/configs/demo_starknet_events.yml b/tests/configs/demo_starknet_events.yaml similarity index 63% rename from tests/configs/demo_starknet_events.yml rename to tests/configs/demo_starknet_events.yaml index 4164d2507..4c0833f99 100644 --- a/tests/configs/demo_starknet_events.yml +++ b/tests/configs/demo_starknet_events.yaml @@ -1,14 +1,6 @@ spec_version: 3.0 package: demo_starknet_events -datasources: - subsquid: - kind: starknet.subsquid - url: ${SUBSQUID_URL:-https://v2.archive.subsquid.io/network/starknet-mainnet} - node: - kind: starknet.node - url: ${NODE_URL:-https://starknet-mainnet.g.alchemy.com/v2}/${ALCHEMY_API_KEY:-''} - contracts: stark_usdt: kind: starknet diff --git a/tests/configs/demo_substrate_events.yaml b/tests/configs/demo_substrate_events.yaml new file mode 100644 index 000000000..e51665621 --- /dev/null +++ b/tests/configs/demo_substrate_events.yaml @@ -0,0 +1,21 @@ +spec_version: 3.0 +package: demo_substrate_events + +runtimes: + assethub: + kind: substrate + type_registry: statemint + +indexes: + assethub_transfers: + kind: substrate.events + runtime: assethub + datasources: + - subsquid + - subscan + - node + handlers: + - callback: on_transfer + name: Assets.Transferred + first_level: 7836000 + last_level: 7836100 diff --git a/tests/configs/demo_tezos_auction.yml b/tests/configs/demo_tezos_auction.yaml similarity index 100% rename from tests/configs/demo_tezos_auction.yml rename to tests/configs/demo_tezos_auction.yaml diff --git a/tests/configs/demo_tezos_dao.yml b/tests/configs/demo_tezos_dao.yaml similarity index 100% rename from tests/configs/demo_tezos_dao.yml rename to tests/configs/demo_tezos_dao.yaml diff --git a/tests/configs/demo_tezos_dex.yml b/tests/configs/demo_tezos_dex.yaml similarity index 100% rename from tests/configs/demo_tezos_dex.yml rename to tests/configs/demo_tezos_dex.yaml diff --git a/tests/configs/demo_tezos_domains.yml b/tests/configs/demo_tezos_domains.yaml similarity index 100% rename from tests/configs/demo_tezos_domains.yml rename to tests/configs/demo_tezos_domains.yaml diff --git a/tests/configs/demo_tezos_events.yml b/tests/configs/demo_tezos_events.yaml similarity index 100% rename from tests/configs/demo_tezos_events.yml rename to tests/configs/demo_tezos_events.yaml diff --git a/tests/configs/demo_tezos_factories.yml b/tests/configs/demo_tezos_factories.yaml similarity index 100% rename from tests/configs/demo_tezos_factories.yml rename to tests/configs/demo_tezos_factories.yaml diff --git a/tests/configs/demo_tezos_nft_marketplace.yml b/tests/configs/demo_tezos_nft_marketplace.yaml similarity index 100% rename from tests/configs/demo_tezos_nft_marketplace.yml rename to tests/configs/demo_tezos_nft_marketplace.yaml diff --git a/tests/configs/demo_tezos_raw.yml b/tests/configs/demo_tezos_raw.yaml similarity index 100% rename from tests/configs/demo_tezos_raw.yml rename to tests/configs/demo_tezos_raw.yaml diff --git a/tests/configs/demo_tezos_token.yml b/tests/configs/demo_tezos_token.yaml similarity index 100% rename from tests/configs/demo_tezos_token.yml rename to tests/configs/demo_tezos_token.yaml diff --git a/tests/configs/demo_tezos_token_balances.yml b/tests/configs/demo_tezos_token_balances.yaml similarity index 100% rename from tests/configs/demo_tezos_token_balances.yml rename to tests/configs/demo_tezos_token_balances.yaml diff --git a/tests/configs/demo_tezos_token_transfers.yml b/tests/configs/demo_tezos_token_transfers.yaml similarity index 100% rename from tests/configs/demo_tezos_token_transfers.yml rename to tests/configs/demo_tezos_token_transfers.yaml diff --git a/tests/configs/demo_tezos_token_transfers_2.yml b/tests/configs/demo_tezos_token_transfers_2.yaml similarity index 100% rename from tests/configs/demo_tezos_token_transfers_2.yml rename to tests/configs/demo_tezos_token_transfers_2.yaml diff --git a/tests/configs/demo_tezos_token_transfers_3.yml b/tests/configs/demo_tezos_token_transfers_3.yaml similarity index 100% rename from tests/configs/demo_tezos_token_transfers_3.yml rename to tests/configs/demo_tezos_token_transfers_3.yaml diff --git a/tests/configs/demo_tezos_token_transfers_4.yml b/tests/configs/demo_tezos_token_transfers_4.yaml similarity index 100% rename from tests/configs/demo_tezos_token_transfers_4.yml rename to tests/configs/demo_tezos_token_transfers_4.yaml diff --git a/tests/configs/dipdup.yml b/tests/configs/dipdup.yaml similarity index 100% rename from tests/configs/dipdup.yml rename to tests/configs/dipdup.yaml diff --git a/tests/configs/hen_subjkt.yml b/tests/configs/hen_subjkt.yaml similarity index 100% rename from tests/configs/hen_subjkt.yml rename to tests/configs/hen_subjkt.yaml diff --git a/tests/configs/hjkl.yml b/tests/configs/hjkl.yaml similarity index 100% rename from tests/configs/hjkl.yml rename to tests/configs/hjkl.yaml diff --git a/tests/configs/kolibri_ovens.yml b/tests/configs/kolibri_ovens.yaml similarity index 100% rename from tests/configs/kolibri_ovens.yml rename to tests/configs/kolibri_ovens.yaml diff --git a/tests/configs/operation_filters.yml b/tests/configs/operation_filters.yaml similarity index 100% rename from tests/configs/operation_filters.yml rename to tests/configs/operation_filters.yaml diff --git a/tests/configs/qwer.yml b/tests/configs/qwer.yaml similarity index 100% rename from tests/configs/qwer.yml rename to tests/configs/qwer.yaml diff --git a/tests/configs/rewq.yml b/tests/configs/rewq.yaml similarity index 100% rename from tests/configs/rewq.yml rename to tests/configs/rewq.yaml diff --git a/tests/configs/yupana.yml b/tests/configs/yupana.yaml similarity index 100% rename from tests/configs/yupana.yml rename to tests/configs/yupana.yaml diff --git a/tests/configs/zxcv.yml b/tests/configs/zxcv.yaml similarity index 100% rename from tests/configs/zxcv.yml rename to tests/configs/zxcv.yaml diff --git a/tests/test_config/test_config.py b/tests/test_config/test_config.py index d5d645138..21ba16eb3 100644 --- a/tests/test_config/test_config.py +++ b/tests/test_config/test_config.py @@ -24,7 +24,7 @@ TEST_CONFIGS = Path(__file__).parent.parent / 'configs' -@pytest.fixture(params=Path.glob(TEST_CONFIGS, 'demo_*.yml')) +@pytest.fixture(params=Path.glob(TEST_CONFIGS, 'demo_*.yaml')) def test_dipdup_config(request: SubRequest) -> Generator[Path, None, None]: yield request.param @@ -102,10 +102,10 @@ async def test_reserved_keywords() -> None: ) # FIXME: Can't use `from_` field alias in dataclasses - raw_config, _ = DipDupYAMLConfig.load(paths=[TEST_CONFIGS / 'demo_tezos_token_transfers_4.yml']) + raw_config, _ = DipDupYAMLConfig.load(paths=[TEST_CONFIGS / 'demo_tezos_token_transfers_4.yaml']) assert raw_config['indexes']['tzbtc_holders_mainnet']['handlers'][1]['from_'] == 'tzbtc_mainnet' - config = DipDupConfig.load([TEST_CONFIGS / 'demo_tezos_token_transfers_4.yml']) + config = DipDupConfig.load([TEST_CONFIGS / 'demo_tezos_token_transfers_4.yaml']) assert config.indexes['tzbtc_holders_mainnet'].handlers[1].from_ == 'tzbtc_mainnet' # type: ignore[misc,union-attr] diff --git a/tests/test_config/test_custom_config.py b/tests/test_config/test_custom_config.py index ceaad3acc..d7a86d9e9 100644 --- a/tests/test_config/test_custom_config.py +++ b/tests/test_config/test_custom_config.py @@ -20,11 +20,11 @@ class TestCustomConfig: @pytest.fixture(scope='session') def dummy_config_path(self) -> Path: - return Path(__file__).parent.parent / 'configs' / 'dipdup.yml' + return Path(__file__).parent.parent / 'configs' / 'dipdup.yaml' @staticmethod def appended_config_path(dummy_config_path: str, tmp_path_factory: TempPathFactory, append_raw: str) -> str: - config_file = tmp_path_factory.mktemp('config') / 'dipdup.yml' + config_file = tmp_path_factory.mktemp('config') / 'dipdup.yaml' config_raw = Path(dummy_config_path).read_text() config_file.write_text(config_raw + append_raw) diff --git a/tests/test_demos.py b/tests/test_demos.py index 4a89a28ca..9745ed099 100644 --- a/tests/test_demos.py +++ b/tests/test_demos.py @@ -188,76 +188,76 @@ async def assert_run_etherlink() -> None: test_args = ('config', 'package', 'cmd', 'assert_fn') test_params = ( # NOTE: Tezos - ('demo_tezos_auction.yml', 'demo_tezos_auction', 'run', assert_run_auction), - ('demo_tezos_auction.yml', 'demo_tezos_auction', 'init', None), - ('demo_tezos_dao.yml', 'demo_tezos_dao', 'run', assert_run_dao), - ('demo_tezos_dao.yml', 'demo_tezos_dao', 'init', None), - ('demo_tezos_dex.yml', 'demo_tezos_dex', 'run', assert_run_dex), - ('demo_tezos_dex.yml', 'demo_tezos_dex', 'init', None), + ('demo_tezos_auction', 'demo_tezos_auction', 'run', assert_run_auction), + ('demo_tezos_auction', 'demo_tezos_auction', 'init', None), + ('demo_tezos_dao', 'demo_tezos_dao', 'run', assert_run_dao), + ('demo_tezos_dao', 'demo_tezos_dao', 'init', None), + ('demo_tezos_dex', 'demo_tezos_dex', 'run', assert_run_dex), + ('demo_tezos_dex', 'demo_tezos_dex', 'init', None), # FIXME: Mystery of the century! F821 Undefined name `BigMapDiff` in GHA. Probably cache related. - # ('demo_tezos_domains.yml', 'demo_tezos_domains', 'run', assert_run_domains), - # ('demo_tezos_domains.yml', 'demo_tezos_domains', 'init', None), - ('demo_tezos_etherlink.yml', 'demo_tezos_etherlink', 'run', assert_run_etherlink), - ('demo_tezos_etherlink.yml', 'demo_tezos_etherlink', 'init', None), - ('demo_tezos_events.yml', 'demo_tezos_events', 'run', assert_run_events), - ('demo_tezos_events.yml', 'demo_tezos_events', 'init', None), - ('demo_tezos_factories.yml', 'demo_tezos_factories', 'run', assert_run_factories), - ('demo_tezos_factories.yml', 'demo_tezos_factories', 'init', None), - ('demo_tezos_nft_marketplace.yml', 'demo_tezos_nft_marketplace', 'run', assert_run_nft_marketplace), - ('demo_tezos_nft_marketplace.yml', 'demo_tezos_nft_marketplace', 'init', None), + # ('demo_tezos_domains', 'demo_tezos_domains', 'run', assert_run_domains), + # ('demo_tezos_domains', 'demo_tezos_domains', 'init', None), + ('demo_tezos_etherlink', 'demo_tezos_etherlink', 'run', assert_run_etherlink), + ('demo_tezos_etherlink', 'demo_tezos_etherlink', 'init', None), + ('demo_tezos_events', 'demo_tezos_events', 'run', assert_run_events), + ('demo_tezos_events', 'demo_tezos_events', 'init', None), + ('demo_tezos_factories', 'demo_tezos_factories', 'run', assert_run_factories), + ('demo_tezos_factories', 'demo_tezos_factories', 'init', None), + ('demo_tezos_nft_marketplace', 'demo_tezos_nft_marketplace', 'run', assert_run_nft_marketplace), + ('demo_tezos_nft_marketplace', 'demo_tezos_nft_marketplace', 'init', None), ( - 'demo_tezos_token_transfers.yml', + 'demo_tezos_token_transfers', 'demo_tezos_token_transfers', 'run', partial(assert_run_token_transfers, 4, '-0.01912431'), ), - ('demo_tezos_raw.yml', 'demo_tezos_raw', 'run', assert_run_raw), - ('demo_tezos_raw.yml', 'demo_tezos_raw', 'init', None), - ('demo_tezos_token.yml', 'demo_tezos_token', 'run', assert_run_token), - ('demo_tezos_token.yml', 'demo_tezos_token', 'init', None), - ('demo_tezos_token_balances.yml', 'demo_tezos_token_balances', 'run', assert_run_balances), - ('demo_tezos_token_balances.yml', 'demo_tezos_token_balances', 'init', None), + ('demo_tezos_raw', 'demo_tezos_raw', 'run', assert_run_raw), + ('demo_tezos_raw', 'demo_tezos_raw', 'init', None), + ('demo_tezos_token', 'demo_tezos_token', 'run', assert_run_token), + ('demo_tezos_token', 'demo_tezos_token', 'init', None), + ('demo_tezos_token_balances', 'demo_tezos_token_balances', 'run', assert_run_balances), + ('demo_tezos_token_balances', 'demo_tezos_token_balances', 'init', None), # TODO: Too many token transfer runs - ('demo_tezos_token_transfers.yml', 'demo_tezos_token_transfers', 'init', None), + ('demo_tezos_token_transfers', 'demo_tezos_token_transfers', 'init', None), ( - 'demo_tezos_token_transfers_2.yml', + 'demo_tezos_token_transfers_2', 'demo_tezos_token_transfers', 'run', partial(assert_run_token_transfers, 12, '0.26554711'), ), ( - 'demo_tezos_token_transfers_3.yml', + 'demo_tezos_token_transfers_3', 'demo_tezos_token_transfers', 'run', partial(assert_run_token_transfers, 9, '0.15579888'), ), # FIXME: Reenable after fixing fetcher # ( - # 'demo_tezos_token_transfers_4.yml', + # 'demo_tezos_token_transfers_4', # 'demo_tezos_token_transfers', # 'run', # partial(assert_run_token_transfers, 2, '-0.02302128'), # ), # NOTE: EVM indexes - ('demo_evm_events.yml:test_evm.yml', 'demo_evm_events', 'run', assert_run_evm_events), - ('demo_evm_events.yml:test_evm.yml', 'demo_evm_events', 'init', None), - ('demo_evm_transactions.yml:test_evm.yml', 'demo_evm_transactions', 'run', assert_run_evm_transactions), - ('demo_evm_transactions.yml:test_evm.yml', 'demo_evm_transactions', 'init', None), + ('demo_evm_events', 'demo_evm_events', 'run', assert_run_evm_events), + ('demo_evm_events', 'demo_evm_events', 'init', None), + ('demo_evm_transactions', 'demo_evm_transactions', 'run', assert_run_evm_transactions), + ('demo_evm_transactions', 'demo_evm_transactions', 'init', None), # NOTE: EVM indexes with node only - ('demo_evm_events_node.yml:test_evm.yml', 'demo_evm_events', 'run', assert_run_evm_events), - ('demo_evm_transactions_node.yml:test_evm.yml', 'demo_evm_transactions', 'run', assert_run_evm_transactions), + ('demo_evm_events_node', 'demo_evm_events', 'run', assert_run_evm_events), + ('demo_evm_transactions_node', 'demo_evm_transactions', 'run', assert_run_evm_transactions), # NOTE: Starknet indexes - ('demo_starknet_events.yml', 'demo_starknet_events', 'run', assert_run_starknet_events), - ('demo_starknet_events.yml', 'demo_starknet_events', 'init', None), + ('demo_starknet_events', 'demo_starknet_events', 'run', assert_run_starknet_events), + ('demo_starknet_events', 'demo_starknet_events', 'init', None), # NOTE: Substrate indexes - ('demo_substrate_events.yml', 'demo_substrate_events', 'run', assert_run_substrate_events), - ('demo_substrate_events.yml', 'demo_substrate_events', 'init', None), + ('demo_substrate_events', 'demo_substrate_events', 'run', assert_run_substrate_events), + ('demo_substrate_events', 'demo_substrate_events', 'init', None), # NOTE: Smoke tests for small tools - ('demo_tezos_dex.yml', 'demo_tezos_dex', ('config', 'env', '--compose', '--internal'), None), - ('demo_tezos_dex.yml', 'demo_tezos_dex', ('config', 'export', '--full'), None), - ('demo_tezos_dex.yml', 'demo_tezos_dex', ('package', 'tree'), None), - ('demo_tezos_dex.yml', 'demo_tezos_dex', ('report', 'ls'), None), - ('demo_tezos_dex.yml', 'demo_tezos_dex', ('schema', 'export'), None), + ('demo_tezos_dex', 'demo_tezos_dex', ('config', 'env', '--compose', '--internal'), None), + ('demo_tezos_dex', 'demo_tezos_dex', ('config', 'export', '--full'), None), + ('demo_tezos_dex', 'demo_tezos_dex', ('package', 'tree'), None), + ('demo_tezos_dex', 'demo_tezos_dex', ('report', 'ls'), None), + ('demo_tezos_dex', 'demo_tezos_dex', ('schema', 'export'), None), ) @@ -269,9 +269,20 @@ async def test_run_init( assert_fn: Callable[[], Awaitable[None]] | None, ) -> None: config_paths = [] - for path in config.split(':'): - config_paths.append(TEST_CONFIGS / path) - config_paths.append(TEST_CONFIGS / 'test_sqlite.yaml') + config_paths.append(TEST_CONFIGS / f'{config}.yaml') + + if 'evm_' in config: + config_paths.append(TEST_CONFIGS / 'common_evm.yaml') + elif 'starknet_' in config: + config_paths.append(TEST_CONFIGS / 'common_starknet.yaml') + elif 'substrate_' in config: + config_paths.append(TEST_CONFIGS / 'common_substrate.yaml') + elif 'tezos_' in config: + config_paths.append(TEST_CONFIGS / 'common_tezos.yaml') + else: + raise NotImplementedError + + config_paths.append(TEST_CONFIGS / 'common_sqlite.yaml') if 'evm' in config and not {'ALCHEMY_API_KEY', 'ETHERSCAN_API_KEY'} <= set(os.environ): pytest.skip('EVM tests require ALCHEMY_API_KEY and ETHERSCAN_API_KEY environment variables') diff --git a/tests/test_dipdup.py b/tests/test_dipdup.py index 39bb33b96..7c1ea22df 100644 --- a/tests/test_dipdup.py +++ b/tests/test_dipdup.py @@ -31,7 +31,7 @@ async def _create_index(hash_: str) -> None: class IndexStateTest: def __init__(self) -> None: - name = 'demo_tezos_nft_marketplace.yml' + name = 'demo_tezos_nft_marketplace.yaml' config_path = Path(__file__).parent / 'configs' / name self.config = DipDupConfig.load([config_path]) self.config.database = SqliteDatabaseConfig(kind='sqlite') diff --git a/tests/test_hasura.py b/tests/test_hasura.py index bd70d112b..acaf66bc5 100644 --- a/tests/test_hasura.py +++ b/tests/test_hasura.py @@ -30,7 +30,7 @@ async def test_configure_hasura() -> None: if os.uname().sysname != 'Linux' or 'microsoft' in os.uname().release: # check for WSL, Windows, mac and else pytest.skip('Test is not supported for os archetecture', allow_module_level=True) - config_path = Path(__file__).parent / 'configs' / 'demo_tezos_nft_marketplace.yml' + config_path = Path(__file__).parent / 'configs' / 'demo_tezos_nft_marketplace.yaml' config = DipDupConfig.load([config_path]) config.database = await run_postgres_container() diff --git a/tests/test_index/test_tzkt_operations.py b/tests/test_index/test_tzkt_operations.py index 8e6125744..e208c002c 100644 --- a/tests/test_index/test_tzkt_operations.py +++ b/tests/test_index/test_tzkt_operations.py @@ -31,7 +31,7 @@ async def tzkt() -> AsyncIterator[TezosTzktDatasource]: @pytest.fixture def index_config() -> TezosOperationsIndexConfig: - config = DipDupConfig.load([TEST_CONFIGS / 'operation_filters.yml'], True) + config = DipDupConfig.load([TEST_CONFIGS / 'operation_filters.yaml'], True) config.initialize() return cast('TezosOperationsIndexConfig', config.indexes['test']) @@ -124,7 +124,7 @@ async def test_get_transaction_filters(tzkt: TezosTzktDatasource, index_config: async def test_get_sync_level() -> None: - config = DipDupConfig.load([TEST_CONFIGS / 'demo_tezos_token.yml'], True) + config = DipDupConfig.load([TEST_CONFIGS / 'demo_tezos_token.yaml'], True) async with AsyncExitStack() as stack: dipdup = await create_dummy_dipdup(config, stack) index = await spawn_index(dipdup, 'tzbtc_holders_mainnet') @@ -149,7 +149,7 @@ async def test_get_sync_level() -> None: async def test_realtime() -> None: from demo_tezos_token import models - config = DipDupConfig.load([TEST_CONFIGS / 'demo_tezos_token.yml'], True) + config = DipDupConfig.load([TEST_CONFIGS / 'demo_tezos_token.yaml'], True) async with AsyncExitStack() as stack: dipdup = await create_dummy_dipdup(config, stack) await dipdup._set_up_datasources(stack) diff --git a/tests/test_schema.py b/tests/test_schema.py index c6354bd70..91e5c6a4a 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -23,8 +23,8 @@ async def test_schema_sqlite() -> None: package = 'demo_tezos_domains' - config_path = TEST_CONFIGS / f'{package}.yml' - env_config_path = TEST_CONFIGS / 'test_sqlite.yaml' + config_path = TEST_CONFIGS / f'{package}.yaml' + env_config_path = TEST_CONFIGS / 'common_sqlite.yaml' async with AsyncExitStack() as stack: tmp_package_path, env = await stack.enter_async_context( @@ -69,8 +69,8 @@ def tortoise() -> AbstractAsyncContextManager[None]: async def test_schema_sqlite_immune() -> None: package = 'demo_tezos_domains' - config_path = TEST_CONFIGS / f'{package}.yml' - env_config_path = TEST_CONFIGS / 'test_sqlite_immune.yaml' + config_path = TEST_CONFIGS / f'{package}.yaml' + env_config_path = TEST_CONFIGS / 'common_sqlite_immune.yaml' async with AsyncExitStack() as stack: tmp_package_path, env = await stack.enter_async_context( @@ -115,8 +115,8 @@ def tortoise() -> AbstractAsyncContextManager[None]: async def test_schema_postgres() -> None: package = 'demo_tezos_domains' - config_path = TEST_CONFIGS / f'{package}.yml' - env_config_path = TEST_CONFIGS / 'test_postgres.yaml' + config_path = TEST_CONFIGS / f'{package}.yaml' + env_config_path = TEST_CONFIGS / 'common_postgres.yaml' async with AsyncExitStack() as stack: database_config = await run_postgres_container() @@ -156,8 +156,8 @@ def tortoise() -> AbstractAsyncContextManager[None]: async def test_schema_postgres_immune() -> None: package = 'demo_tezos_domains' - config_path = TEST_CONFIGS / f'{package}.yml' - env_config_path = TEST_CONFIGS / 'test_postgres_immune.yaml' + config_path = TEST_CONFIGS / f'{package}.yaml' + env_config_path = TEST_CONFIGS / 'common_postgres_immune.yaml' async with AsyncExitStack() as stack: database_config = await run_postgres_container() diff --git a/uv.lock b/uv.lock index c0b38fe9d..753f08358 100644 --- a/uv.lock +++ b/uv.lock @@ -474,7 +474,7 @@ wheels = [ [[package]] name = "dipdup" -version = "8.3.1" +version = "8.3.2" source = { editable = "." } dependencies = [ { name = "aiohttp" }, @@ -814,15 +814,15 @@ wheels = [ [[package]] name = "httpcore" -version = "1.0.7" +version = "1.0.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, { name = "h11" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6a/41/d7d0a89eb493922c37d343b607bc1b5da7f5be7e383740b4753ad8943e90/httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c", size = 85196 } +sdist = { url = "https://files.pythonhosted.org/packages/9f/45/ad3e1b4d448f22c0cff4f5692f5ed0666658578e358b8d58a19846048059/httpcore-1.0.8.tar.gz", hash = "sha256:86e94505ed24ea06514883fd44d2bc02d90e77e7979c8eb71b90f41d364a1bad", size = 85385 } wheels = [ - { url = "https://files.pythonhosted.org/packages/87/f5/72347bc88306acb359581ac4d52f23c0ef445b57157adedb9aee0cd689d2/httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd", size = 78551 }, + { url = "https://files.pythonhosted.org/packages/18/8d/f052b1e336bb2c1fc7ed1aaed898aa570c0b61a09707b108979d9fc6e308/httpcore-1.0.8-py3-none-any.whl", hash = "sha256:5254cf149bcb5f75e9d1b2b9f729ea4a4b883d1ad7379fc632b727cec23674be", size = 78732 }, ] [[package]] @@ -1080,26 +1080,28 @@ wheels = [ [[package]] name = "multidict" -version = "6.3.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fa/2d/6e0d6771cadd5ad14d13193cc8326dc0b341cc1659c306cbfce7a5058fff/multidict-6.3.2.tar.gz", hash = "sha256:c1035eea471f759fa853dd6e76aaa1e389f93b3e1403093fa0fd3ab4db490678", size = 88060 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/83/ae/bd7518193b4374484c04ba0f6522d0572dc17fcd53d238deb3cb3643c858/multidict-6.3.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d1e0ba1ce1b8cc79117196642d95f4365e118eaf5fb85f57cdbcc5a25640b2a4", size = 62680 }, - { url = "https://files.pythonhosted.org/packages/59/e0/a0a9247c32f385ac4c1afefe9c3f2271fb8e235aad72332d42384c41b9cb/multidict-6.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:029bbd7d782251a78975214b78ee632672310f9233d49531fc93e8e99154af25", size = 37366 }, - { url = "https://files.pythonhosted.org/packages/c3/fa/8c23cdd4492d59bea0e762662285f2163766e69e5ea715fe6a03a8670660/multidict-6.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d7db41e3b56817d9175264e5fe00192fbcb8e1265307a59f53dede86161b150e", size = 36103 }, - { url = "https://files.pythonhosted.org/packages/87/35/3bcc3616cb54d3a327b1d26dbec284c3eb7b179e8a78a6075852dbb51dac/multidict-6.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fcab18e65cc555ac29981a581518c23311f2b1e72d8f658f9891590465383be", size = 248231 }, - { url = "https://files.pythonhosted.org/packages/b8/c3/17ddbfd6fc3eed9ab7326a43651e1a97da73f7acc69b78a7bb04b59c073d/multidict-6.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0d50eff89aa4d145a5486b171a2177042d08ea5105f813027eb1050abe91839f", size = 259423 }, - { url = "https://files.pythonhosted.org/packages/1f/67/64b18180e8f559cc93efaaaac2fe0746b9c978560866b6fdd626d3237129/multidict-6.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:643e57b403d3e240045a3681f9e6a04d35a33eddc501b4cbbbdbc9c70122e7bc", size = 256204 }, - { url = "https://files.pythonhosted.org/packages/21/f6/e81a8e4817c2d32787b33ae58c72dc3fe08e0ba8e56e660a225df3cb8619/multidict-6.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d17b37b9715b30605b5bab1460569742d0c309e5c20079263b440f5d7746e7e", size = 249663 }, - { url = "https://files.pythonhosted.org/packages/3e/e8/44ca66758df031a8119483cf5385e2ff3b09b9c6df8f3396d626c325b553/multidict-6.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68acd51fa94e63312b8ddf84bfc9c3d3442fe1f9988bbe1b6c703043af8867fe", size = 232236 }, - { url = "https://files.pythonhosted.org/packages/93/76/d2faabbac582dc100a4d7ecf7d0ab8dd2aadf7f10d5d5a19e9932cf63a2e/multidict-6.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:347eea2852ab7f697cc5ed9b1aae96b08f8529cca0c6468f747f0781b1842898", size = 252638 }, - { url = "https://files.pythonhosted.org/packages/63/37/f5a6ea10dab96491b7300be940f86a5490dc474d18473c438f2550b78da3/multidict-6.3.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4d3f8e57027dcda84a1aa181501c15c45eab9566eb6fcc274cbd1e7561224f8", size = 247917 }, - { url = "https://files.pythonhosted.org/packages/d4/b1/2c32b684763b69becbaaa61b7af8a45a6f757fc82d9b4b123ca90cb69f75/multidict-6.3.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:9ca57a841ffcf712e47875d026aa49d6e67f9560624d54b51628603700d5d287", size = 261754 }, - { url = "https://files.pythonhosted.org/packages/cd/f2/badedad94e1731debe56d076c9e61a1658c5e9d65dfa9c1ee74d1e3d31d7/multidict-6.3.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7cafdafb44c4e646118410368307693e49d19167e5f119cbe3a88697d2d1a636", size = 256389 }, - { url = "https://files.pythonhosted.org/packages/c6/3a/0a3488be2e5a6499f512e748d31e8fb90b753eb35793ecf390b9d8548e66/multidict-6.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:430120c6ce3715a9c6075cabcee557daccbcca8ba25a9fedf05c7bf564532f2d", size = 251902 }, - { url = "https://files.pythonhosted.org/packages/fe/44/62f76d0a5d836b96168f39a402a75dd3114d0df3cbb5669e0310034b71be/multidict-6.3.2-cp312-cp312-win32.whl", hash = "sha256:13bec31375235a68457ab887ce1bbf4f59d5810d838ae5d7e5b416242e1f3ed4", size = 35101 }, - { url = "https://files.pythonhosted.org/packages/8f/a4/7aaf2313e1766710010c35f9d738fd6309fb71a758f8c0e81853b90afb3d/multidict-6.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:c3b6d7620e6e90c6d97eaf3a63bf7fbd2ba253aab89120a4a9c660bf2d675391", size = 38479 }, - { url = "https://files.pythonhosted.org/packages/aa/c1/7832c95a50641148b567b5366dd3354489950dcfd01c8fc28472bec63b9a/multidict-6.3.2-py3-none-any.whl", hash = "sha256:71409d4579f716217f23be2f5e7afca5ca926aaeb398aa11b72d793bff637a1f", size = 10347 }, +version = "6.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/2c/e367dfb4c6538614a0c9453e510d75d66099edf1c4e69da1b5ce691a1931/multidict-6.4.3.tar.gz", hash = "sha256:3ada0b058c9f213c5f95ba301f922d402ac234f1111a7d8fd70f1b99f3c281ec", size = 89372 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/bb/3abdaf8fe40e9226ce8a2ba5ecf332461f7beec478a455d6587159f1bf92/multidict-6.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1f1c2f58f08b36f8475f3ec6f5aeb95270921d418bf18f90dffd6be5c7b0e676", size = 64019 }, + { url = "https://files.pythonhosted.org/packages/7e/b5/1b2e8de8217d2e89db156625aa0fe4a6faad98972bfe07a7b8c10ef5dd6b/multidict-6.4.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:26ae9ad364fc61b936fb7bf4c9d8bd53f3a5b4417142cd0be5c509d6f767e2f1", size = 37925 }, + { url = "https://files.pythonhosted.org/packages/b4/e2/3ca91c112644a395c8eae017144c907d173ea910c913ff8b62549dcf0bbf/multidict-6.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:659318c6c8a85f6ecfc06b4e57529e5a78dfdd697260cc81f683492ad7e9435a", size = 37008 }, + { url = "https://files.pythonhosted.org/packages/60/23/79bc78146c7ac8d1ac766b2770ca2e07c2816058b8a3d5da6caed8148637/multidict-6.4.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1eb72c741fd24d5a28242ce72bb61bc91f8451877131fa3fe930edb195f7054", size = 224374 }, + { url = "https://files.pythonhosted.org/packages/86/35/77950ed9ebd09136003a85c1926ba42001ca5be14feb49710e4334ee199b/multidict-6.4.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3cd06d88cb7398252284ee75c8db8e680aa0d321451132d0dba12bc995f0adcc", size = 230869 }, + { url = "https://files.pythonhosted.org/packages/49/97/2a33c6e7d90bc116c636c14b2abab93d6521c0c052d24bfcc231cbf7f0e7/multidict-6.4.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4543d8dc6470a82fde92b035a92529317191ce993533c3c0c68f56811164ed07", size = 231949 }, + { url = "https://files.pythonhosted.org/packages/56/ce/e9b5d9fcf854f61d6686ada7ff64893a7a5523b2a07da6f1265eaaea5151/multidict-6.4.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:30a3ebdc068c27e9d6081fca0e2c33fdf132ecea703a72ea216b81a66860adde", size = 231032 }, + { url = "https://files.pythonhosted.org/packages/f0/ac/7ced59dcdfeddd03e601edb05adff0c66d81ed4a5160c443e44f2379eef0/multidict-6.4.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b038f10e23f277153f86f95c777ba1958bcd5993194fda26a1d06fae98b2f00c", size = 223517 }, + { url = "https://files.pythonhosted.org/packages/db/e6/325ed9055ae4e085315193a1b58bdb4d7fc38ffcc1f4975cfca97d015e17/multidict-6.4.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c605a2b2dc14282b580454b9b5d14ebe0668381a3a26d0ac39daa0ca115eb2ae", size = 216291 }, + { url = "https://files.pythonhosted.org/packages/fa/84/eeee6d477dd9dcb7691c3bb9d08df56017f5dd15c730bcc9383dcf201cf4/multidict-6.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8bd2b875f4ca2bb527fe23e318ddd509b7df163407b0fb717df229041c6df5d3", size = 228982 }, + { url = "https://files.pythonhosted.org/packages/82/94/4d1f3e74e7acf8b0c85db350e012dcc61701cd6668bc2440bb1ecb423c90/multidict-6.4.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c2e98c840c9c8e65c0e04b40c6c5066c8632678cd50c8721fdbcd2e09f21a507", size = 226823 }, + { url = "https://files.pythonhosted.org/packages/09/f0/1e54b95bda7cd01080e5732f9abb7b76ab5cc795b66605877caeb2197476/multidict-6.4.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:66eb80dd0ab36dbd559635e62fba3083a48a252633164857a1d1684f14326427", size = 222714 }, + { url = "https://files.pythonhosted.org/packages/e7/a2/f6cbca875195bd65a3e53b37ab46486f3cc125bdeab20eefe5042afa31fb/multidict-6.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c23831bdee0a2a3cf21be057b5e5326292f60472fb6c6f86392bbf0de70ba731", size = 233739 }, + { url = "https://files.pythonhosted.org/packages/79/68/9891f4d2b8569554723ddd6154375295f789dc65809826c6fb96a06314fd/multidict-6.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1535cec6443bfd80d028052e9d17ba6ff8a5a3534c51d285ba56c18af97e9713", size = 230809 }, + { url = "https://files.pythonhosted.org/packages/e6/72/a7be29ba1e87e4fc5ceb44dabc7940b8005fd2436a332a23547709315f70/multidict-6.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3b73e7227681f85d19dec46e5b881827cd354aabe46049e1a61d2f9aaa4e285a", size = 226934 }, + { url = "https://files.pythonhosted.org/packages/12/c1/259386a9ad6840ff7afc686da96808b503d152ac4feb3a96c651dc4f5abf/multidict-6.4.3-cp312-cp312-win32.whl", hash = "sha256:8eac0c49df91b88bf91f818e0a24c1c46f3622978e2c27035bfdca98e0e18124", size = 35242 }, + { url = "https://files.pythonhosted.org/packages/06/24/c8fdff4f924d37225dc0c56a28b1dca10728fc2233065fafeb27b4b125be/multidict-6.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:11990b5c757d956cd1db7cb140be50a63216af32cd6506329c2c59d732d802db", size = 38635 }, + { url = "https://files.pythonhosted.org/packages/96/10/7d526c8974f017f1e7ca584c71ee62a638e9334d8d33f27d7cdfc9ae79e4/multidict-6.4.3-py3-none-any.whl", hash = "sha256:59fe01ee8e2a1e8ceb3f6dbb216b09c8d9f4ef1c22c4fc825d045a147fa2ebc9", size = 10400 }, ] [[package]] @@ -1658,27 +1660,27 @@ wheels = [ [[package]] name = "ruff" -version = "0.11.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e8/5b/3ae20f89777115944e89c2d8c2e795dcc5b9e04052f76d5347e35e0da66e/ruff-0.11.4.tar.gz", hash = "sha256:f45bd2fb1a56a5a85fae3b95add03fb185a0b30cf47f5edc92aa0355ca1d7407", size = 3933063 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9c/db/baee59ac88f57527fcbaad3a7b309994e42329c6bc4d4d2b681a3d7b5426/ruff-0.11.4-py3-none-linux_armv6l.whl", hash = "sha256:d9f4a761ecbde448a2d3e12fb398647c7f0bf526dbc354a643ec505965824ed2", size = 10106493 }, - { url = "https://files.pythonhosted.org/packages/c1/d6/9a0962cbb347f4ff98b33d699bf1193ff04ca93bed4b4222fd881b502154/ruff-0.11.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:8c1747d903447d45ca3d40c794d1a56458c51e5cc1bc77b7b64bd2cf0b1626cc", size = 10876382 }, - { url = "https://files.pythonhosted.org/packages/3a/8f/62bab0c7d7e1ae3707b69b157701b41c1ccab8f83e8501734d12ea8a839f/ruff-0.11.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:51a6494209cacca79e121e9b244dc30d3414dac8cc5afb93f852173a2ecfc906", size = 10237050 }, - { url = "https://files.pythonhosted.org/packages/09/96/e296965ae9705af19c265d4d441958ed65c0c58fc4ec340c27cc9d2a1f5b/ruff-0.11.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f171605f65f4fc49c87f41b456e882cd0c89e4ac9d58e149a2b07930e1d466f", size = 10424984 }, - { url = "https://files.pythonhosted.org/packages/e5/56/644595eb57d855afed6e54b852e2df8cd5ca94c78043b2f29bdfb29882d5/ruff-0.11.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ebf99ea9af918878e6ce42098981fc8c1db3850fef2f1ada69fb1dcdb0f8e79e", size = 9957438 }, - { url = "https://files.pythonhosted.org/packages/86/83/9d3f3bed0118aef3e871ded9e5687fb8c5776bde233427fd9ce0a45db2d4/ruff-0.11.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edad2eac42279df12e176564a23fc6f4aaeeb09abba840627780b1bb11a9d223", size = 11547282 }, - { url = "https://files.pythonhosted.org/packages/40/e6/0c6e4f5ae72fac5ccb44d72c0111f294a5c2c8cc5024afcb38e6bda5f4b3/ruff-0.11.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f103a848be9ff379fc19b5d656c1f911d0a0b4e3e0424f9532ececf319a4296e", size = 12182020 }, - { url = "https://files.pythonhosted.org/packages/b5/92/4aed0e460aeb1df5ea0c2fbe8d04f9725cccdb25d8da09a0d3f5b8764bf8/ruff-0.11.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:193e6fac6eb60cc97b9f728e953c21cc38a20077ed64f912e9d62b97487f3f2d", size = 11679154 }, - { url = "https://files.pythonhosted.org/packages/1b/d3/7316aa2609f2c592038e2543483eafbc62a0e1a6a6965178e284808c095c/ruff-0.11.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7af4e5f69b7c138be8dcffa5b4a061bf6ba6a3301f632a6bce25d45daff9bc99", size = 13905985 }, - { url = "https://files.pythonhosted.org/packages/63/80/734d3d17546e47ff99871f44ea7540ad2bbd7a480ed197fe8a1c8a261075/ruff-0.11.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:126b1bf13154aa18ae2d6c3c5efe144ec14b97c60844cfa6eb960c2a05188222", size = 11348343 }, - { url = "https://files.pythonhosted.org/packages/04/7b/70fc7f09a0161dce9613a4671d198f609e653d6f4ff9eee14d64c4c240fb/ruff-0.11.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e8806daaf9dfa881a0ed603f8a0e364e4f11b6ed461b56cae2b1c0cab0645304", size = 10308487 }, - { url = "https://files.pythonhosted.org/packages/1a/22/1cdd62dabd678d75842bf4944fd889cf794dc9e58c18cc547f9eb28f95ed/ruff-0.11.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:5d94bb1cc2fc94a769b0eb975344f1b1f3d294da1da9ddbb5a77665feb3a3019", size = 9929091 }, - { url = "https://files.pythonhosted.org/packages/9f/20/40e0563506332313148e783bbc1e4276d657962cc370657b2fff20e6e058/ruff-0.11.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:995071203d0fe2183fc7a268766fd7603afb9996785f086b0d76edee8755c896", size = 10924659 }, - { url = "https://files.pythonhosted.org/packages/b5/41/eef9b7aac8819d9e942f617f9db296f13d2c4576806d604aba8db5a753f1/ruff-0.11.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7a37ca937e307ea18156e775a6ac6e02f34b99e8c23fe63c1996185a4efe0751", size = 11428160 }, - { url = "https://files.pythonhosted.org/packages/ff/61/c488943414fb2b8754c02f3879de003e26efdd20f38167ded3fb3fc1cda3/ruff-0.11.4-py3-none-win32.whl", hash = "sha256:0e9365a7dff9b93af933dab8aebce53b72d8f815e131796268709890b4a83270", size = 10311496 }, - { url = "https://files.pythonhosted.org/packages/b6/2b/2a1c8deb5f5dfa3871eb7daa41492c4d2b2824a74d2b38e788617612a66d/ruff-0.11.4-py3-none-win_amd64.whl", hash = "sha256:5a9fa1c69c7815e39fcfb3646bbfd7f528fa8e2d4bebdcf4c2bd0fa037a255fb", size = 11399146 }, - { url = "https://files.pythonhosted.org/packages/4f/03/3aec4846226d54a37822e4c7ea39489e4abd6f88388fba74e3d4abe77300/ruff-0.11.4-py3-none-win_arm64.whl", hash = "sha256:d435db6b9b93d02934cf61ef332e66af82da6d8c69aefdea5994c89997c7a0fc", size = 10450306 }, +version = "0.11.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/45/71/5759b2a6b2279bb77fe15b1435b89473631c2cd6374d45ccdb6b785810be/ruff-0.11.5.tar.gz", hash = "sha256:cae2e2439cb88853e421901ec040a758960b576126dab520fa08e9de431d1bef", size = 3976488 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/db/6efda6381778eec7f35875b5cbefd194904832a1153d68d36d6b269d81a8/ruff-0.11.5-py3-none-linux_armv6l.whl", hash = "sha256:2561294e108eb648e50f210671cc56aee590fb6167b594144401532138c66c7b", size = 10103150 }, + { url = "https://files.pythonhosted.org/packages/44/f2/06cd9006077a8db61956768bc200a8e52515bf33a8f9b671ee527bb10d77/ruff-0.11.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ac12884b9e005c12d0bd121f56ccf8033e1614f736f766c118ad60780882a077", size = 10898637 }, + { url = "https://files.pythonhosted.org/packages/18/f5/af390a013c56022fe6f72b95c86eb7b2585c89cc25d63882d3bfe411ecf1/ruff-0.11.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:4bfd80a6ec559a5eeb96c33f832418bf0fb96752de0539905cf7b0cc1d31d779", size = 10236012 }, + { url = "https://files.pythonhosted.org/packages/b8/ca/b9bf954cfed165e1a0c24b86305d5c8ea75def256707f2448439ac5e0d8b/ruff-0.11.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0947c0a1afa75dcb5db4b34b070ec2bccee869d40e6cc8ab25aca11a7d527794", size = 10415338 }, + { url = "https://files.pythonhosted.org/packages/d9/4d/2522dde4e790f1b59885283f8786ab0046958dfd39959c81acc75d347467/ruff-0.11.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ad871ff74b5ec9caa66cb725b85d4ef89b53f8170f47c3406e32ef040400b038", size = 9965277 }, + { url = "https://files.pythonhosted.org/packages/e5/7a/749f56f150eef71ce2f626a2f6988446c620af2f9ba2a7804295ca450397/ruff-0.11.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e6cf918390cfe46d240732d4d72fa6e18e528ca1f60e318a10835cf2fa3dc19f", size = 11541614 }, + { url = "https://files.pythonhosted.org/packages/89/b2/7d9b8435222485b6aac627d9c29793ba89be40b5de11584ca604b829e960/ruff-0.11.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:56145ee1478582f61c08f21076dc59153310d606ad663acc00ea3ab5b2125f82", size = 12198873 }, + { url = "https://files.pythonhosted.org/packages/00/e0/a1a69ef5ffb5c5f9c31554b27e030a9c468fc6f57055886d27d316dfbabd/ruff-0.11.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5f66f8f1e8c9fc594cbd66fbc5f246a8d91f916cb9667e80208663ec3728304", size = 11670190 }, + { url = "https://files.pythonhosted.org/packages/05/61/c1c16df6e92975072c07f8b20dad35cd858e8462b8865bc856fe5d6ccb63/ruff-0.11.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80b4df4d335a80315ab9afc81ed1cff62be112bd165e162b5eed8ac55bfc8470", size = 13902301 }, + { url = "https://files.pythonhosted.org/packages/79/89/0af10c8af4363304fd8cb833bd407a2850c760b71edf742c18d5a87bb3ad/ruff-0.11.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3068befab73620b8a0cc2431bd46b3cd619bc17d6f7695a3e1bb166b652c382a", size = 11350132 }, + { url = "https://files.pythonhosted.org/packages/b9/e1/ecb4c687cbf15164dd00e38cf62cbab238cad05dd8b6b0fc68b0c2785e15/ruff-0.11.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:f5da2e710a9641828e09aa98b92c9ebbc60518fdf3921241326ca3e8f8e55b8b", size = 10312937 }, + { url = "https://files.pythonhosted.org/packages/cf/4f/0e53fe5e500b65934500949361e3cd290c5ba60f0324ed59d15f46479c06/ruff-0.11.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ef39f19cb8ec98cbc762344921e216f3857a06c47412030374fffd413fb8fd3a", size = 9936683 }, + { url = "https://files.pythonhosted.org/packages/04/a8/8183c4da6d35794ae7f76f96261ef5960853cd3f899c2671961f97a27d8e/ruff-0.11.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b2a7cedf47244f431fd11aa5a7e2806dda2e0c365873bda7834e8f7d785ae159", size = 10950217 }, + { url = "https://files.pythonhosted.org/packages/26/88/9b85a5a8af21e46a0639b107fcf9bfc31da4f1d263f2fc7fbe7199b47f0a/ruff-0.11.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:81be52e7519f3d1a0beadcf8e974715b2dfc808ae8ec729ecfc79bddf8dbb783", size = 11404521 }, + { url = "https://files.pythonhosted.org/packages/fc/52/047f35d3b20fd1ae9ccfe28791ef0f3ca0ef0b3e6c1a58badd97d450131b/ruff-0.11.5-py3-none-win32.whl", hash = "sha256:e268da7b40f56e3eca571508a7e567e794f9bfcc0f412c4b607931d3af9c4afe", size = 10320697 }, + { url = "https://files.pythonhosted.org/packages/b9/fe/00c78010e3332a6e92762424cf4c1919065707e962232797d0b57fd8267e/ruff-0.11.5-py3-none-win_amd64.whl", hash = "sha256:6c6dc38af3cfe2863213ea25b6dc616d679205732dc0fb673356c2d69608f800", size = 11378665 }, + { url = "https://files.pythonhosted.org/packages/43/7c/c83fe5cbb70ff017612ff36654edfebec4b1ef79b558b8e5fd933bab836b/ruff-0.11.5-py3-none-win_arm64.whl", hash = "sha256:67e241b4314f4eacf14a601d586026a962f4002a475aa702c69980a38087aa4e", size = 10460287 }, ] [[package]] @@ -2024,11 +2026,11 @@ wheels = [ [[package]] name = "typing-extensions" -version = "4.13.1" +version = "4.13.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/76/ad/cd3e3465232ec2416ae9b983f27b9e94dc8171d56ac99b345319a9475967/typing_extensions-4.13.1.tar.gz", hash = "sha256:98795af00fb9640edec5b8e31fc647597b4691f099ad75f469a2616be1a76dff", size = 106633 } +sdist = { url = "https://files.pythonhosted.org/packages/f6/37/23083fcd6e35492953e8d2aaaa68b860eb422b34627b13f2ce3eb6106061/typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef", size = 106967 } wheels = [ - { url = "https://files.pythonhosted.org/packages/df/c5/e7a0b0f5ed69f94c8ab7379c599e6036886bffcde609969a5325f47f1332/typing_extensions-4.13.1-py3-none-any.whl", hash = "sha256:4b6cf02909eb5495cfbc3f6e8fd49217e6cc7944e145cdda8caa3734777f9e69", size = 45739 }, + { url = "https://files.pythonhosted.org/packages/8b/54/b1ae86c0973cc6f0210b53d508ca3641fb6d0c56823f288d108bc7ab3cc8/typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", size = 45806 }, ] [[package]] @@ -2067,11 +2069,11 @@ wheels = [ [[package]] name = "urllib3" -version = "2.3.0" +version = "2.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268 } +sdist = { url = "https://files.pythonhosted.org/packages/8a/78/16493d9c386d8e60e442a35feac5e00f0913c0f4b7c217c11e8ec2ff53e0/urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", size = 390672 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369 }, + { url = "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813", size = 128680 }, ] [[package]]