framework-m-studio 0.2.2__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/.gitignore +15 -0
- framework_m_studio-0.3.0/CHANGELOG.md +63 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/PKG-INFO +7 -2
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/README.md +3 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/pyproject.toml +33 -4
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/__init__.py +6 -1
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/app.py +56 -11
- framework_m_studio-0.3.0/src/framework_m_studio/checklist_parser.py +421 -0
- framework_m_studio-0.3.0/src/framework_m_studio/cli/__init__.py +752 -0
- framework_m_studio-0.3.0/src/framework_m_studio/cli/build.py +421 -0
- framework_m_studio-0.3.0/src/framework_m_studio/cli/dev.py +214 -0
- framework_m_studio-0.3.0/src/framework_m_studio/cli/new.py +754 -0
- framework_m_studio-0.3.0/src/framework_m_studio/cli/quality.py +157 -0
- framework_m_studio-0.3.0/src/framework_m_studio/cli/studio.py +159 -0
- framework_m_studio-0.3.0/src/framework_m_studio/cli/utility.py +50 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/codegen/generator.py +6 -2
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/codegen/parser.py +101 -4
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/codegen/templates/doctype.py.jinja2 +19 -10
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/codegen/test_generator.py +6 -2
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/discovery.py +15 -5
- framework_m_studio-0.3.0/src/framework_m_studio/docs_generator.py +614 -0
- framework_m_studio-0.3.0/src/framework_m_studio/protocol_scanner.py +435 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/routes.py +39 -11
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/CodePreview.tsx +36 -8
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/FieldEditor.tsx +53 -1
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/pages/doctypes/edit.tsx +111 -70
- framework_m_studio-0.3.0/tests/test_api_routes.py +209 -0
- framework_m_studio-0.3.0/tests/test_build.py +362 -0
- framework_m_studio-0.3.0/tests/test_build_extended.py +591 -0
- framework_m_studio-0.3.0/tests/test_dev.py +403 -0
- framework_m_studio-0.3.0/tests/test_discovery.py +416 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/test_docs_generator.py +180 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/test_generator.py +77 -11
- framework_m_studio-0.3.0/tests/test_new_cli.py +608 -0
- framework_m_studio-0.3.0/tests/test_parser.py +420 -0
- framework_m_studio-0.3.0/tests/test_protocol_scanner.py +184 -0
- framework_m_studio-0.3.0/tests/test_quality_cli.py +412 -0
- framework_m_studio-0.3.0/tests/test_studio.py +262 -0
- framework_m_studio-0.3.0/tests/test_utility_cli.py +71 -0
- framework_m_studio-0.2.2/CHANGELOG.md +0 -28
- framework_m_studio-0.2.2/src/framework_m_studio/cli.py +0 -247
- framework_m_studio-0.2.2/src/framework_m_studio/docs_generator.py +0 -318
- framework_m_studio-0.2.2/studio_ui/public/favicon.ico +0 -0
- framework_m_studio-0.2.2/tests/test_api_routes.py +0 -53
- framework_m_studio-0.2.2/tests/test_discovery.py +0 -212
- framework_m_studio-0.2.2/tests/test_parser.py +0 -203
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/docs/api/index.md +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/docs/user-guide.md +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/codegen/__init__.py +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/codegen/templates/test_doctype.py.jinja2 +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/codegen/transformer.py +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/git/__init__.py +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/git/adapter.py +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/git/github_provider.py +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/git/protocol.py +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/py.typed +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/sdk_generator.py +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/src/framework_m_studio/workspace.py +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/.gitignore +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/.npmrc +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/Dockerfile +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/README.MD +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/eslint.config.js +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/index.html +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/package.json +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/pnpm-lock.yaml +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/App.css +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/App.test.tsx +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/App.tsx +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/AutoForm.tsx +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/AutoTable.tsx +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/ControllerEditor.tsx +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/ERDView.tsx +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/LayoutDesigner.tsx +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/ModuleExplorer.tsx +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/NestedEditorDrawer.tsx +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/SandboxPreview.tsx +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/TableFieldEditor.tsx +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/breadcrumb/index.tsx +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/fields/DefaultFieldComponents.tsx +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/fields/index.ts +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/fields/resolveFieldComponent.ts +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/layout/index.tsx +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/components/menu/index.tsx +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/index.css +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/index.tsx +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/pages/doctypes/index.ts +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/pages/doctypes/list.tsx +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/pages/index.ts +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/providers/ThemeContext.ts +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/providers/constants.ts +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/providers/data.ts +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/providers/theme.tsx +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/providers/useTheme.ts +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/registry/defaultComponents.ts +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/registry/fieldComponents.ts +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/registry/index.ts +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/setupTests.ts +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/utils/mockDataGenerator.ts +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/src/vite-env.d.ts +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/tsconfig.json +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/tsconfig.node.json +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/vite.config.ts +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/studio_ui/vitest.config.ts +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/__init__.py +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/conftest.py +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/test_cli.py +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/test_git_adapter.py +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/test_git_protocol.py +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/test_github_provider.py +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/test_sdk_generator.py +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/test_transformer.py +0 -0
- {framework_m_studio-0.2.2 → framework_m_studio-0.3.0}/tests/test_workspace.py +0 -0
|
@@ -77,6 +77,9 @@ docker-compose.override.yml
|
|
|
77
77
|
# Studio UI built assets
|
|
78
78
|
apps/studio/src/framework_m_studio/static/
|
|
79
79
|
|
|
80
|
+
# Desk UI built assets (bundled with framework-m package)
|
|
81
|
+
libs/framework-m/src/framework_m/static/assets/
|
|
82
|
+
|
|
80
83
|
#doctypes
|
|
81
84
|
doctypes/*.py
|
|
82
85
|
apps/studio/src/doctypes/*.py
|
|
@@ -105,3 +108,15 @@ yarn-error.log*
|
|
|
105
108
|
.idea/
|
|
106
109
|
*.sublime-project
|
|
107
110
|
*.sublime-workspace
|
|
111
|
+
|
|
112
|
+
# Generated Documentation
|
|
113
|
+
docs/developer/generated/
|
|
114
|
+
docs/machine/
|
|
115
|
+
|
|
116
|
+
# Website
|
|
117
|
+
website/.docusaurus/
|
|
118
|
+
website/build/
|
|
119
|
+
website/node_modules/
|
|
120
|
+
|
|
121
|
+
# GitLab Pages
|
|
122
|
+
public/
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## framework-m-studio v0.3.0
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- support namespaced app, test directory and dev.py moved to studio (37beae6)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## framework-m-studio v0.2.8
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
- add ruff code style badge to README (c2482ea)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## framework-m-studio v0.2.7
|
|
18
|
+
|
|
19
|
+
### Bug Fixes
|
|
20
|
+
|
|
21
|
+
- add Python version and license badges to README (90d1adf)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
## framework-m-studio v0.2.6
|
|
25
|
+
|
|
26
|
+
### Bug Fixes
|
|
27
|
+
|
|
28
|
+
- format and lint (090018f)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
## framework-m-studio v0.2.3
|
|
32
|
+
|
|
33
|
+
### Bug Fixes
|
|
34
|
+
|
|
35
|
+
- ensure static assets are bundled in the wheel (ce0a0e1)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
## framework-m-studio v0.2.2
|
|
39
|
+
|
|
40
|
+
### Bug Fixes
|
|
41
|
+
|
|
42
|
+
- add badges to readme (012333b)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
## framework-m-studio v0.2.1
|
|
46
|
+
|
|
47
|
+
### Bug Fixes
|
|
48
|
+
|
|
49
|
+
- modernize aesthetics (300cdda)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
## framework-m-studio 0.2.0
|
|
53
|
+
|
|
54
|
+
### Features
|
|
55
|
+
|
|
56
|
+
- implement path prefix architecture for UI/API separation (7a8d2d2)
|
|
57
|
+
- add cloud workspace & git adapter, controller scaffolding and sandbox (a7a4a3e)
|
|
58
|
+
- implement Studio backend and frontend (abf5d03)
|
|
59
|
+
|
|
60
|
+
### Bug Fixes
|
|
61
|
+
|
|
62
|
+
- include static files in package for PyPI publishing (565bcb8)
|
|
63
|
+
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: framework-m-studio
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Framework M Studio - Visual DocType Builder & Developer Tools
|
|
5
5
|
Project-URL: Homepage, https://gitlab.com/castlecraft/framework-m
|
|
6
6
|
Project-URL: Documentation, https://gitlab.com/castlecraft/framework-m#readme
|
|
@@ -17,7 +17,9 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.13
|
|
18
18
|
Classifier: Typing :: Typed
|
|
19
19
|
Requires-Python: >=3.12
|
|
20
|
-
Requires-Dist: framework-m
|
|
20
|
+
Requires-Dist: framework-m-core>=0.5.0
|
|
21
|
+
Requires-Dist: framework-m>=0.4.2
|
|
22
|
+
Requires-Dist: honcho>=1.1.0
|
|
21
23
|
Requires-Dist: jinja2>=3.1.0
|
|
22
24
|
Requires-Dist: libcst>=1.0.0
|
|
23
25
|
Description-Content-Type: text/markdown
|
|
@@ -27,7 +29,10 @@ Description-Content-Type: text/markdown
|
|
|
27
29
|
Visual DocType builder and developer tools for Framework M.
|
|
28
30
|
|
|
29
31
|
[](https://badge.fury.io/py/framework-m-studio)
|
|
32
|
+
[](https://www.python.org/downloads/)
|
|
33
|
+
[](https://opensource.org/licenses/MIT)
|
|
30
34
|
[](https://gitlab.com/castlecraft/framework-m/-/pipelines)
|
|
35
|
+
[](https://github.com/astral-sh/ruff)
|
|
31
36
|
|
|
32
37
|
## Overview
|
|
33
38
|
|
|
@@ -3,7 +3,10 @@
|
|
|
3
3
|
Visual DocType builder and developer tools for Framework M.
|
|
4
4
|
|
|
5
5
|
[](https://badge.fury.io/py/framework-m-studio)
|
|
6
|
+
[](https://www.python.org/downloads/)
|
|
7
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
8
|
[](https://gitlab.com/castlecraft/framework-m/-/pipelines)
|
|
9
|
+
[](https://github.com/astral-sh/ruff)
|
|
7
10
|
|
|
8
11
|
## Overview
|
|
9
12
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "framework-m-studio"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.3.0"
|
|
4
4
|
description = "Framework M Studio - Visual DocType Builder & Developer Tools"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { text = "MIT" }
|
|
@@ -21,12 +21,19 @@ classifiers = [
|
|
|
21
21
|
]
|
|
22
22
|
|
|
23
23
|
dependencies = [
|
|
24
|
-
"framework-m",
|
|
24
|
+
"framework-m-core>=0.5.0",
|
|
25
|
+
"framework-m>=0.4.2",
|
|
25
26
|
# Code generation
|
|
26
27
|
"libcst>=1.0.0",
|
|
27
28
|
"jinja2>=3.1.0",
|
|
29
|
+
# Process management for dev command
|
|
30
|
+
"honcho>=1.1.0",
|
|
28
31
|
]
|
|
29
32
|
|
|
33
|
+
[tool.uv.sources]
|
|
34
|
+
framework-m-core = { workspace = true }
|
|
35
|
+
framework-m = { workspace = true }
|
|
36
|
+
|
|
30
37
|
[dependency-groups]
|
|
31
38
|
dev = [
|
|
32
39
|
"pytest>=8.0.0",
|
|
@@ -41,11 +48,26 @@ dev = [
|
|
|
41
48
|
"twine>=5.0.0",
|
|
42
49
|
]
|
|
43
50
|
|
|
44
|
-
[project.entry-points."
|
|
51
|
+
[project.entry-points."framework_m_core.cli_commands"]
|
|
45
52
|
# These commands override/extend base CLI when framework-m-studio is installed
|
|
46
53
|
codegen = "framework_m_studio.cli:codegen_app"
|
|
47
54
|
studio = "framework_m_studio.cli:studio_app"
|
|
48
55
|
docs = "framework_m_studio.cli:docs_app"
|
|
56
|
+
"docs:generate" = "framework_m_studio.cli:docs_generate"
|
|
57
|
+
"docs:export" = "framework_m_studio.cli:docs_export"
|
|
58
|
+
"docs:adr" = "framework_m_studio.cli:docs_adr"
|
|
59
|
+
"docs:rfc" = "framework_m_studio.cli:docs_rfc"
|
|
60
|
+
new = "framework_m_studio.cli.new:new_app_command"
|
|
61
|
+
"new:doctype" = "framework_m_studio.cli.new:new_doctype_command"
|
|
62
|
+
"new:app" = "framework_m_studio.cli.new:new_app_command"
|
|
63
|
+
test = "framework_m_studio.cli.quality:test_command"
|
|
64
|
+
lint = "framework_m_studio.cli.quality:lint_command"
|
|
65
|
+
format = "framework_m_studio.cli.quality:format_command"
|
|
66
|
+
typecheck = "framework_m_studio.cli.quality:typecheck_command"
|
|
67
|
+
console = "framework_m_studio.cli.utility:console_command"
|
|
68
|
+
routes = "framework_m_studio.cli.utility:routes_command"
|
|
69
|
+
dev = "framework_m_studio.cli.dev:dev_command"
|
|
70
|
+
|
|
49
71
|
|
|
50
72
|
[project.urls]
|
|
51
73
|
Homepage = "https://gitlab.com/castlecraft/framework-m"
|
|
@@ -68,7 +90,9 @@ exclude = [
|
|
|
68
90
|
|
|
69
91
|
[tool.hatch.build.targets.wheel]
|
|
70
92
|
packages = ["src/framework_m_studio"]
|
|
71
|
-
|
|
93
|
+
include = [
|
|
94
|
+
"src/framework_m_studio/static/**/*",
|
|
95
|
+
]
|
|
72
96
|
|
|
73
97
|
[tool.pytest.ini_options]
|
|
74
98
|
asyncio_mode = "auto"
|
|
@@ -90,12 +114,17 @@ explicit_package_bases = true
|
|
|
90
114
|
exclude = [
|
|
91
115
|
"tests/",
|
|
92
116
|
".venv/",
|
|
117
|
+
"src/doctypes/",
|
|
93
118
|
]
|
|
94
119
|
|
|
95
120
|
[[tool.mypy.overrides]]
|
|
96
121
|
module = "framework_m.core.fields.registry"
|
|
97
122
|
ignore_missing_imports = true
|
|
98
123
|
|
|
124
|
+
[[tool.mypy.overrides]]
|
|
125
|
+
module = "honcho.*"
|
|
126
|
+
ignore_missing_imports = true
|
|
127
|
+
|
|
99
128
|
[tool.ruff]
|
|
100
129
|
line-length = 88
|
|
101
130
|
target-version = "py312"
|
|
@@ -11,6 +11,11 @@ runtime lightweight. Install as a dev dependency.
|
|
|
11
11
|
|
|
12
12
|
from __future__ import annotations
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
import importlib.metadata
|
|
15
|
+
|
|
16
|
+
try:
|
|
17
|
+
__version__ = importlib.metadata.version("framework-m-studio")
|
|
18
|
+
except importlib.metadata.PackageNotFoundError:
|
|
19
|
+
__version__ = "0.0.0"
|
|
15
20
|
|
|
16
21
|
__all__ = ["__version__"]
|
|
@@ -43,19 +43,64 @@ async def api_root() -> dict[str, Any]:
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
|
|
46
|
-
def _get_spa_response(path: str) -> Response[
|
|
47
|
-
"""Helper to serve SPA files.
|
|
46
|
+
def _get_spa_response(path: str) -> Response[bytes | dict[str, str]]:
|
|
47
|
+
"""Helper to serve SPA files.
|
|
48
|
+
|
|
49
|
+
Returns HTML content for missing builds, or serves actual static files
|
|
50
|
+
when the SPA is built. This is the standard approach for SPAs - serving
|
|
51
|
+
HTML directly without requiring a template engine configuration.
|
|
52
|
+
"""
|
|
48
53
|
if not STATIC_DIR.exists():
|
|
49
54
|
# Development mode: no built assets yet
|
|
55
|
+
# Return HTML placeholder directly (no template engine needed)
|
|
56
|
+
html_content = """<!DOCTYPE html>
|
|
57
|
+
<html lang="en">
|
|
58
|
+
<head>
|
|
59
|
+
<meta charset="UTF-8">
|
|
60
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
61
|
+
<title>Framework M Studio - Build Required</title>
|
|
62
|
+
<style>
|
|
63
|
+
body {
|
|
64
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
|
65
|
+
max-width: 600px;
|
|
66
|
+
margin: 100px auto;
|
|
67
|
+
padding: 20px;
|
|
68
|
+
line-height: 1.6;
|
|
69
|
+
}
|
|
70
|
+
h1 { color: #333; }
|
|
71
|
+
code {
|
|
72
|
+
background: #f4f4f4;
|
|
73
|
+
padding: 2px 6px;
|
|
74
|
+
border-radius: 3px;
|
|
75
|
+
font-family: monospace;
|
|
76
|
+
}
|
|
77
|
+
.api-links { margin-top: 30px; }
|
|
78
|
+
.api-links a {
|
|
79
|
+
display: block;
|
|
80
|
+
margin: 10px 0;
|
|
81
|
+
color: #0066cc;
|
|
82
|
+
text-decoration: none;
|
|
83
|
+
}
|
|
84
|
+
.api-links a:hover { text-decoration: underline; }
|
|
85
|
+
</style>
|
|
86
|
+
</head>
|
|
87
|
+
<body>
|
|
88
|
+
<h1>Studio UI Not Built</h1>
|
|
89
|
+
<p>The Studio UI assets have not been built yet.</p>
|
|
90
|
+
<p>To build the UI, run:</p>
|
|
91
|
+
<pre><code>cd apps/studio/studio_ui && pnpm install && pnpm build</code></pre>
|
|
92
|
+
|
|
93
|
+
<div class="api-links">
|
|
94
|
+
<h3>Available API Endpoints:</h3>
|
|
95
|
+
<a href="/studio/api/health">Health Check</a>
|
|
96
|
+
<a href="/studio/api/doctypes">DocTypes API</a>
|
|
97
|
+
<a href="/studio/api/field-types">Field Types API</a>
|
|
98
|
+
</div>
|
|
99
|
+
</body>
|
|
100
|
+
</html>"""
|
|
50
101
|
return Response(
|
|
51
|
-
content=
|
|
52
|
-
|
|
53
|
-
"hint": "Run: cd apps/studio/studio_ui && pnpm build",
|
|
54
|
-
"api_health": "/studio/api/health",
|
|
55
|
-
"api_doctypes": "/studio/api/doctypes",
|
|
56
|
-
"api_field_types": "/studio/api/field-types",
|
|
57
|
-
},
|
|
58
|
-
media_type="application/json",
|
|
102
|
+
content=html_content.encode("utf-8"),
|
|
103
|
+
media_type="text/html; charset=utf-8",
|
|
59
104
|
)
|
|
60
105
|
|
|
61
106
|
# Check for actual file
|
|
@@ -125,7 +170,7 @@ async def list_field_types() -> dict[str, Any]:
|
|
|
125
170
|
Uses FieldRegistry for dynamic discovery.
|
|
126
171
|
"""
|
|
127
172
|
try:
|
|
128
|
-
from
|
|
173
|
+
from framework_m_standard.adapters.db.field_registry import FieldRegistry
|
|
129
174
|
|
|
130
175
|
types_list = []
|
|
131
176
|
for type_info in FieldRegistry.get_instance().get_all_types():
|