eggpipe 0.3.0__tar.gz → 0.3.1__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.
- {eggpipe-0.3.0 → eggpipe-0.3.1}/CHANGELOG.md +8 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/CONTRIBUTING.md +17 -0
- eggpipe-0.3.1/PKG-INFO +121 -0
- eggpipe-0.3.1/README-pypi.md +79 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/README.md +2 -2
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/ai/context.md +1 -1
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/ai/llms-full.txt +3 -3
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/ai/manifest.json +1 -1
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/user/status.md +2 -2
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/adr/0014-beta-status-and-compatibility.md +1 -1
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/plan-v2.md +2 -2
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/release.md +5 -3
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/system-design/index.md +2 -2
- {eggpipe-0.3.0 → eggpipe-0.3.1}/pyproject.toml +2 -2
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/version.py +1 -1
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_artifact_writer.py +1 -1
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_check_wheel.py +3 -3
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_package.py +1 -1
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tools/check_docs.py +1 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tools/check_wheel.py +1 -0
- eggpipe-0.3.0/PKG-INFO +0 -251
- {eggpipe-0.3.0 → eggpipe-0.3.1}/.gitignore +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/LICENSE +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/ai/diagnostics.json +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/ai/index.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/ai/invariants.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/ai/llms.txt +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/ai/schemas/config.schema.json +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/ai/schemas/manifest.schema.json +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/ai/schemas/model.schema.json +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/ai/schemas/report.schema.json +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/ai/tasks.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/favicon.ico +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/lockup/eggpipe-lockup-dark.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/lockup/eggpipe-lockup-dark.svg +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/lockup/eggpipe-lockup-light.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/lockup/eggpipe-lockup.svg +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/lockup/eggpipe-wordmark-dark.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/lockup/eggpipe-wordmark-dark.svg +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/lockup/eggpipe-wordmark-light.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/lockup/eggpipe-wordmark.svg +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/png/android-chrome-192x192.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/png/android-chrome-512x512.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/png/apple-touch-icon.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/png/eggpipe-icon-1024.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/png/eggpipe-icon-128.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/png/eggpipe-icon-16.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/png/eggpipe-icon-256.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/png/eggpipe-icon-32.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/png/eggpipe-icon-48.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/png/eggpipe-icon-512.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/png/eggpipe-icon-64.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/png/eggpipe-icon-dark-1024.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/png/eggpipe-icon-dark-512.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/png/eggpipe-icon-mono-512.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/png/eggpipe-icon-mono-light-512.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/png/eggpipe-icon-original-1024.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/preview-small-sizes.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/preview.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/social/eggpipe-social-1280x640.png +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/svg/eggpipe-icon-dark.svg +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/svg/eggpipe-icon-mono-light.svg +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/svg/eggpipe-icon-mono.svg +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/svg/eggpipe-icon-original.svg +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/svg/eggpipe-icon-small-egg-p.svg +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/svg/eggpipe-icon-small-ep.svg +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/svg/eggpipe-icon-small-p.svg +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/svg/eggpipe-icon-square-dark.svg +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/svg/eggpipe-icon-square-mono-light.svg +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/svg/eggpipe-icon-square-mono.svg +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/svg/eggpipe-icon-square.svg +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/assets/brand/svg/eggpipe-icon.svg +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/img/favicon.ico +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/index.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/user/api/format.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/user/api/generator.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/user/api/index.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/user/api/models.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/user/cli.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/user/concepts.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/user/configuration.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/user/cookbook/index.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/user/faq.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/user/index.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/user/plugins.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/user/quickstart.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/user/reference/diagnostics.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/user/troubleshooting.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/docs/user/tutorial.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/adr/0001-composition-merge-semantics.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/adr/0002-type-checker-pyrefly.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/adr/0003-null-semantics.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/adr/0004-ownership-manifest-cleanup.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/adr/0005-library-api.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/adr/0006-format-extension.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/adr/0007-format-inheritance.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/adr/0008-model-units-and-source-layouts.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/adr/0009-global-manifest-ownership.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/adr/0010-decorator-generator-api.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/adr/0011-public-api-v2-identity.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/adr/0012-english-only-source.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/adr/0013-diagnostic-code-namespace.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/adr/index.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/brand-assets.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/decisions/eggpipe.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/decisions/logo-brief.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/i18n/README.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/i18n/ru-docstrings.yaml +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/i18n/ru-messages.yaml +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/index.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/requirements/index.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/requirements/v1.0.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/requirements/v1.1.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/requirements/v1.2.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/requirements/v1.3.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/requirements/v1.4.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/requirements/v2.0.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/requirements/v2.1.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/requirements/v2.2.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/reviews/2026-11-10-project-review.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/reviews/2026-11-12-v2-review.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/reviews/2026-11-13-code-quality-review.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/reviews/2026-11-13-patterns-review.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/engineering/reviews/2026-11-13-project-review.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/reference-generator/README.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/reference-generator/pyproject.toml +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/reference-generator/src/reference_generator/__init__.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h/.eggpipe.split.yaml +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h/.eggpipe.yaml +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h/README.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h/expected/schema.sql +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h/expected/tpch_models.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h/model/customer/base.yaml +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h/model/lineitem/base.yaml +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h/model/nation/base.yaml +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h/model/orders/base.yaml +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h/model/part/base.yaml +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h/model/partsupp/base.yaml +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h/model/region/base.yaml +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h/model/supplier/base.yaml +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h-generator/README.md +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h-generator/pyproject.toml +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h-generator/src/tpch_generator/__init__.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h-generator/src/tpch_generator/ddl.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h-generator/src/tpch_generator/generator.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h-generator/src/tpch_generator/metadata.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h-generator/src/tpch_generator/pydantic_models.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h-generator/src/tpch_generator/templates/pydantic.py.j2 +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/examples/tpc-h-generator/src/tpch_generator/templates/schema.sql.j2 +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/mkdocs.yml +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/pyrightconfig.json +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/__init__.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/cli/__init__.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/cli/main.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/config/__init__.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/config/app_config.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/config/logging.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/config/project_config.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/core/__init__.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/core/composition.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/core/discovery.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/core/document.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/core/format_registry.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/core/layers.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/core/model.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/core/naming.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/core/parser.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/core/paths.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/core/provenance.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/core/slicing.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/core/validator.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/engine/__init__.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/engine/artifact_writer.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/engine/engine.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/engine/plugin_loader.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/engine/policy.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/engine/report.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/interfaces/__init__.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/interfaces/diagnostics.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/interfaces/formats.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/interfaces/generator.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/py.typed +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/templating.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/utils/__init__.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/utils/exceptions.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/utils/yaml.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/watch/__init__.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/src/eggpipe/watch/watcher.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/golden/fixtures/expected/basic.json +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/golden/fixtures/models/basic.yaml +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/golden/test_golden.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/property/test_properties.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_check_docs.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_cli.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_composition.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_config.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_contract.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_determinism.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_engine.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_engine_composition.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_formats.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_generator_api.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_layers.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_model.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_naming.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_parser.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_plugin_loader.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_provenance.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_slicing.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_templating.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_tpch_example.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_validator.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_watch.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tests/test_watch_integration.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tools/__init__.py +0 -0
- {eggpipe-0.3.0 → eggpipe-0.3.1}/tools/build_ai_docs.py +0 -0
|
@@ -5,6 +5,14 @@
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.3.1] - 2026-11-13
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- PyPI-страница использует отдельный пользовательский `README-pypi.md` без инженерной
|
|
13
|
+
документации и команд разработки.
|
|
14
|
+
- Основной `README.md` остаётся полным описанием для GitHub.
|
|
15
|
+
|
|
8
16
|
## [0.3.0] - 2026-11-13
|
|
9
17
|
|
|
10
18
|
### Changed
|
|
@@ -47,6 +47,23 @@ uv run python tools/check_wheel.py dist
|
|
|
47
47
|
- При изменении версии обнови `engineering/requirements/index.md`, System Design, README,
|
|
48
48
|
`.session-context.md` и harness-файлы, где указана актуальная версия.
|
|
49
49
|
|
|
50
|
+
## Ветки и main
|
|
51
|
+
|
|
52
|
+
`main` защищён: прямые коммиты и push запрещены. Любое изменение идёт через отдельную
|
|
53
|
+
ветку и pull request.
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
git switch -c type/short-description
|
|
57
|
+
# изменения и коммиты
|
|
58
|
+
git push -u origin type/short-description
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Затем открой PR в `main`. Merge разрешён только после зелёных проверок `ci` и `docs`.
|
|
62
|
+
Force-push в `main` и удаление ветки `main` запрещены.
|
|
63
|
+
|
|
64
|
+
Для соло-разработки достаточно PR без обязательного внешнего approval: проверки CI
|
|
65
|
+
и самостоятельный review остаются обязательными.
|
|
66
|
+
|
|
50
67
|
## Pull request
|
|
51
68
|
|
|
52
69
|
- Один PR — одна логическая задача.
|
eggpipe-0.3.1/PKG-INFO
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: eggpipe
|
|
3
|
+
Version: 0.3.1
|
|
4
|
+
Summary: CLI tool and library for metadata-driven code generation
|
|
5
|
+
Project-URL: Homepage, https://github.com/SpiGit/eggpipe
|
|
6
|
+
Project-URL: Documentation, https://github.com/SpiGit/eggpipe/tree/main/docs
|
|
7
|
+
Project-URL: Repository, https://github.com/SpiGit/eggpipe
|
|
8
|
+
Project-URL: Changelog, https://github.com/SpiGit/eggpipe/blob/main/CHANGELOG.md
|
|
9
|
+
Project-URL: Issues, https://github.com/SpiGit/eggpipe/issues
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: code-generation,metadata,pydantic,yaml
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
20
|
+
Classifier: Typing :: Typed
|
|
21
|
+
Requires-Python: >=3.11
|
|
22
|
+
Requires-Dist: pydantic-settings>=2.2.0
|
|
23
|
+
Requires-Dist: pydantic>=2.6.0
|
|
24
|
+
Requires-Dist: rich>=13.7.0
|
|
25
|
+
Requires-Dist: ruamel-yaml>=0.18.6
|
|
26
|
+
Requires-Dist: typer>=0.12.0
|
|
27
|
+
Requires-Dist: typing-extensions>=4.10.0
|
|
28
|
+
Provides-Extra: dev
|
|
29
|
+
Requires-Dist: hypothesis>=6.100.0; extra == 'dev'
|
|
30
|
+
Requires-Dist: jinja2>=3.1.0; extra == 'dev'
|
|
31
|
+
Requires-Dist: mkdocs>=1.6.0; extra == 'dev'
|
|
32
|
+
Requires-Dist: pyrefly>=1.4.0; extra == 'dev'
|
|
33
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
|
|
34
|
+
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
35
|
+
Requires-Dist: ruff>=0.4.0; extra == 'dev'
|
|
36
|
+
Requires-Dist: watchdog>=4.0.0; extra == 'dev'
|
|
37
|
+
Provides-Extra: jinja
|
|
38
|
+
Requires-Dist: jinja2>=3.1.0; extra == 'jinja'
|
|
39
|
+
Provides-Extra: watch
|
|
40
|
+
Requires-Dist: watchdog>=4.0.0; extra == 'watch'
|
|
41
|
+
Description-Content-Type: text/markdown
|
|
42
|
+
|
|
43
|
+
# Eggpipe
|
|
44
|
+
|
|
45
|
+
<p align="center">
|
|
46
|
+
<img src="https://raw.githubusercontent.com/SpiGit/eggpipe/main/docs/assets/brand/lockup/eggpipe-wordmark-light.png" alt="Eggpipe" width="420">
|
|
47
|
+
</p>
|
|
48
|
+
|
|
49
|
+
Eggpipe generates SQL, Python, TypeScript, OpenAPI and other artifacts from a single
|
|
50
|
+
YAML model description.
|
|
51
|
+
|
|
52
|
+
> **Beta (0.x).** Until 1.0, the public API, CLI, config format and generated artifacts
|
|
53
|
+
> may change without backward compatibility. Pin the version for production and read
|
|
54
|
+
> the changelog before upgrading.
|
|
55
|
+
|
|
56
|
+
## Install
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
pip install eggpipe
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Python 3.11+ is required.
|
|
63
|
+
|
|
64
|
+
Optional extras:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
pip install "eggpipe[watch]" # watch mode
|
|
68
|
+
pip install "eggpipe[jinja]" # Jinja2 helper for plugins
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## CLI
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
eggpipe init
|
|
75
|
+
eggpipe generate model.yaml
|
|
76
|
+
eggpipe generate --plan
|
|
77
|
+
eggpipe generate --check
|
|
78
|
+
eggpipe watch model.yaml
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Library
|
|
82
|
+
|
|
83
|
+
```python
|
|
84
|
+
from eggpipe import AppConfig, Engine, ProjectConfigLoader
|
|
85
|
+
|
|
86
|
+
rules = ProjectConfigLoader().load(".eggpipe.yaml")
|
|
87
|
+
engine = Engine(AppConfig(), rules)
|
|
88
|
+
|
|
89
|
+
report = engine.build() # parse, validate and generate without writing
|
|
90
|
+
report = engine.generate() # build + write artifacts
|
|
91
|
+
report = engine.check() # check drift without writing
|
|
92
|
+
|
|
93
|
+
if not report.success:
|
|
94
|
+
for diagnostic in report.diagnostics:
|
|
95
|
+
print(diagnostic.code, diagnostic.message)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Plugins
|
|
99
|
+
|
|
100
|
+
Generators and document formats are plugins registered through entry points:
|
|
101
|
+
|
|
102
|
+
```toml
|
|
103
|
+
[project.entry-points."eggpipe.generators"]
|
|
104
|
+
my-generator = "my_package:my_generator"
|
|
105
|
+
|
|
106
|
+
[project.entry-points."eggpipe.formats"]
|
|
107
|
+
sql-model = "my_package:SqlModelFormat"
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Documentation
|
|
111
|
+
|
|
112
|
+
- [Documentation](https://github.com/SpiGit/eggpipe/tree/main/docs)
|
|
113
|
+
- [Quick start](https://github.com/SpiGit/eggpipe/blob/main/docs/user/quickstart.md)
|
|
114
|
+
- [CLI reference](https://github.com/SpiGit/eggpipe/blob/main/docs/user/cli.md)
|
|
115
|
+
- [Plugin guide](https://github.com/SpiGit/eggpipe/blob/main/docs/user/plugins.md)
|
|
116
|
+
- [Changelog](https://github.com/SpiGit/eggpipe/blob/main/CHANGELOG.md)
|
|
117
|
+
- [Issues](https://github.com/SpiGit/eggpipe/issues)
|
|
118
|
+
|
|
119
|
+
## License
|
|
120
|
+
|
|
121
|
+
MIT
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Eggpipe
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="https://raw.githubusercontent.com/SpiGit/eggpipe/main/docs/assets/brand/lockup/eggpipe-wordmark-light.png" alt="Eggpipe" width="420">
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
Eggpipe generates SQL, Python, TypeScript, OpenAPI and other artifacts from a single
|
|
8
|
+
YAML model description.
|
|
9
|
+
|
|
10
|
+
> **Beta (0.x).** Until 1.0, the public API, CLI, config format and generated artifacts
|
|
11
|
+
> may change without backward compatibility. Pin the version for production and read
|
|
12
|
+
> the changelog before upgrading.
|
|
13
|
+
|
|
14
|
+
## Install
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
pip install eggpipe
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Python 3.11+ is required.
|
|
21
|
+
|
|
22
|
+
Optional extras:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
pip install "eggpipe[watch]" # watch mode
|
|
26
|
+
pip install "eggpipe[jinja]" # Jinja2 helper for plugins
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## CLI
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
eggpipe init
|
|
33
|
+
eggpipe generate model.yaml
|
|
34
|
+
eggpipe generate --plan
|
|
35
|
+
eggpipe generate --check
|
|
36
|
+
eggpipe watch model.yaml
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Library
|
|
40
|
+
|
|
41
|
+
```python
|
|
42
|
+
from eggpipe import AppConfig, Engine, ProjectConfigLoader
|
|
43
|
+
|
|
44
|
+
rules = ProjectConfigLoader().load(".eggpipe.yaml")
|
|
45
|
+
engine = Engine(AppConfig(), rules)
|
|
46
|
+
|
|
47
|
+
report = engine.build() # parse, validate and generate without writing
|
|
48
|
+
report = engine.generate() # build + write artifacts
|
|
49
|
+
report = engine.check() # check drift without writing
|
|
50
|
+
|
|
51
|
+
if not report.success:
|
|
52
|
+
for diagnostic in report.diagnostics:
|
|
53
|
+
print(diagnostic.code, diagnostic.message)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Plugins
|
|
57
|
+
|
|
58
|
+
Generators and document formats are plugins registered through entry points:
|
|
59
|
+
|
|
60
|
+
```toml
|
|
61
|
+
[project.entry-points."eggpipe.generators"]
|
|
62
|
+
my-generator = "my_package:my_generator"
|
|
63
|
+
|
|
64
|
+
[project.entry-points."eggpipe.formats"]
|
|
65
|
+
sql-model = "my_package:SqlModelFormat"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Documentation
|
|
69
|
+
|
|
70
|
+
- [Documentation](https://github.com/SpiGit/eggpipe/tree/main/docs)
|
|
71
|
+
- [Quick start](https://github.com/SpiGit/eggpipe/blob/main/docs/user/quickstart.md)
|
|
72
|
+
- [CLI reference](https://github.com/SpiGit/eggpipe/blob/main/docs/user/cli.md)
|
|
73
|
+
- [Plugin guide](https://github.com/SpiGit/eggpipe/blob/main/docs/user/plugins.md)
|
|
74
|
+
- [Changelog](https://github.com/SpiGit/eggpipe/blob/main/CHANGELOG.md)
|
|
75
|
+
- [Issues](https://github.com/SpiGit/eggpipe/issues)
|
|
76
|
+
|
|
77
|
+
## License
|
|
78
|
+
|
|
79
|
+
MIT
|
|
@@ -205,5 +205,5 @@ uv run python tools/check_docs.py --strict
|
|
|
205
205
|
|
|
206
206
|
## Статус
|
|
207
207
|
|
|
208
|
-
**Стадия:** Eggpipe 0.3.
|
|
209
|
-
форматы и слои, decorator API, глобальный manifest, CLI/JSON v2, CI и release workflow.
|
|
208
|
+
**Стадия:** Eggpipe 0.3.1, ТЗ v2.2. Реализованы E0–E9, пакет опубликован на PyPI:
|
|
209
|
+
CLI/config/state, форматы и слои, decorator API, глобальный manifest, CLI/JSON v2, CI и release workflow.
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
- Package/import/CLI: `eggpipe`.
|
|
9
9
|
- Конфиг: `.eggpipe.yaml`; state: `.eggpipe/`.
|
|
10
10
|
- Актуальное ТЗ: `engineering/requirements/v2.2.md`.
|
|
11
|
-
- Версия пакета: `0.3.
|
|
11
|
+
- Версия пакета: `0.3.1`; версия ТЗ: `2.2`.
|
|
12
12
|
- Статус: beta (0.x); до 1.0 breaking changes возможны (ADR-0014).
|
|
13
13
|
- Brand assets: `docs/assets/brand/`.
|
|
14
14
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
- Package/import/CLI: `eggpipe`.
|
|
15
15
|
- Конфиг: `.eggpipe.yaml`; state: `.eggpipe/`.
|
|
16
16
|
- Актуальное ТЗ: `engineering/requirements/v2.2.md`.
|
|
17
|
-
- Версия пакета: `0.3.
|
|
17
|
+
- Версия пакета: `0.3.1`; версия ТЗ: `2.2`.
|
|
18
18
|
- Статус: beta (0.x); до 1.0 breaking changes возможны (ADR-0014).
|
|
19
19
|
- Brand assets: `docs/assets/brand/`.
|
|
20
20
|
|
|
@@ -289,13 +289,13 @@ generators:
|
|
|
289
289
|
|
|
290
290
|
## Как обновляться
|
|
291
291
|
|
|
292
|
-
1. Зафиксируйте точную версию, например `eggpipe==0.3.
|
|
292
|
+
1. Зафиксируйте точную версию, например `eggpipe==0.3.1`.
|
|
293
293
|
2. Прочитайте `CHANGELOG.md` перед обновлением.
|
|
294
294
|
3. Прогоните `eggpipe generate --check` в CI, чтобы поймать drift артефактов.
|
|
295
295
|
|
|
296
296
|
## Миграция с v1.x
|
|
297
297
|
|
|
298
|
-
Публичного релиза v1.x не было, поэтому миграция не требуется. Все версии до 0.3.
|
|
298
|
+
Публичного релиза v1.x не было, поэтому миграция не требуется. Все версии до 0.3.1
|
|
299
299
|
относятся к разработке проекта.
|
|
300
300
|
|
|
301
301
|
## После 1.0
|
|
@@ -19,13 +19,13 @@
|
|
|
19
19
|
|
|
20
20
|
## Как обновляться
|
|
21
21
|
|
|
22
|
-
1. Зафиксируйте точную версию, например `eggpipe==0.3.
|
|
22
|
+
1. Зафиксируйте точную версию, например `eggpipe==0.3.1`.
|
|
23
23
|
2. Прочитайте `CHANGELOG.md` перед обновлением.
|
|
24
24
|
3. Прогоните `eggpipe generate --check` в CI, чтобы поймать drift артефактов.
|
|
25
25
|
|
|
26
26
|
## Миграция с v1.x
|
|
27
27
|
|
|
28
|
-
Публичного релиза v1.x не было, поэтому миграция не требуется. Все версии до 0.3.
|
|
28
|
+
Публичного релиза v1.x не было, поэтому миграция не требуется. Все версии до 0.3.1
|
|
29
29
|
относятся к разработке проекта.
|
|
30
30
|
|
|
31
31
|
## После 1.0
|
|
@@ -27,7 +27,7 @@ CI-проверки и автоматизация.
|
|
|
27
27
|
может расширяться, а условия срабатывания — уточняться.
|
|
28
28
|
- Сгенерированные файлы не являются публичным API: шаблоны и структура вывода могут
|
|
29
29
|
меняться между версиями.
|
|
30
|
-
- Для production рекомендуется фиксировать точную версию (`eggpipe==0.3.
|
|
30
|
+
- Для production рекомендуется фиксировать точную версию (`eggpipe==0.3.1`) и читать
|
|
31
31
|
`CHANGELOG.md` перед обновлением.
|
|
32
32
|
- После выпуска **1.0** проект переходит на обычные гарантии SemVer: breaking changes —
|
|
33
33
|
только в major-версиях.
|
|
@@ -188,7 +188,7 @@
|
|
|
188
188
|
- [x] `uv build`/`check_wheel`.
|
|
189
189
|
- [x] CI: example install, config names.
|
|
190
190
|
- [x] Release docs: PyPI name `eggpipe`, trusted publisher, repo name.
|
|
191
|
-
- [x] Версия пакета: 0.3.
|
|
191
|
+
- [x] Версия пакета: 0.3.1.
|
|
192
192
|
|
|
193
193
|
**Критерий:** все проверки зелёные; release workflow готов.
|
|
194
194
|
|
|
@@ -240,6 +240,6 @@
|
|
|
240
240
|
- [x] `check_docs --strict`, `mkdocs --strict`.
|
|
241
241
|
- [x] `ruff`, `pyrefly`, `pytest --cov`.
|
|
242
242
|
- [x] `uv build`, `check_wheel`.
|
|
243
|
-
- [
|
|
243
|
+
- [x] `eggpipe` install/run из PyPI.
|
|
244
244
|
- [x] TPC-H golden.
|
|
245
245
|
- [x] Release checklist обновлён.
|
|
@@ -26,11 +26,13 @@
|
|
|
26
26
|
|
|
27
27
|
## Публикация
|
|
28
28
|
|
|
29
|
+
Тег ставится только на `main` после merge release PR. Прямой push в `main` запрещён.
|
|
30
|
+
|
|
29
31
|
Релиз запускается тегом:
|
|
30
32
|
|
|
31
33
|
```bash
|
|
32
|
-
git tag v0.3.
|
|
33
|
-
git push origin v0.3.
|
|
34
|
+
git tag v0.3.1
|
|
35
|
+
git push origin v0.3.1
|
|
34
36
|
```
|
|
35
37
|
|
|
36
38
|
Workflow `.github/workflows/release.yml`:
|
|
@@ -56,7 +58,7 @@ Workflow `.github/workflows/release.yml`:
|
|
|
56
58
|
5. Запушить тег:
|
|
57
59
|
|
|
58
60
|
```bash
|
|
59
|
-
git push origin v0.3.
|
|
61
|
+
git push origin v0.3.1
|
|
60
62
|
```
|
|
61
63
|
|
|
62
64
|
Без `PYPI_PUBLISH=true` артефакты публикуются только в GitHub Release.
|
|
@@ -1249,7 +1249,7 @@ class ExecutionPlan:
|
|
|
1249
1249
|
{
|
|
1250
1250
|
"generator": "oracle-ddl",
|
|
1251
1251
|
"output_dir": "output/oracle",
|
|
1252
|
-
"eggpipe_version": "0.3.
|
|
1252
|
+
"eggpipe_version": "0.3.1",
|
|
1253
1253
|
"plugin_version": "1.2.0",
|
|
1254
1254
|
"formats": [{"name": "entity-model", "version": "1.0"}],
|
|
1255
1255
|
"generated_at": "2026-11-11T12:34:56Z",
|
|
@@ -1478,7 +1478,7 @@ def test_invalid_models_produce_expected_code(data) -> None:
|
|
|
1478
1478
|
```toml
|
|
1479
1479
|
[project]
|
|
1480
1480
|
name = "eggpipe"
|
|
1481
|
-
version = "0.3.
|
|
1481
|
+
version = "0.3.1"
|
|
1482
1482
|
description = "CLI tool and library for metadata-driven code generation"
|
|
1483
1483
|
readme = "README.md"
|
|
1484
1484
|
license = "MIT"
|
|
@@ -4,9 +4,9 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "eggpipe"
|
|
7
|
-
version = "0.3.
|
|
7
|
+
version = "0.3.1"
|
|
8
8
|
description = "CLI tool and library for metadata-driven code generation"
|
|
9
|
-
readme = "README.md"
|
|
9
|
+
readme = "README-pypi.md"
|
|
10
10
|
license = "MIT"
|
|
11
11
|
license-files = ["LICENSE"]
|
|
12
12
|
requires-python = ">=3.11"
|
|
@@ -14,7 +14,7 @@ from eggpipe.utils.exceptions import LockError, ManifestError
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
def writer(tmp_path: Path) -> ArtifactWriter:
|
|
17
|
-
return ArtifactWriter(eggpipe_version="0.3.
|
|
17
|
+
return ArtifactWriter(eggpipe_version="0.3.1", config_dir=tmp_path)
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
def plan_for(
|
|
@@ -14,9 +14,9 @@ def test_dependency_name_normalizes_distribution_names() -> None:
|
|
|
14
14
|
def test_relative_sdist_names_strips_root_prefix() -> None:
|
|
15
15
|
names = relative_sdist_names(
|
|
16
16
|
[
|
|
17
|
-
"eggpipe-0.3.
|
|
18
|
-
"eggpipe-0.3.
|
|
19
|
-
"eggpipe-0.3.
|
|
17
|
+
"eggpipe-0.3.1/pyproject.toml",
|
|
18
|
+
"eggpipe-0.3.1/src/eggpipe/__init__.py",
|
|
19
|
+
"eggpipe-0.3.1",
|
|
20
20
|
]
|
|
21
21
|
)
|
|
22
22
|
assert names == {
|