From 53ff9247929b87e8a1d9d36cf387c82d5f444103 Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Sun, 23 Oct 2022 22:58:25 +0530 Subject: [PATCH 1/3] feat: add support for wrap manifest in client --- packages/polywrap-client/poetry.lock | 119 +++++++++++++--- .../polywrap-client/polywrap_client/client.py | 10 +- packages/polywrap-client/pyproject.toml | 2 + .../tests/cases/simple-invoke/wrap.info | 1 + .../cases/simple-subinvoke/invoke/wrap.info | Bin 0 -> 798 bytes .../invoke/wrap.wasm} | Bin .../simple-subinvoke/subinvoke/wrap.info | 1 + .../subinvoke/wrap.wasm} | Bin packages/polywrap-client/tests/test_client.py | 6 +- packages/polywrap-core/poetry.lock | 130 +++++++++++++++--- .../polywrap_core/types/client.py | 24 ++-- .../polywrap_core/types/file_reader.py | 2 +- .../polywrap_core/types/invoke.py | 2 +- .../polywrap_core/types/wasm_package.py | 10 +- .../polywrap_core/types/wrapper.py | 10 +- packages/polywrap-core/pyproject.toml | 1 + packages/polywrap-manifest/poetry.lock | 6 +- packages/polywrap-manifest/pyproject.toml | 1 + .../polywrap-manifest/tests/test_manifest.py | 20 +-- packages/polywrap-uri-resolvers/poetry.lock | 117 +++++++++++++--- .../polywrap_uri_resolvers/fs_resolver.py | 10 +- .../tests/cases/simple/wrap.info | 1 + .../tests/cases/simple/wrap.wasm} | Bin .../tests/test_file_resolver.py | 2 +- packages/polywrap-wasm/poetry.lock | 117 +++++++++++++--- .../polywrap-wasm/polywrap_wasm/constants.py | 1 + .../polywrap_wasm/inmemory_file_reader.py | 15 +- .../polywrap_wasm/wasm_package.py | 27 ++-- .../polywrap_wasm/wasm_wrapper.py | 25 ++-- packages/polywrap-wasm/pyproject.toml | 2 + .../tests/cases/simple/wrap.info | 1 + .../tests/cases/simple/wrap.wasm | Bin 0 -> 30774 bytes .../polywrap-wasm/tests/test_wasm_wrapper.py | 40 ++++-- 33 files changed, 563 insertions(+), 140 deletions(-) create mode 100644 packages/polywrap-client/tests/cases/simple-invoke/wrap.info create mode 100644 packages/polywrap-client/tests/cases/simple-subinvoke/invoke/wrap.info rename packages/polywrap-client/tests/cases/{subinvoke/wrap-invoke.wasm => simple-subinvoke/invoke/wrap.wasm} (100%) create mode 100644 packages/polywrap-client/tests/cases/simple-subinvoke/subinvoke/wrap.info rename packages/polywrap-client/tests/cases/{subinvoke/wrap-subinvoke.wasm => simple-subinvoke/subinvoke/wrap.wasm} (100%) create mode 100644 packages/polywrap-uri-resolvers/tests/cases/simple/wrap.info rename packages/{polywrap-wasm/tests/cases/simple_wrap_invoke.wasm => polywrap-uri-resolvers/tests/cases/simple/wrap.wasm} (100%) create mode 100644 packages/polywrap-wasm/tests/cases/simple/wrap.info create mode 100644 packages/polywrap-wasm/tests/cases/simple/wrap.wasm diff --git a/packages/polywrap-client/poetry.lock b/packages/polywrap-client/poetry.lock index d7fc4889..cfccaf14 100644 --- a/packages/polywrap-client/poetry.lock +++ b/packages/polywrap-client/poetry.lock @@ -1,6 +1,6 @@ [[package]] name = "astroid" -version = "2.12.11" +version = "2.12.12" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false @@ -278,7 +278,7 @@ python-versions = ">=3.7" [[package]] name = "pbr" -version = "5.10.0" +version = "5.11.0" description = "Python Build Reasonableness" category = "dev" optional = false @@ -320,12 +320,30 @@ develop = true [package.dependencies] gql = "3.4.0" graphql-core = "^3.2.1" +polywrap-manifest = {path = "../polywrap-manifest", develop = true} result = "^0.8.0" [package.source] type = "directory" url = "../polywrap-core" +[[package]] +name = "polywrap-manifest" +version = "0.1.0" +description = "WRAP manifest" +category = "main" +optional = false +python-versions = "^3.10" +develop = true + +[package.dependencies] +polywrap-msgpack = {path = "../polywrap-msgpack", develop = true} +pydantic = "^1.10.2" + +[package.source] +type = "directory" +url = "../polywrap-manifest" + [[package]] name = "polywrap-msgpack" version = "0.1.0" @@ -372,6 +390,7 @@ develop = true [package.dependencies] polywrap-core = {path = "../polywrap-core", develop = true} +polywrap-manifest = {path = "../polywrap-manifest", develop = true} polywrap-msgpack = {path = "../polywrap-msgpack", develop = true} unsync = "^1.4.0" wasmtime = "^1.0.1" @@ -388,6 +407,21 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +[[package]] +name = "pydantic" +version = "1.10.2" +description = "Data validation and settings management using python type hints" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +typing-extensions = ">=4.1.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + [[package]] name = "pydocstyle" version = "6.1.1" @@ -404,14 +438,14 @@ toml = ["toml"] [[package]] name = "pylint" -version = "2.15.4" +version = "2.15.5" description = "python code static checker" category = "dev" optional = false python-versions = ">=3.7.2" [package.dependencies] -astroid = ">=2.12.11,<=2.14.0-dev0" +astroid = ">=2.12.12,<=2.14.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = ">=0.2" isort = ">=4.2.5,<6" @@ -437,7 +471,7 @@ diagrams = ["railroad-diagrams", "jinja2"] [[package]] name = "pyright" -version = "1.1.275" +version = "1.1.276" description = "Command line wrapper for pyright" category = "dev" optional = false @@ -526,7 +560,7 @@ python-versions = "*" [[package]] name = "stevedore" -version = "4.0.1" +version = "4.1.0" description = "Manage dynamic plugins for Python applications" category = "dev" optional = false @@ -597,6 +631,14 @@ tox = {version = ">=3.7.0", markers = "python_version >= \"3\""} [package.extras] test = ["pylint", "pycodestyle", "pytest", "coverage"] +[[package]] +name = "typing-extensions" +version = "4.4.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" +optional = false +python-versions = ">=3.7" + [[package]] name = "unsync" version = "1.4.0" @@ -656,12 +698,12 @@ multidict = ">=4.0" [metadata] lock-version = "1.1" python-versions = "^3.10" -content-hash = "fbede2eb1178e36229e0cdb6a0d7a963d7e630893adc4bbf4e93c0268784b3fe" +content-hash = "e8e7de81df846ecd5164c7959412f1db7d2e6b048de90126d4f3f73ef06a8cd8" [metadata.files] astroid = [ - {file = "astroid-2.12.11-py3-none-any.whl", hash = "sha256:867a756bbf35b7bc07b35bfa6522acd01f91ad9919df675e8428072869792dce"}, - {file = "astroid-2.12.11.tar.gz", hash = "sha256:2df4f9980c4511474687895cbfdb8558293c1a826d9118bb09233d7c2bff1c83"}, + {file = "astroid-2.12.12-py3-none-any.whl", hash = "sha256:72702205200b2a638358369d90c222d74ebc376787af8fb2f7f2a86f7b5cc85f"}, + {file = "astroid-2.12.12.tar.gz", hash = "sha256:1c00a14f5a3ed0339d38d2e2e5b74ea2591df5861c0936bb292b84ccf3a78d83"}, ] attrs = [ {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, @@ -921,8 +963,8 @@ pathspec = [ {file = "pathspec-0.10.1.tar.gz", hash = "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d"}, ] pbr = [ - {file = "pbr-5.10.0-py2.py3-none-any.whl", hash = "sha256:da3e18aac0a3c003e9eea1a81bd23e5a3a75d745670dcf736317b7d966887fdf"}, - {file = "pbr-5.10.0.tar.gz", hash = "sha256:cfcc4ff8e698256fc17ea3ff796478b050852585aa5bae79ecd05b2ab7b39b9a"}, + {file = "pbr-5.11.0-py2.py3-none-any.whl", hash = "sha256:db2317ff07c84c4c63648c9064a79fe9d9f5c7ce85a9099d4b6258b3db83225a"}, + {file = "pbr-5.11.0.tar.gz", hash = "sha256:b97bc6695b2aff02144133c2e7399d5885223d42b7912ffaec2ca3898e673bfe"}, ] platformdirs = [ {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, @@ -933,6 +975,7 @@ pluggy = [ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] polywrap-core = [] +polywrap-manifest = [] polywrap-msgpack = [] polywrap-uri-resolvers = [] polywrap-wasm = [] @@ -940,21 +983,59 @@ py = [ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, ] +pydantic = [ + {file = "pydantic-1.10.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bb6ad4489af1bac6955d38ebcb95079a836af31e4c4f74aba1ca05bb9f6027bd"}, + {file = "pydantic-1.10.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1f5a63a6dfe19d719b1b6e6106561869d2efaca6167f84f5ab9347887d78b98"}, + {file = "pydantic-1.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:352aedb1d71b8b0736c6d56ad2bd34c6982720644b0624462059ab29bd6e5912"}, + {file = "pydantic-1.10.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19b3b9ccf97af2b7519c42032441a891a5e05c68368f40865a90eb88833c2559"}, + {file = "pydantic-1.10.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e9069e1b01525a96e6ff49e25876d90d5a563bc31c658289a8772ae186552236"}, + {file = "pydantic-1.10.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:355639d9afc76bcb9b0c3000ddcd08472ae75318a6eb67a15866b87e2efa168c"}, + {file = "pydantic-1.10.2-cp310-cp310-win_amd64.whl", hash = "sha256:ae544c47bec47a86bc7d350f965d8b15540e27e5aa4f55170ac6a75e5f73b644"}, + {file = "pydantic-1.10.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4c805731c33a8db4b6ace45ce440c4ef5336e712508b4d9e1aafa617dc9907f"}, + {file = "pydantic-1.10.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d49f3db871575e0426b12e2f32fdb25e579dea16486a26e5a0474af87cb1ab0a"}, + {file = "pydantic-1.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c90345ec7dd2f1bcef82ce49b6235b40f282b94d3eec47e801baf864d15525"}, + {file = "pydantic-1.10.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b5ba54d026c2bd2cb769d3468885f23f43710f651688e91f5fb1edcf0ee9283"}, + {file = "pydantic-1.10.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:05e00dbebbe810b33c7a7362f231893183bcc4251f3f2ff991c31d5c08240c42"}, + {file = "pydantic-1.10.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2d0567e60eb01bccda3a4df01df677adf6b437958d35c12a3ac3e0f078b0ee52"}, + {file = "pydantic-1.10.2-cp311-cp311-win_amd64.whl", hash = "sha256:c6f981882aea41e021f72779ce2a4e87267458cc4d39ea990729e21ef18f0f8c"}, + {file = "pydantic-1.10.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4aac8e7103bf598373208f6299fa9a5cfd1fc571f2d40bf1dd1955a63d6eeb5"}, + {file = "pydantic-1.10.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a7b66c3f499108b448f3f004801fcd7d7165fb4200acb03f1c2402da73ce4c"}, + {file = "pydantic-1.10.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bedf309630209e78582ffacda64a21f96f3ed2e51fbf3962d4d488e503420254"}, + {file = "pydantic-1.10.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9300fcbebf85f6339a02c6994b2eb3ff1b9c8c14f502058b5bf349d42447dcf5"}, + {file = "pydantic-1.10.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:216f3bcbf19c726b1cc22b099dd409aa371f55c08800bcea4c44c8f74b73478d"}, + {file = "pydantic-1.10.2-cp37-cp37m-win_amd64.whl", hash = "sha256:dd3f9a40c16daf323cf913593083698caee97df2804aa36c4b3175d5ac1b92a2"}, + {file = "pydantic-1.10.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b97890e56a694486f772d36efd2ba31612739bc6f3caeee50e9e7e3ebd2fdd13"}, + {file = "pydantic-1.10.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9cabf4a7f05a776e7793e72793cd92cc865ea0e83a819f9ae4ecccb1b8aa6116"}, + {file = "pydantic-1.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06094d18dd5e6f2bbf93efa54991c3240964bb663b87729ac340eb5014310624"}, + {file = "pydantic-1.10.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc78cc83110d2f275ec1970e7a831f4e371ee92405332ebfe9860a715f8336e1"}, + {file = "pydantic-1.10.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ee433e274268a4b0c8fde7ad9d58ecba12b069a033ecc4645bb6303c062d2e9"}, + {file = "pydantic-1.10.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7c2abc4393dea97a4ccbb4ec7d8658d4e22c4765b7b9b9445588f16c71ad9965"}, + {file = "pydantic-1.10.2-cp38-cp38-win_amd64.whl", hash = "sha256:0b959f4d8211fc964772b595ebb25f7652da3f22322c007b6fed26846a40685e"}, + {file = "pydantic-1.10.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c33602f93bfb67779f9c507e4d69451664524389546bacfe1bee13cae6dc7488"}, + {file = "pydantic-1.10.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5760e164b807a48a8f25f8aa1a6d857e6ce62e7ec83ea5d5c5a802eac81bad41"}, + {file = "pydantic-1.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6eb843dcc411b6a2237a694f5e1d649fc66c6064d02b204a7e9d194dff81eb4b"}, + {file = "pydantic-1.10.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b8795290deaae348c4eba0cebb196e1c6b98bdbe7f50b2d0d9a4a99716342fe"}, + {file = "pydantic-1.10.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e0bedafe4bc165ad0a56ac0bd7695df25c50f76961da29c050712596cf092d6d"}, + {file = "pydantic-1.10.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2e05aed07fa02231dbf03d0adb1be1d79cabb09025dd45aa094aa8b4e7b9dcda"}, + {file = "pydantic-1.10.2-cp39-cp39-win_amd64.whl", hash = "sha256:c1ba1afb396148bbc70e9eaa8c06c1716fdddabaf86e7027c5988bae2a829ab6"}, + {file = "pydantic-1.10.2-py3-none-any.whl", hash = "sha256:1b6ee725bd6e83ec78b1aa32c5b1fa67a3a65badddde3976bca5fe4568f27709"}, + {file = "pydantic-1.10.2.tar.gz", hash = "sha256:91b8e218852ef6007c2b98cd861601c6a09f1aa32bbbb74fab5b1c33d4a1e410"}, +] pydocstyle = [ {file = "pydocstyle-6.1.1-py3-none-any.whl", hash = "sha256:6987826d6775056839940041beef5c08cc7e3d71d63149b48e36727f70144dc4"}, {file = "pydocstyle-6.1.1.tar.gz", hash = "sha256:1d41b7c459ba0ee6c345f2eb9ae827cab14a7533a88c5c6f7e94923f72df92dc"}, ] pylint = [ - {file = "pylint-2.15.4-py3-none-any.whl", hash = "sha256:629cf1dbdfb6609d7e7a45815a8bb59300e34aa35783b5ac563acaca2c4022e9"}, - {file = "pylint-2.15.4.tar.gz", hash = "sha256:5441e9294335d354b7bad57c1044e5bd7cce25c433475d76b440e53452fa5cb8"}, + {file = "pylint-2.15.5-py3-none-any.whl", hash = "sha256:c2108037eb074334d9e874dc3c783752cc03d0796c88c9a9af282d0f161a1004"}, + {file = "pylint-2.15.5.tar.gz", hash = "sha256:3b120505e5af1d06a5ad76b55d8660d44bf0f2fc3c59c2bdd94e39188ee3a4df"}, ] pyparsing = [ {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, ] pyright = [ - {file = "pyright-1.1.275-py3-none-any.whl", hash = "sha256:83072f509e18160f2661a2276ac85f471112dbcfc1dadf0cbb0393a4d56db72a"}, - {file = "pyright-1.1.275.tar.gz", hash = "sha256:f0061ce47c785b9b64745b7648ff9732a99811ef7c7f3f88642aa2cb7868c81e"}, + {file = "pyright-1.1.276-py3-none-any.whl", hash = "sha256:d9388405ea20a55446cb7809b1746158bdf557f9162b476f5aed71173f4ffd2b"}, + {file = "pyright-1.1.276.tar.gz", hash = "sha256:debaa08f6975dd381b9408880e36bb781ba7a1a6cf24b7868e83be41b6c8cb75"}, ] pytest = [ {file = "pytest-7.1.3-py3-none-any.whl", hash = "sha256:1377bda3466d70b55e3f5cecfa55bb7cfcf219c7964629b967c37cf0bda818b7"}, @@ -1016,8 +1097,8 @@ snowballstemmer = [ {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] stevedore = [ - {file = "stevedore-4.0.1-py3-none-any.whl", hash = "sha256:01645addb67beff04c7cfcbb0a6af8327d2efc3380b0f034aa316d4576c4d470"}, - {file = "stevedore-4.0.1.tar.gz", hash = "sha256:9a23111a6e612270c591fd31ff3321c6b5f3d5f3dabb1427317a5ab608fc261a"}, + {file = "stevedore-4.1.0-py3-none-any.whl", hash = "sha256:3b1cbd592a87315f000d05164941ee5e164899f8fc0ce9a00bb0f321f40ef93e"}, + {file = "stevedore-4.1.0.tar.gz", hash = "sha256:02518a8f0d6d29be8a445b7f2ac63753ff29e8f2a2faa01777568d5500d777a6"}, ] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, @@ -1039,6 +1120,10 @@ tox-poetry = [ {file = "tox-poetry-0.4.1.tar.gz", hash = "sha256:2395808e1ce487b5894c10f2202e14702bfa6d6909c0d1e525170d14809ac7ef"}, {file = "tox_poetry-0.4.1-py2.py3-none-any.whl", hash = "sha256:11d9cd4e51d4cd9484b3ba63f2650ab4cfb4096e5f0682ecf561ddfc3c8e8c92"}, ] +typing-extensions = [ + {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, + {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, +] unsync = [ {file = "unsync-1.4.0.tar.gz", hash = "sha256:a29e0f8952ffb0b3a0453ce436819a5a1ba2febbb5caa707c319f6f98d35f3c5"}, ] diff --git a/packages/polywrap-client/polywrap_client/client.py b/packages/polywrap-client/polywrap_client/client.py index fd5f3ee6..ddbdbe32 100644 --- a/packages/polywrap-client/polywrap_client/client.py +++ b/packages/polywrap-client/polywrap_client/client.py @@ -8,6 +8,7 @@ ClientConfig, Env, GetEnvsOptions, + GetManifestOptions, GetFileOptions, GetUriResolversOptions, InvokeResult, @@ -23,6 +24,7 @@ ) from polywrap_msgpack import msgpack_decode, msgpack_encode from polywrap_uri_resolvers import FsUriResolver, SimpleFileReader +from polywrap_manifest import AnyWrapManifest from result import Err, Ok, Result @@ -58,7 +60,11 @@ def get_env_by_uri( async def get_file(self, uri: Uri, options: GetFileOptions) -> Union[bytes, str]: loaded_wrapper = (await self.load_wrapper(uri)).unwrap() - return await loaded_wrapper.get_file(options=options, client=self) + return await loaded_wrapper.get_file(options) + + async def get_manifest(self, uri: Uri, options: Optional[GetManifestOptions] = None) -> AnyWrapManifest: + loaded_wrapper = (await self.load_wrapper(uri)).unwrap() + return loaded_wrapper.get_manifest() async def try_resolve_uri( self, options: TryResolveUriOptions @@ -90,7 +96,7 @@ async def load_wrapper( return Err(Exception(f'Error resolving URI "{uri.uri}"\nURI not found')) if isinstance(uri_package_or_wrapper, UriPackage): - return Ok(uri_package_or_wrapper.package.create_wrapper()) + return Ok(await uri_package_or_wrapper.package.create_wrapper()) return Ok(uri_package_or_wrapper.wrapper) diff --git a/packages/polywrap-client/pyproject.toml b/packages/polywrap-client/pyproject.toml index 8bbed82b..452bbd5d 100644 --- a/packages/polywrap-client/pyproject.toml +++ b/packages/polywrap-client/pyproject.toml @@ -14,6 +14,8 @@ python = "^3.10" wasmtime = "^1.0.1" unsync = "^1.4.0" polywrap-core = { path = "../polywrap-core", develop = true } +polywrap-msgpack = { path = "../polywrap-msgpack", develop = true } +polywrap-manifest = { path = "../polywrap-manifest", develop = true } polywrap-uri-resolvers = { path = "../polywrap-uri-resolvers", develop = true } result = "^0.8.0" diff --git a/packages/polywrap-client/tests/cases/simple-invoke/wrap.info b/packages/polywrap-client/tests/cases/simple-invoke/wrap.info new file mode 100644 index 00000000..e0ca0d11 --- /dev/null +++ b/packages/polywrap-client/tests/cases/simple-invoke/wrap.info @@ -0,0 +1 @@ +„§version£0.1¤name¦Simple¤type¤wasm£abi‚§version£0.1ªmoduleTypeƒ¤type¦Module¤kindÌ€§methods‘†¤name¬simpleMethod¦return…¤type¦String¤name¬simpleMethod¨requiredäkind"¦scalar„¤name¬simpleMethod¤type¦String¨requiredäkind¤type¦Method¤kind@¨requiredéarguments‘…¤type¦String¤name£arg¨requiredäkind"¦scalar„¤name£arg¤type¦String¨requiredäkind \ No newline at end of file diff --git a/packages/polywrap-client/tests/cases/simple-subinvoke/invoke/wrap.info b/packages/polywrap-client/tests/cases/simple-subinvoke/invoke/wrap.info new file mode 100644 index 0000000000000000000000000000000000000000..df7afa51d750087e8fc2312adf2263bd98a0a00e GIT binary patch literal 798 zcmdUsK~BRk5Jf@iNjN}(8^Dr9S7nbT^-wHgCybp|-GK~xrjq7^eV<;2}&3U_BvL}-e-=I{7Hng!lYVEpGG0f1|%xejnFVL}VIH>_3J$j*m;p3l#~Bg#TS*VXx0D# literal 0 HcmV?d00001 diff --git a/packages/polywrap-client/tests/cases/subinvoke/wrap-invoke.wasm b/packages/polywrap-client/tests/cases/simple-subinvoke/invoke/wrap.wasm similarity index 100% rename from packages/polywrap-client/tests/cases/subinvoke/wrap-invoke.wasm rename to packages/polywrap-client/tests/cases/simple-subinvoke/invoke/wrap.wasm diff --git a/packages/polywrap-client/tests/cases/simple-subinvoke/subinvoke/wrap.info b/packages/polywrap-client/tests/cases/simple-subinvoke/subinvoke/wrap.info new file mode 100644 index 00000000..94137ba9 --- /dev/null +++ b/packages/polywrap-client/tests/cases/simple-subinvoke/subinvoke/wrap.info @@ -0,0 +1 @@ +„§version£0.1¤name¦Simple¤type¤wasm£abi‚§version£0.1ªmoduleTypeƒ¤type¦Module¤kindÌ€§methods‘†¤name£add¦return…¤type£Int¤name£add¨requiredäkind"¦scalar„¤name£add¤type£Int¨requiredäkind¤type¦Method¤kind@¨requiredéarguments’…¤type£Int¤name¡a¨requiredäkind"¦scalar„¤name¡a¤type£Int¨requiredäkind…¤type£Int¤name¡b¨requiredäkind"¦scalar„¤name¡b¤type£Int¨requiredäkind \ No newline at end of file diff --git a/packages/polywrap-client/tests/cases/subinvoke/wrap-subinvoke.wasm b/packages/polywrap-client/tests/cases/simple-subinvoke/subinvoke/wrap.wasm similarity index 100% rename from packages/polywrap-client/tests/cases/subinvoke/wrap-subinvoke.wasm rename to packages/polywrap-client/tests/cases/simple-subinvoke/subinvoke/wrap.wasm diff --git a/packages/polywrap-client/tests/test_client.py b/packages/polywrap-client/tests/test_client.py index 99d78abc..c2a9799c 100644 --- a/packages/polywrap-client/tests/test_client.py +++ b/packages/polywrap-client/tests/test_client.py @@ -10,7 +10,7 @@ async def test_invoke(): client = PolywrapClient() uri = Uri( - f'fs/{Path(__file__).parent.joinpath("cases", "simple-invoke", "wrap.wasm").absolute()}' + f'fs/{Path(__file__).parent.joinpath("cases", "simple-invoke").absolute()}' ) args = {"arg": "hello polywrap"} options = InvokerOptions( @@ -26,7 +26,7 @@ async def test_subinvoke(): file_reader=SimpleFileReader(), redirects={ Uri("ens/add.eth"): Uri( - f'fs/{Path(__file__).parent.joinpath("cases", "subinvoke", "wrap-subinvoke.wasm").absolute()}' + f'fs/{Path(__file__).parent.joinpath("cases", "simple-subinvoke", "subinvoke").absolute()}' ), }, ) @@ -35,7 +35,7 @@ async def test_subinvoke(): envs=[], resolver=uri_resolver )) uri = Uri( - f'fs/{Path(__file__).parent.joinpath("cases", "subinvoke", "wrap-invoke.wasm").absolute()}' + f'fs/{Path(__file__).parent.joinpath("cases", "simple-subinvoke", "invoke").absolute()}' ) args = b'\x82\xa1a\x01\xa1b\x02' options = InvokerOptions( diff --git a/packages/polywrap-core/poetry.lock b/packages/polywrap-core/poetry.lock index 3fae109b..527cadb1 100644 --- a/packages/polywrap-core/poetry.lock +++ b/packages/polywrap-core/poetry.lock @@ -1,6 +1,6 @@ [[package]] name = "astroid" -version = "2.12.11" +version = "2.12.12" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false @@ -225,6 +225,14 @@ category = "dev" optional = false python-versions = ">=3.6" +[[package]] +name = "msgpack" +version = "1.0.4" +description = "MessagePack serializer" +category = "main" +optional = false +python-versions = "*" + [[package]] name = "multidict" version = "6.0.2" @@ -270,7 +278,7 @@ python-versions = ">=3.7" [[package]] name = "pbr" -version = "5.10.0" +version = "5.11.0" description = "Python Build Reasonableness" category = "dev" optional = false @@ -300,6 +308,38 @@ python-versions = ">=3.6" testing = ["pytest-benchmark", "pytest"] dev = ["tox", "pre-commit"] +[[package]] +name = "polywrap-manifest" +version = "0.1.0" +description = "WRAP manifest" +category = "main" +optional = false +python-versions = "^3.10" +develop = true + +[package.dependencies] +polywrap-msgpack = {path = "../polywrap-msgpack", develop = true} + +[package.source] +type = "directory" +url = "../polywrap-manifest" + +[[package]] +name = "polywrap-msgpack" +version = "0.1.0" +description = "WRAP msgpack encoding" +category = "main" +optional = false +python-versions = "^3.10" +develop = true + +[package.dependencies] +msgpack = "^1.0.4" + +[package.source] +type = "directory" +url = "../polywrap-msgpack" + [[package]] name = "py" version = "1.11.0" @@ -324,14 +364,14 @@ toml = ["toml"] [[package]] name = "pylint" -version = "2.15.4" +version = "2.15.5" description = "python code static checker" category = "dev" optional = false python-versions = ">=3.7.2" [package.dependencies] -astroid = ">=2.12.11,<=2.14.0-dev0" +astroid = ">=2.12.12,<=2.14.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = ">=0.2" isort = ">=4.2.5,<6" @@ -357,7 +397,7 @@ diagrams = ["railroad-diagrams", "jinja2"] [[package]] name = "pyright" -version = "1.1.275" +version = "1.1.276" description = "Command line wrapper for pyright" category = "dev" optional = false @@ -446,7 +486,7 @@ python-versions = "*" [[package]] name = "stevedore" -version = "4.0.1" +version = "4.1.0" description = "Manage dynamic plugins for Python applications" category = "dev" optional = false @@ -557,12 +597,12 @@ multidict = ">=4.0" [metadata] lock-version = "1.1" python-versions = "^3.10" -content-hash = "91211f7ef1438bf8d17c1c36e90c88410e624deb71108d201e9c2f999e7382f8" +content-hash = "dd2c2930d339e86d4f11e78a49de5bfe11f953bb925420dec1a53124523cfa9f" [metadata.files] astroid = [ - {file = "astroid-2.12.11-py3-none-any.whl", hash = "sha256:867a756bbf35b7bc07b35bfa6522acd01f91ad9919df675e8428072869792dce"}, - {file = "astroid-2.12.11.tar.gz", hash = "sha256:2df4f9980c4511474687895cbfdb8558293c1a826d9118bb09233d7c2bff1c83"}, + {file = "astroid-2.12.12-py3-none-any.whl", hash = "sha256:72702205200b2a638358369d90c222d74ebc376787af8fb2f7f2a86f7b5cc85f"}, + {file = "astroid-2.12.12.tar.gz", hash = "sha256:1c00a14f5a3ed0339d38d2e2e5b74ea2591df5861c0936bb292b84ccf3a78d83"}, ] attrs = [ {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, @@ -690,6 +730,60 @@ mccabe = [ {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, ] +msgpack = [ + {file = "msgpack-1.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4ab251d229d10498e9a2f3b1e68ef64cb393394ec477e3370c457f9430ce9250"}, + {file = "msgpack-1.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:112b0f93202d7c0fef0b7810d465fde23c746a2d482e1e2de2aafd2ce1492c88"}, + {file = "msgpack-1.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:002b5c72b6cd9b4bafd790f364b8480e859b4712e91f43014fe01e4f957b8467"}, + {file = "msgpack-1.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35bc0faa494b0f1d851fd29129b2575b2e26d41d177caacd4206d81502d4c6a6"}, + {file = "msgpack-1.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4733359808c56d5d7756628736061c432ded018e7a1dff2d35a02439043321aa"}, + {file = "msgpack-1.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb514ad14edf07a1dbe63761fd30f89ae79b42625731e1ccf5e1f1092950eaa6"}, + {file = "msgpack-1.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c23080fdeec4716aede32b4e0ef7e213c7b1093eede9ee010949f2a418ced6ba"}, + {file = "msgpack-1.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:49565b0e3d7896d9ea71d9095df15b7f75a035c49be733051c34762ca95bbf7e"}, + {file = "msgpack-1.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:aca0f1644d6b5a73eb3e74d4d64d5d8c6c3d577e753a04c9e9c87d07692c58db"}, + {file = "msgpack-1.0.4-cp310-cp310-win32.whl", hash = "sha256:0dfe3947db5fb9ce52aaea6ca28112a170db9eae75adf9339a1aec434dc954ef"}, + {file = "msgpack-1.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dea20515f660aa6b7e964433b1808d098dcfcabbebeaaad240d11f909298075"}, + {file = "msgpack-1.0.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e83f80a7fec1a62cf4e6c9a660e39c7f878f603737a0cdac8c13131d11d97f52"}, + {file = "msgpack-1.0.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c11a48cf5e59026ad7cb0dc29e29a01b5a66a3e333dc11c04f7e991fc5510a9"}, + {file = "msgpack-1.0.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1276e8f34e139aeff1c77a3cefb295598b504ac5314d32c8c3d54d24fadb94c9"}, + {file = "msgpack-1.0.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c9566f2c39ccced0a38d37c26cc3570983b97833c365a6044edef3574a00c08"}, + {file = "msgpack-1.0.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:fcb8a47f43acc113e24e910399376f7277cf8508b27e5b88499f053de6b115a8"}, + {file = "msgpack-1.0.4-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:76ee788122de3a68a02ed6f3a16bbcd97bc7c2e39bd4d94be2f1821e7c4a64e6"}, + {file = "msgpack-1.0.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:0a68d3ac0104e2d3510de90a1091720157c319ceeb90d74f7b5295a6bee51bae"}, + {file = "msgpack-1.0.4-cp36-cp36m-win32.whl", hash = "sha256:85f279d88d8e833ec015650fd15ae5eddce0791e1e8a59165318f371158efec6"}, + {file = "msgpack-1.0.4-cp36-cp36m-win_amd64.whl", hash = "sha256:c1683841cd4fa45ac427c18854c3ec3cd9b681694caf5bff04edb9387602d661"}, + {file = "msgpack-1.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a75dfb03f8b06f4ab093dafe3ddcc2d633259e6c3f74bb1b01996f5d8aa5868c"}, + {file = "msgpack-1.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9667bdfdf523c40d2511f0e98a6c9d3603be6b371ae9a238b7ef2dc4e7a427b0"}, + {file = "msgpack-1.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11184bc7e56fd74c00ead4f9cc9a3091d62ecb96e97653add7a879a14b003227"}, + {file = "msgpack-1.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac5bd7901487c4a1dd51a8c58f2632b15d838d07ceedaa5e4c080f7190925bff"}, + {file = "msgpack-1.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1e91d641d2bfe91ba4c52039adc5bccf27c335356055825c7f88742c8bb900dd"}, + {file = "msgpack-1.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2a2df1b55a78eb5f5b7d2a4bb221cd8363913830145fad05374a80bf0877cb1e"}, + {file = "msgpack-1.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:545e3cf0cf74f3e48b470f68ed19551ae6f9722814ea969305794645da091236"}, + {file = "msgpack-1.0.4-cp37-cp37m-win32.whl", hash = "sha256:2cc5ca2712ac0003bcb625c96368fd08a0f86bbc1a5578802512d87bc592fe44"}, + {file = "msgpack-1.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:eba96145051ccec0ec86611fe9cf693ce55f2a3ce89c06ed307de0e085730ec1"}, + {file = "msgpack-1.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:7760f85956c415578c17edb39eed99f9181a48375b0d4a94076d84148cf67b2d"}, + {file = "msgpack-1.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:449e57cc1ff18d3b444eb554e44613cffcccb32805d16726a5494038c3b93dab"}, + {file = "msgpack-1.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d603de2b8d2ea3f3bcb2efe286849aa7a81531abc52d8454da12f46235092bcb"}, + {file = "msgpack-1.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f5d88c99f64c456413d74a975bd605a9b0526293218a3b77220a2c15458ba9"}, + {file = "msgpack-1.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6916c78f33602ecf0509cc40379271ba0f9ab572b066bd4bdafd7434dee4bc6e"}, + {file = "msgpack-1.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81fc7ba725464651190b196f3cd848e8553d4d510114a954681fd0b9c479d7e1"}, + {file = "msgpack-1.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d5b5b962221fa2c5d3a7f8133f9abffc114fe218eb4365e40f17732ade576c8e"}, + {file = "msgpack-1.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:77ccd2af37f3db0ea59fb280fa2165bf1b096510ba9fe0cc2bf8fa92a22fdb43"}, + {file = "msgpack-1.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b17be2478b622939e39b816e0aa8242611cc8d3583d1cd8ec31b249f04623243"}, + {file = "msgpack-1.0.4-cp38-cp38-win32.whl", hash = "sha256:2bb8cdf50dd623392fa75525cce44a65a12a00c98e1e37bf0fb08ddce2ff60d2"}, + {file = "msgpack-1.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:26b8feaca40a90cbe031b03d82b2898bf560027160d3eae1423f4a67654ec5d6"}, + {file = "msgpack-1.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:462497af5fd4e0edbb1559c352ad84f6c577ffbbb708566a0abaaa84acd9f3ae"}, + {file = "msgpack-1.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2999623886c5c02deefe156e8f869c3b0aaeba14bfc50aa2486a0415178fce55"}, + {file = "msgpack-1.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f0029245c51fd9473dc1aede1160b0a29f4a912e6b1dd353fa6d317085b219da"}, + {file = "msgpack-1.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed6f7b854a823ea44cf94919ba3f727e230da29feb4a99711433f25800cf747f"}, + {file = "msgpack-1.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0df96d6eaf45ceca04b3f3b4b111b86b33785683d682c655063ef8057d61fd92"}, + {file = "msgpack-1.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6a4192b1ab40f8dca3f2877b70e63799d95c62c068c84dc028b40a6cb03ccd0f"}, + {file = "msgpack-1.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0e3590f9fb9f7fbc36df366267870e77269c03172d086fa76bb4eba8b2b46624"}, + {file = "msgpack-1.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1576bd97527a93c44fa856770197dec00d223b0b9f36ef03f65bac60197cedf8"}, + {file = "msgpack-1.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:63e29d6e8c9ca22b21846234913c3466b7e4ee6e422f205a2988083de3b08cae"}, + {file = "msgpack-1.0.4-cp39-cp39-win32.whl", hash = "sha256:fb62ea4b62bfcb0b380d5680f9a4b3f9a2d166d9394e9bbd9666c0ee09a3645c"}, + {file = "msgpack-1.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:4d5834a2a48965a349da1c5a79760d94a1a0172fbb5ab6b5b33cbf8447e109ce"}, + {file = "msgpack-1.0.4.tar.gz", hash = "sha256:f5d869c18f030202eb412f08b28d2afeea553d6613aee89e200d7aca7ef01f5f"}, +] multidict = [ {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2"}, {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3"}, @@ -768,8 +862,8 @@ pathspec = [ {file = "pathspec-0.10.1.tar.gz", hash = "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d"}, ] pbr = [ - {file = "pbr-5.10.0-py2.py3-none-any.whl", hash = "sha256:da3e18aac0a3c003e9eea1a81bd23e5a3a75d745670dcf736317b7d966887fdf"}, - {file = "pbr-5.10.0.tar.gz", hash = "sha256:cfcc4ff8e698256fc17ea3ff796478b050852585aa5bae79ecd05b2ab7b39b9a"}, + {file = "pbr-5.11.0-py2.py3-none-any.whl", hash = "sha256:db2317ff07c84c4c63648c9064a79fe9d9f5c7ce85a9099d4b6258b3db83225a"}, + {file = "pbr-5.11.0.tar.gz", hash = "sha256:b97bc6695b2aff02144133c2e7399d5885223d42b7912ffaec2ca3898e673bfe"}, ] platformdirs = [ {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, @@ -779,6 +873,8 @@ pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] +polywrap-manifest = [] +polywrap-msgpack = [] py = [ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, @@ -788,16 +884,16 @@ pydocstyle = [ {file = "pydocstyle-6.1.1.tar.gz", hash = "sha256:1d41b7c459ba0ee6c345f2eb9ae827cab14a7533a88c5c6f7e94923f72df92dc"}, ] pylint = [ - {file = "pylint-2.15.4-py3-none-any.whl", hash = "sha256:629cf1dbdfb6609d7e7a45815a8bb59300e34aa35783b5ac563acaca2c4022e9"}, - {file = "pylint-2.15.4.tar.gz", hash = "sha256:5441e9294335d354b7bad57c1044e5bd7cce25c433475d76b440e53452fa5cb8"}, + {file = "pylint-2.15.5-py3-none-any.whl", hash = "sha256:c2108037eb074334d9e874dc3c783752cc03d0796c88c9a9af282d0f161a1004"}, + {file = "pylint-2.15.5.tar.gz", hash = "sha256:3b120505e5af1d06a5ad76b55d8660d44bf0f2fc3c59c2bdd94e39188ee3a4df"}, ] pyparsing = [ {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, ] pyright = [ - {file = "pyright-1.1.275-py3-none-any.whl", hash = "sha256:83072f509e18160f2661a2276ac85f471112dbcfc1dadf0cbb0393a4d56db72a"}, - {file = "pyright-1.1.275.tar.gz", hash = "sha256:f0061ce47c785b9b64745b7648ff9732a99811ef7c7f3f88642aa2cb7868c81e"}, + {file = "pyright-1.1.276-py3-none-any.whl", hash = "sha256:d9388405ea20a55446cb7809b1746158bdf557f9162b476f5aed71173f4ffd2b"}, + {file = "pyright-1.1.276.tar.gz", hash = "sha256:debaa08f6975dd381b9408880e36bb781ba7a1a6cf24b7868e83be41b6c8cb75"}, ] pytest = [ {file = "pytest-7.1.3-py3-none-any.whl", hash = "sha256:1377bda3466d70b55e3f5cecfa55bb7cfcf219c7964629b967c37cf0bda818b7"}, @@ -859,8 +955,8 @@ snowballstemmer = [ {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] stevedore = [ - {file = "stevedore-4.0.1-py3-none-any.whl", hash = "sha256:01645addb67beff04c7cfcbb0a6af8327d2efc3380b0f034aa316d4576c4d470"}, - {file = "stevedore-4.0.1.tar.gz", hash = "sha256:9a23111a6e612270c591fd31ff3321c6b5f3d5f3dabb1427317a5ab608fc261a"}, + {file = "stevedore-4.1.0-py3-none-any.whl", hash = "sha256:3b1cbd592a87315f000d05164941ee5e164899f8fc0ce9a00bb0f321f40ef93e"}, + {file = "stevedore-4.1.0.tar.gz", hash = "sha256:02518a8f0d6d29be8a445b7f2ac63753ff29e8f2a2faa01777568d5500d777a6"}, ] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, diff --git a/packages/polywrap-core/polywrap_core/types/client.py b/packages/polywrap-core/polywrap_core/types/client.py index aea397cd..754409b2 100644 --- a/packages/polywrap-core/polywrap_core/types/client.py +++ b/packages/polywrap-core/polywrap_core/types/client.py @@ -4,6 +4,8 @@ from dataclasses import dataclass, field from typing import List, Optional, Union +from polywrap_manifest import DeserializeManifestOptions, AnyWrapManifest + from .env import Env from .invoke import Invoker from .uri import Uri @@ -18,26 +20,26 @@ class ClientConfig: @dataclass(slots=True, kw_only=True) -class Contextualized: - context_id: Optional[str] = None - - -@dataclass(slots=True, kw_only=True) -class GetEnvsOptions(Contextualized): +class GetEnvsOptions: pass @dataclass(slots=True, kw_only=True) -class GetUriResolversOptions(Contextualized): +class GetUriResolversOptions: pass @dataclass(slots=True, kw_only=True) -class GetFileOptions(Contextualized): +class GetFileOptions: path: str encoding: Optional[str] = "utf-8" +@dataclass(slots=True, kw_only=True) +class GetManifestOptions(DeserializeManifestOptions): + pass + + class Client(Invoker, UriResolverHandler): @abstractmethod def get_envs(self, options: Optional[GetEnvsOptions] = None) -> List[Env]: @@ -52,9 +54,13 @@ def get_env_by_uri( @abstractmethod def get_uri_resolver( self, options: Optional[GetUriResolversOptions] = None - ) -> List[IUriResolver]: + ) -> IUriResolver: pass @abstractmethod async def get_file(self, uri: Uri, options: GetFileOptions) -> Union[bytes, str]: pass + + @abstractmethod + async def get_manifest(self, uri: Uri, options: Optional[GetManifestOptions] = None) -> AnyWrapManifest: + pass diff --git a/packages/polywrap-core/polywrap_core/types/file_reader.py b/packages/polywrap-core/polywrap_core/types/file_reader.py index 1d7fc1b6..70433e33 100644 --- a/packages/polywrap-core/polywrap_core/types/file_reader.py +++ b/packages/polywrap-core/polywrap_core/types/file_reader.py @@ -3,5 +3,5 @@ class IFileReader(ABC): @abstractmethod - async def read_file(self, file_path: str) -> bytearray: + async def read_file(self, file_path: str) -> bytes: pass diff --git a/packages/polywrap-core/polywrap_core/types/invoke.py b/packages/polywrap-core/polywrap_core/types/invoke.py index 029a76a7..b46d2cf6 100644 --- a/packages/polywrap-core/polywrap_core/types/invoke.py +++ b/packages/polywrap-core/polywrap_core/types/invoke.py @@ -60,5 +60,5 @@ async def invoke(self, options: InvokerOptions) -> InvokeResult: class Invocable(ABC): @abstractmethod - async def invoke(self, invoker: Invoker, options: InvokeOptions) -> InvocableResult: + async def invoke(self, options: InvokeOptions, invoker: Invoker) -> InvocableResult: pass diff --git a/packages/polywrap-core/polywrap_core/types/wasm_package.py b/packages/polywrap-core/polywrap_core/types/wasm_package.py index 6e9fdba6..cc32b02a 100644 --- a/packages/polywrap-core/polywrap_core/types/wasm_package.py +++ b/packages/polywrap-core/polywrap_core/types/wasm_package.py @@ -1,9 +1,17 @@ from abc import ABC, abstractmethod +from typing import Optional +from polywrap_manifest import AnyWrapManifest + +from .client import GetManifestOptions from .wrapper import Wrapper class IWasmPackage(ABC): @abstractmethod - def create_wrapper(self) -> Wrapper: + async def create_wrapper(self) -> Wrapper: + pass + + @abstractmethod + async def get_manifest(self, options: Optional[GetManifestOptions] = None) -> AnyWrapManifest: pass diff --git a/packages/polywrap-core/polywrap_core/types/wrapper.py b/packages/polywrap-core/polywrap_core/types/wrapper.py index 8570a4e1..f5f06e7a 100644 --- a/packages/polywrap-core/polywrap_core/types/wrapper.py +++ b/packages/polywrap-core/polywrap_core/types/wrapper.py @@ -1,7 +1,9 @@ from abc import abstractmethod from typing import Dict, Union -from .client import Client, GetFileOptions +from polywrap_manifest import AnyWrapManifest + +from .client import GetFileOptions from .invoke import Invocable, InvocableResult, InvokeOptions, Invoker @@ -20,9 +22,13 @@ async def invoke(self, options: InvokeOptions, invoker: Invoker) -> InvocableRes @abstractmethod async def get_file( - self, options: GetFileOptions, client: Client + self, options: GetFileOptions ) -> Union[str, bytes]: pass + @abstractmethod + def get_manifest(self) -> AnyWrapManifest: + pass + WrapperCache = Dict[str, Wrapper] diff --git a/packages/polywrap-core/pyproject.toml b/packages/polywrap-core/pyproject.toml index 3d23abf5..3c128519 100644 --- a/packages/polywrap-core/pyproject.toml +++ b/packages/polywrap-core/pyproject.toml @@ -13,6 +13,7 @@ python = "^3.10" gql = "3.4.0" graphql-core = "^3.2.1" result = "^0.8.0" +polywrap-manifest = { path = "../polywrap-manifest", develop = true } [tool.poetry.dev-dependencies] pytest = "^7.1.2" diff --git a/packages/polywrap-manifest/poetry.lock b/packages/polywrap-manifest/poetry.lock index 329b24b0..69b2b96d 100644 --- a/packages/polywrap-manifest/poetry.lock +++ b/packages/polywrap-manifest/poetry.lock @@ -573,7 +573,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" name = "pydantic" version = "1.10.2" description = "Data validation and settings management using python type hints" -category = "dev" +category = "main" optional = false python-versions = ">=3.7" @@ -891,7 +891,7 @@ python-versions = ">=3.6" name = "typing-extensions" version = "4.4.0" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "dev" +category = "main" optional = false python-versions = ">=3.7" @@ -936,7 +936,7 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [metadata] lock-version = "1.1" python-versions = "^3.10" -content-hash = "828f376028884e022334097fb1cc276f1495d12700379d81f92900879635994b" +content-hash = "11d5a79a1183aa536e6baeef537476f7dc6a41ef6c109fa1c872a62e733d22dd" [metadata.files] anyio = [ diff --git a/packages/polywrap-manifest/pyproject.toml b/packages/polywrap-manifest/pyproject.toml index b4ccef68..b4487d46 100644 --- a/packages/polywrap-manifest/pyproject.toml +++ b/packages/polywrap-manifest/pyproject.toml @@ -12,6 +12,7 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.10" polywrap-msgpack = { path = "../polywrap-msgpack", develop = true } +pydantic = "^1.10.2" [tool.poetry.dev-dependencies] pytest = "^7.1.2" diff --git a/packages/polywrap-manifest/tests/test_manifest.py b/packages/polywrap-manifest/tests/test_manifest.py index ea023188..8b0d4dc0 100644 --- a/packages/polywrap-manifest/tests/test_manifest.py +++ b/packages/polywrap-manifest/tests/test_manifest.py @@ -1,12 +1,14 @@ -import pytest from pathlib import Path + +import pytest +from polywrap_msgpack import msgpack_decode, msgpack_encode +from pydantic import ValidationError + from polywrap_manifest import ( - deserialize_wrap_manifest, - WrapManifest_0_1, DeserializeManifestOptions, + WrapManifest_0_1, + deserialize_wrap_manifest, ) -from pydantic import ValidationError -from polywrap_msgpack import msgpack_encode, msgpack_decode @pytest.fixture @@ -21,7 +23,9 @@ def msgpack_manifest(test_case_dir: Path) -> bytes: def test_deserialize_without_validate(msgpack_manifest: bytes): - deserialized = deserialize_wrap_manifest(msgpack_manifest, DeserializeManifestOptions(no_validate=True)) + deserialized = deserialize_wrap_manifest( + msgpack_manifest, DeserializeManifestOptions(no_validate=True) + ) assert isinstance(deserialized, WrapManifest_0_1) assert deserialized.version.value == "0.1" assert deserialized.abi.version == "0.1" @@ -58,9 +62,9 @@ def test_unaccepted_field(msgpack_manifest: bytes): def test_invalid_name(msgpack_manifest: bytes): decoded = msgpack_decode(msgpack_manifest) - decoded["name"] = "foo bar baz $%##$@#$@#$@#$#$", + decoded["name"] = ("foo bar baz $%##$@#$@#$@#$#$",) manifest: bytes = msgpack_encode(decoded) with pytest.raises(ValidationError) as e: deserialize_wrap_manifest(manifest) - assert e.match("str type expected") \ No newline at end of file + assert e.match("str type expected") diff --git a/packages/polywrap-uri-resolvers/poetry.lock b/packages/polywrap-uri-resolvers/poetry.lock index 457c0846..5cd8cb1b 100644 --- a/packages/polywrap-uri-resolvers/poetry.lock +++ b/packages/polywrap-uri-resolvers/poetry.lock @@ -1,6 +1,6 @@ [[package]] name = "astroid" -version = "2.12.11" +version = "2.12.12" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false @@ -278,7 +278,7 @@ python-versions = ">=3.7" [[package]] name = "pbr" -version = "5.10.0" +version = "5.11.0" description = "Python Build Reasonableness" category = "dev" optional = false @@ -320,12 +320,30 @@ develop = true [package.dependencies] gql = "3.4.0" graphql-core = "^3.2.1" +polywrap-manifest = {path = "../polywrap-manifest", develop = true} result = "^0.8.0" [package.source] type = "directory" url = "../polywrap-core" +[[package]] +name = "polywrap-manifest" +version = "0.1.0" +description = "WRAP manifest" +category = "main" +optional = false +python-versions = "^3.10" +develop = true + +[package.dependencies] +polywrap-msgpack = {path = "../polywrap-msgpack", develop = true} +pydantic = "^1.10.2" + +[package.source] +type = "directory" +url = "../polywrap-manifest" + [[package]] name = "polywrap-msgpack" version = "0.1.0" @@ -353,6 +371,7 @@ develop = true [package.dependencies] polywrap-core = {path = "../polywrap-core", develop = true} +polywrap-manifest = {path = "../polywrap-manifest", develop = true} polywrap-msgpack = {path = "../polywrap-msgpack", develop = true} unsync = "^1.4.0" wasmtime = "^1.0.1" @@ -369,6 +388,21 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +[[package]] +name = "pydantic" +version = "1.10.2" +description = "Data validation and settings management using python type hints" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +typing-extensions = ">=4.1.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + [[package]] name = "pydocstyle" version = "6.1.1" @@ -385,14 +419,14 @@ toml = ["toml"] [[package]] name = "pylint" -version = "2.15.4" +version = "2.15.5" description = "python code static checker" category = "dev" optional = false python-versions = ">=3.7.2" [package.dependencies] -astroid = ">=2.12.11,<=2.14.0-dev0" +astroid = ">=2.12.12,<=2.14.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = ">=0.2" isort = ">=4.2.5,<6" @@ -418,7 +452,7 @@ diagrams = ["railroad-diagrams", "jinja2"] [[package]] name = "pyright" -version = "1.1.275" +version = "1.1.276" description = "Command line wrapper for pyright" category = "dev" optional = false @@ -507,7 +541,7 @@ python-versions = "*" [[package]] name = "stevedore" -version = "4.0.1" +version = "4.1.0" description = "Manage dynamic plugins for Python applications" category = "dev" optional = false @@ -578,6 +612,14 @@ tox = {version = ">=3.7.0", markers = "python_version >= \"3\""} [package.extras] test = ["pylint", "pycodestyle", "pytest", "coverage"] +[[package]] +name = "typing-extensions" +version = "4.4.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" +optional = false +python-versions = ">=3.7" + [[package]] name = "unsync" version = "1.4.0" @@ -641,8 +683,8 @@ content-hash = "dcda29cfe682bf2ed7c21342a654077308b7cd96fcca19749790dfe0555a5c99 [metadata.files] astroid = [ - {file = "astroid-2.12.11-py3-none-any.whl", hash = "sha256:867a756bbf35b7bc07b35bfa6522acd01f91ad9919df675e8428072869792dce"}, - {file = "astroid-2.12.11.tar.gz", hash = "sha256:2df4f9980c4511474687895cbfdb8558293c1a826d9118bb09233d7c2bff1c83"}, + {file = "astroid-2.12.12-py3-none-any.whl", hash = "sha256:72702205200b2a638358369d90c222d74ebc376787af8fb2f7f2a86f7b5cc85f"}, + {file = "astroid-2.12.12.tar.gz", hash = "sha256:1c00a14f5a3ed0339d38d2e2e5b74ea2591df5861c0936bb292b84ccf3a78d83"}, ] attrs = [ {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, @@ -902,8 +944,8 @@ pathspec = [ {file = "pathspec-0.10.1.tar.gz", hash = "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d"}, ] pbr = [ - {file = "pbr-5.10.0-py2.py3-none-any.whl", hash = "sha256:da3e18aac0a3c003e9eea1a81bd23e5a3a75d745670dcf736317b7d966887fdf"}, - {file = "pbr-5.10.0.tar.gz", hash = "sha256:cfcc4ff8e698256fc17ea3ff796478b050852585aa5bae79ecd05b2ab7b39b9a"}, + {file = "pbr-5.11.0-py2.py3-none-any.whl", hash = "sha256:db2317ff07c84c4c63648c9064a79fe9d9f5c7ce85a9099d4b6258b3db83225a"}, + {file = "pbr-5.11.0.tar.gz", hash = "sha256:b97bc6695b2aff02144133c2e7399d5885223d42b7912ffaec2ca3898e673bfe"}, ] platformdirs = [ {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, @@ -914,27 +956,66 @@ pluggy = [ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] polywrap-core = [] +polywrap-manifest = [] polywrap-msgpack = [] polywrap-wasm = [] py = [ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, ] +pydantic = [ + {file = "pydantic-1.10.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bb6ad4489af1bac6955d38ebcb95079a836af31e4c4f74aba1ca05bb9f6027bd"}, + {file = "pydantic-1.10.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1f5a63a6dfe19d719b1b6e6106561869d2efaca6167f84f5ab9347887d78b98"}, + {file = "pydantic-1.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:352aedb1d71b8b0736c6d56ad2bd34c6982720644b0624462059ab29bd6e5912"}, + {file = "pydantic-1.10.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19b3b9ccf97af2b7519c42032441a891a5e05c68368f40865a90eb88833c2559"}, + {file = "pydantic-1.10.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e9069e1b01525a96e6ff49e25876d90d5a563bc31c658289a8772ae186552236"}, + {file = "pydantic-1.10.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:355639d9afc76bcb9b0c3000ddcd08472ae75318a6eb67a15866b87e2efa168c"}, + {file = "pydantic-1.10.2-cp310-cp310-win_amd64.whl", hash = "sha256:ae544c47bec47a86bc7d350f965d8b15540e27e5aa4f55170ac6a75e5f73b644"}, + {file = "pydantic-1.10.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4c805731c33a8db4b6ace45ce440c4ef5336e712508b4d9e1aafa617dc9907f"}, + {file = "pydantic-1.10.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d49f3db871575e0426b12e2f32fdb25e579dea16486a26e5a0474af87cb1ab0a"}, + {file = "pydantic-1.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c90345ec7dd2f1bcef82ce49b6235b40f282b94d3eec47e801baf864d15525"}, + {file = "pydantic-1.10.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b5ba54d026c2bd2cb769d3468885f23f43710f651688e91f5fb1edcf0ee9283"}, + {file = "pydantic-1.10.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:05e00dbebbe810b33c7a7362f231893183bcc4251f3f2ff991c31d5c08240c42"}, + {file = "pydantic-1.10.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2d0567e60eb01bccda3a4df01df677adf6b437958d35c12a3ac3e0f078b0ee52"}, + {file = "pydantic-1.10.2-cp311-cp311-win_amd64.whl", hash = "sha256:c6f981882aea41e021f72779ce2a4e87267458cc4d39ea990729e21ef18f0f8c"}, + {file = "pydantic-1.10.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4aac8e7103bf598373208f6299fa9a5cfd1fc571f2d40bf1dd1955a63d6eeb5"}, + {file = "pydantic-1.10.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a7b66c3f499108b448f3f004801fcd7d7165fb4200acb03f1c2402da73ce4c"}, + {file = "pydantic-1.10.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bedf309630209e78582ffacda64a21f96f3ed2e51fbf3962d4d488e503420254"}, + {file = "pydantic-1.10.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9300fcbebf85f6339a02c6994b2eb3ff1b9c8c14f502058b5bf349d42447dcf5"}, + {file = "pydantic-1.10.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:216f3bcbf19c726b1cc22b099dd409aa371f55c08800bcea4c44c8f74b73478d"}, + {file = "pydantic-1.10.2-cp37-cp37m-win_amd64.whl", hash = "sha256:dd3f9a40c16daf323cf913593083698caee97df2804aa36c4b3175d5ac1b92a2"}, + {file = "pydantic-1.10.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b97890e56a694486f772d36efd2ba31612739bc6f3caeee50e9e7e3ebd2fdd13"}, + {file = "pydantic-1.10.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9cabf4a7f05a776e7793e72793cd92cc865ea0e83a819f9ae4ecccb1b8aa6116"}, + {file = "pydantic-1.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06094d18dd5e6f2bbf93efa54991c3240964bb663b87729ac340eb5014310624"}, + {file = "pydantic-1.10.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc78cc83110d2f275ec1970e7a831f4e371ee92405332ebfe9860a715f8336e1"}, + {file = "pydantic-1.10.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ee433e274268a4b0c8fde7ad9d58ecba12b069a033ecc4645bb6303c062d2e9"}, + {file = "pydantic-1.10.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7c2abc4393dea97a4ccbb4ec7d8658d4e22c4765b7b9b9445588f16c71ad9965"}, + {file = "pydantic-1.10.2-cp38-cp38-win_amd64.whl", hash = "sha256:0b959f4d8211fc964772b595ebb25f7652da3f22322c007b6fed26846a40685e"}, + {file = "pydantic-1.10.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c33602f93bfb67779f9c507e4d69451664524389546bacfe1bee13cae6dc7488"}, + {file = "pydantic-1.10.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5760e164b807a48a8f25f8aa1a6d857e6ce62e7ec83ea5d5c5a802eac81bad41"}, + {file = "pydantic-1.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6eb843dcc411b6a2237a694f5e1d649fc66c6064d02b204a7e9d194dff81eb4b"}, + {file = "pydantic-1.10.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b8795290deaae348c4eba0cebb196e1c6b98bdbe7f50b2d0d9a4a99716342fe"}, + {file = "pydantic-1.10.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e0bedafe4bc165ad0a56ac0bd7695df25c50f76961da29c050712596cf092d6d"}, + {file = "pydantic-1.10.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2e05aed07fa02231dbf03d0adb1be1d79cabb09025dd45aa094aa8b4e7b9dcda"}, + {file = "pydantic-1.10.2-cp39-cp39-win_amd64.whl", hash = "sha256:c1ba1afb396148bbc70e9eaa8c06c1716fdddabaf86e7027c5988bae2a829ab6"}, + {file = "pydantic-1.10.2-py3-none-any.whl", hash = "sha256:1b6ee725bd6e83ec78b1aa32c5b1fa67a3a65badddde3976bca5fe4568f27709"}, + {file = "pydantic-1.10.2.tar.gz", hash = "sha256:91b8e218852ef6007c2b98cd861601c6a09f1aa32bbbb74fab5b1c33d4a1e410"}, +] pydocstyle = [ {file = "pydocstyle-6.1.1-py3-none-any.whl", hash = "sha256:6987826d6775056839940041beef5c08cc7e3d71d63149b48e36727f70144dc4"}, {file = "pydocstyle-6.1.1.tar.gz", hash = "sha256:1d41b7c459ba0ee6c345f2eb9ae827cab14a7533a88c5c6f7e94923f72df92dc"}, ] pylint = [ - {file = "pylint-2.15.4-py3-none-any.whl", hash = "sha256:629cf1dbdfb6609d7e7a45815a8bb59300e34aa35783b5ac563acaca2c4022e9"}, - {file = "pylint-2.15.4.tar.gz", hash = "sha256:5441e9294335d354b7bad57c1044e5bd7cce25c433475d76b440e53452fa5cb8"}, + {file = "pylint-2.15.5-py3-none-any.whl", hash = "sha256:c2108037eb074334d9e874dc3c783752cc03d0796c88c9a9af282d0f161a1004"}, + {file = "pylint-2.15.5.tar.gz", hash = "sha256:3b120505e5af1d06a5ad76b55d8660d44bf0f2fc3c59c2bdd94e39188ee3a4df"}, ] pyparsing = [ {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, ] pyright = [ - {file = "pyright-1.1.275-py3-none-any.whl", hash = "sha256:83072f509e18160f2661a2276ac85f471112dbcfc1dadf0cbb0393a4d56db72a"}, - {file = "pyright-1.1.275.tar.gz", hash = "sha256:f0061ce47c785b9b64745b7648ff9732a99811ef7c7f3f88642aa2cb7868c81e"}, + {file = "pyright-1.1.276-py3-none-any.whl", hash = "sha256:d9388405ea20a55446cb7809b1746158bdf557f9162b476f5aed71173f4ffd2b"}, + {file = "pyright-1.1.276.tar.gz", hash = "sha256:debaa08f6975dd381b9408880e36bb781ba7a1a6cf24b7868e83be41b6c8cb75"}, ] pytest = [ {file = "pytest-7.1.3-py3-none-any.whl", hash = "sha256:1377bda3466d70b55e3f5cecfa55bb7cfcf219c7964629b967c37cf0bda818b7"}, @@ -996,8 +1077,8 @@ snowballstemmer = [ {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] stevedore = [ - {file = "stevedore-4.0.1-py3-none-any.whl", hash = "sha256:01645addb67beff04c7cfcbb0a6af8327d2efc3380b0f034aa316d4576c4d470"}, - {file = "stevedore-4.0.1.tar.gz", hash = "sha256:9a23111a6e612270c591fd31ff3321c6b5f3d5f3dabb1427317a5ab608fc261a"}, + {file = "stevedore-4.1.0-py3-none-any.whl", hash = "sha256:3b1cbd592a87315f000d05164941ee5e164899f8fc0ce9a00bb0f321f40ef93e"}, + {file = "stevedore-4.1.0.tar.gz", hash = "sha256:02518a8f0d6d29be8a445b7f2ac63753ff29e8f2a2faa01777568d5500d777a6"}, ] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, @@ -1019,6 +1100,10 @@ tox-poetry = [ {file = "tox-poetry-0.4.1.tar.gz", hash = "sha256:2395808e1ce487b5894c10f2202e14702bfa6d6909c0d1e525170d14809ac7ef"}, {file = "tox_poetry-0.4.1-py2.py3-none-any.whl", hash = "sha256:11d9cd4e51d4cd9484b3ba63f2650ab4cfb4096e5f0682ecf561ddfc3c8e8c92"}, ] +typing-extensions = [ + {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, + {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, +] unsync = [ {file = "unsync-1.4.0.tar.gz", hash = "sha256:a29e0f8952ffb0b3a0453ce436819a5a1ba2febbb5caa707c319f6f98d35f3c5"}, ] diff --git a/packages/polywrap-uri-resolvers/polywrap_uri_resolvers/fs_resolver.py b/packages/polywrap-uri-resolvers/polywrap_uri_resolvers/fs_resolver.py index 886e0ac1..0ad82013 100644 --- a/packages/polywrap-uri-resolvers/polywrap_uri_resolvers/fs_resolver.py +++ b/packages/polywrap-uri-resolvers/polywrap_uri_resolvers/fs_resolver.py @@ -1,3 +1,4 @@ +from pathlib import Path from polywrap_core import ( Client, IFileReader, @@ -7,7 +8,7 @@ UriPackage, UriPackageOrWrapper, ) -from polywrap_wasm import WasmPackage +from polywrap_wasm import WasmPackage, WRAP_MODULE_PATH, WRAP_MANIFEST_PATH from result import Ok, Result @@ -29,12 +30,15 @@ async def try_resolve_uri( if uri.authority not in ["fs", "file"]: return Ok(uri) - wasm_module = await self.file_reader.read_file(uri.path) + wrapper_path = Path(uri.path) + wasm_module = await self.file_reader.read_file(str(wrapper_path / WRAP_MODULE_PATH)) + manifest = await self.file_reader.read_file(str(wrapper_path / WRAP_MANIFEST_PATH)) + return Ok( UriPackage( uri=uri, package=WasmPackage( - wasm_module=wasm_module, file_reader=self.file_reader + wasm_module=wasm_module, manifest=manifest, file_reader=self.file_reader ), ) ) diff --git a/packages/polywrap-uri-resolvers/tests/cases/simple/wrap.info b/packages/polywrap-uri-resolvers/tests/cases/simple/wrap.info new file mode 100644 index 00000000..e0ca0d11 --- /dev/null +++ b/packages/polywrap-uri-resolvers/tests/cases/simple/wrap.info @@ -0,0 +1 @@ +„§version£0.1¤name¦Simple¤type¤wasm£abi‚§version£0.1ªmoduleTypeƒ¤type¦Module¤kindÌ€§methods‘†¤name¬simpleMethod¦return…¤type¦String¤name¬simpleMethod¨requiredäkind"¦scalar„¤name¬simpleMethod¤type¦String¨requiredäkind¤type¦Method¤kind@¨requiredéarguments‘…¤type¦String¤name£arg¨requiredäkind"¦scalar„¤name£arg¤type¦String¨requiredäkind \ No newline at end of file diff --git a/packages/polywrap-wasm/tests/cases/simple_wrap_invoke.wasm b/packages/polywrap-uri-resolvers/tests/cases/simple/wrap.wasm similarity index 100% rename from packages/polywrap-wasm/tests/cases/simple_wrap_invoke.wasm rename to packages/polywrap-uri-resolvers/tests/cases/simple/wrap.wasm diff --git a/packages/polywrap-uri-resolvers/tests/test_file_resolver.py b/packages/polywrap-uri-resolvers/tests/test_file_resolver.py index 93f653fb..aa9e6c11 100644 --- a/packages/polywrap-uri-resolvers/tests/test_file_resolver.py +++ b/packages/polywrap-uri-resolvers/tests/test_file_resolver.py @@ -16,7 +16,7 @@ def fs_resolver(file_reader: IFileReader): @pytest.mark.asyncio async def test_file_resolver(fs_resolver: IUriResolver): - path = Path(__file__).parent.parent.joinpath("README.md") + path = Path(__file__).parent / "cases" / "simple" uri = Uri(f"wrap://fs/{path}") result = await fs_resolver.try_resolve_uri(uri, None, None) # type: ignore diff --git a/packages/polywrap-wasm/poetry.lock b/packages/polywrap-wasm/poetry.lock index 8cb31cc1..43a92204 100644 --- a/packages/polywrap-wasm/poetry.lock +++ b/packages/polywrap-wasm/poetry.lock @@ -1,6 +1,6 @@ [[package]] name = "astroid" -version = "2.12.11" +version = "2.12.12" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false @@ -278,7 +278,7 @@ python-versions = ">=3.7" [[package]] name = "pbr" -version = "5.10.0" +version = "5.11.0" description = "Python Build Reasonableness" category = "dev" optional = false @@ -320,12 +320,29 @@ develop = true [package.dependencies] gql = "3.4.0" graphql-core = "^3.2.1" +polywrap-manifest = {path = "../polywrap-manifest", develop = true} result = "^0.8.0" [package.source] type = "directory" url = "../polywrap-core" +[[package]] +name = "polywrap-manifest" +version = "0.1.0" +description = "WRAP manifest" +category = "main" +optional = false +python-versions = "^3.10" +develop = true + +[package.dependencies] +polywrap-msgpack = {path = "../polywrap-msgpack", develop = true} + +[package.source] +type = "directory" +url = "../polywrap-manifest" + [[package]] name = "polywrap-msgpack" version = "0.1.0" @@ -350,6 +367,21 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +[[package]] +name = "pydantic" +version = "1.10.2" +description = "Data validation and settings management using python type hints" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +typing-extensions = ">=4.1.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + [[package]] name = "pydocstyle" version = "6.1.1" @@ -366,14 +398,14 @@ toml = ["toml"] [[package]] name = "pylint" -version = "2.15.4" +version = "2.15.5" description = "python code static checker" category = "dev" optional = false python-versions = ">=3.7.2" [package.dependencies] -astroid = ">=2.12.11,<=2.14.0-dev0" +astroid = ">=2.12.12,<=2.14.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = ">=0.2" isort = ">=4.2.5,<6" @@ -399,7 +431,7 @@ diagrams = ["railroad-diagrams", "jinja2"] [[package]] name = "pyright" -version = "1.1.275" +version = "1.1.276" description = "Command line wrapper for pyright" category = "dev" optional = false @@ -488,7 +520,7 @@ python-versions = "*" [[package]] name = "stevedore" -version = "4.0.1" +version = "4.1.0" description = "Manage dynamic plugins for Python applications" category = "dev" optional = false @@ -559,6 +591,14 @@ tox = {version = ">=3.7.0", markers = "python_version >= \"3\""} [package.extras] test = ["pylint", "pycodestyle", "pytest", "coverage"] +[[package]] +name = "typing-extensions" +version = "4.4.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "dev" +optional = false +python-versions = ">=3.7" + [[package]] name = "unsync" version = "1.4.0" @@ -618,12 +658,12 @@ multidict = ">=4.0" [metadata] lock-version = "1.1" python-versions = "^3.10" -content-hash = "70f6b9d295f222bf160e4a09a19dbe7f694a9b57326da96b5fc3aa25c8fe5aa5" +content-hash = "20a8d7f0987900f8d8962723211c5ffb3cee444e789c8ef31f1d56e6744d4cf2" [metadata.files] astroid = [ - {file = "astroid-2.12.11-py3-none-any.whl", hash = "sha256:867a756bbf35b7bc07b35bfa6522acd01f91ad9919df675e8428072869792dce"}, - {file = "astroid-2.12.11.tar.gz", hash = "sha256:2df4f9980c4511474687895cbfdb8558293c1a826d9118bb09233d7c2bff1c83"}, + {file = "astroid-2.12.12-py3-none-any.whl", hash = "sha256:72702205200b2a638358369d90c222d74ebc376787af8fb2f7f2a86f7b5cc85f"}, + {file = "astroid-2.12.12.tar.gz", hash = "sha256:1c00a14f5a3ed0339d38d2e2e5b74ea2591df5861c0936bb292b84ccf3a78d83"}, ] attrs = [ {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, @@ -883,8 +923,8 @@ pathspec = [ {file = "pathspec-0.10.1.tar.gz", hash = "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d"}, ] pbr = [ - {file = "pbr-5.10.0-py2.py3-none-any.whl", hash = "sha256:da3e18aac0a3c003e9eea1a81bd23e5a3a75d745670dcf736317b7d966887fdf"}, - {file = "pbr-5.10.0.tar.gz", hash = "sha256:cfcc4ff8e698256fc17ea3ff796478b050852585aa5bae79ecd05b2ab7b39b9a"}, + {file = "pbr-5.11.0-py2.py3-none-any.whl", hash = "sha256:db2317ff07c84c4c63648c9064a79fe9d9f5c7ce85a9099d4b6258b3db83225a"}, + {file = "pbr-5.11.0.tar.gz", hash = "sha256:b97bc6695b2aff02144133c2e7399d5885223d42b7912ffaec2ca3898e673bfe"}, ] platformdirs = [ {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, @@ -895,26 +935,65 @@ pluggy = [ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] polywrap-core = [] +polywrap-manifest = [] polywrap-msgpack = [] py = [ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, ] +pydantic = [ + {file = "pydantic-1.10.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bb6ad4489af1bac6955d38ebcb95079a836af31e4c4f74aba1ca05bb9f6027bd"}, + {file = "pydantic-1.10.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1f5a63a6dfe19d719b1b6e6106561869d2efaca6167f84f5ab9347887d78b98"}, + {file = "pydantic-1.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:352aedb1d71b8b0736c6d56ad2bd34c6982720644b0624462059ab29bd6e5912"}, + {file = "pydantic-1.10.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19b3b9ccf97af2b7519c42032441a891a5e05c68368f40865a90eb88833c2559"}, + {file = "pydantic-1.10.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e9069e1b01525a96e6ff49e25876d90d5a563bc31c658289a8772ae186552236"}, + {file = "pydantic-1.10.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:355639d9afc76bcb9b0c3000ddcd08472ae75318a6eb67a15866b87e2efa168c"}, + {file = "pydantic-1.10.2-cp310-cp310-win_amd64.whl", hash = "sha256:ae544c47bec47a86bc7d350f965d8b15540e27e5aa4f55170ac6a75e5f73b644"}, + {file = "pydantic-1.10.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4c805731c33a8db4b6ace45ce440c4ef5336e712508b4d9e1aafa617dc9907f"}, + {file = "pydantic-1.10.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d49f3db871575e0426b12e2f32fdb25e579dea16486a26e5a0474af87cb1ab0a"}, + {file = "pydantic-1.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c90345ec7dd2f1bcef82ce49b6235b40f282b94d3eec47e801baf864d15525"}, + {file = "pydantic-1.10.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b5ba54d026c2bd2cb769d3468885f23f43710f651688e91f5fb1edcf0ee9283"}, + {file = "pydantic-1.10.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:05e00dbebbe810b33c7a7362f231893183bcc4251f3f2ff991c31d5c08240c42"}, + {file = "pydantic-1.10.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2d0567e60eb01bccda3a4df01df677adf6b437958d35c12a3ac3e0f078b0ee52"}, + {file = "pydantic-1.10.2-cp311-cp311-win_amd64.whl", hash = "sha256:c6f981882aea41e021f72779ce2a4e87267458cc4d39ea990729e21ef18f0f8c"}, + {file = "pydantic-1.10.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4aac8e7103bf598373208f6299fa9a5cfd1fc571f2d40bf1dd1955a63d6eeb5"}, + {file = "pydantic-1.10.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a7b66c3f499108b448f3f004801fcd7d7165fb4200acb03f1c2402da73ce4c"}, + {file = "pydantic-1.10.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bedf309630209e78582ffacda64a21f96f3ed2e51fbf3962d4d488e503420254"}, + {file = "pydantic-1.10.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9300fcbebf85f6339a02c6994b2eb3ff1b9c8c14f502058b5bf349d42447dcf5"}, + {file = "pydantic-1.10.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:216f3bcbf19c726b1cc22b099dd409aa371f55c08800bcea4c44c8f74b73478d"}, + {file = "pydantic-1.10.2-cp37-cp37m-win_amd64.whl", hash = "sha256:dd3f9a40c16daf323cf913593083698caee97df2804aa36c4b3175d5ac1b92a2"}, + {file = "pydantic-1.10.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b97890e56a694486f772d36efd2ba31612739bc6f3caeee50e9e7e3ebd2fdd13"}, + {file = "pydantic-1.10.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9cabf4a7f05a776e7793e72793cd92cc865ea0e83a819f9ae4ecccb1b8aa6116"}, + {file = "pydantic-1.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06094d18dd5e6f2bbf93efa54991c3240964bb663b87729ac340eb5014310624"}, + {file = "pydantic-1.10.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc78cc83110d2f275ec1970e7a831f4e371ee92405332ebfe9860a715f8336e1"}, + {file = "pydantic-1.10.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ee433e274268a4b0c8fde7ad9d58ecba12b069a033ecc4645bb6303c062d2e9"}, + {file = "pydantic-1.10.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7c2abc4393dea97a4ccbb4ec7d8658d4e22c4765b7b9b9445588f16c71ad9965"}, + {file = "pydantic-1.10.2-cp38-cp38-win_amd64.whl", hash = "sha256:0b959f4d8211fc964772b595ebb25f7652da3f22322c007b6fed26846a40685e"}, + {file = "pydantic-1.10.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c33602f93bfb67779f9c507e4d69451664524389546bacfe1bee13cae6dc7488"}, + {file = "pydantic-1.10.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5760e164b807a48a8f25f8aa1a6d857e6ce62e7ec83ea5d5c5a802eac81bad41"}, + {file = "pydantic-1.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6eb843dcc411b6a2237a694f5e1d649fc66c6064d02b204a7e9d194dff81eb4b"}, + {file = "pydantic-1.10.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b8795290deaae348c4eba0cebb196e1c6b98bdbe7f50b2d0d9a4a99716342fe"}, + {file = "pydantic-1.10.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e0bedafe4bc165ad0a56ac0bd7695df25c50f76961da29c050712596cf092d6d"}, + {file = "pydantic-1.10.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2e05aed07fa02231dbf03d0adb1be1d79cabb09025dd45aa094aa8b4e7b9dcda"}, + {file = "pydantic-1.10.2-cp39-cp39-win_amd64.whl", hash = "sha256:c1ba1afb396148bbc70e9eaa8c06c1716fdddabaf86e7027c5988bae2a829ab6"}, + {file = "pydantic-1.10.2-py3-none-any.whl", hash = "sha256:1b6ee725bd6e83ec78b1aa32c5b1fa67a3a65badddde3976bca5fe4568f27709"}, + {file = "pydantic-1.10.2.tar.gz", hash = "sha256:91b8e218852ef6007c2b98cd861601c6a09f1aa32bbbb74fab5b1c33d4a1e410"}, +] pydocstyle = [ {file = "pydocstyle-6.1.1-py3-none-any.whl", hash = "sha256:6987826d6775056839940041beef5c08cc7e3d71d63149b48e36727f70144dc4"}, {file = "pydocstyle-6.1.1.tar.gz", hash = "sha256:1d41b7c459ba0ee6c345f2eb9ae827cab14a7533a88c5c6f7e94923f72df92dc"}, ] pylint = [ - {file = "pylint-2.15.4-py3-none-any.whl", hash = "sha256:629cf1dbdfb6609d7e7a45815a8bb59300e34aa35783b5ac563acaca2c4022e9"}, - {file = "pylint-2.15.4.tar.gz", hash = "sha256:5441e9294335d354b7bad57c1044e5bd7cce25c433475d76b440e53452fa5cb8"}, + {file = "pylint-2.15.5-py3-none-any.whl", hash = "sha256:c2108037eb074334d9e874dc3c783752cc03d0796c88c9a9af282d0f161a1004"}, + {file = "pylint-2.15.5.tar.gz", hash = "sha256:3b120505e5af1d06a5ad76b55d8660d44bf0f2fc3c59c2bdd94e39188ee3a4df"}, ] pyparsing = [ {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, ] pyright = [ - {file = "pyright-1.1.275-py3-none-any.whl", hash = "sha256:83072f509e18160f2661a2276ac85f471112dbcfc1dadf0cbb0393a4d56db72a"}, - {file = "pyright-1.1.275.tar.gz", hash = "sha256:f0061ce47c785b9b64745b7648ff9732a99811ef7c7f3f88642aa2cb7868c81e"}, + {file = "pyright-1.1.276-py3-none-any.whl", hash = "sha256:d9388405ea20a55446cb7809b1746158bdf557f9162b476f5aed71173f4ffd2b"}, + {file = "pyright-1.1.276.tar.gz", hash = "sha256:debaa08f6975dd381b9408880e36bb781ba7a1a6cf24b7868e83be41b6c8cb75"}, ] pytest = [ {file = "pytest-7.1.3-py3-none-any.whl", hash = "sha256:1377bda3466d70b55e3f5cecfa55bb7cfcf219c7964629b967c37cf0bda818b7"}, @@ -976,8 +1055,8 @@ snowballstemmer = [ {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] stevedore = [ - {file = "stevedore-4.0.1-py3-none-any.whl", hash = "sha256:01645addb67beff04c7cfcbb0a6af8327d2efc3380b0f034aa316d4576c4d470"}, - {file = "stevedore-4.0.1.tar.gz", hash = "sha256:9a23111a6e612270c591fd31ff3321c6b5f3d5f3dabb1427317a5ab608fc261a"}, + {file = "stevedore-4.1.0-py3-none-any.whl", hash = "sha256:3b1cbd592a87315f000d05164941ee5e164899f8fc0ce9a00bb0f321f40ef93e"}, + {file = "stevedore-4.1.0.tar.gz", hash = "sha256:02518a8f0d6d29be8a445b7f2ac63753ff29e8f2a2faa01777568d5500d777a6"}, ] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, @@ -999,6 +1078,10 @@ tox-poetry = [ {file = "tox-poetry-0.4.1.tar.gz", hash = "sha256:2395808e1ce487b5894c10f2202e14702bfa6d6909c0d1e525170d14809ac7ef"}, {file = "tox_poetry-0.4.1-py2.py3-none-any.whl", hash = "sha256:11d9cd4e51d4cd9484b3ba63f2650ab4cfb4096e5f0682ecf561ddfc3c8e8c92"}, ] +typing-extensions = [ + {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, + {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, +] unsync = [ {file = "unsync-1.4.0.tar.gz", hash = "sha256:a29e0f8952ffb0b3a0453ce436819a5a1ba2febbb5caa707c319f6f98d35f3c5"}, ] diff --git a/packages/polywrap-wasm/polywrap_wasm/constants.py b/packages/polywrap-wasm/polywrap_wasm/constants.py index 95ed7b5a..11feedae 100644 --- a/packages/polywrap-wasm/polywrap_wasm/constants.py +++ b/packages/polywrap-wasm/polywrap_wasm/constants.py @@ -1 +1,2 @@ +WRAP_MANIFEST_PATH = "wrap.info" WRAP_MODULE_PATH = "wrap.wasm" diff --git a/packages/polywrap-wasm/polywrap_wasm/inmemory_file_reader.py b/packages/polywrap-wasm/polywrap_wasm/inmemory_file_reader.py index e2e32366..3b2dd750 100644 --- a/packages/polywrap-wasm/polywrap_wasm/inmemory_file_reader.py +++ b/packages/polywrap-wasm/polywrap_wasm/inmemory_file_reader.py @@ -1,18 +1,23 @@ +from typing import Optional from polywrap_core import IFileReader -from .constants import WRAP_MODULE_PATH +from .constants import WRAP_MANIFEST_PATH, WRAP_MODULE_PATH class InMemoryFileReader(IFileReader): - _wasm_module: bytearray + _wasm_manifest: Optional[bytes] + _wasm_module: Optional[bytes] _base_file_reader: IFileReader - def __init__(self, wasm_module: bytearray, base_file_reader: IFileReader): + def __init__(self, base_file_reader: IFileReader, wasm_module: Optional[bytes] = None, wasm_manifest: Optional[bytes] = None): self._wasm_module = wasm_module + self._wasm_manifest = wasm_manifest self._base_file_reader = base_file_reader - async def read_file(self, file_path: str) -> bytearray: - if file_path == WRAP_MODULE_PATH: + async def read_file(self, file_path: str) -> bytes: + if file_path == WRAP_MODULE_PATH and self._wasm_module: return self._wasm_module + elif file_path == WRAP_MANIFEST_PATH and self._wasm_manifest: + return self._wasm_manifest else: return await self._base_file_reader.read_file(file_path=file_path) diff --git a/packages/polywrap-wasm/polywrap_wasm/wasm_package.py b/packages/polywrap-wasm/polywrap_wasm/wasm_package.py index 33ad2ff7..5d83dbc1 100644 --- a/packages/polywrap-wasm/polywrap_wasm/wasm_package.py +++ b/packages/polywrap-wasm/polywrap_wasm/wasm_package.py @@ -1,19 +1,22 @@ from typing import Optional, Union -from polywrap_core import IFileReader, IWasmPackage, Wrapper +from polywrap_core import IFileReader, IWasmPackage, Wrapper, GetManifestOptions +from polywrap_manifest import AnyWrapManifest, deserialize_wrap_manifest -from .constants import WRAP_MODULE_PATH +from .constants import WRAP_MANIFEST_PATH, WRAP_MODULE_PATH from .inmemory_file_reader import InMemoryFileReader from .wasm_wrapper import WasmWrapper class WasmPackage(IWasmPackage): file_reader: IFileReader - wasm_module: Optional[bytearray] + manifest: Optional[Union[bytes, AnyWrapManifest]] + wasm_module: Optional[bytes] def __init__( - self, file_reader: IFileReader, wasm_module: Optional[bytearray] = None + self, file_reader: IFileReader, manifest: Optional[Union[bytes, AnyWrapManifest]] = None, wasm_module: Optional[bytes] = None ): + self.manifest = manifest self.wasm_module = wasm_module self.file_reader = ( InMemoryFileReader(wasm_module=wasm_module, base_file_reader=file_reader) @@ -21,12 +24,20 @@ def __init__( else file_reader ) - async def get_wasm_module(self) -> bytearray: - wasm_module: bytearray = self.wasm_module or await self.file_reader.read_file( + async def get_manifest(self, options: Optional[GetManifestOptions] = None) -> AnyWrapManifest: + if self.manifest is None or isinstance(self.manifest, bytes): + encoded_manifest = self.manifest or await self.file_reader.read_file(WRAP_MANIFEST_PATH) + return deserialize_wrap_manifest(encoded_manifest, options) + return self.manifest + + async def get_wasm_module(self) -> bytes: + wasm_module: bytes = self.wasm_module or await self.file_reader.read_file( WRAP_MODULE_PATH ) self.wasm_module = wasm_module return wasm_module - def create_wrapper(self) -> Wrapper: - return WasmWrapper(self.file_reader, self.wasm_module) + async def create_wrapper(self) -> Wrapper: + wasm_module = await self.get_wasm_module() + wasm_manifest = await self.get_manifest() + return WasmWrapper(self.file_reader, wasm_module, wasm_manifest) diff --git a/packages/polywrap-wasm/polywrap_wasm/wasm_wrapper.py b/packages/polywrap-wasm/polywrap_wasm/wasm_wrapper.py index 1808c9dc..7200af66 100644 --- a/packages/polywrap-wasm/polywrap_wasm/wasm_wrapper.py +++ b/packages/polywrap-wasm/polywrap_wasm/wasm_wrapper.py @@ -1,8 +1,7 @@ from textwrap import dedent -from typing import Optional, Union +from typing import Union from polywrap_core import ( - Client, GetFileOptions, IFileReader, InvocableResult, @@ -10,10 +9,10 @@ Invoker, Wrapper, ) +from polywrap_manifest import AnyWrapManifest from polywrap_msgpack import msgpack_encode from wasmtime import Module, Store -from .constants import WRAP_MODULE_PATH from .errors import WasmAbortError from .exports import WrapExports from .imports import create_instance @@ -22,32 +21,34 @@ class WasmWrapper(Wrapper): file_reader: IFileReader - wasm_module: Optional[bytearray] + wasm_module: bytes + manifest: AnyWrapManifest def __init__( - self, file_reader: IFileReader, wasm_module: Optional[bytearray] = None + self, file_reader: IFileReader, wasm_module: bytes, manifest: AnyWrapManifest ): self.file_reader = file_reader self.wasm_module = wasm_module + self.manifest = manifest + + def get_manifest(self) -> AnyWrapManifest: + return self.manifest + + def get_wasm_module(self) -> bytes: + return self.wasm_module async def get_file( - self, options: GetFileOptions, client: Client + self, options: GetFileOptions ) -> Union[str, bytes]: data = await self.file_reader.read_file(options.path) return data.decode(encoding=options.encoding) if options.encoding else data - async def get_wasm_module(self) -> bytearray: - if not self.wasm_module: - self.wasm_module = await self.file_reader.read_file(WRAP_MODULE_PATH) - return self.wasm_module - def create_wasm_instance(self, store: Store, state: State, invoker: Invoker): if self.wasm_module: module = Module(store.engine, self.wasm_module) return create_instance(store, module, state, invoker) async def invoke(self, options: InvokeOptions, invoker: Invoker) -> InvocableResult: - await self.get_wasm_module() state = State() state.method = options.method state.args = ( diff --git a/packages/polywrap-wasm/pyproject.toml b/packages/polywrap-wasm/pyproject.toml index bcfc79aa..9bf00caf 100644 --- a/packages/polywrap-wasm/pyproject.toml +++ b/packages/polywrap-wasm/pyproject.toml @@ -13,6 +13,7 @@ readme = "README.md" python = "^3.10" wasmtime = "^1.0.1" polywrap-core = { path = "../polywrap-core", develop = true } +polywrap-manifest = { path = "../polywrap-manifest", develop = true } polywrap-msgpack = { path = "../polywrap-msgpack", develop = true } unsync = "^1.4.0" @@ -27,6 +28,7 @@ tox-poetry = "^0.4.1" isort = "^5.10.1" pyright = "^1.1.275" pydocstyle = "^6.1.1" +pydantic = "^1.10.2" [tool.bandit] exclude_dirs = ["tests"] diff --git a/packages/polywrap-wasm/tests/cases/simple/wrap.info b/packages/polywrap-wasm/tests/cases/simple/wrap.info new file mode 100644 index 00000000..e0ca0d11 --- /dev/null +++ b/packages/polywrap-wasm/tests/cases/simple/wrap.info @@ -0,0 +1 @@ +„§version£0.1¤name¦Simple¤type¤wasm£abi‚§version£0.1ªmoduleTypeƒ¤type¦Module¤kindÌ€§methods‘†¤name¬simpleMethod¦return…¤type¦String¤name¬simpleMethod¨requiredäkind"¦scalar„¤name¬simpleMethod¤type¦String¨requiredäkind¤type¦Method¤kind@¨requiredéarguments‘…¤type¦String¤name£arg¨requiredäkind"¦scalar„¤name£arg¤type¦String¨requiredäkind \ No newline at end of file diff --git a/packages/polywrap-wasm/tests/cases/simple/wrap.wasm b/packages/polywrap-wasm/tests/cases/simple/wrap.wasm new file mode 100644 index 0000000000000000000000000000000000000000..fa6ac41cc9d8502b37bc13aa6fbe4e67ff1001ed GIT binary patch literal 30774 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 InvokeResult: @pytest.fixture -def simple_wrap_invoke_module(): - wrap_path = Path(__file__).parent / "cases" / "simple_wrap_invoke.wasm" +def simple_wrap_module(): + wrap_path = Path(__file__).parent / "cases" / "simple" / "wrap.wasm" with open(wrap_path, "rb") as f: - yield bytearray(f.read()) + yield f.read() + + +@pytest.fixture +def simple_wrap_manifest(): + wrap_path = Path(__file__).parent / "cases" / "simple" / "wrap.info" + with open(wrap_path, "rb") as f: + yield f.read() @pytest.fixture def dummy_file_reader(): class FileReader(IFileReader): - async def read_file(self, file_path: str) -> bytearray: - return bytearray() + async def read_file(self, file_path: str) -> bytes: + return b"" yield FileReader() @pytest.fixture -def simple_file_reader(simple_wrap_invoke_module: bytearray): +def simple_file_reader(simple_wrap_module: bytes, simple_wrap_manifest: bytes): class FileReader(IFileReader): - async def read_file(self, file_path: str) -> bytearray: + async def read_file(self, file_path: str) -> bytes: if file_path == WRAP_MODULE_PATH: - return simple_wrap_invoke_module + return simple_wrap_module + if file_path == WRAP_MANIFEST_PATH: + return simple_wrap_manifest raise FileNotFoundError(file_path) yield FileReader() @pytest.mark.asyncio -async def test_invoke_with_given_wrap_module( - dummy_file_reader: IFileReader, simple_wrap_invoke_module: bytearray, mock_invoker: Invoker +async def test_invoke_with_wrapper( + dummy_file_reader: IFileReader, simple_wrap_module: bytes, simple_wrap_manifest: bytes, mock_invoker: Invoker ): - wrapper = WasmWrapper(dummy_file_reader, simple_wrap_invoke_module) + wrapper = WasmWrapper(dummy_file_reader, simple_wrap_module, deserialize_wrap_manifest(simple_wrap_manifest)) message = "hey" args = {"arg": message} @@ -56,8 +67,9 @@ async def test_invoke_with_given_wrap_module( @pytest.mark.asyncio -async def test_invoke_with_file_reader(simple_file_reader: IFileReader, mock_invoker: Invoker): - wrapper = WasmWrapper(simple_file_reader) +async def test_invoke_with_package(simple_file_reader: IFileReader, mock_invoker: Invoker): + package = WasmPackage(simple_file_reader) + wrapper = await package.create_wrapper() message = "hey" args = {"arg": message} From 382491afadb8fb1767aee7a4e3748109d0308e0b Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Sun, 23 Oct 2022 23:00:19 +0530 Subject: [PATCH 2/3] fix(polywrap-manifest): toxfile --- packages/polywrap-manifest/tox.ini | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/polywrap-manifest/tox.ini b/packages/polywrap-manifest/tox.ini index 907115a9..c680b728 100644 --- a/packages/polywrap-manifest/tox.ini +++ b/packages/polywrap-manifest/tox.ini @@ -8,23 +8,23 @@ commands = [testenv:lint] commands = - isort --check-only polywrap_msgpack - black --check polywrap_msgpack - pylint polywrap_msgpack - pydocstyle polywrap_msgpack + isort --check-only polywrap_manifest + black --check polywrap_manifest + pylint polywrap_manifest + pydocstyle polywrap_manifest [testenv:typecheck] commands = - pyright polywrap_msgpack + pyright polywrap_manifest [testenv:secure] commands = - bandit -r polywrap_msgpack -c pyproject.toml + bandit -r polywrap_manifest -c pyproject.toml [testenv:dev] basepython = python3.10 usedevelop = True commands = - isort polywrap_msgpack - black polywrap_msgpack + isort polywrap_manifest + black polywrap_manifest From ffe5c5a47609653b2d976e3487b63a27a69e2489 Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Sun, 23 Oct 2022 23:12:17 +0530 Subject: [PATCH 3/3] fix: add pydantic into polywrap-core --- packages/polywrap-core/poetry.lock | 67 ++++++++++++++++++++++++++- packages/polywrap-core/pyproject.toml | 1 + 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/packages/polywrap-core/poetry.lock b/packages/polywrap-core/poetry.lock index 527cadb1..3ebf2391 100644 --- a/packages/polywrap-core/poetry.lock +++ b/packages/polywrap-core/poetry.lock @@ -348,6 +348,21 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +[[package]] +name = "pydantic" +version = "1.10.2" +description = "Data validation and settings management using python type hints" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +typing-extensions = ">=4.1.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + [[package]] name = "pydocstyle" version = "6.1.1" @@ -557,6 +572,14 @@ tox = {version = ">=3.7.0", markers = "python_version >= \"3\""} [package.extras] test = ["pylint", "pycodestyle", "pytest", "coverage"] +[[package]] +name = "typing-extensions" +version = "4.4.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" +optional = false +python-versions = ">=3.7" + [[package]] name = "virtualenv" version = "20.16.5" @@ -597,7 +620,7 @@ multidict = ">=4.0" [metadata] lock-version = "1.1" python-versions = "^3.10" -content-hash = "dd2c2930d339e86d4f11e78a49de5bfe11f953bb925420dec1a53124523cfa9f" +content-hash = "0ff75ac3ed1d54200287ed75dd7650afa1bd832932907db8eb787f9f7ee37b6b" [metadata.files] astroid = [ @@ -879,6 +902,44 @@ py = [ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, ] +pydantic = [ + {file = "pydantic-1.10.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bb6ad4489af1bac6955d38ebcb95079a836af31e4c4f74aba1ca05bb9f6027bd"}, + {file = "pydantic-1.10.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1f5a63a6dfe19d719b1b6e6106561869d2efaca6167f84f5ab9347887d78b98"}, + {file = "pydantic-1.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:352aedb1d71b8b0736c6d56ad2bd34c6982720644b0624462059ab29bd6e5912"}, + {file = "pydantic-1.10.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19b3b9ccf97af2b7519c42032441a891a5e05c68368f40865a90eb88833c2559"}, + {file = "pydantic-1.10.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e9069e1b01525a96e6ff49e25876d90d5a563bc31c658289a8772ae186552236"}, + {file = "pydantic-1.10.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:355639d9afc76bcb9b0c3000ddcd08472ae75318a6eb67a15866b87e2efa168c"}, + {file = "pydantic-1.10.2-cp310-cp310-win_amd64.whl", hash = "sha256:ae544c47bec47a86bc7d350f965d8b15540e27e5aa4f55170ac6a75e5f73b644"}, + {file = "pydantic-1.10.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4c805731c33a8db4b6ace45ce440c4ef5336e712508b4d9e1aafa617dc9907f"}, + {file = "pydantic-1.10.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d49f3db871575e0426b12e2f32fdb25e579dea16486a26e5a0474af87cb1ab0a"}, + {file = "pydantic-1.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c90345ec7dd2f1bcef82ce49b6235b40f282b94d3eec47e801baf864d15525"}, + {file = "pydantic-1.10.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b5ba54d026c2bd2cb769d3468885f23f43710f651688e91f5fb1edcf0ee9283"}, + {file = "pydantic-1.10.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:05e00dbebbe810b33c7a7362f231893183bcc4251f3f2ff991c31d5c08240c42"}, + {file = "pydantic-1.10.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2d0567e60eb01bccda3a4df01df677adf6b437958d35c12a3ac3e0f078b0ee52"}, + {file = "pydantic-1.10.2-cp311-cp311-win_amd64.whl", hash = "sha256:c6f981882aea41e021f72779ce2a4e87267458cc4d39ea990729e21ef18f0f8c"}, + {file = "pydantic-1.10.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4aac8e7103bf598373208f6299fa9a5cfd1fc571f2d40bf1dd1955a63d6eeb5"}, + {file = "pydantic-1.10.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a7b66c3f499108b448f3f004801fcd7d7165fb4200acb03f1c2402da73ce4c"}, + {file = "pydantic-1.10.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bedf309630209e78582ffacda64a21f96f3ed2e51fbf3962d4d488e503420254"}, + {file = "pydantic-1.10.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9300fcbebf85f6339a02c6994b2eb3ff1b9c8c14f502058b5bf349d42447dcf5"}, + {file = "pydantic-1.10.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:216f3bcbf19c726b1cc22b099dd409aa371f55c08800bcea4c44c8f74b73478d"}, + {file = "pydantic-1.10.2-cp37-cp37m-win_amd64.whl", hash = "sha256:dd3f9a40c16daf323cf913593083698caee97df2804aa36c4b3175d5ac1b92a2"}, + {file = "pydantic-1.10.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b97890e56a694486f772d36efd2ba31612739bc6f3caeee50e9e7e3ebd2fdd13"}, + {file = "pydantic-1.10.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9cabf4a7f05a776e7793e72793cd92cc865ea0e83a819f9ae4ecccb1b8aa6116"}, + {file = "pydantic-1.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06094d18dd5e6f2bbf93efa54991c3240964bb663b87729ac340eb5014310624"}, + {file = "pydantic-1.10.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc78cc83110d2f275ec1970e7a831f4e371ee92405332ebfe9860a715f8336e1"}, + {file = "pydantic-1.10.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ee433e274268a4b0c8fde7ad9d58ecba12b069a033ecc4645bb6303c062d2e9"}, + {file = "pydantic-1.10.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7c2abc4393dea97a4ccbb4ec7d8658d4e22c4765b7b9b9445588f16c71ad9965"}, + {file = "pydantic-1.10.2-cp38-cp38-win_amd64.whl", hash = "sha256:0b959f4d8211fc964772b595ebb25f7652da3f22322c007b6fed26846a40685e"}, + {file = "pydantic-1.10.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c33602f93bfb67779f9c507e4d69451664524389546bacfe1bee13cae6dc7488"}, + {file = "pydantic-1.10.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5760e164b807a48a8f25f8aa1a6d857e6ce62e7ec83ea5d5c5a802eac81bad41"}, + {file = "pydantic-1.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6eb843dcc411b6a2237a694f5e1d649fc66c6064d02b204a7e9d194dff81eb4b"}, + {file = "pydantic-1.10.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b8795290deaae348c4eba0cebb196e1c6b98bdbe7f50b2d0d9a4a99716342fe"}, + {file = "pydantic-1.10.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e0bedafe4bc165ad0a56ac0bd7695df25c50f76961da29c050712596cf092d6d"}, + {file = "pydantic-1.10.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2e05aed07fa02231dbf03d0adb1be1d79cabb09025dd45aa094aa8b4e7b9dcda"}, + {file = "pydantic-1.10.2-cp39-cp39-win_amd64.whl", hash = "sha256:c1ba1afb396148bbc70e9eaa8c06c1716fdddabaf86e7027c5988bae2a829ab6"}, + {file = "pydantic-1.10.2-py3-none-any.whl", hash = "sha256:1b6ee725bd6e83ec78b1aa32c5b1fa67a3a65badddde3976bca5fe4568f27709"}, + {file = "pydantic-1.10.2.tar.gz", hash = "sha256:91b8e218852ef6007c2b98cd861601c6a09f1aa32bbbb74fab5b1c33d4a1e410"}, +] pydocstyle = [ {file = "pydocstyle-6.1.1-py3-none-any.whl", hash = "sha256:6987826d6775056839940041beef5c08cc7e3d71d63149b48e36727f70144dc4"}, {file = "pydocstyle-6.1.1.tar.gz", hash = "sha256:1d41b7c459ba0ee6c345f2eb9ae827cab14a7533a88c5c6f7e94923f72df92dc"}, @@ -978,6 +1039,10 @@ tox-poetry = [ {file = "tox-poetry-0.4.1.tar.gz", hash = "sha256:2395808e1ce487b5894c10f2202e14702bfa6d6909c0d1e525170d14809ac7ef"}, {file = "tox_poetry-0.4.1-py2.py3-none-any.whl", hash = "sha256:11d9cd4e51d4cd9484b3ba63f2650ab4cfb4096e5f0682ecf561ddfc3c8e8c92"}, ] +typing-extensions = [ + {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, + {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, +] virtualenv = [ {file = "virtualenv-20.16.5-py3-none-any.whl", hash = "sha256:d07dfc5df5e4e0dbc92862350ad87a36ed505b978f6c39609dc489eadd5b0d27"}, {file = "virtualenv-20.16.5.tar.gz", hash = "sha256:227ea1b9994fdc5ea31977ba3383ef296d7472ea85be9d6732e42a91c04e80da"}, diff --git a/packages/polywrap-core/pyproject.toml b/packages/polywrap-core/pyproject.toml index 3c128519..406cc587 100644 --- a/packages/polywrap-core/pyproject.toml +++ b/packages/polywrap-core/pyproject.toml @@ -14,6 +14,7 @@ gql = "3.4.0" graphql-core = "^3.2.1" result = "^0.8.0" polywrap-manifest = { path = "../polywrap-manifest", develop = true } +pydantic = "^1.10.2" [tool.poetry.dev-dependencies] pytest = "^7.1.2"