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.
Files changed (335) hide show
  1. framework_py-0.1.0.dev0/.gitignore +13 -0
  2. framework_py-0.1.0.dev0/LICENSE +21 -0
  3. framework_py-0.1.0.dev0/PKG-INFO +111 -0
  4. framework_py-0.1.0.dev0/README.md +64 -0
  5. framework_py-0.1.0.dev0/parity.toml +552 -0
  6. framework_py-0.1.0.dev0/pyproject.toml +98 -0
  7. framework_py-0.1.0.dev0/scripts/__init__.py +0 -0
  8. framework_py-0.1.0.dev0/scripts/check_parity.py +98 -0
  9. framework_py-0.1.0.dev0/scripts/make_golden_trees.py +59 -0
  10. framework_py-0.1.0.dev0/scripts/make_r_fixtures.R +196 -0
  11. framework_py-0.1.0.dev0/scripts/sync_assets.py +173 -0
  12. framework_py-0.1.0.dev0/src/framework/__init__.py +250 -0
  13. framework_py-0.1.0.dev0/src/framework/__main__.py +89 -0
  14. framework_py-0.1.0.dev0/src/framework/_assets/hooks/pre-commit +59 -0
  15. framework_py-0.1.0.dev0/src/framework/_assets/init.sql +63 -0
  16. framework_py-0.1.0.dev0/src/framework/_assets/schema/layer.v1.json +605 -0
  17. framework_py-0.1.0.dev0/src/framework/_assets/schema/layers.v1.json +791 -0
  18. framework_py-0.1.0.dev0/src/framework/_assets/schema/spec.v1.json +604 -0
  19. framework_py-0.1.0.dev0/src/framework/_log.py +29 -0
  20. framework_py-0.1.0.dev0/src/framework/_paths.py +45 -0
  21. framework_py-0.1.0.dev0/src/framework/_secretservice.py +69 -0
  22. framework_py-0.1.0.dev0/src/framework/_time.py +11 -0
  23. framework_py-0.1.0.dev0/src/framework/_wincred.py +105 -0
  24. framework_py-0.1.0.dev0/src/framework/_yaml.py +90 -0
  25. framework_py-0.1.0.dev0/src/framework/ai.py +204 -0
  26. framework_py-0.1.0.dev0/src/framework/bootstrap.py +206 -0
  27. framework_py-0.1.0.dev0/src/framework/cache.py +335 -0
  28. framework_py-0.1.0.dev0/src/framework/catalog.py +193 -0
  29. framework_py-0.1.0.dev0/src/framework/cloud.py +899 -0
  30. framework_py-0.1.0.dev0/src/framework/config_home.py +194 -0
  31. framework_py-0.1.0.dev0/src/framework/connections.py +442 -0
  32. framework_py-0.1.0.dev0/src/framework/console.py +41 -0
  33. framework_py-0.1.0.dev0/src/framework/create.py +579 -0
  34. framework_py-0.1.0.dev0/src/framework/data.py +519 -0
  35. framework_py-0.1.0.dev0/src/framework/db.py +222 -0
  36. framework_py-0.1.0.dev0/src/framework/dotenv.py +79 -0
  37. framework_py-0.1.0.dev0/src/framework/errors.py +39 -0
  38. framework_py-0.1.0.dev0/src/framework/global_config.py +238 -0
  39. framework_py-0.1.0.dev0/src/framework/hooks.py +364 -0
  40. framework_py-0.1.0.dev0/src/framework/integrity.py +22 -0
  41. framework_py-0.1.0.dev0/src/framework/notebooks.py +384 -0
  42. framework_py-0.1.0.dev0/src/framework/outputs.py +324 -0
  43. framework_py-0.1.0.dev0/src/framework/packages.py +276 -0
  44. framework_py-0.1.0.dev0/src/framework/project.py +52 -0
  45. framework_py-0.1.0.dev0/src/framework/py.typed +0 -0
  46. framework_py-0.1.0.dev0/src/framework/quarto.py +163 -0
  47. framework_py-0.1.0.dev0/src/framework/scaffold.py +269 -0
  48. framework_py-0.1.0.dev0/src/framework/scratch.py +108 -0
  49. framework_py-0.1.0.dev0/src/framework/security.py +646 -0
  50. framework_py-0.1.0.dev0/src/framework/settings.py +439 -0
  51. framework_py-0.1.0.dev0/src/framework/spec/__init__.py +0 -0
  52. framework_py-0.1.0.dev0/src/framework/spec/check.py +211 -0
  53. framework_py-0.1.0.dev0/src/framework/spec/merge.py +195 -0
  54. framework_py-0.1.0.dev0/src/framework/spec/resolve.py +254 -0
  55. framework_py-0.1.0.dev0/src/framework/storage.py +516 -0
  56. framework_py-0.1.0.dev0/src/framework/templates/defaults.yml +144 -0
  57. framework_py-0.1.0.dev0/src/framework/templates/gitignore/course +120 -0
  58. framework_py-0.1.0.dev0/src/framework/templates/gitignore/presentation +114 -0
  59. framework_py-0.1.0.dev0/src/framework/templates/gitignore/project +108 -0
  60. framework_py-0.1.0.dev0/src/framework/templates/gitignore/sensitive +139 -0
  61. framework_py-0.1.0.dev0/src/framework/templates/skills/framework-data/SKILL.md +47 -0
  62. framework_py-0.1.0.dev0/src/framework/templates/skills/framework-outputs/SKILL.md +68 -0
  63. framework_py-0.1.0.dev0/src/framework/templates/skills/framework-packages/SKILL.md +33 -0
  64. framework_py-0.1.0.dev0/src/framework/templates/skills/framework-sensitive-data/SKILL.md +38 -0
  65. framework_py-0.1.0.dev0/src/framework/templates/skills/framework-workflow/SKILL.md +58 -0
  66. framework_py-0.1.0.dev0/src/framework/templates/stubs/notebook-default.ipynb +34 -0
  67. framework_py-0.1.0.dev0/src/framework/templates/stubs/notebook-default.qmd +43 -0
  68. framework_py-0.1.0.dev0/src/framework/templates/stubs/notebook-minimal.qmd +15 -0
  69. framework_py-0.1.0.dev0/src/framework/templates/stubs/notebook-revealjs.qmd +34 -0
  70. framework_py-0.1.0.dev0/src/framework/templates/stubs/script-default.py +18 -0
  71. framework_py-0.1.0.dev0/tests/__init__.py +0 -0
  72. framework_py-0.1.0.dev0/tests/conftest.py +107 -0
  73. framework_py-0.1.0.dev0/tests/fixtures/r_project/.claude/skills/framework-data/SKILL.md +55 -0
  74. framework_py-0.1.0.dev0/tests/fixtures/r_project/.claude/skills/framework-outputs/SKILL.md +75 -0
  75. framework_py-0.1.0.dev0/tests/fixtures/r_project/.claude/skills/framework-packages/SKILL.md +52 -0
  76. framework_py-0.1.0.dev0/tests/fixtures/r_project/.claude/skills/framework-workflow/SKILL.md +52 -0
  77. framework_py-0.1.0.dev0/tests/fixtures/r_project/.env +13 -0
  78. framework_py-0.1.0.dev0/tests/fixtures/r_project/.framework/spec.json +166 -0
  79. framework_py-0.1.0.dev0/tests/fixtures/r_project/.gitignore +126 -0
  80. framework_py-0.1.0.dev0/tests/fixtures/r_project/AGENTS.md +8 -0
  81. framework_py-0.1.0.dev0/tests/fixtures/r_project/CLAUDE.md +1 -0
  82. framework_py-0.1.0.dev0/tests/fixtures/r_project/_quarto.yml +16 -0
  83. framework_py-0.1.0.dev0/tests/fixtures/r_project/docs/_quarto.yml +16 -0
  84. framework_py-0.1.0.dev0/tests/fixtures/r_project/fixture-study.Rproj +13 -0
  85. framework_py-0.1.0.dev0/tests/fixtures/r_project/fixture-study.code-workspace +16 -0
  86. framework_py-0.1.0.dev0/tests/fixtures/r_project/framework.db +0 -0
  87. framework_py-0.1.0.dev0/tests/fixtures/r_project/inputs/intermediate/r_clean.csv +4 -0
  88. framework_py-0.1.0.dev0/tests/fixtures/r_project/inputs/private/ids.csv +2 -0
  89. framework_py-0.1.0.dev0/tests/fixtures/r_project/inputs/raw/survey.csv +3 -0
  90. framework_py-0.1.0.dev0/tests/fixtures/r_project/inputs/raw/visits.tsv +2 -0
  91. framework_py-0.1.0.dev0/tests/fixtures/r_project/inputs/reference/test.dta +0 -0
  92. framework_py-0.1.0.dev0/tests/fixtures/r_project/inputs/reference/test.sav +0 -0
  93. framework_py-0.1.0.dev0/tests/fixtures/r_project/inputs/reference/test.xpt +0 -0
  94. framework_py-0.1.0.dev0/tests/fixtures/r_project/notebooks/_quarto.yml +16 -0
  95. framework_py-0.1.0.dev0/tests/fixtures/r_project/outputs/cache/r_value.rds +0 -0
  96. framework_py-0.1.0.dev0/tests/fixtures/r_project/outputs/tables/r_summary.csv +4 -0
  97. framework_py-0.1.0.dev0/tests/fixtures/r_project/scaffold.R +11 -0
  98. framework_py-0.1.0.dev0/tests/fixtures/r_project/settings/ai.yml +5 -0
  99. framework_py-0.1.0.dev0/tests/fixtures/r_project/settings/author.yml +4 -0
  100. framework_py-0.1.0.dev0/tests/fixtures/r_project/settings/connections.yml +7 -0
  101. framework_py-0.1.0.dev0/tests/fixtures/r_project/settings/data.yml +22 -0
  102. framework_py-0.1.0.dev0/tests/fixtures/r_project/settings/git.yml +7 -0
  103. framework_py-0.1.0.dev0/tests/fixtures/r_project/settings/packages.yml +27 -0
  104. framework_py-0.1.0.dev0/tests/fixtures/r_project/settings/quarto.yml +22 -0
  105. framework_py-0.1.0.dev0/tests/fixtures/r_project/settings/scaffold.yml +7 -0
  106. framework_py-0.1.0.dev0/tests/fixtures/r_project/settings.yml +59 -0
  107. framework_py-0.1.0.dev0/tests/fixtures/r_project.expected.json +633 -0
  108. framework_py-0.1.0.dev0/tests/golden/bare/expected/.framework/spec.json +97 -0
  109. framework_py-0.1.0.dev0/tests/golden/bare/expected/.gitignore +108 -0
  110. framework_py-0.1.0.dev0/tests/golden/bare/expected/pyproject.toml +11 -0
  111. framework_py-0.1.0.dev0/tests/golden/bare/expected/settings.yml +57 -0
  112. framework_py-0.1.0.dev0/tests/golden/bare/layers.json +14 -0
  113. framework_py-0.1.0.dev0/tests/golden/course/expected/.claude/skills/framework-data/SKILL.md +47 -0
  114. framework_py-0.1.0.dev0/tests/golden/course/expected/.claude/skills/framework-outputs/SKILL.md +68 -0
  115. framework_py-0.1.0.dev0/tests/golden/course/expected/.claude/skills/framework-packages/SKILL.md +33 -0
  116. framework_py-0.1.0.dev0/tests/golden/course/expected/.claude/skills/framework-workflow/SKILL.md +58 -0
  117. framework_py-0.1.0.dev0/tests/golden/course/expected/.env +12 -0
  118. framework_py-0.1.0.dev0/tests/golden/course/expected/.framework/spec.json +124 -0
  119. framework_py-0.1.0.dev0/tests/golden/course/expected/.gitignore +120 -0
  120. framework_py-0.1.0.dev0/tests/golden/course/expected/AGENTS.md +8 -0
  121. framework_py-0.1.0.dev0/tests/golden/course/expected/CLAUDE.md +1 -0
  122. framework_py-0.1.0.dev0/tests/golden/course/expected/_quarto.yml +16 -0
  123. framework_py-0.1.0.dev0/tests/golden/course/expected/assignments/_quarto.yml +16 -0
  124. framework_py-0.1.0.dev0/tests/golden/course/expected/course_docs/_quarto.yml +16 -0
  125. framework_py-0.1.0.dev0/tests/golden/course/expected/golden-course.code-workspace +13 -0
  126. framework_py-0.1.0.dev0/tests/golden/course/expected/modules/_quarto.yml +16 -0
  127. framework_py-0.1.0.dev0/tests/golden/course/expected/pyproject.toml +11 -0
  128. framework_py-0.1.0.dev0/tests/golden/course/expected/scaffold.py +8 -0
  129. framework_py-0.1.0.dev0/tests/golden/course/expected/settings.yml +69 -0
  130. framework_py-0.1.0.dev0/tests/golden/course/expected/slides/_quarto.yml +18 -0
  131. framework_py-0.1.0.dev0/tests/golden/course/layers.json +14 -0
  132. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/.claude/skills/framework-data/SKILL.md +47 -0
  133. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/.claude/skills/framework-outputs/SKILL.md +68 -0
  134. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/.claude/skills/framework-packages/SKILL.md +33 -0
  135. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/.claude/skills/framework-workflow/SKILL.md +58 -0
  136. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/.claude/skills/study-protocol/SKILL.md +6 -0
  137. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/.claude/skills/study-protocol/references/consort.md +1 -0
  138. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/.env +14 -0
  139. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/.framework/spec.json +168 -0
  140. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/.gitignore +111 -0
  141. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/AGENTS.md +8 -0
  142. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/CLAUDE.md +1 -0
  143. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/README.md +5 -0
  144. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/_quarto.yml +16 -0
  145. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/docs/_quarto.yml +16 -0
  146. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/golden-files-and-skills.code-workspace +13 -0
  147. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/notebooks/_quarto.yml +16 -0
  148. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/notes.md +1 -0
  149. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/pyproject.toml +13 -0
  150. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/scaffold.py +8 -0
  151. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/settings/ai.yml +5 -0
  152. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/settings/author.yml +5 -0
  153. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/settings/connections.yml +7 -0
  154. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/settings/data.yml +1 -0
  155. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/settings/git.yml +6 -0
  156. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/settings/quarto.yml +22 -0
  157. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/settings/scaffold.yml +5 -0
  158. framework_py-0.1.0.dev0/tests/golden/files-and-skills/expected/settings.yml +36 -0
  159. framework_py-0.1.0.dev0/tests/golden/files-and-skills/layers.json +80 -0
  160. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/.agents/skills/framework-data/SKILL.md +47 -0
  161. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/.agents/skills/framework-outputs/SKILL.md +68 -0
  162. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/.agents/skills/framework-packages/SKILL.md +33 -0
  163. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/.agents/skills/framework-workflow/SKILL.md +58 -0
  164. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/.env +12 -0
  165. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/.framework/spec.json +128 -0
  166. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/.gitignore +108 -0
  167. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/AGENTS.md +8 -0
  168. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/_quarto.yml +16 -0
  169. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/docs/_quarto.yml +16 -0
  170. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/golden-no-assistants.code-workspace +13 -0
  171. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/notebooks/_quarto.yml +16 -0
  172. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/pyproject.toml +11 -0
  173. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/scaffold.py +8 -0
  174. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/settings/ai.yml +4 -0
  175. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/settings/author.yml +4 -0
  176. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/settings/connections.yml +7 -0
  177. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/settings/data.yml +1 -0
  178. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/settings/git.yml +6 -0
  179. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/settings/quarto.yml +22 -0
  180. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/settings/scaffold.yml +5 -0
  181. framework_py-0.1.0.dev0/tests/golden/no-assistants/expected/settings.yml +32 -0
  182. framework_py-0.1.0.dev0/tests/golden/no-assistants/layers.json +23 -0
  183. framework_py-0.1.0.dev0/tests/golden/presentation/expected/.claude/skills/framework-data/SKILL.md +47 -0
  184. framework_py-0.1.0.dev0/tests/golden/presentation/expected/.claude/skills/framework-outputs/SKILL.md +68 -0
  185. framework_py-0.1.0.dev0/tests/golden/presentation/expected/.claude/skills/framework-packages/SKILL.md +33 -0
  186. framework_py-0.1.0.dev0/tests/golden/presentation/expected/.claude/skills/framework-workflow/SKILL.md +58 -0
  187. framework_py-0.1.0.dev0/tests/golden/presentation/expected/.env +12 -0
  188. framework_py-0.1.0.dev0/tests/golden/presentation/expected/.framework/spec.json +116 -0
  189. framework_py-0.1.0.dev0/tests/golden/presentation/expected/.gitignore +114 -0
  190. framework_py-0.1.0.dev0/tests/golden/presentation/expected/AGENTS.md +8 -0
  191. framework_py-0.1.0.dev0/tests/golden/presentation/expected/CLAUDE.md +1 -0
  192. framework_py-0.1.0.dev0/tests/golden/presentation/expected/_quarto.yml +18 -0
  193. framework_py-0.1.0.dev0/tests/golden/presentation/expected/golden-presentation.code-workspace +13 -0
  194. framework_py-0.1.0.dev0/tests/golden/presentation/expected/presentation.qmd +34 -0
  195. framework_py-0.1.0.dev0/tests/golden/presentation/expected/pyproject.toml +11 -0
  196. framework_py-0.1.0.dev0/tests/golden/presentation/expected/scaffold.py +8 -0
  197. framework_py-0.1.0.dev0/tests/golden/presentation/expected/settings.yml +62 -0
  198. framework_py-0.1.0.dev0/tests/golden/presentation/layers.json +14 -0
  199. framework_py-0.1.0.dev0/tests/golden/project/expected/.claude/skills/framework-data/SKILL.md +47 -0
  200. framework_py-0.1.0.dev0/tests/golden/project/expected/.claude/skills/framework-outputs/SKILL.md +68 -0
  201. framework_py-0.1.0.dev0/tests/golden/project/expected/.claude/skills/framework-packages/SKILL.md +33 -0
  202. framework_py-0.1.0.dev0/tests/golden/project/expected/.claude/skills/framework-workflow/SKILL.md +58 -0
  203. framework_py-0.1.0.dev0/tests/golden/project/expected/.env +12 -0
  204. framework_py-0.1.0.dev0/tests/golden/project/expected/.framework/spec.json +130 -0
  205. framework_py-0.1.0.dev0/tests/golden/project/expected/.gitignore +108 -0
  206. framework_py-0.1.0.dev0/tests/golden/project/expected/AGENTS.md +8 -0
  207. framework_py-0.1.0.dev0/tests/golden/project/expected/CLAUDE.md +1 -0
  208. framework_py-0.1.0.dev0/tests/golden/project/expected/_quarto.yml +16 -0
  209. framework_py-0.1.0.dev0/tests/golden/project/expected/docs/_quarto.yml +16 -0
  210. framework_py-0.1.0.dev0/tests/golden/project/expected/golden-project.code-workspace +13 -0
  211. framework_py-0.1.0.dev0/tests/golden/project/expected/notebooks/_quarto.yml +16 -0
  212. framework_py-0.1.0.dev0/tests/golden/project/expected/pyproject.toml +11 -0
  213. framework_py-0.1.0.dev0/tests/golden/project/expected/scaffold.py +8 -0
  214. framework_py-0.1.0.dev0/tests/golden/project/expected/settings/ai.yml +5 -0
  215. framework_py-0.1.0.dev0/tests/golden/project/expected/settings/author.yml +4 -0
  216. framework_py-0.1.0.dev0/tests/golden/project/expected/settings/connections.yml +7 -0
  217. framework_py-0.1.0.dev0/tests/golden/project/expected/settings/data.yml +1 -0
  218. framework_py-0.1.0.dev0/tests/golden/project/expected/settings/git.yml +6 -0
  219. framework_py-0.1.0.dev0/tests/golden/project/expected/settings/quarto.yml +22 -0
  220. framework_py-0.1.0.dev0/tests/golden/project/expected/settings/scaffold.yml +5 -0
  221. framework_py-0.1.0.dev0/tests/golden/project/expected/settings.yml +32 -0
  222. framework_py-0.1.0.dev0/tests/golden/project/layers.json +14 -0
  223. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/.claude/settings.json +22 -0
  224. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/.claude/skills/framework-data/SKILL.md +47 -0
  225. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/.claude/skills/framework-outputs/SKILL.md +68 -0
  226. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/.claude/skills/framework-packages/SKILL.md +33 -0
  227. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/.claude/skills/framework-sensitive-data/SKILL.md +38 -0
  228. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/.claude/skills/framework-workflow/SKILL.md +58 -0
  229. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/.env +12 -0
  230. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/.framework/spec.json +140 -0
  231. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/.gitignore +139 -0
  232. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/AGENTS.md +10 -0
  233. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/CLAUDE.md +1 -0
  234. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/_quarto.yml +16 -0
  235. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/docs/_quarto.yml +16 -0
  236. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/golden-project-sensitive.code-workspace +13 -0
  237. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/notebooks/_quarto.yml +16 -0
  238. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/pyproject.toml +11 -0
  239. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/scaffold.py +8 -0
  240. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/settings/ai.yml +5 -0
  241. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/settings/author.yml +4 -0
  242. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/settings/connections.yml +7 -0
  243. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/settings/data.yml +1 -0
  244. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/settings/git.yml +6 -0
  245. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/settings/quarto.yml +22 -0
  246. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/settings/scaffold.yml +5 -0
  247. framework_py-0.1.0.dev0/tests/golden/project-sensitive/expected/settings.yml +39 -0
  248. framework_py-0.1.0.dev0/tests/golden/project-sensitive/layers.json +14 -0
  249. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/.agents/skills/framework-data/SKILL.md +47 -0
  250. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/.agents/skills/framework-outputs/SKILL.md +68 -0
  251. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/.agents/skills/framework-packages/SKILL.md +33 -0
  252. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/.agents/skills/framework-workflow/SKILL.md +58 -0
  253. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/.env +12 -0
  254. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/.framework/spec.json +129 -0
  255. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/.github/copilot-instructions.md +5 -0
  256. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/.gitignore +108 -0
  257. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/AGENTS.md +8 -0
  258. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/_quarto.yml +16 -0
  259. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/docs/_quarto.yml +16 -0
  260. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/golden-removals-and-assistants.code-workspace +13 -0
  261. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/notebooks/_quarto.yml +16 -0
  262. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/pyproject.toml +11 -0
  263. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/scaffold.py +8 -0
  264. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/settings/ai.yml +6 -0
  265. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/settings/author.yml +4 -0
  266. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/settings/connections.yml +7 -0
  267. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/settings/data.yml +1 -0
  268. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/settings/git.yml +6 -0
  269. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/settings/quarto.yml +22 -0
  270. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/settings/scaffold.yml +5 -0
  271. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/expected/settings.yml +30 -0
  272. framework_py-0.1.0.dev0/tests/golden/removals-and-assistants/layers.json +29 -0
  273. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/.claude/settings.json +16 -0
  274. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/.claude/skills/framework-data/SKILL.md +47 -0
  275. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/.claude/skills/framework-outputs/SKILL.md +68 -0
  276. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/.claude/skills/framework-packages/SKILL.md +33 -0
  277. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/.claude/skills/framework-sensitive-data/SKILL.md +38 -0
  278. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/.claude/skills/framework-workflow/SKILL.md +58 -0
  279. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/.env +12 -0
  280. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/.framework/spec.json +133 -0
  281. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/.gitignore +143 -0
  282. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/AGENTS.md +10 -0
  283. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/CLAUDE.md +1 -0
  284. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/_quarto.yml +16 -0
  285. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/docs/_quarto.yml +16 -0
  286. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/golden-sensitive-facet.code-workspace +13 -0
  287. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/notebooks/_quarto.yml +16 -0
  288. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/pyproject.toml +11 -0
  289. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/scaffold.py +8 -0
  290. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/settings/ai.yml +5 -0
  291. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/settings/author.yml +4 -0
  292. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/settings/connections.yml +7 -0
  293. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/settings/data.yml +1 -0
  294. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/settings/git.yml +6 -0
  295. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/settings/quarto.yml +22 -0
  296. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/settings/scaffold.yml +5 -0
  297. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/expected/settings.yml +32 -0
  298. framework_py-0.1.0.dev0/tests/golden/sensitive-facet/layers.json +26 -0
  299. framework_py-0.1.0.dev0/tests/integration/compose.yml +125 -0
  300. framework_py-0.1.0.dev0/tests/integration/mariadb/init.sql +42 -0
  301. framework_py-0.1.0.dev0/tests/integration/mysql/init.sql +42 -0
  302. framework_py-0.1.0.dev0/tests/integration/postgres/init.sql +50 -0
  303. framework_py-0.1.0.dev0/tests/integration/sqlserver/init.sql +50 -0
  304. framework_py-0.1.0.dev0/tests/integration/test_servers.py +227 -0
  305. framework_py-0.1.0.dev0/tests/shared/NAMESPACE +155 -0
  306. framework_py-0.1.0.dev0/tests/shared/conformance/README.md +34 -0
  307. framework_py-0.1.0.dev0/tests/shared/conformance/merge/atomic-entries.json +82 -0
  308. framework_py-0.1.0.dev0/tests/shared/conformance/merge/conflicts-and-labels.json +47 -0
  309. framework_py-0.1.0.dev0/tests/shared/conformance/merge/empty-sections.json +35 -0
  310. framework_py-0.1.0.dev0/tests/shared/conformance/merge/gitignore-and-assistants.json +72 -0
  311. framework_py-0.1.0.dev0/tests/shared/conformance/merge/maps-and-null-removal.json +104 -0
  312. framework_py-0.1.0.dev0/tests/test_bootstrap.py +146 -0
  313. framework_py-0.1.0.dev0/tests/test_cache.py +141 -0
  314. framework_py-0.1.0.dev0/tests/test_catalog.py +93 -0
  315. framework_py-0.1.0.dev0/tests/test_cloud.py +434 -0
  316. framework_py-0.1.0.dev0/tests/test_config_home.py +112 -0
  317. framework_py-0.1.0.dev0/tests/test_conformance.py +42 -0
  318. framework_py-0.1.0.dev0/tests/test_connections.py +240 -0
  319. framework_py-0.1.0.dev0/tests/test_create.py +331 -0
  320. framework_py-0.1.0.dev0/tests/test_data.py +190 -0
  321. framework_py-0.1.0.dev0/tests/test_db.py +85 -0
  322. framework_py-0.1.0.dev0/tests/test_dotenv.py +68 -0
  323. framework_py-0.1.0.dev0/tests/test_global_config.py +86 -0
  324. framework_py-0.1.0.dev0/tests/test_hooks.py +194 -0
  325. framework_py-0.1.0.dev0/tests/test_notebooks.py +127 -0
  326. framework_py-0.1.0.dev0/tests/test_outputs.py +118 -0
  327. framework_py-0.1.0.dev0/tests/test_package.py +49 -0
  328. framework_py-0.1.0.dev0/tests/test_packages.py +143 -0
  329. framework_py-0.1.0.dev0/tests/test_r_compat.py +187 -0
  330. framework_py-0.1.0.dev0/tests/test_r_live.py +107 -0
  331. framework_py-0.1.0.dev0/tests/test_scaffold.py +135 -0
  332. framework_py-0.1.0.dev0/tests/test_secretservice.py +107 -0
  333. framework_py-0.1.0.dev0/tests/test_security.py +157 -0
  334. framework_py-0.1.0.dev0/tests/test_settings.py +212 -0
  335. framework_py-0.1.0.dev0/tests/test_storage.py +170 -0
@@ -0,0 +1,13 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ .venv/
4
+ dist/
5
+ build/
6
+ *.egg-info/
7
+ .pytest_cache/
8
+ .mypy_cache/
9
+ .ruff_cache/
10
+ .coverage
11
+ coverage.xml
12
+ htmlcov/
13
+ .DS_Store
@@ -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.