tisserande 0.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tisserande-0.0.0/.github/workflows/docs.yml +44 -0
- tisserande-0.0.0/.github/workflows/linting.yml +33 -0
- tisserande-0.0.0/.github/workflows/publish-to-pypi.yml +39 -0
- tisserande-0.0.0/.github/workflows/smoke-test.yml +36 -0
- tisserande-0.0.0/.github/workflows/testing-and-coverage.yml +39 -0
- tisserande-0.0.0/.gitignore +18 -0
- tisserande-0.0.0/.readthedocs.yaml +17 -0
- tisserande-0.0.0/CLAUDE.md +180 -0
- tisserande-0.0.0/PKG-INFO +229 -0
- tisserande-0.0.0/README.md +179 -0
- tisserande-0.0.0/docs/Makefile +19 -0
- tisserande-0.0.0/docs/_build/doctrees/__intersphinx_cache__/fastapi_objects.inv +0 -0
- tisserande-0.0.0/docs/_build/doctrees/__intersphinx_cache__/pydantic_objects.inv +0 -0
- tisserande-0.0.0/docs/_build/doctrees/__intersphinx_cache__/python_objects.inv +0 -0
- tisserande-0.0.0/docs/_build/doctrees/__intersphinx_cache__/sqlalchemy_objects.inv +0 -0
- tisserande-0.0.0/docs/_build/doctrees/api/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/cli/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/cli/local/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/cli/local/top/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/cli/server/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/cli/server/top/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/config/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/db/base/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/db/data_types/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/db/edges/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/db/execution/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/db/function_types/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/db/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/db/nodes/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/db_oper/data_types/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/db_oper/edges/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/db_oper/execution/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/db_oper/function_types/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/db_oper/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/db_oper/nodes/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/local_async/data_types/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/local_async/edges/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/local_async/execution/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/local_async/function_types/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/local_async/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/local_async/nodes/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/local_sync/data_types/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/local_sync/edges/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/local_sync/execution/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/local_sync/function_types/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/local_sync/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/local_sync/nodes/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/models/data_types/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/models/edges/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/models/execution/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/models/function_types/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/models/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/models/nodes/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/models/types/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/router/app/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/router/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/tracking/annotations/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/tracking/backends/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/tracking/context/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/tracking/decorator/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/tracking/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/autoapi/tisserande/tracking/inspector/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/environment.pickle +0 -0
- tisserande-0.0.0/docs/_build/doctrees/getting_started.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/user_guide/annotations.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/user_guide/architecture.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/user_guide/cli.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/user_guide/configuration.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/user_guide/index.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/user_guide/querying.doctree +0 -0
- tisserande-0.0.0/docs/_build/doctrees/user_guide/tracking.doctree +0 -0
- tisserande-0.0.0/docs/_build/html/.buildinfo +4 -0
- tisserande-0.0.0/docs/_build/html/_modules/index.html +229 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/cli/local/top.html +234 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/cli/server/top.html +217 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/config.html +290 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/db/data_types.html +437 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/db/edges.html +252 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/db/execution.html +274 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/db/function_types.html +323 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/db/nodes.html +335 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/db_oper/data_types.html +271 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/db_oper/edges.html +212 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/db_oper/execution.html +212 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/db_oper/function_types.html +259 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/db_oper/nodes.html +262 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/local_async/data_types.html +280 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/local_async/edges.html +213 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/local_async/execution.html +213 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/local_async/function_types.html +241 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/local_async/nodes.html +213 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/local_sync/data_types.html +280 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/local_sync/edges.html +213 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/local_sync/execution.html +213 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/local_sync/function_types.html +241 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/local_sync/nodes.html +213 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/models/data_types.html +452 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/models/edges.html +254 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/models/execution.html +275 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/models/function_types.html +337 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/models/nodes.html +962 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/models/types.html +294 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/router/app.html +235 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/tracking/annotations.html +254 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/tracking/backends.html +308 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/tracking/context.html +299 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/tracking/decorator.html +486 -0
- tisserande-0.0.0/docs/_build/html/_modules/tisserande/tracking/inspector.html +380 -0
- tisserande-0.0.0/docs/_build/html/_sources/api/index.rst.txt +9 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/index.rst.txt +11 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/cli/index.rst.txt +16 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/cli/local/index.rst.txt +15 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/cli/local/top/index.rst.txt +22 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/cli/server/index.rst.txt +15 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/cli/server/top/index.rst.txt +22 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/config/index.rst.txt +104 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/db/base/index.rst.txt +14 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/db/data_types/index.rst.txt +519 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/db/edges/index.rst.txt +110 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/db/execution/index.rst.txt +126 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/db/function_types/index.rst.txt +272 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/db/index.rst.txt +1114 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/db/nodes/index.rst.txt +167 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/db_oper/data_types/index.rst.txt +377 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/db_oper/edges/index.rst.txt +82 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/db_oper/execution/index.rst.txt +82 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/db_oper/function_types/index.rst.txt +208 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/db_oper/index.rst.txt +65 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/db_oper/nodes/index.rst.txt +43 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/index.rst.txt +23 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/local_async/data_types/index.rst.txt +161 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/local_async/edges/index.rst.txt +46 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/local_async/execution/index.rst.txt +46 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/local_async/function_types/index.rst.txt +92 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/local_async/index.rst.txt +65 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/local_async/nodes/index.rst.txt +46 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/local_sync/data_types/index.rst.txt +131 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/local_sync/edges/index.rst.txt +41 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/local_sync/execution/index.rst.txt +41 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/local_sync/function_types/index.rst.txt +77 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/local_sync/index.rst.txt +65 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/local_sync/nodes/index.rst.txt +41 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/models/data_types/index.rst.txt +339 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/models/edges/index.rst.txt +89 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/models/execution/index.rst.txt +111 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/models/function_types/index.rst.txt +195 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/models/index.rst.txt +1428 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/models/nodes/index.rst.txt +999 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/models/types/index.rst.txt +184 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/router/app/index.rst.txt +22 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/router/index.rst.txt +15 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/tracking/annotations/index.rst.txt +57 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/tracking/backends/index.rst.txt +81 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/tracking/context/index.rst.txt +39 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/tracking/decorator/index.rst.txt +80 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/tracking/index.rst.txt +98 -0
- tisserande-0.0.0/docs/_build/html/_sources/autoapi/tisserande/tracking/inspector/index.rst.txt +69 -0
- tisserande-0.0.0/docs/_build/html/_sources/getting_started.rst.txt +135 -0
- tisserande-0.0.0/docs/_build/html/_sources/index.rst.txt +33 -0
- tisserande-0.0.0/docs/_build/html/_sources/user_guide/annotations.rst.txt +124 -0
- tisserande-0.0.0/docs/_build/html/_sources/user_guide/architecture.rst.txt +97 -0
- tisserande-0.0.0/docs/_build/html/_sources/user_guide/cli.rst.txt +83 -0
- tisserande-0.0.0/docs/_build/html/_sources/user_guide/configuration.rst.txt +116 -0
- tisserande-0.0.0/docs/_build/html/_sources/user_guide/index.rst.txt +12 -0
- tisserande-0.0.0/docs/_build/html/_sources/user_guide/querying.rst.txt +122 -0
- tisserande-0.0.0/docs/_build/html/_sources/user_guide/tracking.rst.txt +132 -0
- tisserande-0.0.0/docs/_build/html/_static/_sphinx_javascript_frameworks_compat.js +123 -0
- tisserande-0.0.0/docs/_build/html/_static/base-stemmer.js +476 -0
- tisserande-0.0.0/docs/_build/html/_static/basic.css +906 -0
- tisserande-0.0.0/docs/_build/html/_static/css/badge_only.css +1 -0
- tisserande-0.0.0/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- tisserande-0.0.0/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- tisserande-0.0.0/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- tisserande-0.0.0/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- tisserande-0.0.0/docs/_build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
- tisserande-0.0.0/docs/_build/html/_static/css/fonts/fontawesome-webfont.svg +2671 -0
- tisserande-0.0.0/docs/_build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- tisserande-0.0.0/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
- tisserande-0.0.0/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- tisserande-0.0.0/docs/_build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
- tisserande-0.0.0/docs/_build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- tisserande-0.0.0/docs/_build/html/_static/css/fonts/lato-bold.woff +0 -0
- tisserande-0.0.0/docs/_build/html/_static/css/fonts/lato-bold.woff2 +0 -0
- tisserande-0.0.0/docs/_build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
- tisserande-0.0.0/docs/_build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- tisserande-0.0.0/docs/_build/html/_static/css/fonts/lato-normal.woff +0 -0
- tisserande-0.0.0/docs/_build/html/_static/css/fonts/lato-normal.woff2 +0 -0
- tisserande-0.0.0/docs/_build/html/_static/css/theme.css +4 -0
- tisserande-0.0.0/docs/_build/html/_static/doctools.js +150 -0
- tisserande-0.0.0/docs/_build/html/_static/documentation_options.js +13 -0
- tisserande-0.0.0/docs/_build/html/_static/english-stemmer.js +1066 -0
- tisserande-0.0.0/docs/_build/html/_static/file.png +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/Lato/lato-bold.eot +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/Lato/lato-bold.ttf +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/Lato/lato-bold.woff +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/Lato/lato-bold.woff2 +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/Lato/lato-italic.eot +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/Lato/lato-italic.ttf +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/Lato/lato-italic.woff +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/Lato/lato-italic.woff2 +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/Lato/lato-regular.eot +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/Lato/lato-regular.ttf +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/Lato/lato-regular.woff +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/Lato/lato-regular.woff2 +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
- tisserande-0.0.0/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
- tisserande-0.0.0/docs/_build/html/_static/graphviz.css +12 -0
- tisserande-0.0.0/docs/_build/html/_static/jquery.js +2 -0
- tisserande-0.0.0/docs/_build/html/_static/js/badge_only.js +1 -0
- tisserande-0.0.0/docs/_build/html/_static/js/theme.js +1 -0
- tisserande-0.0.0/docs/_build/html/_static/js/versions.js +228 -0
- tisserande-0.0.0/docs/_build/html/_static/language_data.js +13 -0
- tisserande-0.0.0/docs/_build/html/_static/minus.png +0 -0
- tisserande-0.0.0/docs/_build/html/_static/plus.png +0 -0
- tisserande-0.0.0/docs/_build/html/_static/pygments.css +75 -0
- tisserande-0.0.0/docs/_build/html/_static/searchtools.js +693 -0
- tisserande-0.0.0/docs/_build/html/_static/sphinx_highlight.js +159 -0
- tisserande-0.0.0/docs/_build/html/api/index.html +223 -0
- tisserande-0.0.0/docs/_build/html/autoapi/index.html +281 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/cli/index.html +214 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/cli/local/index.html +214 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/cli/local/top/index.html +226 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/cli/server/index.html +214 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/cli/server/top/index.html +226 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/config/index.html +304 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/db/base/index.html +209 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/db/data_types/index.html +748 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/db/edges/index.html +313 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/db/execution/index.html +333 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/db/function_types/index.html +485 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/db/index.html +1400 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/db/nodes/index.html +382 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/db_oper/data_types/index.html +631 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/db_oper/edges/index.html +291 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/db_oper/execution/index.html +291 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/db_oper/function_types/index.html +433 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/db_oper/index.html +323 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/db_oper/nodes/index.html +247 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/index.html +220 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/local_async/data_types/index.html +391 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/local_async/edges/index.html +251 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/local_async/execution/index.html +251 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/local_async/function_types/index.html +307 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/local_async/index.html +323 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/local_async/nodes/index.html +251 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/local_sync/data_types/index.html +355 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/local_sync/edges/index.html +245 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/local_sync/execution/index.html +245 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/local_sync/function_types/index.html +289 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/local_sync/index.html +323 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/local_sync/nodes/index.html +245 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/models/data_types/index.html +538 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/models/edges/index.html +283 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/models/execution/index.html +303 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/models/function_types/index.html +390 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/models/index.html +1592 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/models/nodes/index.html +1157 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/models/types/index.html +390 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/router/app/index.html +225 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/router/index.html +213 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/tracking/annotations/index.html +297 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/tracking/backends/index.html +307 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/tracking/context/index.html +238 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/tracking/decorator/index.html +301 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/tracking/index.html +349 -0
- tisserande-0.0.0/docs/_build/html/autoapi/tisserande/tracking/inspector/index.html +267 -0
- tisserande-0.0.0/docs/_build/html/genindex.html +2777 -0
- tisserande-0.0.0/docs/_build/html/getting_started.html +322 -0
- tisserande-0.0.0/docs/_build/html/index.html +254 -0
- tisserande-0.0.0/docs/_build/html/objects.inv +0 -0
- tisserande-0.0.0/docs/_build/html/py-modindex.html +444 -0
- tisserande-0.0.0/docs/_build/html/search.html +214 -0
- tisserande-0.0.0/docs/_build/html/searchindex.js +1 -0
- tisserande-0.0.0/docs/_build/html/user_guide/annotations.html +343 -0
- tisserande-0.0.0/docs/_build/html/user_guide/architecture.html +307 -0
- tisserande-0.0.0/docs/_build/html/user_guide/cli.html +276 -0
- tisserande-0.0.0/docs/_build/html/user_guide/configuration.html +321 -0
- tisserande-0.0.0/docs/_build/html/user_guide/index.html +253 -0
- tisserande-0.0.0/docs/_build/html/user_guide/querying.html +329 -0
- tisserande-0.0.0/docs/_build/html/user_guide/tracking.html +320 -0
- tisserande-0.0.0/docs/_static/.gitkeep +0 -0
- tisserande-0.0.0/docs/_templates/.gitkeep +0 -0
- tisserande-0.0.0/docs/api/index.rst +9 -0
- tisserande-0.0.0/docs/autoapi/index.rst +11 -0
- tisserande-0.0.0/docs/autoapi/tisserande/cli/index.rst +16 -0
- tisserande-0.0.0/docs/autoapi/tisserande/cli/local/index.rst +15 -0
- tisserande-0.0.0/docs/autoapi/tisserande/cli/local/top/index.rst +22 -0
- tisserande-0.0.0/docs/autoapi/tisserande/cli/server/index.rst +15 -0
- tisserande-0.0.0/docs/autoapi/tisserande/cli/server/top/index.rst +22 -0
- tisserande-0.0.0/docs/autoapi/tisserande/config/index.rst +104 -0
- tisserande-0.0.0/docs/autoapi/tisserande/db/base/index.rst +14 -0
- tisserande-0.0.0/docs/autoapi/tisserande/db/data_types/index.rst +519 -0
- tisserande-0.0.0/docs/autoapi/tisserande/db/edges/index.rst +110 -0
- tisserande-0.0.0/docs/autoapi/tisserande/db/execution/index.rst +126 -0
- tisserande-0.0.0/docs/autoapi/tisserande/db/function_types/index.rst +272 -0
- tisserande-0.0.0/docs/autoapi/tisserande/db/index.rst +1114 -0
- tisserande-0.0.0/docs/autoapi/tisserande/db/nodes/index.rst +167 -0
- tisserande-0.0.0/docs/autoapi/tisserande/db_oper/data_types/index.rst +377 -0
- tisserande-0.0.0/docs/autoapi/tisserande/db_oper/edges/index.rst +82 -0
- tisserande-0.0.0/docs/autoapi/tisserande/db_oper/execution/index.rst +82 -0
- tisserande-0.0.0/docs/autoapi/tisserande/db_oper/function_types/index.rst +208 -0
- tisserande-0.0.0/docs/autoapi/tisserande/db_oper/index.rst +65 -0
- tisserande-0.0.0/docs/autoapi/tisserande/db_oper/nodes/index.rst +43 -0
- tisserande-0.0.0/docs/autoapi/tisserande/index.rst +23 -0
- tisserande-0.0.0/docs/autoapi/tisserande/local_async/data_types/index.rst +161 -0
- tisserande-0.0.0/docs/autoapi/tisserande/local_async/edges/index.rst +46 -0
- tisserande-0.0.0/docs/autoapi/tisserande/local_async/execution/index.rst +46 -0
- tisserande-0.0.0/docs/autoapi/tisserande/local_async/function_types/index.rst +92 -0
- tisserande-0.0.0/docs/autoapi/tisserande/local_async/index.rst +65 -0
- tisserande-0.0.0/docs/autoapi/tisserande/local_async/nodes/index.rst +46 -0
- tisserande-0.0.0/docs/autoapi/tisserande/local_sync/data_types/index.rst +131 -0
- tisserande-0.0.0/docs/autoapi/tisserande/local_sync/edges/index.rst +41 -0
- tisserande-0.0.0/docs/autoapi/tisserande/local_sync/execution/index.rst +41 -0
- tisserande-0.0.0/docs/autoapi/tisserande/local_sync/function_types/index.rst +77 -0
- tisserande-0.0.0/docs/autoapi/tisserande/local_sync/index.rst +65 -0
- tisserande-0.0.0/docs/autoapi/tisserande/local_sync/nodes/index.rst +41 -0
- tisserande-0.0.0/docs/autoapi/tisserande/models/data_types/index.rst +339 -0
- tisserande-0.0.0/docs/autoapi/tisserande/models/edges/index.rst +89 -0
- tisserande-0.0.0/docs/autoapi/tisserande/models/execution/index.rst +111 -0
- tisserande-0.0.0/docs/autoapi/tisserande/models/function_types/index.rst +195 -0
- tisserande-0.0.0/docs/autoapi/tisserande/models/index.rst +1428 -0
- tisserande-0.0.0/docs/autoapi/tisserande/models/nodes/index.rst +999 -0
- tisserande-0.0.0/docs/autoapi/tisserande/models/types/index.rst +184 -0
- tisserande-0.0.0/docs/autoapi/tisserande/router/app/index.rst +22 -0
- tisserande-0.0.0/docs/autoapi/tisserande/router/index.rst +15 -0
- tisserande-0.0.0/docs/autoapi/tisserande/tracking/annotations/index.rst +57 -0
- tisserande-0.0.0/docs/autoapi/tisserande/tracking/backends/index.rst +81 -0
- tisserande-0.0.0/docs/autoapi/tisserande/tracking/context/index.rst +39 -0
- tisserande-0.0.0/docs/autoapi/tisserande/tracking/decorator/index.rst +80 -0
- tisserande-0.0.0/docs/autoapi/tisserande/tracking/index.rst +98 -0
- tisserande-0.0.0/docs/autoapi/tisserande/tracking/inspector/index.rst +69 -0
- tisserande-0.0.0/docs/conf.py +58 -0
- tisserande-0.0.0/docs/getting_started.rst +135 -0
- tisserande-0.0.0/docs/index.rst +33 -0
- tisserande-0.0.0/docs/user_guide/annotations.rst +124 -0
- tisserande-0.0.0/docs/user_guide/architecture.rst +97 -0
- tisserande-0.0.0/docs/user_guide/cli.rst +83 -0
- tisserande-0.0.0/docs/user_guide/configuration.rst +116 -0
- tisserande-0.0.0/docs/user_guide/index.rst +12 -0
- tisserande-0.0.0/docs/user_guide/querying.rst +122 -0
- tisserande-0.0.0/docs/user_guide/tracking.rst +132 -0
- tisserande-0.0.0/pyproject.toml +180 -0
- tisserande-0.0.0/setup.cfg +4 -0
- tisserande-0.0.0/src/tisserande/__init__.py +3 -0
- tisserande-0.0.0/src/tisserande/_version.py +24 -0
- tisserande-0.0.0/src/tisserande/cli/__init__.py +0 -0
- tisserande-0.0.0/src/tisserande/cli/local/__init__.py +0 -0
- tisserande-0.0.0/src/tisserande/cli/local/top.py +36 -0
- tisserande-0.0.0/src/tisserande/cli/server/__init__.py +0 -0
- tisserande-0.0.0/src/tisserande/cli/server/top.py +17 -0
- tisserande-0.0.0/src/tisserande/config.py +59 -0
- tisserande-0.0.0/src/tisserande/db/__init__.py +52 -0
- tisserande-0.0.0/src/tisserande/db/base.py +10 -0
- tisserande-0.0.0/src/tisserande/db/data_types.py +137 -0
- tisserande-0.0.0/src/tisserande/db/edges.py +37 -0
- tisserande-0.0.0/src/tisserande/db/execution.py +42 -0
- tisserande-0.0.0/src/tisserande/db/function_types.py +74 -0
- tisserande-0.0.0/src/tisserande/db/nodes.py +288 -0
- tisserande-0.0.0/src/tisserande/db/utils.py +10 -0
- tisserande-0.0.0/src/tisserande/db_oper/__init__.py +20 -0
- tisserande-0.0.0/src/tisserande/db_oper/data_types.py +42 -0
- tisserande-0.0.0/src/tisserande/db_oper/edges.py +11 -0
- tisserande-0.0.0/src/tisserande/db_oper/execution.py +25 -0
- tisserande-0.0.0/src/tisserande/db_oper/function_types.py +48 -0
- tisserande-0.0.0/src/tisserande/db_oper/nodes.py +133 -0
- tisserande-0.0.0/src/tisserande/local_async/__init__.py +20 -0
- tisserande-0.0.0/src/tisserande/local_async/data_types.py +49 -0
- tisserande-0.0.0/src/tisserande/local_async/edges.py +12 -0
- tisserande-0.0.0/src/tisserande/local_async/execution.py +12 -0
- tisserande-0.0.0/src/tisserande/local_async/function_types.py +28 -0
- tisserande-0.0.0/src/tisserande/local_async/nodes.py +12 -0
- tisserande-0.0.0/src/tisserande/local_sync/__init__.py +20 -0
- tisserande-0.0.0/src/tisserande/local_sync/data_types.py +49 -0
- tisserande-0.0.0/src/tisserande/local_sync/edges.py +12 -0
- tisserande-0.0.0/src/tisserande/local_sync/execution.py +12 -0
- tisserande-0.0.0/src/tisserande/local_sync/function_types.py +28 -0
- tisserande-0.0.0/src/tisserande/local_sync/nodes.py +12 -0
- tisserande-0.0.0/src/tisserande/models/__init__.py +94 -0
- tisserande-0.0.0/src/tisserande/models/data_types.py +122 -0
- tisserande-0.0.0/src/tisserande/models/edges.py +29 -0
- tisserande-0.0.0/src/tisserande/models/execution.py +42 -0
- tisserande-0.0.0/src/tisserande/models/function_types.py +67 -0
- tisserande-0.0.0/src/tisserande/models/nodes.py +351 -0
- tisserande-0.0.0/src/tisserande/models/types.py +54 -0
- tisserande-0.0.0/src/tisserande/router/__init__.py +0 -0
- tisserande-0.0.0/src/tisserande/router/app.py +37 -0
- tisserande-0.0.0/src/tisserande/tracking/__init__.py +18 -0
- tisserande-0.0.0/src/tisserande/tracking/annotations.py +32 -0
- tisserande-0.0.0/src/tisserande/tracking/backends.py +73 -0
- tisserande-0.0.0/src/tisserande/tracking/context.py +96 -0
- tisserande-0.0.0/src/tisserande/tracking/decorator.py +297 -0
- tisserande-0.0.0/src/tisserande/tracking/inspector.py +172 -0
- tisserande-0.0.0/src/tisserande.egg-info/PKG-INFO +229 -0
- tisserande-0.0.0/src/tisserande.egg-info/SOURCES.txt +421 -0
- tisserande-0.0.0/src/tisserande.egg-info/dependency_links.txt +1 -0
- tisserande-0.0.0/src/tisserande.egg-info/entry_points.txt +3 -0
- tisserande-0.0.0/src/tisserande.egg-info/requires.txt +37 -0
- tisserande-0.0.0/src/tisserande.egg-info/scm_file_list.json +416 -0
- tisserande-0.0.0/src/tisserande.egg-info/scm_version.json +8 -0
- tisserande-0.0.0/src/tisserande.egg-info/top_level.txt +1 -0
- tisserande-0.0.0/tests/__init__.py +0 -0
- tisserande-0.0.0/tests/conftest.py +23 -0
- tisserande-0.0.0/tests/test_cli.py +50 -0
- tisserande-0.0.0/tests/test_db_oper_coverage.py +48 -0
- tisserande-0.0.0/tests/test_decorator_coverage.py +162 -0
- tisserande-0.0.0/tests/test_full_stack.py +120 -0
- tisserande-0.0.0/tests/test_inspector_coverage.py +186 -0
- tisserande-0.0.0/tests/test_models.py +79 -0
- tisserande-0.0.0/tests/test_router.py +19 -0
- tisserande-0.0.0/tests/test_tracking.py +131 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
name: Docs Build
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths:
|
|
7
|
+
- "docs/**"
|
|
8
|
+
- "src/**"
|
|
9
|
+
- ".readthedocs.yaml"
|
|
10
|
+
- "pyproject.toml"
|
|
11
|
+
pull_request:
|
|
12
|
+
branches: [main]
|
|
13
|
+
paths:
|
|
14
|
+
- "docs/**"
|
|
15
|
+
- "src/**"
|
|
16
|
+
- ".readthedocs.yaml"
|
|
17
|
+
- "pyproject.toml"
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
build-docs:
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v4
|
|
24
|
+
|
|
25
|
+
- uses: actions/setup-python@v5
|
|
26
|
+
with:
|
|
27
|
+
python-version: "3.13"
|
|
28
|
+
|
|
29
|
+
- name: Install dependencies
|
|
30
|
+
run: |
|
|
31
|
+
pip install -e ".[docs,dev]"
|
|
32
|
+
|
|
33
|
+
- name: Build docs
|
|
34
|
+
run: |
|
|
35
|
+
cd docs
|
|
36
|
+
make html
|
|
37
|
+
|
|
38
|
+
- name: Upload docs artifact
|
|
39
|
+
if: success()
|
|
40
|
+
uses: actions/upload-artifact@v4
|
|
41
|
+
with:
|
|
42
|
+
name: docs-html
|
|
43
|
+
path: docs/_build/html/
|
|
44
|
+
retention-days: 7
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# This workflow will install Python dependencies,
|
|
2
|
+
# then perform static linting analysis.
|
|
3
|
+
|
|
4
|
+
name: Lint
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
push:
|
|
8
|
+
branches: [main]
|
|
9
|
+
pull_request:
|
|
10
|
+
branches: [main]
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
build:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v3
|
|
17
|
+
- name: Set up Python
|
|
18
|
+
uses: actions/setup-python@v4
|
|
19
|
+
with:
|
|
20
|
+
python-version: '3.13'
|
|
21
|
+
- name: Install dependencies
|
|
22
|
+
run: |
|
|
23
|
+
sudo apt-get update
|
|
24
|
+
python -m pip install --upgrade pip
|
|
25
|
+
pip install .
|
|
26
|
+
pip install .[dev]
|
|
27
|
+
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
|
|
28
|
+
- name: Type checking
|
|
29
|
+
run: |
|
|
30
|
+
mypy src
|
|
31
|
+
- name: Linting
|
|
32
|
+
run: |
|
|
33
|
+
ruff check src tests
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# This workflow will upload a Python Package using
|
|
2
|
+
# Twine when a release is created
|
|
3
|
+
# For more information see:
|
|
4
|
+
# https://github.com/pypa/gh-action-pypi-publish#trusted-publishing
|
|
5
|
+
|
|
6
|
+
# This workflow uses actions that are not certified by GitHub.
|
|
7
|
+
# They are provided by a third-party and are governed by
|
|
8
|
+
# separate terms of service, privacy policy, and support
|
|
9
|
+
# documentation.
|
|
10
|
+
|
|
11
|
+
name: Upload Python Package
|
|
12
|
+
|
|
13
|
+
on:
|
|
14
|
+
release:
|
|
15
|
+
types: [published]
|
|
16
|
+
|
|
17
|
+
permissions:
|
|
18
|
+
contents: read
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
deploy:
|
|
22
|
+
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
permissions:
|
|
25
|
+
id-token: write
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@v3
|
|
28
|
+
- name: Set up Python
|
|
29
|
+
uses: actions/setup-python@v4
|
|
30
|
+
with:
|
|
31
|
+
python-version: '3.13'
|
|
32
|
+
- name: Install dependencies
|
|
33
|
+
run: |
|
|
34
|
+
python -m pip install --upgrade pip
|
|
35
|
+
pip install build
|
|
36
|
+
- name: Build package
|
|
37
|
+
run: python -m build
|
|
38
|
+
- name: Publish package
|
|
39
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# This workflow will run daily at 06:45.
|
|
2
|
+
# It will install Python dependencies and run tests with a variety of
|
|
3
|
+
# Python versions.
|
|
4
|
+
|
|
5
|
+
name: Unit test smoke test
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
schedule:
|
|
9
|
+
- cron: 45 6 * * *
|
|
10
|
+
|
|
11
|
+
# Allows you to run this workflow manually from the Actions tab
|
|
12
|
+
workflow_dispatch:
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
build:
|
|
16
|
+
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
strategy:
|
|
19
|
+
matrix:
|
|
20
|
+
python-version: ['3.13']
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@v3
|
|
23
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
24
|
+
uses: actions/setup-python@v4
|
|
25
|
+
with:
|
|
26
|
+
python-version: ${{ matrix.python-version }}
|
|
27
|
+
- name: Install dependencies
|
|
28
|
+
run: |
|
|
29
|
+
sudo apt-get update
|
|
30
|
+
python -m pip install --upgrade pip
|
|
31
|
+
pip install .
|
|
32
|
+
pip install .[dev]
|
|
33
|
+
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
|
|
34
|
+
- name: Run unit tests with pytest
|
|
35
|
+
run: |
|
|
36
|
+
python -m pytest tests
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# This workflow will install Python dependencies, run tests and report
|
|
2
|
+
# code coverage with a variety of Python versions
|
|
3
|
+
|
|
4
|
+
name: Unit test and code coverage
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
schedule:
|
|
8
|
+
- cron: 45 7 * * 1
|
|
9
|
+
push:
|
|
10
|
+
branches: [main]
|
|
11
|
+
pull_request:
|
|
12
|
+
branches: [main]
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
build:
|
|
16
|
+
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
strategy:
|
|
19
|
+
matrix:
|
|
20
|
+
python-version: ['3.13']
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@v3
|
|
23
|
+
with:
|
|
24
|
+
fetch-tags: true
|
|
25
|
+
fetch-depth: 0
|
|
26
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
27
|
+
uses: actions/setup-python@v4
|
|
28
|
+
with:
|
|
29
|
+
python-version: ${{ matrix.python-version }}
|
|
30
|
+
- name: Install dependencies
|
|
31
|
+
run: |
|
|
32
|
+
sudo apt-get update
|
|
33
|
+
python -m pip install --upgrade pip
|
|
34
|
+
pip install .
|
|
35
|
+
pip install .[dev]
|
|
36
|
+
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
|
|
37
|
+
- name: Run unit tests with pytest
|
|
38
|
+
run: |
|
|
39
|
+
python -m pytest tests
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# CLAUDE.md — tisserande
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
`tisserande` is a Python package for tracking execution provenance of Python functions and shell scripts. It records what functions were called, what data they consumed and produced, and how long they took — all as a directed acyclic graph (DAG) stored in a database.
|
|
6
|
+
|
|
7
|
+
The package builds on top of `macon` (at `/Users/echarles/software/KIPAC/macon`) which provides a layered CRUD framework. Tisserande adds tracking decorators for automatic provenance capture.
|
|
8
|
+
|
|
9
|
+
## Architecture — Layered Design
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
Tracking Decorators (@track, @track_async, track_shell)
|
|
13
|
+
└── TrackingContext + ArgumentInspector
|
|
14
|
+
└── TrackingBackend (LocalSyncBackend / NullBackend)
|
|
15
|
+
└── local_sync (SyncOperations) ← asyncio.run() wrappers
|
|
16
|
+
└── local_async (LocalOperations) ← @with_session decorators
|
|
17
|
+
└── db_oper (TableOperations) ← FK resolution
|
|
18
|
+
└── macon.db_funcs (raw async SQLAlchemy queries)
|
|
19
|
+
└── macon.db (Base, session)
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
| Layer | Purpose | Key Base Class (from macon) |
|
|
23
|
+
|-------|---------|----------------------------|
|
|
24
|
+
| `models/` | Pydantic models (Base/Create/Response triplets) | `pydantic.BaseModel` |
|
|
25
|
+
| `db/` | SQLAlchemy ORM tables | `macon.db.base.Base` |
|
|
26
|
+
| `db_oper/` | `TableOperations` with FK resolution | `macon.db_oper.base.TableOperations` |
|
|
27
|
+
| `local_async/` | Session-managed async operations | `macon.local_async.base.LocalOperations` |
|
|
28
|
+
| `local_sync/` | Synchronous wrappers | `macon.local_sync.base.SyncOperations` |
|
|
29
|
+
| `tracking/` | Decorators, inspection, backends, context | *(tisserande-specific)* |
|
|
30
|
+
| `router/` | FastAPI app with auto-generated CRUD endpoints | `macon.router.base.create_table_router` |
|
|
31
|
+
| `cli/` | Click CLI entry points | `macon.cli.local.base.make_table_group` |
|
|
32
|
+
| `config.py` | Pydantic Settings configuration | `pydantic_settings.BaseSettings` |
|
|
33
|
+
|
|
34
|
+
## Domain Model
|
|
35
|
+
|
|
36
|
+
The provenance graph has three entity types:
|
|
37
|
+
|
|
38
|
+
- **Nodes** — vertices in the DAG. A single `node` table with a `type_` discriminator column and nullable type-specific fields.
|
|
39
|
+
- Data nodes: `data_file`, `config_file`, `config_dict`, `parameter`, `array`, `object`
|
|
40
|
+
- Logic nodes: `python_function`, `member_function`, `shell_function`
|
|
41
|
+
- **Edges** — directed links between nodes (`from_id` → `to_id`)
|
|
42
|
+
- Data → Logic = "input to function"
|
|
43
|
+
- Logic → Data = "output from function"
|
|
44
|
+
- **Executions** — groups all nodes/edges from a single function call, with timing and status
|
|
45
|
+
|
|
46
|
+
Each node type can optionally reference a **type table** (e.g., `data_file_type`, `python_function`) for reusable definitions.
|
|
47
|
+
|
|
48
|
+
## Key Patterns
|
|
49
|
+
|
|
50
|
+
- **Single Node table**: All node types share one table with nullable columns. Simplifies graph queries since edges reference only one table.
|
|
51
|
+
- **UUID7 primary keys** for nodes/executions (time-ordered, via `uuid_utils`), int PKs for type tables and edges. Note: `uuid_utils.UUID` is not a subclass of `uuid.UUID` — we use a `uuid7()` wrapper in `db/utils.py` that returns standard `uuid.UUID`.
|
|
52
|
+
- **Macon integration**: Inherits `macon.db.base.Base`, uses `TableOperations`, `LocalOperations`, `SyncOperations`, `create_table_router`, `make_table_group`.
|
|
53
|
+
- **Three-model pattern** (from macon): `FooBase` → `FooCreate` (creation fields) → `Foo` (response with `id_`, `ConfigDict(from_attributes=True)`, `col_names_for_table`).
|
|
54
|
+
- **Tracking annotations**: `Annotated[]` type aliases (`DataFile[T]`, `Param[T]`, etc.) control how arguments are classified.
|
|
55
|
+
- **Pluggable backends**: `TrackingBackend` protocol allows `LocalSyncBackend` (real DB), `NullBackend` (testing), or custom implementations.
|
|
56
|
+
- **Decorator no-op**: If `configure()` hasn't been called, `@track` is transparent (function runs without tracking overhead).
|
|
57
|
+
- **Enum-based status/types**: Tracking code passes `ExecutionStatus` and `NodeType` enums; conversion to string values happens at the db_oper/backend layer.
|
|
58
|
+
- **`reset()`**: Clears the configured backend, making `configure()` safe to call multiple times (useful in tests).
|
|
59
|
+
|
|
60
|
+
## Critical Files
|
|
61
|
+
|
|
62
|
+
### Tracking system
|
|
63
|
+
- `src/tisserande/tracking/decorator.py` — `@track`, `@track_async`, `track_shell()`, `configure()`, `reset()`, `get_backend()`
|
|
64
|
+
- `src/tisserande/tracking/context.py` — `TrackingContext` orchestrates one execution lifecycle
|
|
65
|
+
- `src/tisserande/tracking/inspector.py` — `ArgumentInspector` classifies args → NodeType
|
|
66
|
+
- `src/tisserande/tracking/annotations.py` — `DataFile`, `Param`, `Untracked`, etc.
|
|
67
|
+
- `src/tisserande/tracking/backends.py` — `TrackingBackend` protocol, `LocalSyncBackend`, `NullBackend`
|
|
68
|
+
|
|
69
|
+
### Models & DB
|
|
70
|
+
- `src/tisserande/models/types.py` — `NodeType` and `ExecutionStatus` enums
|
|
71
|
+
- `src/tisserande/models/nodes.py` — All node Pydantic models (generic + typed variants)
|
|
72
|
+
- `src/tisserande/db/nodes.py` — Single `NodeTable` ORM model
|
|
73
|
+
- `src/tisserande/db/execution.py` — `ExecutionTable` ORM model
|
|
74
|
+
- `src/tisserande/db/utils.py` — Shared `uuid7()` helper for time-ordered primary keys
|
|
75
|
+
- `src/tisserande/db_oper/nodes.py` — `NodeOperations` with type-dependent FK resolution
|
|
76
|
+
- `src/tisserande/db_oper/execution.py` — `ExecutionOperations` with status enum conversion
|
|
77
|
+
|
|
78
|
+
### Configuration
|
|
79
|
+
- `src/tisserande/config.py` — `Configuration` class (env prefix: `TISSERANDE__`)
|
|
80
|
+
|
|
81
|
+
## Development
|
|
82
|
+
|
|
83
|
+
### Setup
|
|
84
|
+
```bash
|
|
85
|
+
pip install -e ".[dev]"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Testing
|
|
89
|
+
```bash
|
|
90
|
+
pytest tests/ # 86 tests, in-memory SQLite, 100% coverage
|
|
91
|
+
pytest tests/ -x --tb=short # stop at first failure
|
|
92
|
+
pytest tests/ --cov=tisserande --cov-report=term-missing # with coverage
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Tests use `sqlite+aiosqlite://` (in-memory). The `conftest.py` fixture calls `init_db()` and creates all tables before each test.
|
|
96
|
+
|
|
97
|
+
Test files:
|
|
98
|
+
- `tests/test_tracking.py` — decorator and inspector unit tests with NullBackend
|
|
99
|
+
- `tests/test_full_stack.py` — end-to-end integration tests with real DB
|
|
100
|
+
- `tests/test_models.py` — Pydantic model validation
|
|
101
|
+
- `tests/test_inspector_coverage.py` — comprehensive inspector branch coverage
|
|
102
|
+
- `tests/test_decorator_coverage.py` — decorator flags and edge cases
|
|
103
|
+
- `tests/test_cli.py` — CLI entry points (Click test runner + mocked uvicorn)
|
|
104
|
+
- `tests/test_router.py` — FastAPI app creation and route registration
|
|
105
|
+
- `tests/test_db_oper_coverage.py` — FK resolution paths
|
|
106
|
+
|
|
107
|
+
Coverage exclusion patterns (in `pyproject.toml`):
|
|
108
|
+
- `"pragma: no cover"` — explicit exclusion
|
|
109
|
+
- `"unexpected"` — unexpected-condition guards
|
|
110
|
+
- `"raise AssertionError"` / `"raise NotImplementedError"` — abstract/impossible paths
|
|
111
|
+
|
|
112
|
+
### Linting & Type Checking
|
|
113
|
+
```bash
|
|
114
|
+
ruff check src/ tests/ # all checks pass
|
|
115
|
+
ruff format src/ tests/ # auto-format
|
|
116
|
+
mypy src/ # no issues in 49 source files
|
|
117
|
+
pylint src/ # 10.00/10
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Ruff ignores: `COM812`, `N802-N816`, `UP047` (TypeVar over PEP 695 syntax).
|
|
121
|
+
Pylint disables: `C0415` (lazy imports), `W0603` (globals), `R0911` (many returns).
|
|
122
|
+
|
|
123
|
+
### Documentation
|
|
124
|
+
```bash
|
|
125
|
+
pip install -e ".[docs]"
|
|
126
|
+
cd docs && make html # builds to docs/_build/html/
|
|
127
|
+
```
|
|
128
|
+
- Sphinx with `sphinx-autoapi` (API docs from source), `sphinx_rtd_theme`
|
|
129
|
+
- ReadTheDocs config: `.readthedocs.yaml`
|
|
130
|
+
- Docs source: `docs/` (index, getting_started, user_guide/, api/)
|
|
131
|
+
|
|
132
|
+
### Configuration
|
|
133
|
+
- `TISSERANDE__DB__URL` — database URL (default: `sqlite+aiosqlite:///tisserande.db`)
|
|
134
|
+
- `TISSERANDE__DB__ECHO` — SQLAlchemy echo (default: `false`)
|
|
135
|
+
- `TISSERANDE__TRACKING__ENABLED` — global enable/disable (default: `true`)
|
|
136
|
+
- `TISSERANDE__TRACKING__BACKEND` — default backend: `local_sync`, `null` (default: `local_sync`)
|
|
137
|
+
- `TISSERANDE__TRACKING__AUTO_CLASSIFY` — heuristic classification (default: `true`)
|
|
138
|
+
- Line length: 110 (ruff), 120 (pylint)
|
|
139
|
+
- Python: 3.13+ required
|
|
140
|
+
- Build: setuptools + setuptools_scm
|
|
141
|
+
- Package manager: pip (or uv)
|
|
142
|
+
|
|
143
|
+
### CLI Entry Points
|
|
144
|
+
- `tisserande-local` — local DB admin (CRUD for all tables via click)
|
|
145
|
+
- `tisserande-server` — FastAPI/uvicorn server
|
|
146
|
+
|
|
147
|
+
### CI/CD
|
|
148
|
+
GitHub Actions workflows in `.github/workflows/`:
|
|
149
|
+
- `linting.yml` — ruff + mypy on push/PR to main
|
|
150
|
+
- `testing-and-coverage.yml` — pytest on push/PR + weekly schedule
|
|
151
|
+
- `smoke-test.yml` — daily scheduled pytest run
|
|
152
|
+
- `docs.yml` — Sphinx build on docs/source changes
|
|
153
|
+
- `publish-to-pypi.yml` — trusted publishing on GitHub release
|
|
154
|
+
|
|
155
|
+
### Dependencies
|
|
156
|
+
- Core: `macon[db]` (provides SQLAlchemy, pydantic, structlog, uuid_utils, anyio, aiosqlite, etc.)
|
|
157
|
+
- Optional: `numpy` (array support), `macon[server]` (FastAPI server), `macon[client]` (HTTP client)
|
|
158
|
+
- Docs: `sphinx`, `sphinx-autoapi`, `sphinx_rtd_theme`, `sphinx-autodoc-typehints`
|
|
159
|
+
|
|
160
|
+
### Known Limitations
|
|
161
|
+
- **`@track_async` with `LocalSyncBackend`**: Cannot be used inside an already-running event loop because `LocalSyncBackend` internally calls `asyncio.run()` via macon's `local_sync`. A future `LocalAsyncBackend` would resolve this. For now, `@track_async` works when the decorated coroutine is called from synchronous code (e.g., `asyncio.run(my_func(...))`).
|
|
162
|
+
|
|
163
|
+
### Adding a New Node Type
|
|
164
|
+
|
|
165
|
+
1. Add value to `NodeType` enum in `models/types.py`
|
|
166
|
+
2. Add nullable columns to `db/nodes.py` `NodeTable` if needed
|
|
167
|
+
3. Add FK mapping to `_TYPE_FK_MAP` in `db_oper/nodes.py`
|
|
168
|
+
4. Add typed Pydantic models (Base/Create/Response) in `models/nodes.py`
|
|
169
|
+
5. Add heuristic classification in `tracking/inspector.py` `_classify_by_value()`
|
|
170
|
+
6. Add annotation alias in `tracking/annotations.py`
|
|
171
|
+
|
|
172
|
+
### Adding a New Type Table
|
|
173
|
+
|
|
174
|
+
1. Create Pydantic models (Base/Create/Response) in `models/data_types.py` or `models/function_types.py`
|
|
175
|
+
2. Create ORM table in `db/data_types.py` or `db/function_types.py`
|
|
176
|
+
3. Create `TableOperations` in `db_oper/`
|
|
177
|
+
4. Create `LocalOperations` in `local_async/`
|
|
178
|
+
5. Create `SyncOperations` in `local_sync/`
|
|
179
|
+
6. Add to `__init__.py` exports in each layer
|
|
180
|
+
7. Add router and CLI commands
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: tisserande
|
|
3
|
+
Version: 0.0.0
|
|
4
|
+
Summary: Execution provenance tracking for Python functions and shell scripts
|
|
5
|
+
Author-email: Eric Charles <echarles@slac.stanford.edu>
|
|
6
|
+
Project-URL: Source, https://github.com/eacharles/tisserande
|
|
7
|
+
Classifier: Development Status :: 3 - Alpha
|
|
8
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
9
|
+
Classifier: Programming Language :: Python
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: Natural Language :: English
|
|
15
|
+
Classifier: Operating System :: POSIX
|
|
16
|
+
Classifier: Typing :: Typed
|
|
17
|
+
Requires-Python: >=3.13
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
Requires-Dist: tables-io
|
|
20
|
+
Requires-Dist: macon[db]
|
|
21
|
+
Provides-Extra: numpy
|
|
22
|
+
Requires-Dist: numpy; extra == "numpy"
|
|
23
|
+
Provides-Extra: server
|
|
24
|
+
Requires-Dist: macon[server]; extra == "server"
|
|
25
|
+
Provides-Extra: client
|
|
26
|
+
Requires-Dist: macon[client]; extra == "client"
|
|
27
|
+
Provides-Extra: dev
|
|
28
|
+
Requires-Dist: tisserande[numpy]; extra == "dev"
|
|
29
|
+
Requires-Dist: tisserande[server]; extra == "dev"
|
|
30
|
+
Requires-Dist: tisserande[client]; extra == "dev"
|
|
31
|
+
Requires-Dist: pytest; extra == "dev"
|
|
32
|
+
Requires-Dist: pytest-asyncio; extra == "dev"
|
|
33
|
+
Requires-Dist: pytest-cov>=6.0.0; extra == "dev"
|
|
34
|
+
Requires-Dist: pytest-timeout>=2.3.1; extra == "dev"
|
|
35
|
+
Requires-Dist: mypy; extra == "dev"
|
|
36
|
+
Requires-Dist: ruff>=0.8.0; extra == "dev"
|
|
37
|
+
Requires-Dist: pylint; extra == "dev"
|
|
38
|
+
Requires-Dist: types-pyyaml>=6.0.12.20240917; extra == "dev"
|
|
39
|
+
Provides-Extra: docs
|
|
40
|
+
Requires-Dist: nbsphinx; extra == "docs"
|
|
41
|
+
Requires-Dist: sphinx; extra == "docs"
|
|
42
|
+
Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
|
|
43
|
+
Requires-Dist: sphinx_rtd_theme; extra == "docs"
|
|
44
|
+
Requires-Dist: sphinx-autoapi; extra == "docs"
|
|
45
|
+
Provides-Extra: all
|
|
46
|
+
Requires-Dist: tisserande[server]; extra == "all"
|
|
47
|
+
Requires-Dist: tisserande[client]; extra == "all"
|
|
48
|
+
Requires-Dist: tisserande[dev]; extra == "all"
|
|
49
|
+
Requires-Dist: tisserande[docs]; extra == "all"
|
|
50
|
+
|
|
51
|
+
# tisserande
|
|
52
|
+
|
|
53
|
+
Execution provenance tracking for Python functions and shell scripts.
|
|
54
|
+
|
|
55
|
+
Tisserande records **what** functions ran, **what** data they consumed and produced, **how long** they took, and **whether** they succeeded — all as a directed acyclic graph (DAG) stored in a database.
|
|
56
|
+
|
|
57
|
+
## Installation
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
pip install tisserande
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
For development:
|
|
64
|
+
```bash
|
|
65
|
+
pip install -e ".[dev]"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Quick Start
|
|
69
|
+
|
|
70
|
+
### 1. Configure tracking
|
|
71
|
+
|
|
72
|
+
```python
|
|
73
|
+
from tisserande.tracking import configure
|
|
74
|
+
|
|
75
|
+
# Uses in-memory SQLite by default for quick experiments
|
|
76
|
+
configure(db_url="sqlite+aiosqlite:///my_provenance.db")
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 2. Decorate your functions
|
|
80
|
+
|
|
81
|
+
```python
|
|
82
|
+
from tisserande.tracking import track
|
|
83
|
+
from tisserande.tracking.annotations import DataFile, Param
|
|
84
|
+
|
|
85
|
+
@track
|
|
86
|
+
def fit_model(
|
|
87
|
+
input_catalog: DataFile[str],
|
|
88
|
+
config_file: DataFile[str],
|
|
89
|
+
learning_rate: Param[float],
|
|
90
|
+
) -> DataFile[str]:
|
|
91
|
+
"""Train a model and write output."""
|
|
92
|
+
# ... your code ...
|
|
93
|
+
return "/data/results/model_output.fits"
|
|
94
|
+
|
|
95
|
+
# Call normally — provenance is recorded automatically
|
|
96
|
+
fit_model("/data/catalogs/train.fits", "/configs/model.yaml", 0.01)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 3. Query the provenance
|
|
100
|
+
|
|
101
|
+
```python
|
|
102
|
+
from tisserande.local_sync import execution, node, edge
|
|
103
|
+
|
|
104
|
+
# Get all executions
|
|
105
|
+
for ex in execution.get_rows():
|
|
106
|
+
print(f"{ex.id_}: status={ex.status}, duration={ex.duration_seconds:.2f}s")
|
|
107
|
+
|
|
108
|
+
# Get all nodes for a specific execution
|
|
109
|
+
nodes = node.filter_rows(filters=[...])
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Type Annotations
|
|
113
|
+
|
|
114
|
+
Control how arguments are classified with type annotations:
|
|
115
|
+
|
|
116
|
+
```python
|
|
117
|
+
from tisserande.tracking.annotations import (
|
|
118
|
+
DataFile, # File containing data (e.g., FITS, HDF5, Parquet)
|
|
119
|
+
ConfigFile, # Configuration file (e.g., YAML, JSON, TOML)
|
|
120
|
+
ConfigDict, # Dictionary containing configuration
|
|
121
|
+
Param, # Numeric parameter
|
|
122
|
+
ArrayArg, # Array of values
|
|
123
|
+
ObjectArg, # Python object
|
|
124
|
+
Untracked, # Skip tracking for this argument
|
|
125
|
+
)
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Without annotations, tisserande uses heuristics (file extensions, Python types) to classify arguments automatically.
|
|
129
|
+
|
|
130
|
+
## Tracking Shell Commands
|
|
131
|
+
|
|
132
|
+
```python
|
|
133
|
+
from tisserande.tracking import track_shell
|
|
134
|
+
|
|
135
|
+
result = track_shell(
|
|
136
|
+
"sextractor input.fits -c config.sex",
|
|
137
|
+
inputs={
|
|
138
|
+
"image": "/data/input.fits",
|
|
139
|
+
"config": "/configs/config.sex",
|
|
140
|
+
},
|
|
141
|
+
outputs={
|
|
142
|
+
"catalog": "/data/output.cat",
|
|
143
|
+
},
|
|
144
|
+
)
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Async Support
|
|
148
|
+
|
|
149
|
+
```python
|
|
150
|
+
from tisserande.tracking import track_async
|
|
151
|
+
|
|
152
|
+
@track_async
|
|
153
|
+
async def async_pipeline(data: DataFile[str]) -> DataFile[str]:
|
|
154
|
+
# ... async processing ...
|
|
155
|
+
return "/data/output.fits"
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Architecture
|
|
159
|
+
|
|
160
|
+
Tisserande models provenance as a DAG:
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
[input.fits] ──→ [fit_model()] ──→ [output.fits]
|
|
164
|
+
[config.yaml] ─┘
|
|
165
|
+
[lr=0.01] ─────┘
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
- **Nodes** represent data (files, configs, parameters, arrays, objects) and logic (functions, scripts)
|
|
169
|
+
- **Edges** connect inputs to functions and functions to outputs
|
|
170
|
+
- **Executions** group all nodes/edges from a single function call
|
|
171
|
+
|
|
172
|
+
The database stores:
|
|
173
|
+
- **Type tables**: reusable definitions (e.g., "PythonFunction: fit_model in mymodule")
|
|
174
|
+
- **Node table**: specific instances with runtime values
|
|
175
|
+
- **Edge table**: directed connections between nodes
|
|
176
|
+
- **Execution table**: timing, status, error info per function call
|
|
177
|
+
|
|
178
|
+
## Database Backends
|
|
179
|
+
|
|
180
|
+
By default, tisserande uses SQLite via SQLAlchemy. Configure any SQLAlchemy-compatible database:
|
|
181
|
+
|
|
182
|
+
```python
|
|
183
|
+
configure(db_url="postgresql+asyncpg://user:pass@localhost/provenance")
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## REST API
|
|
187
|
+
|
|
188
|
+
Start the server:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
tisserande-server --port 8080
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Provides CRUD endpoints for all tables at `http://localhost:8080/docs`.
|
|
195
|
+
|
|
196
|
+
## CLI
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# List executions
|
|
200
|
+
tisserande-local execution get-rows
|
|
201
|
+
|
|
202
|
+
# Get a specific node
|
|
203
|
+
tisserande-local node get-row <node-uuid>
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Configuration
|
|
207
|
+
|
|
208
|
+
Environment variables (prefix `TISSERANDE__`, nested with `__`):
|
|
209
|
+
|
|
210
|
+
| Variable | Default | Description |
|
|
211
|
+
|----------|---------|-------------|
|
|
212
|
+
| `TISSERANDE__DB__URL` | `sqlite+aiosqlite:///tisserande.db` | Database URL |
|
|
213
|
+
| `TISSERANDE__TRACKING__ENABLED` | `true` | Global tracking toggle |
|
|
214
|
+
| `TISSERANDE__TRACKING__BACKEND` | `local_sync` | Backend: `local_sync` or `null` |
|
|
215
|
+
|
|
216
|
+
## Testing
|
|
217
|
+
|
|
218
|
+
For tests, use the `NullBackend` to avoid database overhead:
|
|
219
|
+
|
|
220
|
+
```python
|
|
221
|
+
from tisserande.tracking import configure
|
|
222
|
+
from tisserande.tracking.backends import NullBackend
|
|
223
|
+
|
|
224
|
+
configure(backend=NullBackend())
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
## License
|
|
228
|
+
|
|
229
|
+
MIT
|