framework-py 0.1.0.dev0__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.
- framework_py-0.1.0.dev0/.gitignore +13 -0
- framework_py-0.1.0.dev0/LICENSE +21 -0
- framework_py-0.1.0.dev0/PKG-INFO +111 -0
- framework_py-0.1.0.dev0/README.md +64 -0
- framework_py-0.1.0.dev0/parity.toml +552 -0
- framework_py-0.1.0.dev0/pyproject.toml +98 -0
- framework_py-0.1.0.dev0/scripts/__init__.py +0 -0
- framework_py-0.1.0.dev0/scripts/check_parity.py +98 -0
- framework_py-0.1.0.dev0/scripts/make_golden_trees.py +59 -0
- framework_py-0.1.0.dev0/scripts/make_r_fixtures.R +196 -0
- framework_py-0.1.0.dev0/scripts/sync_assets.py +173 -0
- framework_py-0.1.0.dev0/src/framework/__init__.py +250 -0
- framework_py-0.1.0.dev0/src/framework/__main__.py +89 -0
- framework_py-0.1.0.dev0/src/framework/_assets/hooks/pre-commit +59 -0
- framework_py-0.1.0.dev0/src/framework/_assets/init.sql +63 -0
- framework_py-0.1.0.dev0/src/framework/_assets/schema/layer.v1.json +605 -0
- framework_py-0.1.0.dev0/src/framework/_assets/schema/layers.v1.json +791 -0
- framework_py-0.1.0.dev0/src/framework/_assets/schema/spec.v1.json +604 -0
- framework_py-0.1.0.dev0/src/framework/_log.py +29 -0
- framework_py-0.1.0.dev0/src/framework/_paths.py +45 -0
- framework_py-0.1.0.dev0/src/framework/_secretservice.py +69 -0
- framework_py-0.1.0.dev0/src/framework/_time.py +11 -0
- framework_py-0.1.0.dev0/src/framework/_wincred.py +105 -0
- framework_py-0.1.0.dev0/src/framework/_yaml.py +90 -0
- framework_py-0.1.0.dev0/src/framework/ai.py +204 -0
- framework_py-0.1.0.dev0/src/framework/bootstrap.py +206 -0
- framework_py-0.1.0.dev0/src/framework/cache.py +335 -0
- framework_py-0.1.0.dev0/src/framework/catalog.py +193 -0
- framework_py-0.1.0.dev0/src/framework/cloud.py +899 -0
- framework_py-0.1.0.dev0/src/framework/config_home.py +194 -0
- framework_py-0.1.0.dev0/src/framework/connections.py +442 -0
- framework_py-0.1.0.dev0/src/framework/console.py +41 -0
- framework_py-0.1.0.dev0/src/framework/create.py +579 -0
- framework_py-0.1.0.dev0/src/framework/data.py +519 -0
- framework_py-0.1.0.dev0/src/framework/db.py +222 -0
- framework_py-0.1.0.dev0/src/framework/dotenv.py +79 -0
- framework_py-0.1.0.dev0/src/framework/errors.py +39 -0
- framework_py-0.1.0.dev0/src/framework/global_config.py +238 -0
- framework_py-0.1.0.dev0/src/framework/hooks.py +364 -0
- framework_py-0.1.0.dev0/src/framework/integrity.py +22 -0
- framework_py-0.1.0.dev0/src/framework/notebooks.py +384 -0
- framework_py-0.1.0.dev0/src/framework/outputs.py +324 -0
- framework_py-0.1.0.dev0/src/framework/packages.py +276 -0
- framework_py-0.1.0.dev0/src/framework/project.py +52 -0
- framework_py-0.1.0.dev0/src/framework/py.typed +0 -0
- framework_py-0.1.0.dev0/src/framework/quarto.py +163 -0
- framework_py-0.1.0.dev0/src/framework/scaffold.py +269 -0
- framework_py-0.1.0.dev0/src/framework/scratch.py +108 -0
- framework_py-0.1.0.dev0/src/framework/security.py +646 -0
- framework_py-0.1.0.dev0/src/framework/settings.py +439 -0
- framework_py-0.1.0.dev0/src/framework/spec/__init__.py +0 -0
- framework_py-0.1.0.dev0/src/framework/spec/check.py +211 -0
- framework_py-0.1.0.dev0/src/framework/spec/merge.py +195 -0
- framework_py-0.1.0.dev0/src/framework/spec/resolve.py +254 -0
- framework_py-0.1.0.dev0/src/framework/storage.py +516 -0
- framework_py-0.1.0.dev0/src/framework/templates/defaults.yml +144 -0
- framework_py-0.1.0.dev0/src/framework/templates/gitignore/course +120 -0
- framework_py-0.1.0.dev0/src/framework/templates/gitignore/presentation +114 -0
- framework_py-0.1.0.dev0/src/framework/templates/gitignore/project +108 -0
- framework_py-0.1.0.dev0/src/framework/templates/gitignore/sensitive +139 -0
- framework_py-0.1.0.dev0/src/framework/templates/skills/framework-data/SKILL.md +47 -0
- framework_py-0.1.0.dev0/src/framework/templates/skills/framework-outputs/SKILL.md +68 -0
- framework_py-0.1.0.dev0/src/framework/templates/skills/framework-packages/SKILL.md +33 -0
- framework_py-0.1.0.dev0/src/framework/templates/skills/framework-sensitive-data/SKILL.md +38 -0
- framework_py-0.1.0.dev0/src/framework/templates/skills/framework-workflow/SKILL.md +58 -0
- framework_py-0.1.0.dev0/src/framework/templates/stubs/notebook-default.ipynb +34 -0
- framework_py-0.1.0.dev0/src/framework/templates/stubs/notebook-default.qmd +43 -0
- framework_py-0.1.0.dev0/src/framework/templates/stubs/notebook-minimal.qmd +15 -0
- framework_py-0.1.0.dev0/src/framework/templates/stubs/notebook-revealjs.qmd +34 -0
- framework_py-0.1.0.dev0/src/framework/templates/stubs/script-default.py +18 -0
- framework_py-0.1.0.dev0/tests/__init__.py +0 -0
- framework_py-0.1.0.dev0/tests/conftest.py +107 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/.claude/skills/framework-data/SKILL.md +55 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/.claude/skills/framework-outputs/SKILL.md +75 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/.claude/skills/framework-packages/SKILL.md +52 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/.claude/skills/framework-workflow/SKILL.md +52 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/.env +13 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/.framework/spec.json +166 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/.gitignore +126 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/AGENTS.md +8 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/CLAUDE.md +1 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/docs/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/fixture-study.Rproj +13 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/fixture-study.code-workspace +16 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/framework.db +0 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/inputs/intermediate/r_clean.csv +4 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/inputs/private/ids.csv +2 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/inputs/raw/survey.csv +3 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/inputs/raw/visits.tsv +2 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/inputs/reference/test.dta +0 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/inputs/reference/test.sav +0 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/inputs/reference/test.xpt +0 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/notebooks/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/outputs/cache/r_value.rds +0 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/outputs/tables/r_summary.csv +4 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/scaffold.R +11 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/settings/ai.yml +5 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/settings/author.yml +4 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/settings/connections.yml +7 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/settings/data.yml +22 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/settings/git.yml +7 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/settings/packages.yml +27 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/settings/quarto.yml +22 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/settings/scaffold.yml +7 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project/settings.yml +59 -0
- framework_py-0.1.0.dev0/tests/fixtures/r_project.expected.json +633 -0
- framework_py-0.1.0.dev0/tests/golden/bare/expected/.framework/spec.json +97 -0
- framework_py-0.1.0.dev0/tests/golden/bare/expected/.gitignore +108 -0
- framework_py-0.1.0.dev0/tests/golden/bare/expected/pyproject.toml +11 -0
- framework_py-0.1.0.dev0/tests/golden/bare/expected/settings.yml +57 -0
- framework_py-0.1.0.dev0/tests/golden/bare/layers.json +14 -0
- framework_py-0.1.0.dev0/tests/golden/course/expected/.claude/skills/framework-data/SKILL.md +47 -0
- framework_py-0.1.0.dev0/tests/golden/course/expected/.claude/skills/framework-outputs/SKILL.md +68 -0
- framework_py-0.1.0.dev0/tests/golden/course/expected/.claude/skills/framework-packages/SKILL.md +33 -0
- framework_py-0.1.0.dev0/tests/golden/course/expected/.claude/skills/framework-workflow/SKILL.md +58 -0
- framework_py-0.1.0.dev0/tests/golden/course/expected/.env +12 -0
- framework_py-0.1.0.dev0/tests/golden/course/expected/.framework/spec.json +124 -0
- framework_py-0.1.0.dev0/tests/golden/course/expected/.gitignore +120 -0
- framework_py-0.1.0.dev0/tests/golden/course/expected/AGENTS.md +8 -0
- framework_py-0.1.0.dev0/tests/golden/course/expected/CLAUDE.md +1 -0
- framework_py-0.1.0.dev0/tests/golden/course/expected/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/course/expected/assignments/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/course/expected/course_docs/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/course/expected/golden-course.code-workspace +13 -0
- framework_py-0.1.0.dev0/tests/golden/course/expected/modules/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/course/expected/pyproject.toml +11 -0
- framework_py-0.1.0.dev0/tests/golden/course/expected/scaffold.py +8 -0
- framework_py-0.1.0.dev0/tests/golden/course/expected/settings.yml +69 -0
- framework_py-0.1.0.dev0/tests/golden/course/expected/slides/_quarto.yml +18 -0
- framework_py-0.1.0.dev0/tests/golden/course/layers.json +14 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/.claude/skills/framework-data/SKILL.md +47 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/.claude/skills/framework-outputs/SKILL.md +68 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/.claude/skills/framework-packages/SKILL.md +33 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/.claude/skills/framework-workflow/SKILL.md +58 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/.claude/skills/study-protocol/SKILL.md +6 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/.claude/skills/study-protocol/references/consort.md +1 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/.env +14 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/.framework/spec.json +168 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/.gitignore +111 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/AGENTS.md +8 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/CLAUDE.md +1 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/README.md +5 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/docs/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/golden-files-and-skills.code-workspace +13 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/notebooks/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/notes.md +1 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/pyproject.toml +13 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/scaffold.py +8 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/settings/ai.yml +5 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/settings/author.yml +5 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/settings/connections.yml +7 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/settings/data.yml +1 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/settings/git.yml +6 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/settings/quarto.yml +22 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/settings/scaffold.yml +5 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/settings.yml +36 -0
- framework_py-0.1.0.dev0/tests/golden/files-and-skills/layers.json +80 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/.agents/skills/framework-data/SKILL.md +47 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/.agents/skills/framework-outputs/SKILL.md +68 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/.agents/skills/framework-packages/SKILL.md +33 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/.agents/skills/framework-workflow/SKILL.md +58 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/.env +12 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/.framework/spec.json +128 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/.gitignore +108 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/AGENTS.md +8 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/docs/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/golden-no-assistants.code-workspace +13 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/notebooks/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/pyproject.toml +11 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/scaffold.py +8 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/settings/ai.yml +4 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/settings/author.yml +4 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/settings/connections.yml +7 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/settings/data.yml +1 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/settings/git.yml +6 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/settings/quarto.yml +22 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/settings/scaffold.yml +5 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/settings.yml +32 -0
- framework_py-0.1.0.dev0/tests/golden/no-assistants/layers.json +23 -0
- framework_py-0.1.0.dev0/tests/golden/presentation/expected/.claude/skills/framework-data/SKILL.md +47 -0
- framework_py-0.1.0.dev0/tests/golden/presentation/expected/.claude/skills/framework-outputs/SKILL.md +68 -0
- framework_py-0.1.0.dev0/tests/golden/presentation/expected/.claude/skills/framework-packages/SKILL.md +33 -0
- framework_py-0.1.0.dev0/tests/golden/presentation/expected/.claude/skills/framework-workflow/SKILL.md +58 -0
- framework_py-0.1.0.dev0/tests/golden/presentation/expected/.env +12 -0
- framework_py-0.1.0.dev0/tests/golden/presentation/expected/.framework/spec.json +116 -0
- framework_py-0.1.0.dev0/tests/golden/presentation/expected/.gitignore +114 -0
- framework_py-0.1.0.dev0/tests/golden/presentation/expected/AGENTS.md +8 -0
- framework_py-0.1.0.dev0/tests/golden/presentation/expected/CLAUDE.md +1 -0
- framework_py-0.1.0.dev0/tests/golden/presentation/expected/_quarto.yml +18 -0
- framework_py-0.1.0.dev0/tests/golden/presentation/expected/golden-presentation.code-workspace +13 -0
- framework_py-0.1.0.dev0/tests/golden/presentation/expected/presentation.qmd +34 -0
- framework_py-0.1.0.dev0/tests/golden/presentation/expected/pyproject.toml +11 -0
- framework_py-0.1.0.dev0/tests/golden/presentation/expected/scaffold.py +8 -0
- framework_py-0.1.0.dev0/tests/golden/presentation/expected/settings.yml +62 -0
- framework_py-0.1.0.dev0/tests/golden/presentation/layers.json +14 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/.claude/skills/framework-data/SKILL.md +47 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/.claude/skills/framework-outputs/SKILL.md +68 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/.claude/skills/framework-packages/SKILL.md +33 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/.claude/skills/framework-workflow/SKILL.md +58 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/.env +12 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/.framework/spec.json +130 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/.gitignore +108 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/AGENTS.md +8 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/CLAUDE.md +1 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/docs/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/golden-project.code-workspace +13 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/notebooks/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/pyproject.toml +11 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/scaffold.py +8 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/settings/ai.yml +5 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/settings/author.yml +4 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/settings/connections.yml +7 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/settings/data.yml +1 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/settings/git.yml +6 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/settings/quarto.yml +22 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/settings/scaffold.yml +5 -0
- framework_py-0.1.0.dev0/tests/golden/project/expected/settings.yml +32 -0
- framework_py-0.1.0.dev0/tests/golden/project/layers.json +14 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/.claude/settings.json +22 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/.claude/skills/framework-data/SKILL.md +47 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/.claude/skills/framework-outputs/SKILL.md +68 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/.claude/skills/framework-packages/SKILL.md +33 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/.claude/skills/framework-sensitive-data/SKILL.md +38 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/.claude/skills/framework-workflow/SKILL.md +58 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/.env +12 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/.framework/spec.json +140 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/.gitignore +139 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/AGENTS.md +10 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/CLAUDE.md +1 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/docs/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/golden-project-sensitive.code-workspace +13 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/notebooks/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/pyproject.toml +11 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/scaffold.py +8 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/settings/ai.yml +5 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/settings/author.yml +4 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/settings/connections.yml +7 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/settings/data.yml +1 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/settings/git.yml +6 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/settings/quarto.yml +22 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/settings/scaffold.yml +5 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/settings.yml +39 -0
- framework_py-0.1.0.dev0/tests/golden/project-sensitive/layers.json +14 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/.agents/skills/framework-data/SKILL.md +47 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/.agents/skills/framework-outputs/SKILL.md +68 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/.agents/skills/framework-packages/SKILL.md +33 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/.agents/skills/framework-workflow/SKILL.md +58 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/.env +12 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/.framework/spec.json +129 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/.github/copilot-instructions.md +5 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/.gitignore +108 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/AGENTS.md +8 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/docs/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/golden-removals-and-assistants.code-workspace +13 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/notebooks/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/pyproject.toml +11 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/scaffold.py +8 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/settings/ai.yml +6 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/settings/author.yml +4 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/settings/connections.yml +7 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/settings/data.yml +1 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/settings/git.yml +6 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/settings/quarto.yml +22 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/settings/scaffold.yml +5 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/settings.yml +30 -0
- framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/layers.json +29 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/.claude/settings.json +16 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/.claude/skills/framework-data/SKILL.md +47 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/.claude/skills/framework-outputs/SKILL.md +68 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/.claude/skills/framework-packages/SKILL.md +33 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/.claude/skills/framework-sensitive-data/SKILL.md +38 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/.claude/skills/framework-workflow/SKILL.md +58 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/.env +12 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/.framework/spec.json +133 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/.gitignore +143 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/AGENTS.md +10 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/CLAUDE.md +1 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/docs/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/golden-sensitive-facet.code-workspace +13 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/notebooks/_quarto.yml +16 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/pyproject.toml +11 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/scaffold.py +8 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/settings/ai.yml +5 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/settings/author.yml +4 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/settings/connections.yml +7 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/settings/data.yml +1 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/settings/git.yml +6 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/settings/quarto.yml +22 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/settings/scaffold.yml +5 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/settings.yml +32 -0
- framework_py-0.1.0.dev0/tests/golden/sensitive-facet/layers.json +26 -0
- framework_py-0.1.0.dev0/tests/integration/compose.yml +125 -0
- framework_py-0.1.0.dev0/tests/integration/mariadb/init.sql +42 -0
- framework_py-0.1.0.dev0/tests/integration/mysql/init.sql +42 -0
- framework_py-0.1.0.dev0/tests/integration/postgres/init.sql +50 -0
- framework_py-0.1.0.dev0/tests/integration/sqlserver/init.sql +50 -0
- framework_py-0.1.0.dev0/tests/integration/test_servers.py +227 -0
- framework_py-0.1.0.dev0/tests/shared/NAMESPACE +155 -0
- framework_py-0.1.0.dev0/tests/shared/conformance/README.md +34 -0
- framework_py-0.1.0.dev0/tests/shared/conformance/merge/atomic-entries.json +82 -0
- framework_py-0.1.0.dev0/tests/shared/conformance/merge/conflicts-and-labels.json +47 -0
- framework_py-0.1.0.dev0/tests/shared/conformance/merge/empty-sections.json +35 -0
- framework_py-0.1.0.dev0/tests/shared/conformance/merge/gitignore-and-assistants.json +72 -0
- framework_py-0.1.0.dev0/tests/shared/conformance/merge/maps-and-null-removal.json +104 -0
- framework_py-0.1.0.dev0/tests/test_bootstrap.py +146 -0
- framework_py-0.1.0.dev0/tests/test_cache.py +141 -0
- framework_py-0.1.0.dev0/tests/test_catalog.py +93 -0
- framework_py-0.1.0.dev0/tests/test_cloud.py +434 -0
- framework_py-0.1.0.dev0/tests/test_config_home.py +112 -0
- framework_py-0.1.0.dev0/tests/test_conformance.py +42 -0
- framework_py-0.1.0.dev0/tests/test_connections.py +240 -0
- framework_py-0.1.0.dev0/tests/test_create.py +331 -0
- framework_py-0.1.0.dev0/tests/test_data.py +190 -0
- framework_py-0.1.0.dev0/tests/test_db.py +85 -0
- framework_py-0.1.0.dev0/tests/test_dotenv.py +68 -0
- framework_py-0.1.0.dev0/tests/test_global_config.py +86 -0
- framework_py-0.1.0.dev0/tests/test_hooks.py +194 -0
- framework_py-0.1.0.dev0/tests/test_notebooks.py +127 -0
- framework_py-0.1.0.dev0/tests/test_outputs.py +118 -0
- framework_py-0.1.0.dev0/tests/test_package.py +49 -0
- framework_py-0.1.0.dev0/tests/test_packages.py +143 -0
- framework_py-0.1.0.dev0/tests/test_r_compat.py +187 -0
- framework_py-0.1.0.dev0/tests/test_r_live.py +107 -0
- framework_py-0.1.0.dev0/tests/test_scaffold.py +135 -0
- framework_py-0.1.0.dev0/tests/test_secretservice.py +107 -0
- framework_py-0.1.0.dev0/tests/test_security.py +157 -0
- framework_py-0.1.0.dev0/tests/test_settings.py +212 -0
- framework_py-0.1.0.dev0/tests/test_storage.py +170 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Erik Westlund
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: framework-py
|
|
3
|
+
Version: 0.1.0.dev0
|
|
4
|
+
Summary: Structured data science projects: a data catalog, integrity tracking, caching, outputs, and AI guardrails
|
|
5
|
+
Project-URL: Homepage, https://framework.table1.org
|
|
6
|
+
Project-URL: Source, https://github.com/frameworktools/framework-py
|
|
7
|
+
Project-URL: Issues, https://github.com/frameworktools/framework-py/issues
|
|
8
|
+
Author-email: Erik Westlund <erik@table1.org>
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Classifier: Development Status :: 2 - Pre-Alpha
|
|
12
|
+
Classifier: Intended Audience :: Science/Research
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering
|
|
21
|
+
Classifier: Typing :: Typed
|
|
22
|
+
Requires-Python: >=3.11
|
|
23
|
+
Requires-Dist: httpx>=0.27
|
|
24
|
+
Requires-Dist: jsonschema>=4.18
|
|
25
|
+
Requires-Dist: keyring>=25
|
|
26
|
+
Requires-Dist: pandas>=2.2
|
|
27
|
+
Requires-Dist: pyarrow>=16
|
|
28
|
+
Requires-Dist: pyyaml>=6.0
|
|
29
|
+
Requires-Dist: secretstorage>=3.2; sys_platform == 'linux'
|
|
30
|
+
Provides-Extra: duckdb
|
|
31
|
+
Requires-Dist: duckdb>=1.0; extra == 'duckdb'
|
|
32
|
+
Provides-Extra: excel
|
|
33
|
+
Requires-Dist: openpyxl>=3.1; extra == 'excel'
|
|
34
|
+
Provides-Extra: mysql
|
|
35
|
+
Requires-Dist: pymysql>=1.1; extra == 'mysql'
|
|
36
|
+
Provides-Extra: postgres
|
|
37
|
+
Requires-Dist: psycopg[binary]>=3.1; extra == 'postgres'
|
|
38
|
+
Provides-Extra: s3
|
|
39
|
+
Requires-Dist: boto3>=1.34; extra == 's3'
|
|
40
|
+
Provides-Extra: sas
|
|
41
|
+
Requires-Dist: pyreadstat>=1.2; extra == 'sas'
|
|
42
|
+
Provides-Extra: spss
|
|
43
|
+
Requires-Dist: pyreadstat>=1.2; extra == 'spss'
|
|
44
|
+
Provides-Extra: sqlserver
|
|
45
|
+
Requires-Dist: pyodbc>=5.0; extra == 'sqlserver'
|
|
46
|
+
Description-Content-Type: text/markdown
|
|
47
|
+
|
|
48
|
+
# framework-py
|
|
49
|
+
|
|
50
|
+
Framework for Python: structured data science projects with a data catalog,
|
|
51
|
+
data integrity tracking, caching, saved outputs, and guardrails for AI coding
|
|
52
|
+
assistants.
|
|
53
|
+
|
|
54
|
+
framework-py is the Python implementation of
|
|
55
|
+
[Framework](https://framework.table1.org). It reads and writes the same
|
|
56
|
+
project files as the R package (`settings.yml`, the data catalog, and
|
|
57
|
+
`framework.db`), so either language can work with a project's data. It works
|
|
58
|
+
without Framework Cloud and without the `fw` command-line tool.
|
|
59
|
+
|
|
60
|
+
Status: in development. The plan is in [docs/plan.md](docs/plan.md).
|
|
61
|
+
|
|
62
|
+
## Install
|
|
63
|
+
|
|
64
|
+
```sh
|
|
65
|
+
uv add framework-py
|
|
66
|
+
# or
|
|
67
|
+
pip install framework-py
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Optional extras add database drivers, S3 storage, and more file formats:
|
|
71
|
+
`postgres`, `mysql`, `duckdb`, `sqlserver`, `s3`, `excel`, `spss`, and `sas`
|
|
72
|
+
(version 8 SAS transport files).
|
|
73
|
+
|
|
74
|
+
```sh
|
|
75
|
+
uv add "framework-py[postgres,s3]"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Use
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
import framework as fw
|
|
82
|
+
|
|
83
|
+
fw.settings("directories.notebooks")
|
|
84
|
+
info = fw.data_info("inputs.raw.survey")
|
|
85
|
+
fw.data_list()
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
After cloning a project, prepare it with:
|
|
89
|
+
|
|
90
|
+
```sh
|
|
91
|
+
uv run python -m framework bootstrap
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Development
|
|
95
|
+
|
|
96
|
+
```sh
|
|
97
|
+
uv sync
|
|
98
|
+
uv run pytest
|
|
99
|
+
uv run ruff check && uv run ruff format --check
|
|
100
|
+
uv run mypy
|
|
101
|
+
uv run python scripts/check_parity.py
|
|
102
|
+
uv run python scripts/sync_assets.py --check
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Shared files (JSON Schemas, the `framework.db` schema, conformance fixtures,
|
|
106
|
+
and the R export list) are copied from the R package with
|
|
107
|
+
`scripts/sync_assets.py`. Change them in the R repository, then copy them
|
|
108
|
+
again.
|
|
109
|
+
|
|
110
|
+
`parity.toml` maps every function the R package exports to its Python
|
|
111
|
+
equivalent, or gives the reason there is none.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# framework-py
|
|
2
|
+
|
|
3
|
+
Framework for Python: structured data science projects with a data catalog,
|
|
4
|
+
data integrity tracking, caching, saved outputs, and guardrails for AI coding
|
|
5
|
+
assistants.
|
|
6
|
+
|
|
7
|
+
framework-py is the Python implementation of
|
|
8
|
+
[Framework](https://framework.table1.org). It reads and writes the same
|
|
9
|
+
project files as the R package (`settings.yml`, the data catalog, and
|
|
10
|
+
`framework.db`), so either language can work with a project's data. It works
|
|
11
|
+
without Framework Cloud and without the `fw` command-line tool.
|
|
12
|
+
|
|
13
|
+
Status: in development. The plan is in [docs/plan.md](docs/plan.md).
|
|
14
|
+
|
|
15
|
+
## Install
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
uv add framework-py
|
|
19
|
+
# or
|
|
20
|
+
pip install framework-py
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Optional extras add database drivers, S3 storage, and more file formats:
|
|
24
|
+
`postgres`, `mysql`, `duckdb`, `sqlserver`, `s3`, `excel`, `spss`, and `sas`
|
|
25
|
+
(version 8 SAS transport files).
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
uv add "framework-py[postgres,s3]"
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Use
|
|
32
|
+
|
|
33
|
+
```python
|
|
34
|
+
import framework as fw
|
|
35
|
+
|
|
36
|
+
fw.settings("directories.notebooks")
|
|
37
|
+
info = fw.data_info("inputs.raw.survey")
|
|
38
|
+
fw.data_list()
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
After cloning a project, prepare it with:
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
uv run python -m framework bootstrap
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Development
|
|
48
|
+
|
|
49
|
+
```sh
|
|
50
|
+
uv sync
|
|
51
|
+
uv run pytest
|
|
52
|
+
uv run ruff check && uv run ruff format --check
|
|
53
|
+
uv run mypy
|
|
54
|
+
uv run python scripts/check_parity.py
|
|
55
|
+
uv run python scripts/sync_assets.py --check
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Shared files (JSON Schemas, the `framework.db` schema, conformance fixtures,
|
|
59
|
+
and the R export list) are copied from the R package with
|
|
60
|
+
`scripts/sync_assets.py`. Change them in the R repository, then copy them
|
|
61
|
+
again.
|
|
62
|
+
|
|
63
|
+
`parity.toml` maps every function the R package exports to its Python
|
|
64
|
+
equivalent, or gives the reason there is none.
|