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.
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.github/scripts/__tests__/test_update_version.py +49 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.github/scripts/update_version.py +4 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/Cargo.lock +1 -1
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/Cargo.toml +1 -1
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/PKG-INFO +10 -14
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/README.md +9 -10
- mountaineer-0.9.0.dev6/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/cli.py +104 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/config.py +1 -1
- {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
- {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
- {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
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/pyproject.toml +3 -2
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/app/home/page.tsx +4 -4
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/static/api.ts +2 -4
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/test_utilities.py +0 -40
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/poetry.lock +1 -242
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/pyproject.toml +2 -8
- mountaineer-0.9.0.dev5/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/cli.py +0 -68
- mountaineer-0.9.0.dev5/mountaineer/__tests__/database/dependencies/conftest.py +0 -8
- mountaineer-0.9.0.dev5/mountaineer/__tests__/database/dependencies/test_core.py +0 -31
- mountaineer-0.9.0.dev5/mountaineer/__tests__/database/test_config.py +0 -20
- mountaineer-0.9.0.dev5/mountaineer/__tests__/database/test_sqlmodel.py +0 -25
- mountaineer-0.9.0.dev5/mountaineer/__tests__/migrations/__init__.py +0 -0
- mountaineer-0.9.0.dev5/mountaineer/__tests__/migrations/conftest.py +0 -138
- mountaineer-0.9.0.dev5/mountaineer/__tests__/migrations/test_actions.py +0 -797
- mountaineer-0.9.0.dev5/mountaineer/__tests__/migrations/test_db_memory_serializer.py +0 -411
- mountaineer-0.9.0.dev5/mountaineer/__tests__/migrations/test_db_serializer.py +0 -401
- mountaineer-0.9.0.dev5/mountaineer/__tests__/migrations/test_db_stubs.py +0 -26
- mountaineer-0.9.0.dev5/mountaineer/__tests__/migrations/test_generator.py +0 -146
- mountaineer-0.9.0.dev5/mountaineer/__tests__/migrations/test_generics.py +0 -95
- mountaineer-0.9.0.dev5/mountaineer/__tests__/migrations/test_handlers.py +0 -368
- mountaineer-0.9.0.dev5/mountaineer/client_builder/interface_builders/__init__.py +0 -0
- mountaineer-0.9.0.dev5/mountaineer/controllers/__init__.py +0 -0
- mountaineer-0.9.0.dev5/mountaineer/database/__init__.py +0 -7
- mountaineer-0.9.0.dev5/mountaineer/database/cli.py +0 -56
- mountaineer-0.9.0.dev5/mountaineer/database/config.py +0 -52
- mountaineer-0.9.0.dev5/mountaineer/database/dependencies/__init__.py +0 -6
- mountaineer-0.9.0.dev5/mountaineer/database/dependencies/core.py +0 -113
- mountaineer-0.9.0.dev5/mountaineer/database/session.py +0 -87
- mountaineer-0.9.0.dev5/mountaineer/database/sqlmodel.py +0 -235
- mountaineer-0.9.0.dev5/mountaineer/database/validator.py +0 -216
- mountaineer-0.9.0.dev5/mountaineer/migrations/__init__.py +0 -0
- mountaineer-0.9.0.dev5/mountaineer/migrations/actions.py +0 -691
- mountaineer-0.9.0.dev5/mountaineer/migrations/cli.py +0 -244
- mountaineer-0.9.0.dev5/mountaineer/migrations/client_io.py +0 -62
- mountaineer-0.9.0.dev5/mountaineer/migrations/db_memory_serializer.py +0 -236
- mountaineer-0.9.0.dev5/mountaineer/migrations/db_serializer.py +0 -318
- mountaineer-0.9.0.dev5/mountaineer/migrations/db_stubs.py +0 -375
- mountaineer-0.9.0.dev5/mountaineer/migrations/dependency/__init__.py +0 -3
- mountaineer-0.9.0.dev5/mountaineer/migrations/dependency/core/__init__.py +0 -1
- mountaineer-0.9.0.dev5/mountaineer/migrations/dependency/core/core.py +0 -10
- mountaineer-0.9.0.dev5/mountaineer/migrations/generator.py +0 -252
- mountaineer-0.9.0.dev5/mountaineer/migrations/generics.py +0 -88
- mountaineer-0.9.0.dev5/mountaineer/migrations/handlers.py +0 -787
- mountaineer-0.9.0.dev5/mountaineer/migrations/migration.py +0 -69
- mountaineer-0.9.0.dev5/mountaineer/migrations/migrator.py +0 -122
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.git-blame-ignore-revs +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.gitattributes +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.github/README_SCRIPTS.md +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.github/poetry.lock +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.github/pyproject.toml +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.github/scripts/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.github/scripts/check_dependencies.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.github/workflows/test.yml +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.github/workflows/validate.yml +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.gitignore +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/Dockerfile +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/LICENSE +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/Makefile +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/benchmarking/README.md +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/benchmarking/benchmarking/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/benchmarking/benchmarking/simple_render.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/benchmarking/poetry.lock +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/benchmarking/pyproject.toml +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/README.md +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/__tests__/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/__tests__/common.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/__tests__/test_builder.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/__tests__/test_cli.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/__tests__/test_generation.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/builder.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/cli.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/environments/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/environments/base.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/environments/poetry.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/environments/venv.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/external.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/generation.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/io.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/.zed/settings.json +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/editor_configs/vim/.vimrc +0 -0
- {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
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/editor_configs/zed/pyrightconfig.json +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/.env +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/.gitignore +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/README.md +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/app.py +0 -0
- {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
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/[project_name]/main.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/create_mountaineer_app/templates/project/docker-compose.yml +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/poetry.lock +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/create_mountaineer_app/pyproject.toml +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/docker-compose.test.yml +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/media/header.png +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/actions/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/actions/test_fields.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/actions/test_passthrough_dec.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/actions/test_sideeffect_dec.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/conf_models.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/file_generators/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/file_generators/test_base.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/file_generators/test_globals.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/file_generators/test_locals.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/interface_builders/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/interface_builders/common.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/interface_builders/test_action.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/interface_builders/test_base.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/interface_builders/test_controller.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/interface_builders/test_enum.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/interface_builders/test_exception.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/interface_builders/test_model.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/test_aliases.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/test_parser.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/test_types.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_builder/test_typescript.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_compiler/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_compiler/test_compile.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_compiler/test_postcss.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/client_compiler/test_source_maps.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/common.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/conftest.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/controllers/test_traceback.py +0 -0
- {mountaineer-0.9.0.dev5/mountaineer/__tests__/database → mountaineer-0.9.0.dev6/mountaineer/__tests__/dependencies}/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/dependencies/test_base.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/README.md +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/app.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/cli.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/config.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/controllers/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/controllers/complex.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/controllers/detail.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/controllers/home.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/controllers/root_layout.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/controllers/stream.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/main.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/app/complex/page.tsx +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/app/detail/page.tsx +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/app/home/element.tsx +0 -0
- {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
- {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
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/app/layout.tsx +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/app/main.css +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/app/stream/page.tsx +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/package-lock.json +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/package.json +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/postcss.config.js +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/ci_webapp/views/tailwind.config.js +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/poetry.lock +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/ci_webapp/pyproject.toml +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/complex_controller_ssr_with_react.js +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/home_controller_source_map.js.map +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/home_controller_ssr_with_react.js +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/mock_webapp/simple_classes_1.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/mock_webapp/simple_classes_2.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/fixtures/mock_webapp/simple_controller.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/static/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/static/harness/__tests__/api_test.ts +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/static/harness/jest.config.js +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/static/harness/package-lock.json +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/static/harness/package.json +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/static/test_static.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_app.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_app_manager.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_cache.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_cli.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_compat.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_config.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_controller.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_controller_layout.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_cropper.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_exceptions.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_generics.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_hotreload.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_io.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_logging.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_paths.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_render.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_ssr.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_watch.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/__tests__/test_webservice.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/actions/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/actions/fields.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/actions/passthrough_dec.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/actions/sideeffect_dec.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/annotation_helpers.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/app.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/app_manager.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/cache.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/cli.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/aliases.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/builder.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/file_generators/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/file_generators/base.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/file_generators/globals.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/file_generators/locals.py +0 -0
- {mountaineer-0.9.0.dev5/mountaineer/__tests__/database/dependencies → mountaineer-0.9.0.dev6/mountaineer/client_builder/interface_builders}/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/interface_builders/action.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/interface_builders/base.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/interface_builders/controller.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/interface_builders/enum.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/interface_builders/exception.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/interface_builders/model.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/parser.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/types.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_builder/typescript.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_compiler/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_compiler/base.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_compiler/build_metadata.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_compiler/compile.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_compiler/exceptions.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_compiler/postcss.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/client_compiler/source_maps.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/compat.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/config.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/console.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/constants.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/controller.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/controller_layout.py +0 -0
- {mountaineer-0.9.0.dev5/mountaineer/__tests__/dependencies → mountaineer-0.9.0.dev6/mountaineer/controllers}/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/controllers/exception_controller.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/controllers/traceback.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/cropper.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/dependencies/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/dependencies/base.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/dependencies/core/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/dependencies/core/core.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/exceptions.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/generics.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/hotreload.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/io.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/logging.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/paths.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/py.typed +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/render.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/ssr.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/static/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/static/live_reload.ts +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/static/ssr_polyfills.js +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/views/__init__.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/views/core/exception/page.tsx +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/views/core/layout.tsx +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/views/core/main.css +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/views/package-lock.json +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/views/package.json +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/views/postcss.config.js +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/views/tailwind.config.js +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/watch.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/watch_server.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/mountaineer/webservice.py +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/benches/fixtures/complex_sourcemap_mapping.txt +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/benches/fixtures/home_controller_ssr_with_react.js +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/benches/fixtures/ssr_polyfill_archive.js +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/benches/lexers_benchmark.rs +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/benches/source_map_benchmark.rs +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/benches/ssr_benchmark.rs +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/bundle_independent.rs +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/bundle_prod.rs +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/code_gen.rs +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/errors.rs +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/lexers.rs +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/lib.rs +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/logging.rs +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/source_map.rs +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/ssr.rs +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src/timeout.rs +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src_go/Cargo.toml +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src_go/build.rs +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src_go/go/js_build.go +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src_go/go.mod +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src_go/go.sum +0 -0
- {mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/src_go/src/lib.rs +0 -0
{mountaineer-0.9.0.dev5 → mountaineer-0.9.0.dev6}/.github/scripts/__tests__/test_update_version.py
RENAMED
|
@@ -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
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: mountaineer
|
|
3
|
-
Version: 0.9.0.
|
|
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 [
|
|
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
|
|
124
|
+
from iceaxe import TableBase, Field
|
|
128
125
|
from uuid import UUID, uuid4
|
|
129
126
|
|
|
130
|
-
class TodoItem(
|
|
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
|
-
|
|
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:
|
|
175
|
+
session: DBConnection = Depends(DatabaseDependencies.get_db_connection)
|
|
179
176
|
) -> HomeRender:
|
|
180
|
-
todos =
|
|
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
|
|
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 [
|
|
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
|
|
108
|
+
from iceaxe import TableBase, Field
|
|
109
109
|
from uuid import UUID, uuid4
|
|
110
110
|
|
|
111
|
-
class TodoItem(
|
|
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
|
-
|
|
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:
|
|
159
|
+
session: DBConnection = Depends(DatabaseDependencies.get_db_connection)
|
|
160
160
|
) -> HomeRender:
|
|
161
|
-
todos =
|
|
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
|
|
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)
|
|
@@ -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.
|
|
6
|
-
from mountaineer
|
|
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:
|
|
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:
|
|
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.
|
|
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
|
|
6
|
-
from
|
|
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:
|
|
25
|
+
session: DBConnection = Depends(DatabaseDependencies.get_db_connection)
|
|
26
26
|
) -> HomeRender:
|
|
27
|
-
items =
|
|
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:
|
|
36
|
+
session: DBConnection = Depends(DatabaseDependencies.get_db_connection)
|
|
37
37
|
) -> None:
|
|
38
38
|
obj = models.DetailItem(description="Untitled Item")
|
|
39
|
-
session.
|
|
40
|
-
await session.commit()
|
|
39
|
+
await session.insert([obj])
|
|
41
40
|
{% endif %}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{% if create_stub_files %}
|
|
2
|
-
from
|
|
2
|
+
from iceaxe import TableBase, Field
|
|
3
3
|
|
|
4
|
-
class DetailItem(
|
|
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,
|
|
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
|
|
70
|
+
if (error instanceof RequestValidationError) {
|
|
71
71
|
console.log(
|
|
72
72
|
"Validation Error",
|
|
73
|
-
error.body.
|
|
74
|
-
error.body.
|
|
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}")
|