mountaineer 0.9.0.dev5__tar.gz → 0.9.0.dev6__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 (298) hide show
  1. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.github/scripts/__tests__/test_update_version.py +49 -0
  2. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.github/scripts/update_version.py +4 -0
  3. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/Cargo.lock +1 -1
  4. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/Cargo.toml +1 -1
  5. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/PKG-INFO +10 -14
  6. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/README.md +9 -10
  7. mountaineer-0.9.0.dev6/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/cli.py +104 -0
  8. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/config.py +1 -1
  9. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/controllers/detail.py +5 -5
  10. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/controllers/home.py +6 -7
  11. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/models/detail.py +2 -2
  12. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/pyproject.toml +3 -2
  13. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/app/home/page.tsx +4 -4
  14. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/static/api.ts +2 -4
  15. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/test_utilities.py +0 -40
  16. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/poetry.lock +1 -242
  17. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/pyproject.toml +2 -8
  18. mountaineer-0.9.0.dev5/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/cli.py +0 -68
  19. mountaineer-0.9.0.dev5/mountaineer/__tests__/database/dependencies/conftest.py +0 -8
  20. mountaineer-0.9.0.dev5/mountaineer/__tests__/database/dependencies/test_core.py +0 -31
  21. mountaineer-0.9.0.dev5/mountaineer/__tests__/database/test_config.py +0 -20
  22. mountaineer-0.9.0.dev5/mountaineer/__tests__/database/test_sqlmodel.py +0 -25
  23. mountaineer-0.9.0.dev5/mountaineer/__tests__/migrations/__init__.py +0 -0
  24. mountaineer-0.9.0.dev5/mountaineer/__tests__/migrations/conftest.py +0 -138
  25. mountaineer-0.9.0.dev5/mountaineer/__tests__/migrations/test_actions.py +0 -797
  26. mountaineer-0.9.0.dev5/mountaineer/__tests__/migrations/test_db_memory_serializer.py +0 -411
  27. mountaineer-0.9.0.dev5/mountaineer/__tests__/migrations/test_db_serializer.py +0 -401
  28. mountaineer-0.9.0.dev5/mountaineer/__tests__/migrations/test_db_stubs.py +0 -26
  29. mountaineer-0.9.0.dev5/mountaineer/__tests__/migrations/test_generator.py +0 -146
  30. mountaineer-0.9.0.dev5/mountaineer/__tests__/migrations/test_generics.py +0 -95
  31. mountaineer-0.9.0.dev5/mountaineer/__tests__/migrations/test_handlers.py +0 -368
  32. mountaineer-0.9.0.dev5/mountaineer/client_builder/interface_builders/__init__.py +0 -0
  33. mountaineer-0.9.0.dev5/mountaineer/controllers/__init__.py +0 -0
  34. mountaineer-0.9.0.dev5/mountaineer/database/__init__.py +0 -7
  35. mountaineer-0.9.0.dev5/mountaineer/database/cli.py +0 -56
  36. mountaineer-0.9.0.dev5/mountaineer/database/config.py +0 -52
  37. mountaineer-0.9.0.dev5/mountaineer/database/dependencies/__init__.py +0 -6
  38. mountaineer-0.9.0.dev5/mountaineer/database/dependencies/core.py +0 -113
  39. mountaineer-0.9.0.dev5/mountaineer/database/session.py +0 -87
  40. mountaineer-0.9.0.dev5/mountaineer/database/sqlmodel.py +0 -235
  41. mountaineer-0.9.0.dev5/mountaineer/database/validator.py +0 -216
  42. mountaineer-0.9.0.dev5/mountaineer/migrations/__init__.py +0 -0
  43. mountaineer-0.9.0.dev5/mountaineer/migrations/actions.py +0 -691
  44. mountaineer-0.9.0.dev5/mountaineer/migrations/cli.py +0 -244
  45. mountaineer-0.9.0.dev5/mountaineer/migrations/client_io.py +0 -62
  46. mountaineer-0.9.0.dev5/mountaineer/migrations/db_memory_serializer.py +0 -236
  47. mountaineer-0.9.0.dev5/mountaineer/migrations/db_serializer.py +0 -318
  48. mountaineer-0.9.0.dev5/mountaineer/migrations/db_stubs.py +0 -375
  49. mountaineer-0.9.0.dev5/mountaineer/migrations/dependency/__init__.py +0 -3
  50. mountaineer-0.9.0.dev5/mountaineer/migrations/dependency/core/__init__.py +0 -1
  51. mountaineer-0.9.0.dev5/mountaineer/migrations/dependency/core/core.py +0 -10
  52. mountaineer-0.9.0.dev5/mountaineer/migrations/generator.py +0 -252
  53. mountaineer-0.9.0.dev5/mountaineer/migrations/generics.py +0 -88
  54. mountaineer-0.9.0.dev5/mountaineer/migrations/handlers.py +0 -787
  55. mountaineer-0.9.0.dev5/mountaineer/migrations/migration.py +0 -69
  56. mountaineer-0.9.0.dev5/mountaineer/migrations/migrator.py +0 -122
  57. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.git-blame-ignore-revs +0 -0
  58. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.gitattributes +0 -0
  59. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.github/README_SCRIPTS.md +0 -0
  60. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.github/poetry.lock +0 -0
  61. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.github/pyproject.toml +0 -0
  62. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.github/scripts/__init__.py +0 -0
  63. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.github/scripts/check_dependencies.py +0 -0
  64. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.github/workflows/test.yml +0 -0
  65. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.github/workflows/validate.yml +0 -0
  66. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.gitignore +0 -0
  67. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/Dockerfile +0 -0
  68. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/LICENSE +0 -0
  69. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/Makefile +0 -0
  70. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/benchmarking/README.md +0 -0
  71. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/benchmarking/benchmarking/__init__.py +0 -0
  72. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/benchmarking/benchmarking/simple_render.py +0 -0
  73. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/benchmarking/poetry.lock +0 -0
  74. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/benchmarking/pyproject.toml +0 -0
  75. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/README.md +0 -0
  76. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/__init__.py +0 -0
  77. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/__tests__/__init__.py +0 -0
  78. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/__tests__/common.py +0 -0
  79. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/__tests__/test_builder.py +0 -0
  80. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/__tests__/test_cli.py +0 -0
  81. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/__tests__/test_generation.py +0 -0
  82. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/builder.py +0 -0
  83. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/cli.py +0 -0
  84. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/environments/__init__.py +0 -0
  85. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/environments/base.py +0 -0
  86. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/environments/poetry.py +0 -0
  87. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/environments/venv.py +0 -0
  88. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/external.py +0 -0
  89. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/generation.py +0 -0
  90. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/io.py +0 -0
  91. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/.zed/settings.json +0 -0
  92. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/__init__.py +0 -0
  93. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/editor_configs/vim/.vimrc +0 -0
  94. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/editor_configs/vscode/.vscode/settings.json +0 -0
  95. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/editor_configs/zed/pyrightconfig.json +0 -0
  96. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/.env +0 -0
  97. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/.gitignore +0 -0
  98. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/README.md +0 -0
  99. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/__init__.py +0 -0
  100. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/app.py +0 -0
  101. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/controllers/__init__.py +0 -0
  102. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/main.py +0 -0
  103. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/models/__init__.py +0 -0
  104. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/views/__init__.py +0 -0
  105. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/views/app/detail/page.tsx +0 -0
  106. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/views/app/home/page.tsx +0 -0
  107. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/views/app/main.css +0 -0
  108. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/views/package.json +0 -0
  109. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/views/postcss.config.js +0 -0
  110. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/views/tailwind.config.js +0 -0
  111. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/docker-compose.yml +0 -0
  112. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/poetry.lock +0 -0
  113. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/pyproject.toml +0 -0
  114. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/docker-compose.test.yml +0 -0
  115. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/media/header.png +0 -0
  116. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__init__.py +0 -0
  117. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/__init__.py +0 -0
  118. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/actions/__init__.py +0 -0
  119. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/actions/test_fields.py +0 -0
  120. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/actions/test_passthrough_dec.py +0 -0
  121. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/actions/test_sideeffect_dec.py +0 -0
  122. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/__init__.py +0 -0
  123. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/conf_models.py +0 -0
  124. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/file_generators/__init__.py +0 -0
  125. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/file_generators/test_base.py +0 -0
  126. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/file_generators/test_globals.py +0 -0
  127. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/file_generators/test_locals.py +0 -0
  128. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/interface_builders/__init__.py +0 -0
  129. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/interface_builders/common.py +0 -0
  130. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/interface_builders/test_action.py +0 -0
  131. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/interface_builders/test_base.py +0 -0
  132. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/interface_builders/test_controller.py +0 -0
  133. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/interface_builders/test_enum.py +0 -0
  134. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/interface_builders/test_exception.py +0 -0
  135. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/interface_builders/test_model.py +0 -0
  136. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/test_aliases.py +0 -0
  137. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/test_parser.py +0 -0
  138. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/test_types.py +0 -0
  139. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/test_typescript.py +0 -0
  140. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_compiler/__init__.py +0 -0
  141. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_compiler/test_compile.py +0 -0
  142. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_compiler/test_postcss.py +0 -0
  143. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_compiler/test_source_maps.py +0 -0
  144. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/common.py +0 -0
  145. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/conftest.py +0 -0
  146. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/controllers/test_traceback.py +0 -0
  147. {mountaineer-0.9.0.dev5/mountaineer/__tests__/database → mountaineer-0.9.0.dev6/mountaineer/__tests__/dependencies}/__init__.py +0 -0
  148. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/dependencies/test_base.py +0 -0
  149. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/__init__.py +0 -0
  150. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/README.md +0 -0
  151. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/__init__.py +0 -0
  152. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/app.py +0 -0
  153. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/cli.py +0 -0
  154. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/config.py +0 -0
  155. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/controllers/__init__.py +0 -0
  156. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/controllers/complex.py +0 -0
  157. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/controllers/detail.py +0 -0
  158. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/controllers/home.py +0 -0
  159. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/controllers/root_layout.py +0 -0
  160. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/controllers/stream.py +0 -0
  161. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/main.py +0 -0
  162. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/__init__.py +0 -0
  163. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/app/complex/page.tsx +0 -0
  164. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/app/detail/page.tsx +0 -0
  165. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/app/home/element.tsx +0 -0
  166. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/app/home/page.tsx.out +0 -0
  167. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/app/home/page.tsx.out.map +0 -0
  168. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/app/layout.tsx +0 -0
  169. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/app/main.css +0 -0
  170. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/app/stream/page.tsx +0 -0
  171. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/package-lock.json +0 -0
  172. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/package.json +0 -0
  173. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/postcss.config.js +0 -0
  174. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/tailwind.config.js +0 -0
  175. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/poetry.lock +0 -0
  176. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/pyproject.toml +0 -0
  177. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/complex_controller_ssr_with_react.js +0 -0
  178. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/home_controller_source_map.js.map +0 -0
  179. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/home_controller_ssr_with_react.js +0 -0
  180. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/mock_webapp/simple_classes_1.py +0 -0
  181. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/mock_webapp/simple_classes_2.py +0 -0
  182. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/mock_webapp/simple_controller.py +0 -0
  183. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/static/__init__.py +0 -0
  184. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/static/harness/__tests__/api_test.ts +0 -0
  185. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/static/harness/jest.config.js +0 -0
  186. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/static/harness/package-lock.json +0 -0
  187. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/static/harness/package.json +0 -0
  188. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/static/test_static.py +0 -0
  189. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_app.py +0 -0
  190. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_app_manager.py +0 -0
  191. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_cache.py +0 -0
  192. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_cli.py +0 -0
  193. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_compat.py +0 -0
  194. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_config.py +0 -0
  195. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_controller.py +0 -0
  196. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_controller_layout.py +0 -0
  197. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_cropper.py +0 -0
  198. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_exceptions.py +0 -0
  199. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_generics.py +0 -0
  200. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_hotreload.py +0 -0
  201. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_io.py +0 -0
  202. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_logging.py +0 -0
  203. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_paths.py +0 -0
  204. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_render.py +0 -0
  205. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_ssr.py +0 -0
  206. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_watch.py +0 -0
  207. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_webservice.py +0 -0
  208. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/actions/__init__.py +0 -0
  209. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/actions/fields.py +0 -0
  210. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/actions/passthrough_dec.py +0 -0
  211. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/actions/sideeffect_dec.py +0 -0
  212. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/annotation_helpers.py +0 -0
  213. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/app.py +0 -0
  214. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/app_manager.py +0 -0
  215. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/cache.py +0 -0
  216. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/cli.py +0 -0
  217. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/aliases.py +0 -0
  218. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/builder.py +0 -0
  219. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/file_generators/__init__.py +0 -0
  220. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/file_generators/base.py +0 -0
  221. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/file_generators/globals.py +0 -0
  222. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/file_generators/locals.py +0 -0
  223. {mountaineer-0.9.0.dev5/mountaineer/__tests__/database/dependencies → mountaineer-0.9.0.dev6/mountaineer/client_builder/interface_builders}/__init__.py +0 -0
  224. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/interface_builders/action.py +0 -0
  225. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/interface_builders/base.py +0 -0
  226. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/interface_builders/controller.py +0 -0
  227. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/interface_builders/enum.py +0 -0
  228. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/interface_builders/exception.py +0 -0
  229. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/interface_builders/model.py +0 -0
  230. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/parser.py +0 -0
  231. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/types.py +0 -0
  232. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/typescript.py +0 -0
  233. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_compiler/__init__.py +0 -0
  234. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_compiler/base.py +0 -0
  235. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_compiler/build_metadata.py +0 -0
  236. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_compiler/compile.py +0 -0
  237. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_compiler/exceptions.py +0 -0
  238. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_compiler/postcss.py +0 -0
  239. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_compiler/source_maps.py +0 -0
  240. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/compat.py +0 -0
  241. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/config.py +0 -0
  242. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/console.py +0 -0
  243. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/constants.py +0 -0
  244. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/controller.py +0 -0
  245. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/controller_layout.py +0 -0
  246. {mountaineer-0.9.0.dev5/mountaineer/__tests__/dependencies → mountaineer-0.9.0.dev6/mountaineer/controllers}/__init__.py +0 -0
  247. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/controllers/exception_controller.py +0 -0
  248. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/controllers/traceback.py +0 -0
  249. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/cropper.py +0 -0
  250. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/dependencies/__init__.py +0 -0
  251. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/dependencies/base.py +0 -0
  252. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/dependencies/core/__init__.py +0 -0
  253. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/dependencies/core/core.py +0 -0
  254. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/exceptions.py +0 -0
  255. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/generics.py +0 -0
  256. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/hotreload.py +0 -0
  257. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/io.py +0 -0
  258. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/logging.py +0 -0
  259. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/paths.py +0 -0
  260. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/py.typed +0 -0
  261. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/render.py +0 -0
  262. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/ssr.py +0 -0
  263. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/static/__init__.py +0 -0
  264. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/static/live_reload.ts +0 -0
  265. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/static/ssr_polyfills.js +0 -0
  266. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/views/__init__.py +0 -0
  267. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/views/core/exception/page.tsx +0 -0
  268. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/views/core/layout.tsx +0 -0
  269. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/views/core/main.css +0 -0
  270. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/views/package-lock.json +0 -0
  271. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/views/package.json +0 -0
  272. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/views/postcss.config.js +0 -0
  273. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/views/tailwind.config.js +0 -0
  274. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/watch.py +0 -0
  275. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/watch_server.py +0 -0
  276. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/webservice.py +0 -0
  277. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/benches/fixtures/complex_sourcemap_mapping.txt +0 -0
  278. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/benches/fixtures/home_controller_ssr_with_react.js +0 -0
  279. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/benches/fixtures/ssr_polyfill_archive.js +0 -0
  280. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/benches/lexers_benchmark.rs +0 -0
  281. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/benches/source_map_benchmark.rs +0 -0
  282. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/benches/ssr_benchmark.rs +0 -0
  283. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/bundle_independent.rs +0 -0
  284. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/bundle_prod.rs +0 -0
  285. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/code_gen.rs +0 -0
  286. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/errors.rs +0 -0
  287. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/lexers.rs +0 -0
  288. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/lib.rs +0 -0
  289. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/logging.rs +0 -0
  290. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/source_map.rs +0 -0
  291. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/ssr.rs +0 -0
  292. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/timeout.rs +0 -0
  293. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src_go/Cargo.toml +0 -0
  294. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src_go/build.rs +0 -0
  295. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src_go/go/js_build.go +0 -0
  296. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src_go/go.mod +0 -0
  297. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src_go/go.sum +0 -0
  298. {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src_go/src/lib.rs +0 -0
@@ -127,3 +127,52 @@ def test_update_version_python(tmp_path: Path):
127
127
  version = "^0.27.0.post1"
128
128
  """,
129
129
  )
130
+
131
+
132
+ def test_update_version_python_with_project_version(tmp_path: Path):
133
+ pyproject_text = """
134
+ [tool.poetry]
135
+ name = "mountaineer"
136
+ version = "0.1.0"
137
+ description = ""
138
+ readme = "README.md"
139
+
140
+ [project]
141
+ name = "mountaineer"
142
+ version = "0.1.0"
143
+ description = ""
144
+
145
+ [tool.poetry.dependencies]
146
+ uvicorn = { extras = ["standard"], version = "^0.27.0.post1" }
147
+ fastapi = "^0.68.0"
148
+ """
149
+
150
+ pyproject_path = tmp_path / "pyproject.toml"
151
+ pyproject_path.write_text(pyproject_text)
152
+
153
+ with change_pwd(tmp_path):
154
+ update_version_python("0.2.0")
155
+
156
+ assert sub(r"\s+", "", pyproject_path.read_text()) == sub(
157
+ r"\s+",
158
+ "",
159
+ """
160
+ [tool.poetry]
161
+ name = "mountaineer"
162
+ version = "0.2.0"
163
+ description = ""
164
+ readme = "README.md"
165
+
166
+ [project]
167
+ name = "mountaineer"
168
+ version = "0.2.0"
169
+ description = ""
170
+
171
+ [tool.poetry.dependencies]
172
+ fastapi = "^0.68.0"
173
+
174
+ [tool.poetry.dependencies.uvicorn]
175
+ extras = ["standard",]
176
+ version = "^0.27.0.post1"
177
+ """,
178
+ )
@@ -65,6 +65,10 @@ def update_version_python(new_version: str):
65
65
 
66
66
  filedata["tool"]["poetry"]["version"] = python_version
67
67
 
68
+ # Also update project.version if it exists
69
+ if "project" in filedata and "version" in filedata["project"]:
70
+ filedata["project"]["version"] = python_version
71
+
68
72
  pyproject_path.write_text(toml.dumps(filedata))
69
73
 
70
74
 
@@ -535,7 +535,7 @@ dependencies = [
535
535
 
536
536
  [[package]]
537
537
  name = "mountaineer"
538
- version = "0.9.0-dev5"
538
+ version = "0.9.0-dev6"
539
539
  dependencies = [
540
540
  "criterion",
541
541
  "deno_core_icudata",
@@ -15,7 +15,7 @@ harness = false
15
15
 
16
16
  [package]
17
17
  name = "mountaineer"
18
- version = "0.9.0-dev5"
18
+ version = "0.9.0-dev6"
19
19
  edition = "2021"
20
20
 
21
21
  [dependencies]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: mountaineer
3
- Version: 0.9.0.dev5
3
+ Version: 0.9.0.dev6
4
4
  Requires-Dist: pydantic >=2.5.3, <3.0.0
5
5
  Requires-Dist: fastapi >=0.114.1, <1.0.0
6
6
  Requires-Dist: inflection >=0.5.1, <1.0.0
@@ -9,9 +9,6 @@ Requires-Dist: uvicorn[standard] >=0.27.0.post1, <1.0.0
9
9
  Requires-Dist: packaging >23.2
10
10
  Requires-Dist: watchdog >=3.0.0, <4.0.0
11
11
  Requires-Dist: pydantic-settings >=2.1.0, <3.0.0
12
- Requires-Dist: sqlmodel >=0.0.20, <1.0.0
13
- Requires-Dist: asyncpg >=0.29.0, <1.0.0
14
- Requires-Dist: sqlalchemy[asyncio] >=2.0.26, <3.0.0
15
12
  Requires-Dist: rich >=13.7.1, <14.0.0
16
13
  Requires-Dist: websockets <14.0
17
14
  License-File: LICENSE
@@ -119,15 +116,15 @@ Below we go through some of the unique aspects of Mountaineer. Let's create a si
119
116
 
120
117
  For the purposes of this walkthrough we assume your project is generated with `create-mountaineer-app` and you've skipped MVC stub files. If not, you'll have to delete some of the pre-existing files.
121
118
 
122
- Let's get started by creating the data models that will persist app state to the database. These definitions are effectively Pydantic schemas that will be bridged to the database via [SQLModel](https://github.com/tiangolo/sqlmodel).
119
+ Let's get started by creating the data models that will persist app state to the database. These definitions are effectively Pydantic schemas that will be bridged to the database via [iceaxe](https://github.com/piercefreeman/iceaxe). Mountaineer doesn't require any specific database ORM to work, but we have built Iceaxe to have tight integration with Mountaineer.
123
120
 
124
121
  ```python
125
122
  # my_webapp/models/todo.py
126
123
 
127
- from mountaineer.database import SQLModel, Field
124
+ from iceaxe import TableBase, Field
128
125
  from uuid import UUID, uuid4
129
126
 
130
- class TodoItem(SQLModel, table=True):
127
+ class TodoItem(TableBase):
131
128
  id: UUID = Field(default_factory=uuid4, primary_key=True)
132
129
 
133
130
  description: str
@@ -156,11 +153,11 @@ Great! At this point we have our database tables created and have a basic server
156
153
  # my_webapp/controllers/home.py
157
154
 
158
155
  from mountaineer import sideeffect, ControllerBase, RenderBase
159
- from mountaineer.database import DatabaseDependencies
156
+
157
+ from iceaxe.mountaineer import DatabaseDependencies
158
+ from iceaxe import DBConnection, select
160
159
 
161
160
  from fastapi import Request, Depends
162
- from mountaineer.database.session import AsyncSession
163
- from sqlmodel import select
164
161
 
165
162
  from my_webapp.models.todo import TodoItem
166
163
 
@@ -175,9 +172,9 @@ class HomeController(ControllerBase):
175
172
  async def render(
176
173
  self,
177
174
  request: Request,
178
- session: AsyncSession = Depends(DatabaseDependencies.get_db_session)
175
+ session: DBConnection = Depends(DatabaseDependencies.get_db_connection)
179
176
  ) -> HomeRender:
180
- todos = (await session.exec(select(TodoItem))).all()
177
+ todos = await session.exec(select(TodoItem))
181
178
 
182
179
  return HomeRender(
183
180
  client_ip=(
@@ -200,10 +197,9 @@ This `render()` function is a core building block of Mountaineer. All Controller
200
197
  > [!TIP]
201
198
  > render() functions accepts all parameters that FastAPI endpoints do: paths, query parameters, and dependency injected functions. Right now we're just grabbing the `Request` object to get the client IP.
202
199
 
203
- Note that the database session is provided via dependency injection, which plug-and-plays with [FastAPI's](https://github.com/tiangolo/fastapi) Depends syntax. The standard library provides two main dependency providers:
200
+ Note that the database session is provided via dependency injection, which plug-and-plays with [FastAPI's](https://github.com/tiangolo/fastapi) Depends syntax. The standard library provides one main dependency provider:
204
201
 
205
202
  - mountaineer.CoreDependencies: helper functions for configurations and general dependency injection
206
- - mountaineer.database.DatabaseDependencies: helper functions for database lifecycle and management
207
203
 
208
204
  Now that we've newly created this controller, we wire it up to the application. This registers it for display when you load the homepage.
209
205
 
@@ -100,15 +100,15 @@ Below we go through some of the unique aspects of Mountaineer. Let's create a si
100
100
 
101
101
  For the purposes of this walkthrough we assume your project is generated with `create-mountaineer-app` and you've skipped MVC stub files. If not, you'll have to delete some of the pre-existing files.
102
102
 
103
- Let's get started by creating the data models that will persist app state to the database. These definitions are effectively Pydantic schemas that will be bridged to the database via [SQLModel](https://github.com/tiangolo/sqlmodel).
103
+ Let's get started by creating the data models that will persist app state to the database. These definitions are effectively Pydantic schemas that will be bridged to the database via [iceaxe](https://github.com/piercefreeman/iceaxe). Mountaineer doesn't require any specific database ORM to work, but we have built Iceaxe to have tight integration with Mountaineer.
104
104
 
105
105
  ```python
106
106
  # my_webapp/models/todo.py
107
107
 
108
- from mountaineer.database import SQLModel, Field
108
+ from iceaxe import TableBase, Field
109
109
  from uuid import UUID, uuid4
110
110
 
111
- class TodoItem(SQLModel, table=True):
111
+ class TodoItem(TableBase):
112
112
  id: UUID = Field(default_factory=uuid4, primary_key=True)
113
113
 
114
114
  description: str
@@ -137,11 +137,11 @@ Great! At this point we have our database tables created and have a basic server
137
137
  # my_webapp/controllers/home.py
138
138
 
139
139
  from mountaineer import sideeffect, ControllerBase, RenderBase
140
- from mountaineer.database import DatabaseDependencies
140
+
141
+ from iceaxe.mountaineer import DatabaseDependencies
142
+ from iceaxe import DBConnection, select
141
143
 
142
144
  from fastapi import Request, Depends
143
- from mountaineer.database.session import AsyncSession
144
- from sqlmodel import select
145
145
 
146
146
  from my_webapp.models.todo import TodoItem
147
147
 
@@ -156,9 +156,9 @@ class HomeController(ControllerBase):
156
156
  async def render(
157
157
  self,
158
158
  request: Request,
159
- session: AsyncSession = Depends(DatabaseDependencies.get_db_session)
159
+ session: DBConnection = Depends(DatabaseDependencies.get_db_connection)
160
160
  ) -> HomeRender:
161
- todos = (await session.exec(select(TodoItem))).all()
161
+ todos = await session.exec(select(TodoItem))
162
162
 
163
163
  return HomeRender(
164
164
  client_ip=(
@@ -181,10 +181,9 @@ This `render()` function is a core building block of Mountaineer. All Controller
181
181
  > [!TIP]
182
182
  > render() functions accepts all parameters that FastAPI endpoints do: paths, query parameters, and dependency injected functions. Right now we're just grabbing the `Request` object to get the client IP.
183
183
 
184
- Note that the database session is provided via dependency injection, which plug-and-plays with [FastAPI's](https://github.com/tiangolo/fastapi) Depends syntax. The standard library provides two main dependency providers:
184
+ Note that the database session is provided via dependency injection, which plug-and-plays with [FastAPI's](https://github.com/tiangolo/fastapi) Depends syntax. The standard library provides one main dependency provider:
185
185
 
186
186
  - mountaineer.CoreDependencies: helper functions for configurations and general dependency injection
187
- - mountaineer.database.DatabaseDependencies: helper functions for database lifecycle and management
188
187
 
189
188
  Now that we've newly created this controller, we wire it up to the application. This registers it for display when you load the homepage.
190
189
 
@@ -0,0 +1,104 @@
1
+ from click import command, option, group
2
+ from mountaineer.cli import handle_runserver, handle_watch, handle_build
3
+ from mountaineer.io import async_to_sync
4
+ from mountaineer.dependencies import get_function_dependencies
5
+ from mountaineer import Depends, CoreDependencies
6
+
7
+ from iceaxe import DBConnection
8
+ from iceaxe.mountaineer import DatabaseConfig, DatabaseDependencies
9
+ from iceaxe.migrations.cli import handle_apply, handle_generate, handle_rollback
10
+ from iceaxe.schemas.cli import create_all
11
+
12
+ from {{project_name}} import models
13
+ from {{project_name}}.config import AppConfig
14
+
15
+
16
+ @command()
17
+ @option("--port", default=5006, help="Port to run the server on")
18
+ def runserver(port: int):
19
+ handle_runserver(
20
+ package="{{project_name}}",
21
+ webservice="{{project_name}}.main:app",
22
+ webcontroller="{{project_name}}.app:controller",
23
+ port=port,
24
+ )
25
+
26
+
27
+ @command()
28
+ def watch():
29
+ handle_watch(
30
+ package="{{project_name}}",
31
+ webcontroller="{{project_name}}.app:controller",
32
+ )
33
+
34
+
35
+ @command()
36
+ def build():
37
+ handle_build(
38
+ webcontroller="{{project_name}}.app:controller",
39
+ )
40
+
41
+
42
+ @command()
43
+ @async_to_sync
44
+ async def createdb():
45
+ _ = AppConfig() # type: ignore
46
+
47
+ async def run_bootstrap(
48
+ db_connection: DBConnection = Depends(DatabaseDependencies.get_db_connection),
49
+ ):
50
+ await create_all(db_connection=db_connection)
51
+
52
+ async with get_function_dependencies(callable=run_bootstrap) as values:
53
+ await run_bootstrap(**values)
54
+
55
+
56
+ @group
57
+ def migrate():
58
+ pass
59
+
60
+
61
+ @migrate.command()
62
+ @option("--message", required=False)
63
+ @async_to_sync
64
+ async def generate(message: str | None):
65
+ async def _inner(
66
+ config: AppConfig = Depends(CoreDependencies.get_config_with_type(AppConfig)),
67
+ db_connection: DBConnection = Depends(DatabaseDependencies.get_db_connection),
68
+ ):
69
+ assert config.PACKAGE
70
+ await handle_generate(config.PACKAGE, db_connection, message=message)
71
+
72
+ _ = AppConfig() # type: ignore
73
+ async with get_function_dependencies(callable=_inner) as deps:
74
+ await _inner(**deps)
75
+
76
+
77
+ @migrate.command()
78
+ @async_to_sync
79
+ async def apply():
80
+ async def _inner(
81
+ config: AppConfig = Depends(CoreDependencies.get_config_with_type(AppConfig)),
82
+ db_connection: DBConnection = Depends(DatabaseDependencies.get_db_connection),
83
+ ):
84
+ assert config.PACKAGE
85
+ await handle_apply(config.PACKAGE, db_connection)
86
+
87
+ _ = AppConfig() # type: ignore
88
+ async with get_function_dependencies(callable=_inner) as deps:
89
+ await _inner(**deps)
90
+
91
+
92
+ @migrate.command()
93
+ @async_to_sync
94
+ async def rollback():
95
+ async def _inner(
96
+ config: AppConfig = Depends(CoreDependencies.get_config_with_type(AppConfig)),
97
+ db_connection: DBConnection = Depends(DatabaseDependencies.get_db_connection),
98
+ ):
99
+ assert config.PACKAGE
100
+ await handle_rollback(config.PACKAGE, db_connection)
101
+
102
+ _ = AppConfig() # type: ignore
103
+ async with get_function_dependencies(callable=_inner) as deps:
104
+ await _inner(**deps)
@@ -1,5 +1,5 @@
1
1
  from mountaineer import ConfigBase
2
- from mountaineer.database import DatabaseConfig
2
+ from iceaxe.mountaineer import DatabaseConfig
3
3
  from pydantic_settings import SettingsConfigDict
4
4
 
5
5
  class AppConfig(ConfigBase, DatabaseConfig):
@@ -2,8 +2,8 @@
2
2
  from uuid import UUID
3
3
 
4
4
  from mountaineer import Metadata, RenderBase, ControllerBase, APIException, sideeffect
5
- from mountaineer.database import DatabaseDependencies
6
- from mountaineer.database.session import AsyncSession
5
+ from mountaineer.mountaineer import DatabaseDependencies
6
+ from mountaineer import DBConnection
7
7
 
8
8
  from fastapi import Request, Depends
9
9
  from fastapi.exceptions import HTTPException
@@ -35,7 +35,7 @@ class DetailController(ControllerBase):
35
35
  async def render(
36
36
  self,
37
37
  detail_id: int,
38
- session: AsyncSession = Depends(DatabaseDependencies.get_db_session)
38
+ session: DBConnection = Depends(DatabaseDependencies.get_db_connection)
39
39
  ) -> DetailRender:
40
40
  detail_item = await session.get(models.DetailItem, detail_id)
41
41
  if not detail_item:
@@ -52,12 +52,12 @@ class DetailController(ControllerBase):
52
52
  self,
53
53
  detail_id: int,
54
54
  payload: UpdateTextRequest,
55
- session: AsyncSession = Depends(DatabaseDependencies.get_db_session)
55
+ session: DBConnection = Depends(DatabaseDependencies.get_db_connection)
56
56
  ) -> None:
57
57
  detail_item = await session.get(models.DetailItem, detail_id)
58
58
  if not detail_item:
59
59
  raise NotFoundException()
60
60
 
61
61
  detail_item.description = payload.description
62
- await session.commit()
62
+ await session.update([detail_item])
63
63
  {% endif %}
@@ -2,8 +2,8 @@
2
2
  from uuid import UUID, uuid4
3
3
 
4
4
  from mountaineer import sideeffect, ControllerBase, Metadata, RenderBase
5
- from mountaineer.database import DatabaseDependencies
6
- from mountaineer.database.session import AsyncSession
5
+ from iceaxe.mountaineer import DatabaseDependencies
6
+ from iceaxe import DBConnection
7
7
 
8
8
  from fastapi import Request, Depends
9
9
  from pydantic import BaseModel
@@ -22,9 +22,9 @@ class HomeController(ControllerBase):
22
22
 
23
23
  async def render(
24
24
  self,
25
- session: AsyncSession = Depends(DatabaseDependencies.get_db_session)
25
+ session: DBConnection = Depends(DatabaseDependencies.get_db_connection)
26
26
  ) -> HomeRender:
27
- items = (await session.exec(select(models.DetailItem))).all()
27
+ items = await session.exec(select(models.DetailItem))
28
28
  return HomeRender(
29
29
  items=items,
30
30
  metadata=Metadata(title="Home"),
@@ -33,9 +33,8 @@ class HomeController(ControllerBase):
33
33
  @sideeffect
34
34
  async def new_detail(
35
35
  self,
36
- session: AsyncSession = Depends(DatabaseDependencies.get_db_session)
36
+ session: DBConnection = Depends(DatabaseDependencies.get_db_connection)
37
37
  ) -> None:
38
38
  obj = models.DetailItem(description="Untitled Item")
39
- session.add(obj)
40
- await session.commit()
39
+ await session.insert([obj])
41
40
  {% endif %}
@@ -1,7 +1,7 @@
1
1
  {% if create_stub_files %}
2
- from mountaineer.database import SQLModel, Field
2
+ from iceaxe import TableBase, Field
3
3
 
4
- class DetailItem(SQLModel, table=True):
4
+ class DetailItem(TableBase):
5
5
  id: int | None = Field(default=None, primary_key=True)
6
6
  description: str
7
7
  {% endif %}
@@ -42,10 +42,11 @@ readme = "README.md"
42
42
 
43
43
  dependencies = [
44
44
  {% if mountaineer_dev_path %}
45
- "mountaineer @ file://{{ mountaineer_dev_path }}"
45
+ "mountaineer @ file://{{ mountaineer_dev_path }}",
46
46
  {% else %}
47
- "mountaineer=={{ mountaineer_min_version }}"
47
+ "mountaineer=={{ mountaineer_min_version }}",
48
48
  {% endif %}
49
+ "iceaxe"
49
50
  ]
50
51
 
51
52
  [build-system]
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import { useServer, HTTPValidationErrorException } from "./_server";
2
+ import { useServer, RequestValidationError } from "./_server";
3
3
  import { CustomComponent } from "./element";
4
4
 
5
5
  const Home = () => {
@@ -67,11 +67,11 @@ const Home = () => {
67
67
  },
68
68
  });
69
69
  } catch (error) {
70
- if (error instanceof HTTPValidationErrorException) {
70
+ if (error instanceof RequestValidationError) {
71
71
  console.log(
72
72
  "Validation Error",
73
- error.body.detail?.[0].loc,
74
- error.body.detail?.[0].msg,
73
+ error.body.errors?.[0].location,
74
+ error.body.errors?.[0].message,
75
75
  );
76
76
  } else {
77
77
  throw error;
@@ -335,7 +335,7 @@ export class ServerURL {
335
335
 
336
336
  // Split URL into pathname and search parts
337
337
  const [pathname, search] = url.split("?");
338
-
338
+
339
339
  // Handle base path
340
340
  if (base && !pathname.startsWith("/")) {
341
341
  const baseDir = base.endsWith("/") ? base : base + "/";
@@ -433,9 +433,7 @@ export class ServerURLSearchParams {
433
433
  const pairs: string[] = [];
434
434
  for (const [key, values] of this.params) {
435
435
  for (const value of values) {
436
- pairs.push(
437
- `${encodeURIComponent(key)}=${encodeURIComponent(value)}`
438
- );
436
+ pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);
439
437
  }
440
438
  }
441
439
  return pairs.join("&");
@@ -8,11 +8,7 @@ from time import monotonic_ns
8
8
  from typing import Any
9
9
 
10
10
  import pytest
11
- from sqlalchemy import text
12
- from sqlalchemy.exc import DBAPIError
13
- from sqlalchemy.ext.asyncio import AsyncEngine
14
11
 
15
- from mountaineer.database import SQLModel
16
12
  from mountaineer.logging import LOGGER
17
13
 
18
14
 
@@ -157,39 +153,3 @@ def benchmark_function(
157
153
  return wrapper
158
154
 
159
155
  return wrapper_fn
160
-
161
-
162
- async def bootstrap_database(engine: AsyncEngine):
163
- # Test if we can connect to the database, if not throw an early error since
164
- # the user likely hasn't booted up the test database
165
- try:
166
- async with engine.connect() as conn:
167
- await conn.execute(text("SELECT 1"))
168
- except (DBAPIError, OSError) as e:
169
- # Handle specific database connection errors or raise a custom exception
170
- raise RuntimeError(
171
- "Failed to connect to the test database. Please ensure the database is running and accessible."
172
- ) from e
173
-
174
- # We do this at the beginning (instead of auto-cleaning at the end) to make sure
175
- # that interrupted runs aren't polluting our database state for a new run, and to
176
- # allow us to inspect failed tests after they're run
177
- LOGGER.info("Cleaning up test tables")
178
- async with engine.begin() as conn:
179
- await conn.run_sync(SQLModel.metadata.drop_all)
180
-
181
- async with engine.begin() as conn:
182
- await conn.run_sync(SQLModel.metadata.create_all)
183
-
184
- # Log the tables that were created
185
- result = await conn.execute(
186
- text(
187
- """
188
- SELECT table_name
189
- FROM information_schema.tables
190
- WHERE table_schema = 'public'
191
- """
192
- )
193
- )
194
- tables = "\n".join([f"* {table[0]}" for table in result.fetchall()])
195
- LOGGER.info(f"Created tables:\n{tables}")