diff --git a/veilid-flutter/lib/veilid_config.dart b/veilid-flutter/lib/veilid_config.dart index 8633d3e2..86a32406 100644 --- a/veilid-flutter/lib/veilid_config.dart +++ b/veilid-flutter/lib/veilid_config.dart @@ -856,7 +856,8 @@ class VeilidConfigProtectedStore { directory = json['directory'], delete = json['delete'], deviceEncryptionKeyPassword = json['device_encryption_key_password'], - newDeviceEncryptionKeyPassword = json['new_device_encryption_key_password']; + newDeviceEncryptionKeyPassword = + json['new_device_encryption_key_password']; } //////////// diff --git a/veilid-flutter/lib/veilid_state.dart b/veilid-flutter/lib/veilid_state.dart index fea12cdf..40c263c5 100644 --- a/veilid-flutter/lib/veilid_state.dart +++ b/veilid-flutter/lib/veilid_state.dart @@ -511,16 +511,17 @@ class VeilidStateNetwork { /// VeilidStateConfig class VeilidStateConfig { - final Map config; + final VeilidConfig config; VeilidStateConfig({ required this.config, }); - VeilidStateConfig.fromJson(dynamic json) : config = json['config']; + VeilidStateConfig.fromJson(dynamic json) + : config = VeilidConfig.fromJson(json['config']); Map toJson() { - return {'config': config}; + return {'config': config.toJson()}; } } diff --git a/veilid-python/.gitignore b/veilid-python/.gitignore new file mode 100644 index 00000000..68bc17f9 --- /dev/null +++ b/veilid-python/.gitignore @@ -0,0 +1,160 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ diff --git a/veilid-python/README.md b/veilid-python/README.md new file mode 100644 index 00000000..dabe4ad4 --- /dev/null +++ b/veilid-python/README.md @@ -0,0 +1,20 @@ +# Veilid Bindings for Python + +## Usage + +To use: +``` +poetry add veilid_python +``` +or +``` +pip3 install veilid_python +``` + + +## Development + +To update schema for validation: +``` +./update_schema.sh +``` diff --git a/veilid-python/poetry.lock b/veilid-python/poetry.lock new file mode 100644 index 00000000..9e4d4a9c --- /dev/null +++ b/veilid-python/poetry.lock @@ -0,0 +1,959 @@ +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. + +[[package]] +name = "argcomplete" +version = "3.1.0" +description = "Bash tab completion for argparse" +optional = false +python-versions = ">=3.6" +files = [ + {file = "argcomplete-3.1.0-py3-none-any.whl", hash = "sha256:faea1cba05479b66628d7b216fcd23f2b9ad0117b13280aad8ae0b30872cd1f5"}, + {file = "argcomplete-3.1.0.tar.gz", hash = "sha256:3a81445fa51c9875c36789ae5386d5e95c5c43d503963a0029a747aea74de1e3"}, +] + +[package.extras] +test = ["coverage", "mypy", "pexpect", "ruff", "wheel"] + +[[package]] +name = "attrs" +version = "23.1.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] + +[[package]] +name = "black" +version = "23.3.0" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.7" +files = [ + {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, + {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, + {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, + {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, + {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, + {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, + {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, + {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, + {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, + {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, + {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, + {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, + {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, + {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "certifi" +version = "2023.5.7" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, + {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, +] + +[[package]] +name = "chardet" +version = "5.1.0" +description = "Universal encoding detector for Python 3" +optional = false +python-versions = ">=3.7" +files = [ + {file = "chardet-5.1.0-py3-none-any.whl", hash = "sha256:362777fb014af596ad31334fde1e8c327dfdb076e1960d1694662d46a6917ab9"}, + {file = "chardet-5.1.0.tar.gz", hash = "sha256:0d62712b956bc154f85fb0a266e2a3c5913c2967e00348701b32411d6def31e5"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.1.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, + {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, +] + +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "datamodel-code-generator" +version = "0.20.0" +description = "Datamodel Code Generator" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "datamodel_code_generator-0.20.0-py3-none-any.whl", hash = "sha256:fdb8dc18fd3a5d2c92e5e3ac473c5a48f3540066941e56fd947d2975cfebd281"}, + {file = "datamodel_code_generator-0.20.0.tar.gz", hash = "sha256:84dc7d6ae64ca67834b414c107adf3510f46a474ac21467a683aca0a4a8f0806"}, +] + +[package.dependencies] +argcomplete = ">=1.10,<4.0" +black = ">=19.10b0" +genson = ">=1.2.1,<2.0" +inflect = ">=4.1.0,<6.0" +isort = ">=4.3.21,<6.0" +jinja2 = ">=2.10.1,<4.0" +openapi-spec-validator = ">=0.2.8,<=0.5.2" +packaging = "*" +prance = ">=0.18.2,<1.0" +pydantic = {version = ">=1.10.0,<2.0.0", extras = ["email"], markers = "python_version >= \"3.11\" and python_version < \"4.0\""} +PySnooper = ">=0.4.1,<2.0.0" +toml = ">=0.10.0,<1.0.0" + +[package.extras] +http = ["httpx"] + +[[package]] +name = "dnspython" +version = "2.3.0" +description = "DNS toolkit" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "dnspython-2.3.0-py3-none-any.whl", hash = "sha256:89141536394f909066cabd112e3e1a37e4e654db00a25308b0f130bc3152eb46"}, + {file = "dnspython-2.3.0.tar.gz", hash = "sha256:224e32b03eb46be70e12ef6d64e0be123a64e621ab4c0822ff6d450d52a540b9"}, +] + +[package.extras] +curio = ["curio (>=1.2,<2.0)", "sniffio (>=1.1,<2.0)"] +dnssec = ["cryptography (>=2.6,<40.0)"] +doh = ["h2 (>=4.1.0)", "httpx (>=0.21.1)", "requests (>=2.23.0,<3.0.0)", "requests-toolbelt (>=0.9.1,<0.11.0)"] +doq = ["aioquic (>=0.9.20)"] +idna = ["idna (>=2.1,<4.0)"] +trio = ["trio (>=0.14,<0.23)"] +wmi = ["wmi (>=1.5.1,<2.0.0)"] + +[[package]] +name = "email-validator" +version = "2.0.0.post2" +description = "A robust email address syntax and deliverability validation library." +optional = false +python-versions = ">=3.7" +files = [ + {file = "email_validator-2.0.0.post2-py3-none-any.whl", hash = "sha256:2466ba57cda361fb7309fd3d5a225723c788ca4bbad32a0ebd5373b99730285c"}, + {file = "email_validator-2.0.0.post2.tar.gz", hash = "sha256:1ff6e86044200c56ae23595695c54e9614f4a9551e0e393614f764860b3d7900"}, +] + +[package.dependencies] +dnspython = ">=2.0.0" +idna = ">=2.0.0" + +[[package]] +name = "genson" +version = "1.2.2" +description = "GenSON is a powerful, user-friendly JSON Schema generator." +optional = false +python-versions = "*" +files = [ + {file = "genson-1.2.2.tar.gz", hash = "sha256:8caf69aa10af7aee0e1a1351d1d06801f4696e005f06cedef438635384346a16"}, +] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "inflect" +version = "5.6.2" +description = "Correctly generate plurals, singular nouns, ordinals, indefinite articles; convert numbers to words" +optional = false +python-versions = ">=3.7" +files = [ + {file = "inflect-5.6.2-py3-none-any.whl", hash = "sha256:b45d91a4a28a4e617ff1821117439b06eaa86e2a4573154af0149e9be6687238"}, + {file = "inflect-5.6.2.tar.gz", hash = "sha256:aadc7ed73928f5e014129794bbac03058cca35d0a973a5fc4eb45c7fa26005f9"}, +] + +[package.extras] +docs = ["jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx"] +testing = ["pygments", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[[package]] +name = "isort" +version = "5.12.0" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, + {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, +] + +[package.extras] +colors = ["colorama (>=0.4.3)"] +pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] +plugins = ["setuptools"] +requirements-deprecated-finder = ["pip-api", "pipreqs"] + +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "json-ref-dict" +version = "0.7.1" +description = "Python dict-like object which abstracts resolution of JSONSchema references" +optional = false +python-versions = "*" +files = [ + {file = "json-ref-dict-0.7.1.tar.gz", hash = "sha256:b1a0f7acad8a022bdd5e2f1a8943fe4dde6f429ec40966e29c992ee8f6349b72"}, + {file = "json_ref_dict-0.7.1-py3-none-any.whl", hash = "sha256:0cfdd3967594bc24e74a9b37f17cbda597f5a38755c35ace52fef92b7be266cf"}, +] + +[package.dependencies] +jsonpointer = ">=2.0,<3.0" + +[[package]] +name = "jsonpointer" +version = "2.3" +description = "Identify specific nodes in a JSON document (RFC 6901)" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "jsonpointer-2.3-py2.py3-none-any.whl", hash = "sha256:51801e558539b4e9cd268638c078c6c5746c9ac96bc38152d443400e4f3793e9"}, + {file = "jsonpointer-2.3.tar.gz", hash = "sha256:97cba51526c829282218feb99dab1b1e6bdf8efd1c43dc9d57be093c0d69c99a"}, +] + +[[package]] +name = "jsonschema" +version = "4.17.3" +description = "An implementation of JSON Schema validation for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, + {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, +] + +[package.dependencies] +attrs = ">=17.4.0" +pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + +[[package]] +name = "jsonschema-spec" +version = "0.1.6" +description = "JSONSchema Spec with object-oriented paths" +optional = false +python-versions = ">=3.7.0,<4.0.0" +files = [ + {file = "jsonschema_spec-0.1.6-py3-none-any.whl", hash = "sha256:f2206d18c89d1824c1f775ba14ed039743b41a9167bd2c5bdb774b66b3ca0bbf"}, + {file = "jsonschema_spec-0.1.6.tar.gz", hash = "sha256:90215863b56e212086641956b20127ccbf6d8a3a38343dad01d6a74d19482f76"}, +] + +[package.dependencies] +jsonschema = ">=4.0.0,<4.18.0" +pathable = ">=0.4.1,<0.5.0" +PyYAML = ">=5.1" +requests = ">=2.31.0,<3.0.0" + +[[package]] +name = "lazy-object-proxy" +version = "1.9.0" +description = "A fast and thorough lazy object proxy." +optional = false +python-versions = ">=3.7" +files = [ + {file = "lazy-object-proxy-1.9.0.tar.gz", hash = "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-win32.whl", hash = "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-win32.whl", hash = "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-win32.whl", hash = "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-win32.whl", hash = "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, +] + +[[package]] +name = "markupsafe" +version = "2.1.3" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, +] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "openapi-schema-validator" +version = "0.4.4" +description = "OpenAPI schema validation for Python" +optional = false +python-versions = ">=3.7.0,<4.0.0" +files = [ + {file = "openapi_schema_validator-0.4.4-py3-none-any.whl", hash = "sha256:79f37f38ef9fd5206b924ed7a6f382cea7b649b3b56383c47f1906082b7b9015"}, + {file = "openapi_schema_validator-0.4.4.tar.gz", hash = "sha256:c573e2be2c783abae56c5a1486ab716ca96e09d1c3eab56020d1dc680aa57bf8"}, +] + +[package.dependencies] +jsonschema = ">=4.0.0,<4.18.0" +rfc3339-validator = "*" + +[package.extras] +docs = ["sphinx (>=5.3.0,<6.0.0)", "sphinx-immaterial (>=0.11.0,<0.12.0)"] + +[[package]] +name = "openapi-spec-validator" +version = "0.5.2" +description = "OpenAPI 2.0 (aka Swagger) and OpenAPI 3 spec validator" +optional = false +python-versions = ">=3.7.0,<4.0.0" +files = [ + {file = "openapi_spec_validator-0.5.2-py3-none-any.whl", hash = "sha256:1f8db08ecbcf4ec8c558d65b65b3b7b428f81da6642f2f163e992ae3e17b229c"}, + {file = "openapi_spec_validator-0.5.2.tar.gz", hash = "sha256:ebed7f1c567780859402ad64b128e17f519d15f605f1b41d1e9a4a7a1690be07"}, +] + +[package.dependencies] +jsonschema = ">=4.0.0,<5.0.0" +jsonschema-spec = ">=0.1.1,<0.2.0" +lazy-object-proxy = ">=1.7.1,<2.0.0" +openapi-schema-validator = ">=0.3.2,<0.5" + +[package.extras] +requests = ["requests"] + +[[package]] +name = "packaging" +version = "23.1" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, +] + +[[package]] +name = "pathable" +version = "0.4.3" +description = "Object-oriented paths" +optional = false +python-versions = ">=3.7.0,<4.0.0" +files = [ + {file = "pathable-0.4.3-py3-none-any.whl", hash = "sha256:cdd7b1f9d7d5c8b8d3315dbf5a86b2596053ae845f056f57d97c0eefff84da14"}, + {file = "pathable-0.4.3.tar.gz", hash = "sha256:5c869d315be50776cc8a993f3af43e0c60dc01506b399643f919034ebf4cdcab"}, +] + +[[package]] +name = "pathspec" +version = "0.11.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, + {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, +] + +[[package]] +name = "platformdirs" +version = "3.5.3" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.5.3-py3-none-any.whl", hash = "sha256:0ade98a4895e87dc51d47151f7d2ec290365a585151d97b4d8d6312ed6132fed"}, + {file = "platformdirs-3.5.3.tar.gz", hash = "sha256:e48fabd87db8f3a7df7150a4a5ea22c546ee8bc39bc2473244730d4b56d2cc4e"}, +] + +[package.extras] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] + +[[package]] +name = "prance" +version = "0.22.2.22.0" +description = "Resolving Swagger/OpenAPI 2.0 and 3.0.0 Parser" +optional = false +python-versions = ">=3.8" +files = [ + {file = "prance-0.22.2.22.0-py3-none-any.whl", hash = "sha256:57deeb67b7e93ef27c1c17845bf3ccb4af288ccfb5748c7e01779c01a8507f27"}, + {file = "prance-0.22.2.22.0.tar.gz", hash = "sha256:9a83f8a4f5fe0f2d896d238d4bec6b5788b10b94155414b3d88c21c1579b85bf"}, +] + +[package.dependencies] +chardet = ">=3.0" +packaging = ">=21.3" +requests = ">=2.25" +"ruamel.yaml" = ">=0.17.10" +six = ">=1.15,<2.0" + +[package.extras] +cli = ["click (>=7.0)"] +dev = ["bumpversion (>=0.6)", "pytest (>=6.1)", "pytest-cov (>=2.11)", "sphinx (>=3.4)", "towncrier (>=19.2)", "tox (>=3.4)"] +flex = ["flex (>=6.13,<7.0)"] +icu = ["PyICU (>=2.4,<3.0)"] +osv = ["openapi-spec-validator (>=0.5.1,<0.6.0)"] +ssv = ["swagger-spec-validator (>=2.4,<3.0)"] + +[[package]] +name = "pydantic" +version = "1.10.9" +description = "Data validation and settings management using python type hints" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic-1.10.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e692dec4a40bfb40ca530e07805b1208c1de071a18d26af4a2a0d79015b352ca"}, + {file = "pydantic-1.10.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3c52eb595db83e189419bf337b59154bdcca642ee4b2a09e5d7797e41ace783f"}, + {file = "pydantic-1.10.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:939328fd539b8d0edf244327398a667b6b140afd3bf7e347cf9813c736211896"}, + {file = "pydantic-1.10.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b48d3d634bca23b172f47f2335c617d3fcb4b3ba18481c96b7943a4c634f5c8d"}, + {file = "pydantic-1.10.9-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f0b7628fb8efe60fe66fd4adadd7ad2304014770cdc1f4934db41fe46cc8825f"}, + {file = "pydantic-1.10.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e1aa5c2410769ca28aa9a7841b80d9d9a1c5f223928ca8bec7e7c9a34d26b1d4"}, + {file = "pydantic-1.10.9-cp310-cp310-win_amd64.whl", hash = "sha256:eec39224b2b2e861259d6f3c8b6290d4e0fbdce147adb797484a42278a1a486f"}, + {file = "pydantic-1.10.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d111a21bbbfd85c17248130deac02bbd9b5e20b303338e0dbe0faa78330e37e0"}, + {file = "pydantic-1.10.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e9aec8627a1a6823fc62fb96480abe3eb10168fd0d859ee3d3b395105ae19a7"}, + {file = "pydantic-1.10.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07293ab08e7b4d3c9d7de4949a0ea571f11e4557d19ea24dd3ae0c524c0c334d"}, + {file = "pydantic-1.10.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ee829b86ce984261d99ff2fd6e88f2230068d96c2a582f29583ed602ef3fc2c"}, + {file = "pydantic-1.10.9-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4b466a23009ff5cdd7076eb56aca537c745ca491293cc38e72bf1e0e00de5b91"}, + {file = "pydantic-1.10.9-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7847ca62e581e6088d9000f3c497267868ca2fa89432714e21a4fb33a04d52e8"}, + {file = "pydantic-1.10.9-cp311-cp311-win_amd64.whl", hash = "sha256:7845b31959468bc5b78d7b95ec52fe5be32b55d0d09983a877cca6aedc51068f"}, + {file = "pydantic-1.10.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:517a681919bf880ce1dac7e5bc0c3af1e58ba118fd774da2ffcd93c5f96eaece"}, + {file = "pydantic-1.10.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67195274fd27780f15c4c372f4ba9a5c02dad6d50647b917b6a92bf00b3d301a"}, + {file = "pydantic-1.10.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2196c06484da2b3fded1ab6dbe182bdabeb09f6318b7fdc412609ee2b564c49a"}, + {file = "pydantic-1.10.9-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6257bb45ad78abacda13f15bde5886efd6bf549dd71085e64b8dcf9919c38b60"}, + {file = "pydantic-1.10.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3283b574b01e8dbc982080d8287c968489d25329a463b29a90d4157de4f2baaf"}, + {file = "pydantic-1.10.9-cp37-cp37m-win_amd64.whl", hash = "sha256:5f8bbaf4013b9a50e8100333cc4e3fa2f81214033e05ac5aa44fa24a98670a29"}, + {file = "pydantic-1.10.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9cd67fb763248cbe38f0593cd8611bfe4b8ad82acb3bdf2b0898c23415a1f82"}, + {file = "pydantic-1.10.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f50e1764ce9353be67267e7fd0da08349397c7db17a562ad036aa7c8f4adfdb6"}, + {file = "pydantic-1.10.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73ef93e5e1d3c8e83f1ff2e7fdd026d9e063c7e089394869a6e2985696693766"}, + {file = "pydantic-1.10.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:128d9453d92e6e81e881dd7e2484e08d8b164da5507f62d06ceecf84bf2e21d3"}, + {file = "pydantic-1.10.9-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ad428e92ab68798d9326bb3e5515bc927444a3d71a93b4a2ca02a8a5d795c572"}, + {file = "pydantic-1.10.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fab81a92f42d6d525dd47ced310b0c3e10c416bbfae5d59523e63ea22f82b31e"}, + {file = "pydantic-1.10.9-cp38-cp38-win_amd64.whl", hash = "sha256:963671eda0b6ba6926d8fc759e3e10335e1dc1b71ff2a43ed2efd6996634dafb"}, + {file = "pydantic-1.10.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:970b1bdc6243ef663ba5c7e36ac9ab1f2bfecb8ad297c9824b542d41a750b298"}, + {file = "pydantic-1.10.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7e1d5290044f620f80cf1c969c542a5468f3656de47b41aa78100c5baa2b8276"}, + {file = "pydantic-1.10.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83fcff3c7df7adff880622a98022626f4f6dbce6639a88a15a3ce0f96466cb60"}, + {file = "pydantic-1.10.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0da48717dc9495d3a8f215e0d012599db6b8092db02acac5e0d58a65248ec5bc"}, + {file = "pydantic-1.10.9-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0a2aabdc73c2a5960e87c3ffebca6ccde88665616d1fd6d3db3178ef427b267a"}, + {file = "pydantic-1.10.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9863b9420d99dfa9c064042304868e8ba08e89081428a1c471858aa2af6f57c4"}, + {file = "pydantic-1.10.9-cp39-cp39-win_amd64.whl", hash = "sha256:e7c9900b43ac14110efa977be3da28931ffc74c27e96ee89fbcaaf0b0fe338e1"}, + {file = "pydantic-1.10.9-py3-none-any.whl", hash = "sha256:6cafde02f6699ce4ff643417d1a9223716ec25e228ddc3b436fe7e2d25a1f305"}, + {file = "pydantic-1.10.9.tar.gz", hash = "sha256:95c70da2cd3b6ddf3b9645ecaa8d98f3d80c606624b6d245558d202cd23ea3be"}, +] + +[package.dependencies] +email-validator = {version = ">=1.0.3", optional = true, markers = "extra == \"email\""} +typing-extensions = ">=4.2.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + +[[package]] +name = "pyrsistent" +version = "0.19.3" +description = "Persistent/Functional/Immutable data structures" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"}, + {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"}, + {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"}, + {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"}, + {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"}, + {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"}, + {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"}, + {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"}, + {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"}, + {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"}, + {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"}, + {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"}, + {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"}, + {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"}, + {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"}, + {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"}, + {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"}, + {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"}, + {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"}, + {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"}, + {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"}, + {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, +] + +[[package]] +name = "pysnooper" +version = "1.1.1" +description = "A poor man's debugger for Python." +optional = false +python-versions = "*" +files = [ + {file = "PySnooper-1.1.1-py2.py3-none-any.whl", hash = "sha256:378f13d731a3e04d3d0350e5f295bdd0f1b49fc8a8b8bf2067fe1e5290bd20be"}, + {file = "PySnooper-1.1.1.tar.gz", hash = "sha256:d17dc91cca1593c10230dce45e46b1d3ff0f8910f0c38e941edf6ba1260b3820"}, +] + +[package.extras] +tests = ["pytest"] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "pyyaml" +version = "5.4.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"}, + {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"}, + {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"}, + {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"}, + {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"}, + {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"}, + {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"}, + {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"}, + {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"}, + {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"}, + {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"}, + {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"}, + {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"}, + {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"}, + {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"}, + {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"}, + {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"}, + {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"}, + {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"}, + {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"}, + {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"}, + {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"}, + {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"}, + {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"}, + {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"}, + {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"}, + {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"}, + {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, + {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, +] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "ruamel-yaml" +version = "0.17.31" +description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" +optional = false +python-versions = ">=3" +files = [ + {file = "ruamel.yaml-0.17.31-py3-none-any.whl", hash = "sha256:3cf153f0047ced526e723097ac615d3009371779432e304dbd5596b6f3a4c777"}, + {file = "ruamel.yaml-0.17.31.tar.gz", hash = "sha256:098ed1eb6d338a684891a72380277c1e6fc4d4ae0e120de9a447275056dda335"}, +] + +[package.dependencies] +"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.12\""} + +[package.extras] +docs = ["ryd"] +jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.7" +description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" +optional = false +python-versions = ">=3.5" +files = [ + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win32.whl", hash = "sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:1a6391a7cabb7641c32517539ca42cf84b87b667bad38b78d4d42dd23e957c81"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:9c7617df90c1365638916b98cdd9be833d31d337dbcd722485597b43c4a215bf"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win32.whl", hash = "sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_12_0_arm64.whl", hash = "sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win32.whl", hash = "sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win_amd64.whl", hash = "sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win32.whl", hash = "sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win32.whl", hash = "sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win32.whl", hash = "sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5"}, + {file = "ruamel.yaml.clib-0.2.7.tar.gz", hash = "sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497"}, +] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "statham-schema" +version = "0.14.0" +description = "Tools for generating Python models from JSON Schema documents." +optional = false +python-versions = "*" +files = [ + {file = "statham-schema-0.14.0.tar.gz", hash = "sha256:2570642c0c3f0864d86659cafa6293e011a9e113953376e7d79c4c28009c066a"}, + {file = "statham_schema-0.14.0-py3-none-any.whl", hash = "sha256:2e922c21f3ac2ebf0ac79a142df272bd30b0fd16c8235f6e2628240c7fa2bfd9"}, +] + +[package.dependencies] +json-ref-dict = ">=0.6.2,<0.8.0" +jsonpointer = ">=2.0,<3.0" +python-dateutil = ">=2.8,<3.0" +PyYAML = ">=5.4,<6.0" +typing-extensions = ">=3.7.0,<5.0.0" + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + +[[package]] +name = "typing-extensions" +version = "4.6.3" +description = "Backported and Experimental Type Hints for Python 3.7+" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.6.3-py3-none-any.whl", hash = "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26"}, + {file = "typing_extensions-4.6.3.tar.gz", hash = "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5"}, +] + +[[package]] +name = "urllib3" +version = "2.0.3" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.7" +files = [ + {file = "urllib3-2.0.3-py3-none-any.whl", hash = "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"}, + {file = "urllib3-2.0.3.tar.gz", hash = "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.11" +content-hash = "f4368567ec647c3c626e34fb7b1115dca196b68a2290bce7f223260a24a9c54c" diff --git a/veilid-python/pyproject.toml b/veilid-python/pyproject.toml new file mode 100644 index 00000000..c4b15dd9 --- /dev/null +++ b/veilid-python/pyproject.toml @@ -0,0 +1,20 @@ +[tool.poetry] +name = "veilid-python" +version = "0.1.0" +description = "" +authors = ["Christien Rioux "] +readme = "README.md" +packages = [{include = "veilid_python"}] + +[tool.poetry.scripts] +update_bindings = "veilid_python.update_bindings:main" + +[tool.poetry.dependencies] +python = "^3.11" + +[tool.poetry.group.dev.dependencies] +datamodel-code-generator = "^0.20.0" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/veilid-python/schema/RecvMessage.json b/veilid-python/schema/RecvMessage.json new file mode 100644 index 00000000..b84dc8e4 --- /dev/null +++ b/veilid-python/schema/RecvMessage.json @@ -0,0 +1,3924 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "RecvMessage", + "oneOf": [ + { + "type": "object", + "oneOf": [ + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "Control" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "$ref": "#/definitions/VeilidState" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "GetState" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "null" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "Attach" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "null" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "Detach" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "$ref": "#/definitions/NewPrivateRouteResult" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "NewPrivateRoute" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "$ref": "#/definitions/NewPrivateRouteResult" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "NewCustomPrivateRoute" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "ImportRemotePrivateRoute" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "null" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "ReleasePrivateRoute" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "null" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "AppCallReply" + ] + } + } + }, + { + "type": "object", + "required": [ + "op", + "value" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "NewRoutingContext" + ] + }, + "value": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "rc_op" + ], + "properties": { + "rc_op": { + "type": "string", + "enum": [ + "InvalidId" + ] + } + } + }, + { + "type": "object", + "required": [ + "rc_op" + ], + "properties": { + "rc_op": { + "type": "string", + "enum": [ + "Release" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "rc_op" + ], + "properties": { + "rc_op": { + "type": "string", + "enum": [ + "WithPrivacy" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "rc_op" + ], + "properties": { + "rc_op": { + "type": "string", + "enum": [ + "WithCustomPrivacy" + ] + } + } + }, + { + "type": "object", + "required": [ + "rc_op", + "value" + ], + "properties": { + "rc_op": { + "type": "string", + "enum": [ + "WithSequencing" + ] + }, + "value": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "rc_op" + ], + "properties": { + "rc_op": { + "type": "string", + "enum": [ + "AppCall" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "null" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "rc_op" + ], + "properties": { + "rc_op": { + "type": "string", + "enum": [ + "AppMessage" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "$ref": "#/definitions/DHTRecordDescriptor" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "rc_op" + ], + "properties": { + "rc_op": { + "type": "string", + "enum": [ + "CreateDhtRecord" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "$ref": "#/definitions/DHTRecordDescriptor" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "rc_op" + ], + "properties": { + "rc_op": { + "type": "string", + "enum": [ + "OpenDhtRecord" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "null" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "rc_op" + ], + "properties": { + "rc_op": { + "type": "string", + "enum": [ + "CloseDhtRecord" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "null" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "rc_op" + ], + "properties": { + "rc_op": { + "type": "string", + "enum": [ + "DeleteDhtRecord" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "properties": { + "value": { + "anyOf": [ + { + "$ref": "#/definitions/ValueData" + }, + { + "type": "null" + } + ] + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "rc_op" + ], + "properties": { + "rc_op": { + "type": "string", + "enum": [ + "GetDhtValue" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "properties": { + "value": { + "anyOf": [ + { + "$ref": "#/definitions/ValueData" + }, + { + "type": "null" + } + ] + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "rc_op" + ], + "properties": { + "rc_op": { + "type": "string", + "enum": [ + "SetDhtValue" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "rc_op" + ], + "properties": { + "rc_op": { + "type": "string", + "enum": [ + "WatchDhtValues" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "boolean" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "rc_op" + ], + "properties": { + "rc_op": { + "type": "string", + "enum": [ + "CancelDhtWatch" + ] + } + } + } + ], + "required": [ + "op", + "rc_id" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "RoutingContext" + ] + }, + "rc_id": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "OpenTableDb" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "boolean" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "DeleteTableDb" + ] + } + } + }, + { + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "db_op" + ], + "properties": { + "db_op": { + "type": "string", + "enum": [ + "InvalidId" + ] + } + } + }, + { + "type": "object", + "required": [ + "db_op" + ], + "properties": { + "db_op": { + "type": "string", + "enum": [ + "Release" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "db_op" + ], + "properties": { + "db_op": { + "type": "string", + "enum": [ + "GetColumnCount" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "db_op" + ], + "properties": { + "db_op": { + "type": "string", + "enum": [ + "GetKeys" + ] + } + } + }, + { + "type": "object", + "required": [ + "db_op", + "value" + ], + "properties": { + "db_op": { + "type": "string", + "enum": [ + "Transact" + ] + }, + "value": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "null" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "db_op" + ], + "properties": { + "db_op": { + "type": "string", + "enum": [ + "Store" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "properties": { + "value": { + "type": [ + "string", + "null" + ] + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "db_op" + ], + "properties": { + "db_op": { + "type": "string", + "enum": [ + "Load" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "properties": { + "value": { + "type": [ + "string", + "null" + ] + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "db_op" + ], + "properties": { + "db_op": { + "type": "string", + "enum": [ + "Delete" + ] + } + } + } + ], + "required": [ + "db_id", + "op" + ], + "properties": { + "db_id": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "op": { + "type": "string", + "enum": [ + "TableDb" + ] + } + } + }, + { + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "tx_op" + ], + "properties": { + "tx_op": { + "type": "string", + "enum": [ + "InvalidId" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "null" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "tx_op" + ], + "properties": { + "tx_op": { + "type": "string", + "enum": [ + "Commit" + ] + } + } + }, + { + "type": "object", + "required": [ + "tx_op" + ], + "properties": { + "tx_op": { + "type": "string", + "enum": [ + "Rollback" + ] + } + } + }, + { + "type": "object", + "required": [ + "tx_op" + ], + "properties": { + "tx_op": { + "type": "string", + "enum": [ + "Store" + ] + } + } + }, + { + "type": "object", + "required": [ + "tx_op" + ], + "properties": { + "tx_op": { + "type": "string", + "enum": [ + "Delete" + ] + } + } + } + ], + "required": [ + "op", + "tx_id" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "TableDbTransaction" + ] + }, + "tx_id": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "GetCryptoSystem" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "BestCryptoSystem" + ] + } + } + }, + { + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "cs_op" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "InvalidId" + ] + } + } + }, + { + "type": "object", + "required": [ + "cs_op" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "Release" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "cs_op" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "CachedDh" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "cs_op" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "ComputeDh" + ] + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "value" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "RandomBytes" + ] + }, + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "value" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "DefaultSaltLength" + ] + }, + "value": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "cs_op" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "HashPassword" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "boolean" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "cs_op" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "VerifyPassword" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "cs_op" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "DeriveSharedSecret" + ] + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "value" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "RandomNonce" + ] + }, + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "value" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "RandomSharedSecret" + ] + }, + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "value" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "GenerateKeyPair" + ] + }, + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "value" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "GenerateHash" + ] + }, + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "value" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "ValidateKeyPair" + ] + }, + "value": { + "type": "boolean" + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "value" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "ValidateHash" + ] + }, + "value": { + "type": "boolean" + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "value" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "Distance" + ] + }, + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "cs_op" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "Sign" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "null" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "cs_op" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "Verify" + ] + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "value" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "AeadOverhead" + ] + }, + "value": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "cs_op" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "DecryptAead" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "cs_op" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "EncryptAead" + ] + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "value" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "CryptNoAuth" + ] + }, + "value": { + "type": "string" + } + } + } + ], + "required": [ + "cs_id", + "op" + ], + "properties": { + "cs_id": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "op": { + "type": "string", + "enum": [ + "CryptoSystem" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "VerifySignatures" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "GenerateSignatures" + ] + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "GenerateKeyPair" + ] + } + } + }, + { + "type": "object", + "required": [ + "op", + "value" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "Now" + ] + }, + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/definitions/VeilidAPIError" + } + } + } + ], + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "Debug" + ] + } + } + }, + { + "type": "object", + "required": [ + "op", + "value" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "VeilidVersionString" + ] + }, + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "major", + "minor", + "op", + "patch" + ], + "properties": { + "major": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "minor": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "op": { + "type": "string", + "enum": [ + "VeilidVersion" + ] + }, + "patch": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + } + ], + "required": [ + "type" + ], + "properties": { + "id": { + "description": "Operation Id (pairs with Request, or empty if unidirectional)", + "default": 0, + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "type": { + "type": "string", + "enum": [ + "Response" + ] + } + } + }, + { + "type": "object", + "oneOf": [ + { + "description": "A VeilidCore log message with optional backtrace", + "type": "object", + "required": [ + "kind", + "log_level", + "message" + ], + "properties": { + "backtrace": { + "type": [ + "string", + "null" + ] + }, + "kind": { + "type": "string", + "enum": [ + "Log" + ] + }, + "log_level": { + "$ref": "#/definitions/VeilidLogLevel" + }, + "message": { + "type": "string" + } + } + }, + { + "description": "Direct statement blob passed to hosting application for processing", + "type": "object", + "required": [ + "kind", + "message" + ], + "properties": { + "kind": { + "type": "string", + "enum": [ + "AppMessage" + ] + }, + "message": { + "description": "The content of the message to deliver to the application", + "type": "string" + }, + "sender": { + "description": "Some(sender) if the message was sent directly, None if received via a private/safety route", + "type": [ + "string", + "null" + ] + } + } + }, + { + "description": "Direct question blob passed to hosting application for processing to send an eventual AppReply", + "type": "object", + "required": [ + "id", + "kind", + "message" + ], + "properties": { + "id": { + "description": "The id to reply to", + "type": "string" + }, + "kind": { + "type": "string", + "enum": [ + "AppCall" + ] + }, + "message": { + "description": "The content of the request to deliver to the application", + "type": "string" + }, + "sender": { + "description": "Some(sender) if the request was sent directly, None if received via a private/safety route", + "type": [ + "string", + "null" + ] + } + } + }, + { + "type": "object", + "required": [ + "kind", + "local_network_ready", + "public_internet_ready", + "state" + ], + "properties": { + "kind": { + "type": "string", + "enum": [ + "Attachment" + ] + }, + "local_network_ready": { + "type": "boolean" + }, + "public_internet_ready": { + "type": "boolean" + }, + "state": { + "$ref": "#/definitions/AttachmentState" + } + } + }, + { + "type": "object", + "required": [ + "bps_down", + "bps_up", + "kind", + "peers", + "started" + ], + "properties": { + "bps_down": { + "type": "string" + }, + "bps_up": { + "type": "string" + }, + "kind": { + "type": "string", + "enum": [ + "Network" + ] + }, + "peers": { + "type": "array", + "items": { + "$ref": "#/definitions/PeerTableData" + } + }, + "started": { + "type": "boolean" + } + } + }, + { + "type": "object", + "required": [ + "config", + "kind" + ], + "properties": { + "config": { + "$ref": "#/definitions/VeilidConfigInner" + }, + "kind": { + "type": "string", + "enum": [ + "Config" + ] + } + } + }, + { + "type": "object", + "required": [ + "dead_remote_routes", + "dead_routes", + "kind" + ], + "properties": { + "dead_remote_routes": { + "type": "array", + "items": { + "type": "string" + } + }, + "dead_routes": { + "type": "array", + "items": { + "type": "string" + } + }, + "kind": { + "type": "string", + "enum": [ + "RouteChange" + ] + } + } + }, + { + "type": "object", + "required": [ + "count", + "key", + "kind", + "subkeys", + "value" + ], + "properties": { + "count": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "key": { + "type": "string" + }, + "kind": { + "type": "string", + "enum": [ + "ValueChange" + ] + }, + "subkeys": { + "type": "array", + "items": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + }, + "value": { + "$ref": "#/definitions/ValueData" + } + } + }, + { + "type": "object", + "required": [ + "kind" + ], + "properties": { + "kind": { + "type": "string", + "enum": [ + "Shutdown" + ] + } + } + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Update" + ] + } + } + } + ], + "definitions": { + "AttachmentState": { + "description": "Attachment abstraction for network 'signal strength'", + "type": "string", + "enum": [ + "Detached", + "Attaching", + "AttachedWeak", + "AttachedGood", + "AttachedStrong", + "FullyAttached", + "OverAttached", + "Detaching" + ] + }, + "DHTRecordDescriptor": { + "description": "DHT Record Descriptor", + "type": "object", + "required": [ + "key", + "owner", + "schema" + ], + "properties": { + "key": { + "description": "DHT Key = Hash(ownerKeyKind) of: [ ownerKeyValue, schema ]", + "type": "string" + }, + "owner": { + "description": "The public key of the owner", + "type": "string" + }, + "owner_secret": { + "description": "If this key is being created: Some(the secret key of the owner) If this key is just being opened: None", + "type": [ + "string", + "null" + ] + }, + "schema": { + "description": "The schema in use associated with the key", + "allOf": [ + { + "$ref": "#/definitions/DHTSchema" + } + ] + } + } + }, + "DHTSchema": { + "description": "Enum over all the supported DHT Schemas", + "oneOf": [ + { + "description": "Default DHT Schema (DFLT)", + "type": "object", + "required": [ + "kind", + "o_cnt" + ], + "properties": { + "kind": { + "type": "string", + "enum": [ + "DFLT" + ] + }, + "o_cnt": { + "description": "Owner subkey count", + "type": "integer", + "format": "uint16", + "minimum": 0.0 + } + } + }, + { + "description": "Simple DHT Schema (SMPL)", + "type": "object", + "required": [ + "kind", + "members", + "o_cnt" + ], + "properties": { + "kind": { + "type": "string", + "enum": [ + "SMPL" + ] + }, + "members": { + "description": "Members", + "type": "array", + "items": { + "$ref": "#/definitions/DHTSchemaSMPLMember" + } + }, + "o_cnt": { + "description": "Owner subkey count", + "type": "integer", + "format": "uint16", + "minimum": 0.0 + } + } + } + ] + }, + "DHTSchemaSMPLMember": { + "description": "Simple DHT Schema (SMPL) Member", + "type": "object", + "required": [ + "m_cnt", + "m_key" + ], + "properties": { + "m_cnt": { + "description": "Member subkey count", + "type": "integer", + "format": "uint16", + "minimum": 0.0 + }, + "m_key": { + "description": "Member key", + "type": "string" + } + } + }, + "LatencyStats": { + "type": "object", + "required": [ + "average", + "fastest", + "slowest" + ], + "properties": { + "average": { + "type": "string" + }, + "fastest": { + "type": "string" + }, + "slowest": { + "type": "string" + } + } + }, + "NewPrivateRouteResult": { + "type": "object", + "required": [ + "blob", + "route_id" + ], + "properties": { + "blob": { + "type": "string" + }, + "route_id": { + "type": "string" + } + } + }, + "PeerStats": { + "type": "object", + "required": [ + "rpc_stats", + "time_added", + "transfer" + ], + "properties": { + "latency": { + "anyOf": [ + { + "$ref": "#/definitions/LatencyStats" + }, + { + "type": "null" + } + ] + }, + "rpc_stats": { + "$ref": "#/definitions/RPCStats" + }, + "time_added": { + "type": "string" + }, + "transfer": { + "$ref": "#/definitions/TransferStatsDownUp" + } + } + }, + "PeerTableData": { + "type": "object", + "required": [ + "node_ids", + "peer_address", + "peer_stats" + ], + "properties": { + "node_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "peer_address": { + "type": "string" + }, + "peer_stats": { + "$ref": "#/definitions/PeerStats" + } + } + }, + "RPCStats": { + "type": "object", + "required": [ + "failed_to_send", + "messages_rcvd", + "messages_sent", + "questions_in_flight", + "recent_lost_answers" + ], + "properties": { + "failed_to_send": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "first_consecutive_seen_ts": { + "type": [ + "string", + "null" + ] + }, + "last_question_ts": { + "type": [ + "string", + "null" + ] + }, + "last_seen_ts": { + "type": [ + "string", + "null" + ] + }, + "messages_rcvd": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "messages_sent": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "questions_in_flight": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "recent_lost_answers": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + "TransferStats": { + "type": "object", + "required": [ + "average", + "maximum", + "minimum", + "total" + ], + "properties": { + "average": { + "type": "string" + }, + "maximum": { + "type": "string" + }, + "minimum": { + "type": "string" + }, + "total": { + "type": "string" + } + } + }, + "TransferStatsDownUp": { + "type": "object", + "required": [ + "down", + "up" + ], + "properties": { + "down": { + "$ref": "#/definitions/TransferStats" + }, + "up": { + "$ref": "#/definitions/TransferStats" + } + } + }, + "ValueData": { + "type": "object", + "required": [ + "data", + "seq", + "writer" + ], + "properties": { + "data": { + "description": "The contents of a DHT Record", + "type": "string" + }, + "seq": { + "description": "An increasing sequence number to time-order the DHT record changes", + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "writer": { + "description": "The public identity key of the writer of the data", + "type": "string" + } + } + }, + "VeilidAPIError": { + "oneOf": [ + { + "type": "object", + "required": [ + "kind" + ], + "properties": { + "kind": { + "type": "string", + "enum": [ + "NotInitialized" + ] + } + } + }, + { + "type": "object", + "required": [ + "kind" + ], + "properties": { + "kind": { + "type": "string", + "enum": [ + "AlreadyInitialized" + ] + } + } + }, + { + "type": "object", + "required": [ + "kind" + ], + "properties": { + "kind": { + "type": "string", + "enum": [ + "Timeout" + ] + } + } + }, + { + "type": "object", + "required": [ + "kind" + ], + "properties": { + "kind": { + "type": "string", + "enum": [ + "TryAgain" + ] + } + } + }, + { + "type": "object", + "required": [ + "kind" + ], + "properties": { + "kind": { + "type": "string", + "enum": [ + "Shutdown" + ] + } + } + }, + { + "type": "object", + "required": [ + "kind" + ], + "properties": { + "kind": { + "type": "string", + "enum": [ + "InvalidTarget" + ] + } + } + }, + { + "type": "object", + "required": [ + "kind", + "message" + ], + "properties": { + "kind": { + "type": "string", + "enum": [ + "NoConnection" + ] + }, + "message": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "key", + "kind" + ], + "properties": { + "key": { + "type": "string" + }, + "kind": { + "type": "string", + "enum": [ + "KeyNotFound" + ] + } + } + }, + { + "type": "object", + "required": [ + "kind", + "message" + ], + "properties": { + "kind": { + "type": "string", + "enum": [ + "Internal" + ] + }, + "message": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "kind", + "message" + ], + "properties": { + "kind": { + "type": "string", + "enum": [ + "Unimplemented" + ] + }, + "message": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "kind", + "message", + "value" + ], + "properties": { + "kind": { + "type": "string", + "enum": [ + "ParseError" + ] + }, + "message": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "argument", + "context", + "kind", + "value" + ], + "properties": { + "argument": { + "type": "string" + }, + "context": { + "type": "string" + }, + "kind": { + "type": "string", + "enum": [ + "InvalidArgument" + ] + }, + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "argument", + "context", + "kind" + ], + "properties": { + "argument": { + "type": "string" + }, + "context": { + "type": "string" + }, + "kind": { + "type": "string", + "enum": [ + "MissingArgument" + ] + } + } + }, + { + "type": "object", + "required": [ + "kind", + "message" + ], + "properties": { + "kind": { + "type": "string", + "enum": [ + "Generic" + ] + }, + "message": { + "type": "string" + } + } + } + ] + }, + "VeilidConfigApplication": { + "description": "Application configuration\n\nConfigure web access to the Prograssive Web App (PWA)\n\nTo be implemented...", + "type": "object", + "required": [ + "http", + "https" + ], + "properties": { + "http": { + "$ref": "#/definitions/VeilidConfigHTTP" + }, + "https": { + "$ref": "#/definitions/VeilidConfigHTTPS" + } + } + }, + "VeilidConfigBlockStore": { + "type": "object", + "required": [ + "delete", + "directory" + ], + "properties": { + "delete": { + "type": "boolean" + }, + "directory": { + "type": "string" + } + } + }, + "VeilidConfigCapabilities": { + "type": "object", + "required": [ + "protocol_accept_tcp", + "protocol_accept_ws", + "protocol_accept_wss", + "protocol_connect_tcp", + "protocol_connect_ws", + "protocol_connect_wss", + "protocol_udp" + ], + "properties": { + "protocol_accept_tcp": { + "type": "boolean" + }, + "protocol_accept_ws": { + "type": "boolean" + }, + "protocol_accept_wss": { + "type": "boolean" + }, + "protocol_connect_tcp": { + "type": "boolean" + }, + "protocol_connect_ws": { + "type": "boolean" + }, + "protocol_connect_wss": { + "type": "boolean" + }, + "protocol_udp": { + "type": "boolean" + } + } + }, + "VeilidConfigDHT": { + "description": "Configure the Distributed Hash Table (DHT)", + "type": "object", + "required": [ + "get_value_count", + "get_value_fanout", + "get_value_timeout_ms", + "local_max_subkey_cache_memory_mb", + "local_subkey_cache_size", + "max_find_node_count", + "min_peer_count", + "min_peer_refresh_time_ms", + "remote_max_records", + "remote_max_storage_space_mb", + "remote_max_subkey_cache_memory_mb", + "remote_subkey_cache_size", + "resolve_node_count", + "resolve_node_fanout", + "resolve_node_timeout_ms", + "set_value_count", + "set_value_fanout", + "set_value_timeout_ms", + "validate_dial_info_receipt_time_ms" + ], + "properties": { + "get_value_count": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "get_value_fanout": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "get_value_timeout_ms": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "local_max_subkey_cache_memory_mb": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "local_subkey_cache_size": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "max_find_node_count": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "min_peer_count": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "min_peer_refresh_time_ms": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "remote_max_records": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "remote_max_storage_space_mb": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "remote_max_subkey_cache_memory_mb": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "remote_subkey_cache_size": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "resolve_node_count": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "resolve_node_fanout": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "resolve_node_timeout_ms": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "set_value_count": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "set_value_fanout": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "set_value_timeout_ms": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "validate_dial_info_receipt_time_ms": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + "VeilidConfigHTTP": { + "description": "Enable and configure HTTP access to the Veilid node\n\n```yaml http: enabled: false listen_address: ':5150' path: 'app\" url: 'https://localhost:5150' ```", + "type": "object", + "required": [ + "enabled", + "listen_address", + "path" + ], + "properties": { + "enabled": { + "type": "boolean" + }, + "listen_address": { + "type": "string" + }, + "path": { + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + } + } + }, + "VeilidConfigHTTPS": { + "description": "Enable and configure HTTPS access to the Veilid node\n\n```yaml https: enabled: false listen_address: ':5150' path: 'app' url: 'https://localhost:5150' ```", + "type": "object", + "required": [ + "enabled", + "listen_address", + "path" + ], + "properties": { + "enabled": { + "type": "boolean" + }, + "listen_address": { + "type": "string" + }, + "path": { + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + } + } + }, + "VeilidConfigInner": { + "type": "object", + "required": [ + "block_store", + "capabilities", + "namespace", + "network", + "program_name", + "protected_store", + "table_store" + ], + "properties": { + "block_store": { + "$ref": "#/definitions/VeilidConfigBlockStore" + }, + "capabilities": { + "$ref": "#/definitions/VeilidConfigCapabilities" + }, + "namespace": { + "type": "string" + }, + "network": { + "$ref": "#/definitions/VeilidConfigNetwork" + }, + "program_name": { + "type": "string" + }, + "protected_store": { + "$ref": "#/definitions/VeilidConfigProtectedStore" + }, + "table_store": { + "$ref": "#/definitions/VeilidConfigTableStore" + } + } + }, + "VeilidConfigNetwork": { + "type": "object", + "required": [ + "application", + "client_whitelist_timeout_ms", + "connection_inactivity_timeout_ms", + "connection_initial_timeout_ms", + "detect_address_changes", + "dht", + "hole_punch_receipt_time_ms", + "max_connection_frequency_per_min", + "max_connections_per_ip4", + "max_connections_per_ip6_prefix", + "max_connections_per_ip6_prefix_size", + "protocol", + "restricted_nat_retries", + "reverse_connection_receipt_time_ms", + "routing_table", + "rpc", + "tls", + "upnp" + ], + "properties": { + "application": { + "$ref": "#/definitions/VeilidConfigApplication" + }, + "client_whitelist_timeout_ms": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "connection_inactivity_timeout_ms": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "connection_initial_timeout_ms": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "detect_address_changes": { + "type": "boolean" + }, + "dht": { + "$ref": "#/definitions/VeilidConfigDHT" + }, + "hole_punch_receipt_time_ms": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "max_connection_frequency_per_min": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "max_connections_per_ip4": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "max_connections_per_ip6_prefix": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "max_connections_per_ip6_prefix_size": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "protocol": { + "$ref": "#/definitions/VeilidConfigProtocol" + }, + "restricted_nat_retries": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "reverse_connection_receipt_time_ms": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "routing_table": { + "$ref": "#/definitions/VeilidConfigRoutingTable" + }, + "rpc": { + "$ref": "#/definitions/VeilidConfigRPC" + }, + "tls": { + "$ref": "#/definitions/VeilidConfigTLS" + }, + "upnp": { + "type": "boolean" + } + } + }, + "VeilidConfigProtectedStore": { + "type": "object", + "required": [ + "allow_insecure_fallback", + "always_use_insecure_storage", + "delete", + "device_encryption_key_password", + "directory" + ], + "properties": { + "allow_insecure_fallback": { + "type": "boolean" + }, + "always_use_insecure_storage": { + "type": "boolean" + }, + "delete": { + "type": "boolean" + }, + "device_encryption_key_password": { + "type": "string" + }, + "directory": { + "type": "string" + }, + "new_device_encryption_key_password": { + "type": [ + "string", + "null" + ] + } + } + }, + "VeilidConfigProtocol": { + "description": "Configure Network Protocols\n\nVeilid can communicate over UDP, TCP, and Web Sockets.\n\nAll protocols are available by default, and the Veilid node will sort out which protocol is used for each peer connection.", + "type": "object", + "required": [ + "tcp", + "udp", + "ws", + "wss" + ], + "properties": { + "tcp": { + "$ref": "#/definitions/VeilidConfigTCP" + }, + "udp": { + "$ref": "#/definitions/VeilidConfigUDP" + }, + "ws": { + "$ref": "#/definitions/VeilidConfigWS" + }, + "wss": { + "$ref": "#/definitions/VeilidConfigWSS" + } + } + }, + "VeilidConfigRPC": { + "description": "Configure RPC", + "type": "object", + "required": [ + "concurrency", + "default_route_hop_count", + "max_route_hop_count", + "queue_size", + "timeout_ms" + ], + "properties": { + "concurrency": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "default_route_hop_count": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "max_route_hop_count": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "max_timestamp_ahead_ms": { + "type": [ + "integer", + "null" + ], + "format": "uint32", + "minimum": 0.0 + }, + "max_timestamp_behind_ms": { + "type": [ + "integer", + "null" + ], + "format": "uint32", + "minimum": 0.0 + }, + "queue_size": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "timeout_ms": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + "VeilidConfigRoutingTable": { + "description": "Configure the network routing table", + "type": "object", + "required": [ + "bootstrap", + "limit_attached_good", + "limit_attached_strong", + "limit_attached_weak", + "limit_fully_attached", + "limit_over_attached", + "node_id", + "node_id_secret" + ], + "properties": { + "bootstrap": { + "type": "array", + "items": { + "type": "string" + } + }, + "limit_attached_good": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "limit_attached_strong": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "limit_attached_weak": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "limit_fully_attached": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "limit_over_attached": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "node_id": { + "type": "array", + "items": { + "type": "string" + } + }, + "node_id_secret": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "VeilidConfigTCP": { + "description": "Enable and configure TCP\n\n```yaml tcp: connect: true listen: true max_connections: 32 listen_address: ':5150' public_address: ''", + "type": "object", + "required": [ + "connect", + "listen", + "listen_address", + "max_connections" + ], + "properties": { + "connect": { + "type": "boolean" + }, + "listen": { + "type": "boolean" + }, + "listen_address": { + "type": "string" + }, + "max_connections": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "public_address": { + "type": [ + "string", + "null" + ] + } + } + }, + "VeilidConfigTLS": { + "description": "Configure TLS\n\n```yaml tls: certificate_path: /path/to/cert private_key_path: /path/to/private/key connection_initial_timeout_ms: 2000", + "type": "object", + "required": [ + "certificate_path", + "connection_initial_timeout_ms", + "private_key_path" + ], + "properties": { + "certificate_path": { + "type": "string" + }, + "connection_initial_timeout_ms": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "private_key_path": { + "type": "string" + } + } + }, + "VeilidConfigTableStore": { + "type": "object", + "required": [ + "delete", + "directory" + ], + "properties": { + "delete": { + "type": "boolean" + }, + "directory": { + "type": "string" + } + } + }, + "VeilidConfigUDP": { + "description": "Enable and configure UDP\n\n```yaml udp: enabled: true socket_pool_size: 0 listen_address: ':5150' public_address: '' ```", + "type": "object", + "required": [ + "enabled", + "listen_address", + "socket_pool_size" + ], + "properties": { + "enabled": { + "type": "boolean" + }, + "listen_address": { + "type": "string" + }, + "public_address": { + "type": [ + "string", + "null" + ] + }, + "socket_pool_size": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + "VeilidConfigWS": { + "description": "Enable and configure Web Sockets\n\n```yaml ws: connect: true listen: true max_connections: 16 listen_address: ':5150' path: 'ws' url: 'ws://localhost:5150/ws'", + "type": "object", + "required": [ + "connect", + "listen", + "listen_address", + "max_connections", + "path" + ], + "properties": { + "connect": { + "type": "boolean" + }, + "listen": { + "type": "boolean" + }, + "listen_address": { + "type": "string" + }, + "max_connections": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "path": { + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + } + } + }, + "VeilidConfigWSS": { + "description": "Enable and configure Secure Web Sockets\n\n```yaml wss: connect: true listen: false max_connections: 16 listen_address: ':5150' path: 'ws' url: ''", + "type": "object", + "required": [ + "connect", + "listen", + "listen_address", + "max_connections", + "path" + ], + "properties": { + "connect": { + "type": "boolean" + }, + "listen": { + "type": "boolean" + }, + "listen_address": { + "type": "string" + }, + "max_connections": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "path": { + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + } + } + }, + "VeilidLogLevel": { + "description": "Log level for VeilidCore", + "type": "string", + "enum": [ + "Error", + "Warn", + "Info", + "Debug", + "Trace" + ] + }, + "VeilidState": { + "type": "object", + "required": [ + "attachment", + "config", + "network" + ], + "properties": { + "attachment": { + "$ref": "#/definitions/VeilidStateAttachment" + }, + "config": { + "$ref": "#/definitions/VeilidStateConfig" + }, + "network": { + "$ref": "#/definitions/VeilidStateNetwork" + } + } + }, + "VeilidStateAttachment": { + "type": "object", + "required": [ + "local_network_ready", + "public_internet_ready", + "state" + ], + "properties": { + "local_network_ready": { + "type": "boolean" + }, + "public_internet_ready": { + "type": "boolean" + }, + "state": { + "$ref": "#/definitions/AttachmentState" + } + } + }, + "VeilidStateConfig": { + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "$ref": "#/definitions/VeilidConfigInner" + } + } + }, + "VeilidStateNetwork": { + "type": "object", + "required": [ + "bps_down", + "bps_up", + "peers", + "started" + ], + "properties": { + "bps_down": { + "type": "string" + }, + "bps_up": { + "type": "string" + }, + "peers": { + "type": "array", + "items": { + "$ref": "#/definitions/PeerTableData" + } + }, + "started": { + "type": "boolean" + } + } + } + } +} diff --git a/veilid-python/schema/Request.json b/veilid-python/schema/Request.json new file mode 100644 index 00000000..82119da0 --- /dev/null +++ b/veilid-python/schema/Request.json @@ -0,0 +1,1585 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Request", + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "args", + "op" + ], + "properties": { + "args": { + "type": "array", + "items": { + "type": "string" + } + }, + "op": { + "type": "string", + "enum": [ + "Control" + ] + } + } + }, + { + "type": "object", + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "GetState" + ] + } + } + }, + { + "type": "object", + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "Attach" + ] + } + } + }, + { + "type": "object", + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "Detach" + ] + } + } + }, + { + "type": "object", + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "NewPrivateRoute" + ] + } + } + }, + { + "type": "object", + "required": [ + "kinds", + "op" + ], + "properties": { + "kinds": { + "type": "array", + "items": { + "type": "string" + } + }, + "op": { + "type": "string", + "enum": [ + "NewCustomPrivateRoute" + ] + }, + "sequencing": { + "default": "NoPreference", + "allOf": [ + { + "$ref": "#/definitions/Sequencing" + } + ] + }, + "stability": { + "default": "LowLatency", + "allOf": [ + { + "$ref": "#/definitions/Stability" + } + ] + } + } + }, + { + "type": "object", + "required": [ + "blob", + "op" + ], + "properties": { + "blob": { + "type": "string" + }, + "op": { + "type": "string", + "enum": [ + "ImportRemotePrivateRoute" + ] + } + } + }, + { + "type": "object", + "required": [ + "op", + "route_id" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "ReleasePrivateRoute" + ] + }, + "route_id": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "call_id", + "message", + "op" + ], + "properties": { + "call_id": { + "type": "string" + }, + "message": { + "type": "string" + }, + "op": { + "type": "string", + "enum": [ + "AppCallReply" + ] + } + } + }, + { + "type": "object", + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "NewRoutingContext" + ] + } + } + }, + { + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "rc_op" + ], + "properties": { + "rc_op": { + "type": "string", + "enum": [ + "Release" + ] + } + } + }, + { + "type": "object", + "required": [ + "rc_op" + ], + "properties": { + "rc_op": { + "type": "string", + "enum": [ + "WithPrivacy" + ] + } + } + }, + { + "type": "object", + "required": [ + "rc_op", + "stability" + ], + "properties": { + "rc_op": { + "type": "string", + "enum": [ + "WithCustomPrivacy" + ] + }, + "stability": { + "$ref": "#/definitions/Stability" + } + } + }, + { + "type": "object", + "required": [ + "rc_op", + "sequencing" + ], + "properties": { + "rc_op": { + "type": "string", + "enum": [ + "WithSequencing" + ] + }, + "sequencing": { + "$ref": "#/definitions/Sequencing" + } + } + }, + { + "type": "object", + "required": [ + "rc_op", + "request", + "target" + ], + "properties": { + "rc_op": { + "type": "string", + "enum": [ + "AppCall" + ] + }, + "request": { + "type": "string" + }, + "target": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "message", + "rc_op", + "target" + ], + "properties": { + "message": { + "type": "string" + }, + "rc_op": { + "type": "string", + "enum": [ + "AppMessage" + ] + }, + "target": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "kind", + "rc_op", + "schema" + ], + "properties": { + "kind": { + "type": "string" + }, + "rc_op": { + "type": "string", + "enum": [ + "CreateDhtRecord" + ] + }, + "schema": { + "$ref": "#/definitions/DHTSchema" + } + } + }, + { + "type": "object", + "required": [ + "key", + "rc_op" + ], + "properties": { + "key": { + "type": "string" + }, + "rc_op": { + "type": "string", + "enum": [ + "OpenDhtRecord" + ] + }, + "writer": { + "type": [ + "string", + "null" + ] + } + } + }, + { + "type": "object", + "required": [ + "key", + "rc_op" + ], + "properties": { + "key": { + "type": "string" + }, + "rc_op": { + "type": "string", + "enum": [ + "CloseDhtRecord" + ] + } + } + }, + { + "type": "object", + "required": [ + "key", + "rc_op" + ], + "properties": { + "key": { + "type": "string" + }, + "rc_op": { + "type": "string", + "enum": [ + "DeleteDhtRecord" + ] + } + } + }, + { + "type": "object", + "required": [ + "force_refresh", + "key", + "rc_op", + "subkey" + ], + "properties": { + "force_refresh": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "rc_op": { + "type": "string", + "enum": [ + "GetDhtValue" + ] + }, + "subkey": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "required": [ + "data", + "key", + "rc_op", + "subkey" + ], + "properties": { + "data": { + "type": "string" + }, + "key": { + "type": "string" + }, + "rc_op": { + "type": "string", + "enum": [ + "SetDhtValue" + ] + }, + "subkey": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "required": [ + "count", + "expiration", + "key", + "rc_op", + "subkeys" + ], + "properties": { + "count": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "expiration": { + "type": "string" + }, + "key": { + "type": "string" + }, + "rc_op": { + "type": "string", + "enum": [ + "WatchDhtValues" + ] + }, + "subkeys": { + "type": "array", + "items": { + "type": "array", + "items": [ + { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + ], + "maxItems": 2, + "minItems": 2 + } + } + } + }, + { + "type": "object", + "required": [ + "key", + "rc_op", + "subkeys" + ], + "properties": { + "key": { + "type": "string" + }, + "rc_op": { + "type": "string", + "enum": [ + "CancelDhtWatch" + ] + }, + "subkeys": { + "type": "array", + "items": { + "type": "array", + "items": [ + { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + ], + "maxItems": 2, + "minItems": 2 + } + } + } + } + ], + "required": [ + "op", + "rc_id" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "RoutingContext" + ] + }, + "rc_id": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "required": [ + "column_count", + "name", + "op" + ], + "properties": { + "column_count": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "name": { + "type": "string" + }, + "op": { + "type": "string", + "enum": [ + "OpenTableDb" + ] + } + } + }, + { + "type": "object", + "required": [ + "name", + "op" + ], + "properties": { + "name": { + "type": "string" + }, + "op": { + "type": "string", + "enum": [ + "DeleteTableDb" + ] + } + } + }, + { + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "db_op" + ], + "properties": { + "db_op": { + "type": "string", + "enum": [ + "Release" + ] + } + } + }, + { + "type": "object", + "required": [ + "db_op" + ], + "properties": { + "db_op": { + "type": "string", + "enum": [ + "GetColumnCount" + ] + } + } + }, + { + "type": "object", + "required": [ + "col", + "db_op" + ], + "properties": { + "col": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "db_op": { + "type": "string", + "enum": [ + "GetKeys" + ] + } + } + }, + { + "type": "object", + "required": [ + "db_op" + ], + "properties": { + "db_op": { + "type": "string", + "enum": [ + "Transact" + ] + } + } + }, + { + "type": "object", + "required": [ + "col", + "db_op", + "key", + "value" + ], + "properties": { + "col": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "db_op": { + "type": "string", + "enum": [ + "Store" + ] + }, + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "col", + "db_op", + "key" + ], + "properties": { + "col": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "db_op": { + "type": "string", + "enum": [ + "Load" + ] + }, + "key": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "col", + "db_op", + "key" + ], + "properties": { + "col": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "db_op": { + "type": "string", + "enum": [ + "Delete" + ] + }, + "key": { + "type": "string" + } + } + } + ], + "required": [ + "db_id", + "op" + ], + "properties": { + "db_id": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "op": { + "type": "string", + "enum": [ + "TableDb" + ] + } + } + }, + { + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "tx_op" + ], + "properties": { + "tx_op": { + "type": "string", + "enum": [ + "Commit" + ] + } + } + }, + { + "type": "object", + "required": [ + "tx_op" + ], + "properties": { + "tx_op": { + "type": "string", + "enum": [ + "Rollback" + ] + } + } + }, + { + "type": "object", + "required": [ + "col", + "key", + "tx_op", + "value" + ], + "properties": { + "col": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "key": { + "type": "string" + }, + "tx_op": { + "type": "string", + "enum": [ + "Store" + ] + }, + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "col", + "key", + "tx_op" + ], + "properties": { + "col": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "key": { + "type": "string" + }, + "tx_op": { + "type": "string", + "enum": [ + "Delete" + ] + } + } + } + ], + "required": [ + "op", + "tx_id" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "TableDbTransaction" + ] + }, + "tx_id": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "required": [ + "kind", + "op" + ], + "properties": { + "kind": { + "type": "string" + }, + "op": { + "type": "string", + "enum": [ + "GetCryptoSystem" + ] + } + } + }, + { + "type": "object", + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "BestCryptoSystem" + ] + } + } + }, + { + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "cs_op" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "Release" + ] + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "key", + "secret" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "CachedDh" + ] + }, + "key": { + "type": "string" + }, + "secret": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "key", + "secret" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "ComputeDh" + ] + }, + "key": { + "type": "string" + }, + "secret": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "len" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "RandomBytes" + ] + }, + "len": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "required": [ + "cs_op" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "DefaultSaltLength" + ] + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "password", + "salt" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "HashPassword" + ] + }, + "password": { + "type": "string" + }, + "salt": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "password", + "password_hash" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "VerifyPassword" + ] + }, + "password": { + "type": "string" + }, + "password_hash": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "password", + "salt" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "DeriveSharedSecret" + ] + }, + "password": { + "type": "string" + }, + "salt": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "cs_op" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "RandomNonce" + ] + } + } + }, + { + "type": "object", + "required": [ + "cs_op" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "RandomSharedSecret" + ] + } + } + }, + { + "type": "object", + "required": [ + "cs_op" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "GenerateKeyPair" + ] + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "data" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "GenerateHash" + ] + }, + "data": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "key", + "secret" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "ValidateKeyPair" + ] + }, + "key": { + "type": "string" + }, + "secret": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "data", + "hash_digest" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "ValidateHash" + ] + }, + "data": { + "type": "string" + }, + "hash_digest": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "key1", + "key2" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "Distance" + ] + }, + "key1": { + "type": "string" + }, + "key2": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "data", + "key", + "secret" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "Sign" + ] + }, + "data": { + "type": "string" + }, + "key": { + "type": "string" + }, + "secret": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "cs_op", + "data", + "key", + "secret" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "Verify" + ] + }, + "data": { + "type": "string" + }, + "key": { + "type": "string" + }, + "secret": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "cs_op" + ], + "properties": { + "cs_op": { + "type": "string", + "enum": [ + "AeadOverhead" + ] + } + } + }, + { + "type": "object", + "required": [ + "body", + "cs_op", + "nonce", + "shared_secret" + ], + "properties": { + "associated_data": { + "type": [ + "string", + "null" + ] + }, + "body": { + "type": "string" + }, + "cs_op": { + "type": "string", + "enum": [ + "DecryptAead" + ] + }, + "nonce": { + "type": "string" + }, + "shared_secret": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "body", + "cs_op", + "nonce", + "shared_secret" + ], + "properties": { + "associated_data": { + "type": [ + "string", + "null" + ] + }, + "body": { + "type": "string" + }, + "cs_op": { + "type": "string", + "enum": [ + "EncryptAead" + ] + }, + "nonce": { + "type": "string" + }, + "shared_secret": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "body", + "cs_op", + "nonce", + "shared_secret" + ], + "properties": { + "body": { + "type": "string" + }, + "cs_op": { + "type": "string", + "enum": [ + "CryptNoAuth" + ] + }, + "nonce": { + "type": "string" + }, + "shared_secret": { + "type": "string" + } + } + } + ], + "required": [ + "cs_id", + "op" + ], + "properties": { + "cs_id": { + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "op": { + "type": "string", + "enum": [ + "CryptoSystem" + ] + } + } + }, + { + "type": "object", + "required": [ + "data", + "node_ids", + "op", + "signatures" + ], + "properties": { + "data": { + "type": "string" + }, + "node_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "op": { + "type": "string", + "enum": [ + "VerifySignatures" + ] + }, + "signatures": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + { + "type": "object", + "required": [ + "data", + "key_pairs", + "op" + ], + "properties": { + "data": { + "type": "string" + }, + "key_pairs": { + "type": "array", + "items": { + "type": "string" + } + }, + "op": { + "type": "string", + "enum": [ + "GenerateSignatures" + ] + } + } + }, + { + "type": "object", + "required": [ + "kind", + "op" + ], + "properties": { + "kind": { + "type": "string" + }, + "op": { + "type": "string", + "enum": [ + "GenerateKeyPair" + ] + } + } + }, + { + "type": "object", + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "Now" + ] + } + } + }, + { + "type": "object", + "required": [ + "command", + "op" + ], + "properties": { + "command": { + "type": "string" + }, + "op": { + "type": "string", + "enum": [ + "Debug" + ] + } + } + }, + { + "type": "object", + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "VeilidVersionString" + ] + } + } + }, + { + "type": "object", + "required": [ + "op" + ], + "properties": { + "op": { + "type": "string", + "enum": [ + "VeilidVersion" + ] + } + } + } + ], + "properties": { + "id": { + "description": "Operation Id (pairs with Response, or empty if unidirectional)", + "default": 0, + "type": "integer", + "format": "uint32", + "minimum": 0.0 + } + }, + "definitions": { + "DHTSchema": { + "description": "Enum over all the supported DHT Schemas", + "oneOf": [ + { + "description": "Default DHT Schema (DFLT)", + "type": "object", + "required": [ + "kind", + "o_cnt" + ], + "properties": { + "kind": { + "type": "string", + "enum": [ + "DFLT" + ] + }, + "o_cnt": { + "description": "Owner subkey count", + "type": "integer", + "format": "uint16", + "minimum": 0.0 + } + } + }, + { + "description": "Simple DHT Schema (SMPL)", + "type": "object", + "required": [ + "kind", + "members", + "o_cnt" + ], + "properties": { + "kind": { + "type": "string", + "enum": [ + "SMPL" + ] + }, + "members": { + "description": "Members", + "type": "array", + "items": { + "$ref": "#/definitions/DHTSchemaSMPLMember" + } + }, + "o_cnt": { + "description": "Owner subkey count", + "type": "integer", + "format": "uint16", + "minimum": 0.0 + } + } + } + ] + }, + "DHTSchemaSMPLMember": { + "description": "Simple DHT Schema (SMPL) Member", + "type": "object", + "required": [ + "m_cnt", + "m_key" + ], + "properties": { + "m_cnt": { + "description": "Member subkey count", + "type": "integer", + "format": "uint16", + "minimum": 0.0 + }, + "m_key": { + "description": "Member key", + "type": "string" + } + } + }, + "Sequencing": { + "type": "string", + "enum": [ + "NoPreference", + "PreferOrdered", + "EnsureOrdered" + ] + }, + "Stability": { + "type": "string", + "enum": [ + "LowLatency", + "Reliable" + ] + } + } +} diff --git a/veilid-python/tests/__init__.py b/veilid-python/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/veilid-python/update_schema.sh b/veilid-python/update_schema.sh new file mode 100755 index 00000000..b00e14e8 --- /dev/null +++ b/veilid-python/update_schema.sh @@ -0,0 +1,17 @@ +#!/bin/bash +set -eo pipefail +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" + +VEILID_SERVER=$SCRIPTDIR/../target/debug/veilid-server + +# Ensure executable exists +if [ ! -f "$VEILID_SERVER" ]; then + echo "$VEILID_SERVER does not exist. Build with cargo build." + exit 1 +fi + +# Produce schema from veilid-server +$VEILID_SERVER --emit-schema Request > $SCRIPTDIR/schema/Request.json +$VEILID_SERVER --emit-schema RecvMessage > $SCRIPTDIR/schema/RecvMessage.json + + diff --git a/veilid-python/veilid_python/__init__.py b/veilid-python/veilid_python/__init__.py new file mode 100644 index 00000000..cc512528 --- /dev/null +++ b/veilid-python/veilid_python/__init__.py @@ -0,0 +1 @@ +from .error import * diff --git a/veilid-python/veilid_python/api.py b/veilid-python/veilid_python/api.py new file mode 100644 index 00000000..abd9a10f --- /dev/null +++ b/veilid-python/veilid_python/api.py @@ -0,0 +1,11 @@ +from abc import ABC, abstractmethod +from .state import VeilidState + +class VeilidAPI(ABC): + @abstractmethod + def control(self, args: list[str]) -> str: + pass + @abstractmethod + def get_state(self) -> VeilidState: + pass + \ No newline at end of file diff --git a/veilid-python/veilid_python/config.py b/veilid-python/veilid_python/config.py new file mode 100644 index 00000000..ba520cc6 --- /dev/null +++ b/veilid-python/veilid_python/config.py @@ -0,0 +1,254 @@ +from typing import Self, Optional +from enum import StrEnum + +class VeilidConfigLogLevel(StrEnum): + OFF = 'Off' + ERROR = 'Error' + WARN = 'Warn' + INFO = 'Info' + DEBUG = 'Debug' + TRACE = 'Trace' + +class VeilidConfigCapabilities: + protocol_udp: bool + protocol_connect_tcp: bool + protocol_accept_tcp: bool + protocol_connect_ws: bool + protocol_accept_ws: bool + protocol_connect_wss: bool + protocol_accept_wss: bool + + def __init__(self, protocol_udp: bool, protocol_connect_tcp: bool, protocol_accept_tcp: bool, + protocol_connect_ws: bool, protocol_accept_ws: bool, protocol_connect_wss: bool, protocol_accept_wss: bool): + + self.protocol_udp = protocol_udp + self.protocol_connect_tcp = protocol_connect_tcp + self.protocol_accept_tcp = protocol_accept_tcp + self.protocol_connect_ws = protocol_connect_ws + self.protocol_accept_ws = protocol_accept_ws + self.protocol_connect_wss = protocol_connect_wss + self.protocol_accept_wss = protocol_accept_wss + + @staticmethod + def from_json(j: dict) -> Self: + return VeilidConfigCapabilities(j['protocol_udp'], + j['protocol_connect_tcp'], + j['protocol_accept_tcp'], + j['protocol_connect_ws'], + j['protocol_accept_ws'], + j['protocol_connect_wss'], + j['protocol_accept_wss']) + +class VeilidConfigProtectedStore: + allow_insecure_fallback: bool + always_use_insecure_storage: bool + directory: str + delete: bool + device_encryption_key_password: str + new_device_encryption_key_password: Optional[str] + + def __init__(self, allow_insecure_fallback: bool, always_use_insecure_storage: bool, + directory: str, delete: bool, device_encryption_key_password: str, new_device_encryption_key_password: Optional[str]): + + self.allow_insecure_fallback = allow_insecure_fallback + self.always_use_insecure_storage = always_use_insecure_storage + self.directory = directory + self.delete = delete + self.device_encryption_key_password = device_encryption_key_password + self.new_device_encryption_key_password = new_device_encryption_key_password + + @staticmethod + def from_json(j: dict) -> Self: + return VeilidConfigProtectedStore(j['allow_insecure_fallback'], j['always_use_insecure_storage'], + j['directory'], j['delete'], j['device_encryption_key_password'], j['new_device_encryption_key_password']) + +class VeilidConfigTableStore: + directory: str + delete: bool + + def __init__(self, directory: str, delete: bool): + self.directory = directory + self.delete = delete + + @staticmethod + def from_json(j: dict) -> Self: + return VeilidConfigTableStore(j['directory'], j['delete']) + +class VeilidConfigBlockStore: + directory: str + delete: bool + + def __init__(self, directory: str, delete: bool): + self.directory = directory + self.delete = delete + + @staticmethod + def from_json(j: dict) -> Self: + return VeilidConfigBlockStore(j['directory'], j['delete']) + +class VeilidConfigRoutingTable: + node_id: list[str] + node_id_secret: list[str] + bootstrap: list[str] + limit_over_attached: int + limit_fully_attached: int + limit_attached_strong: int + limit_attached_good: int + limit_attached_weak: int + + def __init__(self, node_id: list[str], node_id_secret: list[str], bootstrap: list[str], limit_over_attached: int, + limit_fully_attached: int, limit_attached_strong: int, limit_attached_good: int, limit_attached_weak: int): + + self.node_id = node_id + self.node_id_secret = node_id_secret + self.bootstrap = bootstrap + self.limit_over_attached = limit_over_attached + self.limit_fully_attached = limit_fully_attached + self.limit_attached_strong = limit_attached_strong + self.limit_attached_good = limit_attached_good + self.limit_attached_weak = limit_attached_weak + + @staticmethod + def from_json(j: dict) -> Self: + return VeilidConfigRoutingTable( + j['node_id'], + j['node_id_secret'], + j['bootstrap'], + j['limit_over_attached'], + j['limit_fully_attached'], + j['limit_attached_strong'], + j['limit_attached_good'], + j['limit_attached_weak']) + + +class VeilidConfigRPC: + concurrency: int + queue_size: int + max_timestamp_behind_ms: Optional[int] + max_timestamp_ahead_ms: Optional[int] + timeout_ms: int + max_route_hop_count: int + default_route_hop_count: int + + def __init__(self, concurrency: int, queue_size: int, max_timestamp_behind_ms: Optional[int], max_timestamp_ahead_ms: Optional[int], + timeout_ms: int, max_route_hop_count: int, default_route_hop_count: int): + + self.concurrency = concurrency + self.queue_size = queue_size + self.max_timestamp_behind_ms = max_timestamp_behind_ms + self.max_timestamp_ahead_ms = max_timestamp_ahead_ms + self.timeout_ms = timeout_ms + self.max_route_hop_count = max_route_hop_count + self.default_route_hop_count = default_route_hop_count + + @staticmethod + def from_json(j: dict) -> Self: + return VeilidConfigRPC( + j['concurrency'], + j['queue_size'], + j['max_timestamp_behind_ms'], + j['max_timestamp_ahead_ms'], + j['timeout_ms'], + j['max_route_hop_count'], + j['default_route_hop_count']) + + +class VeilidConfigNetwork: + connection_initial_timeout_ms: int + connection_inactivity_timeout_ms: int + max_connections_per_ip4: int + max_connections_per_ip6_prefix: int + max_connections_per_ip6_prefix_size: int + max_connection_frequency_per_min: int + client_whitelist_timeout_ms: int + reverse_connection_receipt_time_ms: int + hole_punch_receipt_time_ms: int + routing_table: VeilidConfigRoutingTable + rpc: VeilidConfigRPC + dht: VeilidConfigDHT + upnp: bool + detect_address_changes: bool + restricted_nat_retries: int + tls: VeilidConfigTLS + application: VeilidConfigApplication + protocol: VeilidConfigProtocol + + def __init__(self, connection_initial_timeout_ms: int, connection_inactivity_timeout_ms: int, + max_connections_per_ip4: int, max_connections_per_ip6_prefix: int, + max_connections_per_ip6_prefix_size: int, max_connection_frequency_per_min: int, + client_whitelist_timeout_ms: int, reverse_connection_receipt_time_ms: int, + hole_punch_receipt_time_ms: int, routing_table: VeilidConfigRoutingTable, + rpc: VeilidConfigRPC, dht: VeilidConfigDHT, upnp: bool, detect_address_changes: bool, + restricted_nat_retries: int, tls: VeilidConfigTLS, application: VeilidConfigApplication, protocol: VeilidConfigProtocol): + + self.connection_initial_timeout_ms = connection_initial_timeout_ms + self.connection_inactivity_timeout_ms = connection_inactivity_timeout_ms + self.max_connections_per_ip4 = max_connections_per_ip4 + self.max_connections_per_ip6_prefix = max_connections_per_ip6_prefix + self.max_connections_per_ip6_prefix_size = max_connections_per_ip6_prefix_size + self.max_connection_frequency_per_min = max_connection_frequency_per_min + self.client_whitelist_timeout_ms = client_whitelist_timeout_ms + self.reverse_connection_receipt_time_ms = reverse_connection_receipt_time_ms + self.hole_punch_receipt_time_ms = hole_punch_receipt_time_ms + self.routing_table = routing_table + self.rpc = rpc + self.dht = dht + self.upnp = upnp + self.detect_address_changes = detect_address_changes + self.restricted_nat_retries = restricted_nat_retries + self.tls = tls + self.application = application + self.protocol = protocol + + @staticmethod + def from_json(j: dict) -> Self: + return VeilidConfigNetwork( + j['connection_initial_timeout_ms'], + j['connection_inactivity_timeout_ms'], + j['max_connections_per_ip4'], + j['max_connections_per_ip6_prefix'], + j['max_connections_per_ip6_prefix_size'], + j['max_connection_frequency_per_min'], + j['client_whitelist_timeout_ms'], + j['reverse_connection_receipt_time_ms'], + j['hole_punch_receipt_time_ms'], + VeilidConfigRoutingTable.from_json(j['routing_table']), + VeilidConfigRPC.from_json(j['rpc']), + VeilidConfigDHT.from_json(j['dht']), + j['upnp'], + j['detect_address_changes'], + j['restricted_nat_retries'], + VeilidConfigTLS.from_json(j['tls']), + VeilidConfigApplication.from_json(j['application']), + VeilidConfigProtocol.from_json(j['protocol'])) + +class VeilidConfig: + program_name: str + namespace: str + capabilities: VeilidConfigCapabilities + protected_store: VeilidConfigProtectedStore + table_store: VeilidConfigTableStore + block_store: VeilidConfigBlockStore + network: VeilidConfigNetwork + + def __init__(self, program_name: str, namespace: str, capabilities: VeilidConfigCapabilities, + protected_store: VeilidConfigProtectedStore, table_store: VeilidConfigTableStore, + block_store: VeilidConfigBlockStore, network: VeilidConfigNetwork): + + self.program_name = program_name + self.namespace = namespace + self.capabilities = capabilities + self.protected_store = protected_store + self.table_store = table_store + self.block_store = block_store + self.network = network + + @staticmethod + def from_json(j: dict) -> Self: + return VeilidConfig(j['program_name'], j['namespace'], + VeilidConfigCapabilities.from_json(j['capabilities']), + VeilidConfigProtectedStore.from_json(j['protected_store']), + VeilidConfigTableStore.from_json(j['table_store']), + VeilidConfigBlockStore.from_json(j['block_store']), + VeilidConfigNetwork.from_json(j['network'])) + diff --git a/veilid-python/veilid_python/error.py b/veilid-python/veilid_python/error.py new file mode 100644 index 00000000..d3ded7da --- /dev/null +++ b/veilid-python/veilid_python/error.py @@ -0,0 +1,133 @@ +from typing import Self + +class VeilidAPIError(Exception): + """Veilid API error exception base class""" + pass + @staticmethod + def from_json(j: dict) -> Self: + match j['kind']: + case 'NotInitialized': + return VeilidAPIErrorNotInitialized() + case 'AlreadyInitialized': + return VeilidAPIErrorAlreadyInitialized() + case 'Timeout': + return VeilidAPIErrorTimeout() + case 'TryAgain': + return VeilidAPIErrorTryAgain() + case 'Shutdown': + return VeilidAPIErrorShutdown() + case 'InvalidTarget': + return VeilidAPIErrorInvalidTarget() + case 'NoConnection': + return VeilidAPIErrorNoConnection(j['message']) + case 'KeyNotFound': + return VeilidAPIErrorKeyNotFound(j['key']) + case 'Internal': + return VeilidAPIErrorInternal(j['message']) + case 'Unimplemented': + return VeilidAPIErrorUnimplemented(j['message']) + case 'ParseError': + return VeilidAPIErrorParseError(j['message'], j['value']) + case 'InvalidArgument': + return VeilidAPIErrorInvalidArgument(j['context'], j['argument'], j['value']) + case 'MissingArgument': + return VeilidAPIErrorMissingArgument(j['context'], j['argument']) + case 'Generic': + return VeilidAPIErrorGeneric(j['message']) + case _: + return VeilidAPIError("Unknown exception type: {}".format(j['kind'])) + + +class VeilidAPIErrorNotInitialized(VeilidAPIError): + """Veilid was not initialized""" + def __init__(self): + super().__init__("Not initialized") + +class VeilidAPIErrorAlreadyInitialized(VeilidAPIError): + """Veilid was already initialized""" + def __init__(self): + super().__init__("Already initialized") + +class VeilidAPIErrorTimeout(VeilidAPIError): + """Veilid operation timed out""" + def __init__(self): + super().__init__("Timeout") + +class VeilidAPIErrorTryAgain(VeilidAPIError): + """Operation could not be performed at this time, retry again later""" + def __init__(self): + super().__init__("Try again") + +class VeilidAPIErrorShutdown(VeilidAPIError): + """Veilid was already shut down""" + def __init__(self): + super().__init__("Shutdown") + +class VeilidAPIErrorInvalidTarget(VeilidAPIError): + """Target of operation is not valid""" + def __init__(self): + super().__init__("Invalid target") + +class VeilidAPIErrorNoConnection(VeilidAPIError): + """Connection could not be established""" + message: str + def __init__(self, message: str): + super().__init__("No connection") + self.message = message + +class VeilidAPIErrorKeyNotFound(VeilidAPIError): + """Key was not found""" + key: str + def __init__(self, key: str): + super().__init__("Key not found") + self.key = key + +class VeilidAPIErrorInternal(VeilidAPIError): + """Veilid experienced an internal failure""" + message: str + def __init__(self, message: str): + super().__init__("Internal") + self.message = message + +class VeilidAPIErrorUnimplemented(VeilidAPIError): + """Functionality is not yet implemented""" + message: str + def __init__(self, message: str): + super().__init__("Unimplemented") + self.message = message + +class VeilidAPIErrorParseError(VeilidAPIError): + """Value was not in a parseable format""" + message: str + value: str + def __init__(self, message: str, value: str): + super().__init__("Parse error") + self.message = message + self.value = value + +class VeilidAPIErrorInvalidArgument(VeilidAPIError): + """Argument is not valid in this context""" + context: str + argument: str + value: str + def __init__(self, context: str, argument: str, value: str): + super().__init__("Invalid argument") + self.context = context + self.argument = argument + self.value = value + +class VeilidAPIErrorMissingArgument(VeilidAPIError): + """Required argument was missing""" + context: str + argument: str + def __init__(self, context: str, argument: str): + super().__init__("Missing argument") + self.context = context + self.argument = argument + +class VeilidAPIErrorGeneric(VeilidAPIError): + """Generic error message""" + message: str + def __init__(self, message: str): + super().__init__("Generic") + self.message = message diff --git a/veilid-python/veilid_python/request.py b/veilid-python/veilid_python/request.py new file mode 100644 index 00000000..19d59ae2 --- /dev/null +++ b/veilid-python/veilid_python/request.py @@ -0,0 +1,4 @@ +class Request: + + def __init__(self, id: int): + self.id = id \ No newline at end of file diff --git a/veilid-python/veilid_python/state.py b/veilid-python/veilid_python/state.py new file mode 100644 index 00000000..f5ac2abb --- /dev/null +++ b/veilid-python/veilid_python/state.py @@ -0,0 +1,205 @@ +from typing import Self, Optional +from enum import StrEnum +from .types import Timestamp, TimestampDuration, ByteCount +from .config import VeilidConfig + +class AttachmentState(StrEnum): + DETACHED = 'Detached' + ATTACHING = 'Attaching' + ATTACHED_WEAK = 'AttachedWeak' + ATTACHED_GOOD = 'AttachedGood' + ATTACHED_STRONG = 'AttachedStrong' + FULLY_ATTACHED = 'FullyAttached' + OVER_ATTACHED = 'OverAttached' + DETACHING = 'Detaching' + +class VeilidStateAttachment: + state: AttachmentState + public_internet_ready: bool + local_network_ready: bool + + def __init__(self, state: AttachmentState, public_internet_ready: bool, local_network_ready: bool): + self.state = state + self.public_internet_ready = public_internet_ready + self.local_network_ready = local_network_ready + + @staticmethod + def from_json(j: dict) -> Self: + return VeilidStateAttachment( + AttachmentState(j['state']), + j['public_internet_ready'], + j['local_network_ready']) + +class RPCStats: + messages_sent: int + messages_rcvd: int + questions_in_flight: int + last_question_ts: Optional[Timestamp] + last_seen_ts: Optional[Timestamp] + first_consecutive_seen_ts: Optional[Timestamp] + recent_lost_answers: int + failed_to_send: int + + def __init__(self, messages_sent: int, messages_rcvd: int, questions_in_flight: int, + last_question_ts: Optional[Timestamp], last_seen_ts: Optional[Timestamp], + first_consecutive_seen_ts: Optional[Timestamp], recent_lost_answers: int, failed_to_send: int): + self.messages_sent = messages_sent + self.messages_rcvd = messages_rcvd + self.questions_in_flight = questions_in_flight + self.last_question_ts = last_question_ts + self.last_seen_ts = last_seen_ts + self.first_consecutive_seen_ts = first_consecutive_seen_ts + self.recent_lost_answers = recent_lost_answers + self.failed_to_send = failed_to_send + + @staticmethod + def from_json(j: dict) -> Self: + return RPCStats( + j['messages_sent'], + j['messages_rcvd'], + j['questions_in_flight'], + None if j['last_question_ts'] is None else Timestamp(j['last_question_ts']), + None if j['last_seen_ts'] is None else Timestamp(j['last_seen_ts']), + None if j['first_consecutive_seen_ts'] is None else Timestamp(j['first_consecutive_seen_ts']), + j['recent_lost_answers'], + j['failed_to_send']) + +class LatencyStats: + fastest: TimestampDuration + average: TimestampDuration + slowest: TimestampDuration + + def __init__(self, fastest: TimestampDuration, average: TimestampDuration, slowest: TimestampDuration): + self.fastest = fastest + self.average = average + self.slowest = slowest + + @staticmethod + def from_json(j: dict) -> Self: + return LatencyStats( + TimestampDuration(j['fastest']), + TimestampDuration(j['average']), + TimestampDuration(j['slowest'])) + + +class TransferStats: + total: ByteCount + maximum: ByteCount + average: ByteCount + minimum: ByteCount + + def __init__(self, total: ByteCount, maximum: ByteCount, average: ByteCount, minimum: ByteCount): + self.total = total + self.maximum = maximum + self.average = average + self.minimum = minimum + + @staticmethod + def from_json(j: dict) -> Self: + return TransferStats( + ByteCount(j['total']), + ByteCount(j['maximum']), + ByteCount(j['average']), + ByteCount(j['minimum'])) + + +class TransferStatsDownUp: + down: TransferStats + up: TransferStats + + def __init__(self, down: TransferStats, up: TransferStats): + self.down = down + self.up = up + + @staticmethod + def from_json(j: dict) -> Self: + return TransferStatsDownUp( + TransferStats.from_json(j['down']), + TransferStats.from_json(j['up'])) + +class PeerStats: + time_added: Timestamp + rpc_stats: RPCStats + latency: Optional[LatencyStats] + transfer: TransferStatsDownUp + + def __init__(self, time_added: Timestamp, rpc_stats: RPCStats, latency: Optional[LatencyStats], transfer: TransferStatsDownUp): + self.time_added = time_added + self.rpc_stats = rpc_stats + self.latency = latency + self.transfer = transfer + + @staticmethod + def from_json(j: dict) -> Self: + return PeerStats( + j['time_added'], + RPCStats.from_json(j['rpc_stats']), + None if j['latency'] is None else LatencyStats.from_json(j['latency']), + TransferStatsDownUp.from_json(j['transfer'])) + +class PeerTableData: + node_ids: list[str] + peer_address: str + peer_stats: PeerStats + + def __init__(self, node_ids: list[str], peer_address: str, peer_stats: PeerStats): + self.node_ids = node_ids + self.peer_address = peer_address + self.peer_stats = peer_stats + + @staticmethod + def from_json(j: dict) -> Self: + return PeerTableData( + j['node_ids'], + j['peer_address'], + PeerStats.from_json(j['peer_stats'])) + +class VeilidStateNetwork: + started: bool + bps_down: ByteCount + bps_up: ByteCount + peers: list[PeerTableData] + + def __init__(self, started: bool, bps_down: ByteCount, bps_up: ByteCount, peers: list[PeerTableData]): + self.started = started + self.bps_down = bps_down + self.bps_up = bps_up + self.peers = peers + + @staticmethod + def from_json(j: dict) -> Self: + return VeilidStateNetwork( + j['started'], + ByteCount(j['bps_down']), + ByteCount(j['bps_up']), + map(lambda x: PeerTableData.from_json(x), j['peers'])) + +class VeilidStateConfig: + config: VeilidConfig + + def __init__(self, config: VeilidConfig): + self.config = config + + @staticmethod + def from_json(j: dict) -> Self: + return VeilidStateConfig( + j['config']) + + +class VeilidState: + attachment: VeilidStateAttachment + network: VeilidStateNetwork + config: VeilidStateConfig + + def __init__(self, attachment: VeilidStateAttachment, network: VeilidStateNetwork, config: VeilidStateConfig): + self.attachment = attachment + self.network = network + self.config = config + + @staticmethod + def from_json(j: dict) -> Self: + return VeilidState( + VeilidStateAttachment.from_json(j['attachment']), + VeilidStateNetwork.from_json(j['network']), + VeilidStateConfig.from_json(j['config'])) + diff --git a/veilid-python/veilid_python/types.py b/veilid-python/veilid_python/types.py new file mode 100644 index 00000000..e1938e04 --- /dev/null +++ b/veilid-python/veilid_python/types.py @@ -0,0 +1,10 @@ +import time + +class Timestamp(int): + pass + +class TimestampDuration(int): + pass + +class ByteCount(int): + pass \ No newline at end of file