openadmin-dev 0.3.0__py3-none-any.whl → 0.4.0__py3-none-any.whl
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.
- openadmin/fastapi/__init__.py +2 -4
- openadmin/fastapi/deps.py +26 -0
- openadmin/fastapi/types/__init__.py +2 -0
- openadmin/fastapi/types/action.py +4 -6
- openadmin/fastapi/types/area_chart.py +4 -6
- openadmin/fastapi/types/bar_chart.py +4 -6
- openadmin/fastapi/types/form.py +4 -6
- openadmin/fastapi/types/line_chart.py +4 -6
- openadmin/fastapi/types/markdown.py +4 -6
- openadmin/fastapi/types/pagination_params.py +10 -0
- openadmin/fastapi/types/pie_chart.py +4 -6
- openadmin/fastapi/types/stat.py +4 -6
- openadmin/fastapi/types/table.py +4 -6
- openadmin/fastapi/utils.py +17 -0
- {openadmin_dev-0.3.0.dist-info → openadmin_dev-0.4.0.dist-info}/METADATA +2 -2
- {openadmin_dev-0.3.0.dist-info → openadmin_dev-0.4.0.dist-info}/RECORD +18 -16
- {openadmin_dev-0.3.0.dist-info → openadmin_dev-0.4.0.dist-info}/WHEEL +0 -0
- {openadmin_dev-0.3.0.dist-info → openadmin_dev-0.4.0.dist-info}/licenses/LICENSE +0 -0
openadmin/fastapi/__init__.py
CHANGED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2026 OpenAdmin
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
|
+
|
|
5
|
+
from typing import Annotated
|
|
6
|
+
|
|
7
|
+
from fastapi import Depends, Query
|
|
8
|
+
|
|
9
|
+
from .types import PaginationParams
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def pagination_params(
|
|
13
|
+
page: int = Query(default=0, ge=0, description="Page number"),
|
|
14
|
+
per_page: int = Query(default=10, ge=1, description="Number of items per page"),
|
|
15
|
+
) -> PaginationParams:
|
|
16
|
+
return PaginationParams(page=page, per_page=per_page)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def get_search_query(
|
|
20
|
+
search: str | None = Query(None, min_length=1, description="Search query"),
|
|
21
|
+
) -> str | None:
|
|
22
|
+
return search
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
PageDep = Annotated[PaginationParams, Depends(pagination_params)]
|
|
26
|
+
SearchQueryDep = Annotated[str | None, Depends(get_search_query)]
|
|
@@ -11,6 +11,7 @@ from .form import Form
|
|
|
11
11
|
from .line_chart import LineChart
|
|
12
12
|
from .markdown import Markdown
|
|
13
13
|
from .page_protocol import PageProtocol
|
|
14
|
+
from .pagination_params import PaginationParams
|
|
14
15
|
from .pie_chart import PieChart
|
|
15
16
|
from .section import Section
|
|
16
17
|
from .stat import Stat
|
|
@@ -33,4 +34,5 @@ __all__ = [
|
|
|
33
34
|
"PieChart",
|
|
34
35
|
"Component",
|
|
35
36
|
"Markdown",
|
|
37
|
+
"PaginationParams",
|
|
36
38
|
]
|
|
@@ -3,18 +3,16 @@
|
|
|
3
3
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
4
|
|
|
5
5
|
from collections.abc import Callable
|
|
6
|
-
|
|
7
|
-
from pydantic import BaseModel, ConfigDict
|
|
6
|
+
from dataclasses import dataclass, field
|
|
8
7
|
|
|
9
8
|
from openadmin import spec
|
|
10
9
|
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
@dataclass
|
|
12
|
+
class Action:
|
|
15
13
|
function_name: str
|
|
16
14
|
name: str
|
|
17
15
|
description: str | None
|
|
18
16
|
method: spec.HttpMethod
|
|
19
17
|
is_hidden: bool
|
|
20
|
-
func: Callable | None = None
|
|
18
|
+
func: Callable | None = field(default=None)
|
|
@@ -3,17 +3,15 @@
|
|
|
3
3
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
4
|
|
|
5
5
|
from collections.abc import Callable
|
|
6
|
-
|
|
7
|
-
from pydantic import BaseModel, ConfigDict
|
|
6
|
+
from dataclasses import dataclass, field
|
|
8
7
|
|
|
9
8
|
from openadmin import spec
|
|
10
9
|
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
@dataclass
|
|
12
|
+
class AreaChart:
|
|
15
13
|
function_name: str
|
|
16
14
|
name: str
|
|
17
15
|
description: str | None
|
|
18
16
|
method: spec.HttpMethod
|
|
19
|
-
func: Callable | None = None
|
|
17
|
+
func: Callable | None = field(default=None)
|
|
@@ -3,17 +3,15 @@
|
|
|
3
3
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
4
|
|
|
5
5
|
from collections.abc import Callable
|
|
6
|
-
|
|
7
|
-
from pydantic import BaseModel, ConfigDict
|
|
6
|
+
from dataclasses import dataclass, field
|
|
8
7
|
|
|
9
8
|
from openadmin import spec
|
|
10
9
|
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
@dataclass
|
|
12
|
+
class BarChart:
|
|
15
13
|
function_name: str
|
|
16
14
|
name: str
|
|
17
15
|
description: str | None
|
|
18
16
|
method: spec.HttpMethod
|
|
19
|
-
func: Callable | None = None
|
|
17
|
+
func: Callable | None = field(default=None)
|
openadmin/fastapi/types/form.py
CHANGED
|
@@ -3,18 +3,16 @@
|
|
|
3
3
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
4
|
|
|
5
5
|
from collections.abc import Callable
|
|
6
|
-
|
|
7
|
-
from pydantic import BaseModel, ConfigDict
|
|
6
|
+
from dataclasses import dataclass, field
|
|
8
7
|
|
|
9
8
|
from openadmin import spec
|
|
10
9
|
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
@dataclass
|
|
12
|
+
class Form:
|
|
15
13
|
function_name: str
|
|
16
14
|
name: str
|
|
17
15
|
description: str | None
|
|
18
16
|
method: spec.HttpMethod
|
|
19
17
|
is_hiden: bool
|
|
20
|
-
func: Callable | None = None
|
|
18
|
+
func: Callable | None = field(default=None)
|
|
@@ -3,17 +3,15 @@
|
|
|
3
3
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
4
|
|
|
5
5
|
from collections.abc import Callable
|
|
6
|
-
|
|
7
|
-
from pydantic import BaseModel, ConfigDict
|
|
6
|
+
from dataclasses import dataclass, field
|
|
8
7
|
|
|
9
8
|
from openadmin import spec
|
|
10
9
|
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
@dataclass
|
|
12
|
+
class LineChart:
|
|
15
13
|
function_name: str
|
|
16
14
|
name: str
|
|
17
15
|
description: str | None
|
|
18
16
|
method: spec.HttpMethod
|
|
19
|
-
func: Callable | None = None
|
|
17
|
+
func: Callable | None = field(default=None)
|
|
@@ -3,17 +3,15 @@
|
|
|
3
3
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
4
|
|
|
5
5
|
from collections.abc import Callable
|
|
6
|
-
|
|
7
|
-
from pydantic import BaseModel, ConfigDict
|
|
6
|
+
from dataclasses import dataclass, field
|
|
8
7
|
|
|
9
8
|
from openadmin import spec
|
|
10
9
|
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
@dataclass
|
|
12
|
+
class Markdown:
|
|
15
13
|
function_name: str
|
|
16
14
|
name: str
|
|
17
15
|
description: str | None
|
|
18
16
|
method: spec.HttpMethod
|
|
19
|
-
func: Callable | None = None
|
|
17
|
+
func: Callable | None = field(default=None)
|
|
@@ -3,17 +3,15 @@
|
|
|
3
3
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
4
|
|
|
5
5
|
from collections.abc import Callable
|
|
6
|
-
|
|
7
|
-
from pydantic import BaseModel, ConfigDict
|
|
6
|
+
from dataclasses import dataclass, field
|
|
8
7
|
|
|
9
8
|
from openadmin import spec
|
|
10
9
|
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
@dataclass
|
|
12
|
+
class PieChart:
|
|
15
13
|
function_name: str
|
|
16
14
|
name: str
|
|
17
15
|
description: str | None
|
|
18
16
|
method: spec.HttpMethod
|
|
19
|
-
func: Callable | None = None
|
|
17
|
+
func: Callable | None = field(default=None)
|
openadmin/fastapi/types/stat.py
CHANGED
|
@@ -3,17 +3,15 @@
|
|
|
3
3
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
4
|
|
|
5
5
|
from collections.abc import Callable
|
|
6
|
-
|
|
7
|
-
from pydantic import BaseModel, ConfigDict
|
|
6
|
+
from dataclasses import dataclass, field
|
|
8
7
|
|
|
9
8
|
from openadmin import spec
|
|
10
9
|
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
@dataclass
|
|
12
|
+
class Stat:
|
|
15
13
|
function_name: str
|
|
16
14
|
method: spec.HttpMethod
|
|
17
15
|
name: str
|
|
18
16
|
description: str | None
|
|
19
|
-
func: Callable | None = None
|
|
17
|
+
func: Callable | None = field(default=None)
|
openadmin/fastapi/types/table.py
CHANGED
|
@@ -3,17 +3,15 @@
|
|
|
3
3
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
4
|
|
|
5
5
|
from collections.abc import Callable
|
|
6
|
-
|
|
7
|
-
from pydantic import BaseModel, ConfigDict
|
|
6
|
+
from dataclasses import dataclass, field
|
|
8
7
|
|
|
9
8
|
from openadmin import spec
|
|
10
9
|
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
@dataclass
|
|
12
|
+
class Table:
|
|
15
13
|
function_name: str
|
|
16
14
|
method: spec.HttpMethod
|
|
17
15
|
name: str
|
|
18
16
|
description: str | None
|
|
19
|
-
func: Callable | None = None
|
|
17
|
+
func: Callable | None = field(default=None)
|
openadmin/fastapi/utils.py
CHANGED
|
@@ -8,6 +8,7 @@ from typing import Annotated, get_args, get_origin, get_type_hints
|
|
|
8
8
|
import pydantic
|
|
9
9
|
|
|
10
10
|
from fastapi.params import Body as BodyParam
|
|
11
|
+
from fastapi.params import Depends as DependsParam
|
|
11
12
|
from fastapi.params import Form as FormParam
|
|
12
13
|
from fastapi.params import Query as QueryParam
|
|
13
14
|
from openadmin import spec
|
|
@@ -131,10 +132,14 @@ def extract_params(
|
|
|
131
132
|
marker = None
|
|
132
133
|
actual_type = annotation
|
|
133
134
|
|
|
135
|
+
depends_marker = None
|
|
134
136
|
if get_origin(annotation) is Annotated:
|
|
135
137
|
args = get_args(annotation)
|
|
136
138
|
actual_type = args[0]
|
|
137
139
|
for arg in args[1:]:
|
|
140
|
+
if isinstance(arg, DependsParam):
|
|
141
|
+
depends_marker = arg
|
|
142
|
+
break
|
|
138
143
|
if isinstance(arg, (QueryParam, BodyParam, FormParam)):
|
|
139
144
|
marker = arg
|
|
140
145
|
break
|
|
@@ -142,6 +147,18 @@ def extract_params(
|
|
|
142
147
|
if marker is None and isinstance(default, (QueryParam, BodyParam, FormParam)):
|
|
143
148
|
marker = default
|
|
144
149
|
|
|
150
|
+
if depends_marker is not None:
|
|
151
|
+
dep_fn = depends_marker.dependency
|
|
152
|
+
if callable(dep_fn):
|
|
153
|
+
dep_query, dep_body, dep_form = extract_params(dep_fn)
|
|
154
|
+
if dep_query:
|
|
155
|
+
query.extend(dep_query)
|
|
156
|
+
if dep_body:
|
|
157
|
+
body.extend(dep_body)
|
|
158
|
+
if dep_form:
|
|
159
|
+
form.extend(dep_form)
|
|
160
|
+
continue
|
|
161
|
+
|
|
145
162
|
# FormParam must be checked before BodyParam — Form is a subclass of Body
|
|
146
163
|
if isinstance(marker, QueryParam):
|
|
147
164
|
query.append(_make_property(param_name, actual_type, marker))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openadmin-dev
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: Add your description here
|
|
5
5
|
Project-URL: Homepage, https://github.com/openadmin-team/openadmin-py
|
|
6
6
|
Project-URL: Issues, https://github.com/openadmin-team/openadmin-py/issues
|
|
@@ -27,7 +27,7 @@ Description-Content-Type: text/markdown
|
|
|
27
27
|
# 🚧 Project is under development 🚧
|
|
28
28
|
---
|
|
29
29
|
|
|
30
|
-
**OpenAdmin** is a FastAPI-native library for building admin dashboards. Define pages with typed decorators — no frontend code, no templates, no configuration files. Every page is just a router; every widget is just an endpoint
|
|
30
|
+
**OpenAdmin** is a FastAPI-native library for building admin dashboards. Define pages with typed decorators — no frontend code, no templates, no configuration files. Every page is just a router; every widget is just an endpoint
|
|
31
31
|
|
|
32
32
|
## Features
|
|
33
33
|
|
|
@@ -1,19 +1,21 @@
|
|
|
1
|
-
openadmin/fastapi/__init__.py,sha256=
|
|
1
|
+
openadmin/fastapi/__init__.py,sha256=ssQtgZVSRIZfh7I2mpsj2wdlUryjPoEB3sLwDmMVv5I,269
|
|
2
2
|
openadmin/fastapi/admin_page.py,sha256=kwEBjxB9iso6mtJmm41goEY-a8RTuF6fcDMzEq0Fk1E,15478
|
|
3
3
|
openadmin/fastapi/admin_panel.py,sha256=LzpEjIL17Xxf1rXq4e6W2pzG9SErdlFB8NjQxEj7lys,2609
|
|
4
|
-
openadmin/fastapi/
|
|
5
|
-
openadmin/fastapi/
|
|
6
|
-
openadmin/fastapi/types/
|
|
7
|
-
openadmin/fastapi/types/
|
|
8
|
-
openadmin/fastapi/types/
|
|
9
|
-
openadmin/fastapi/types/
|
|
10
|
-
openadmin/fastapi/types/
|
|
11
|
-
openadmin/fastapi/types/
|
|
4
|
+
openadmin/fastapi/deps.py,sha256=WJzO6zahevIPqAollimsha-2bRF5es-UcaXzllfkktM,722
|
|
5
|
+
openadmin/fastapi/utils.py,sha256=IPG2uSJSe8AeIW4iYSLrMx_8DoDiMr3z_dzG1Gxr4wo,5806
|
|
6
|
+
openadmin/fastapi/types/__init__.py,sha256=v9OMUIeYzS6NNVRqQJQUNCim6Hd8Zi0hbqqssTCrCWw,826
|
|
7
|
+
openadmin/fastapi/types/action.py,sha256=gfGQDHAey8ldg7JIUXFLqidiCmsEfBmYO0H-TRtRsTo,383
|
|
8
|
+
openadmin/fastapi/types/area_chart.py,sha256=gRb3N-XgBJZwYMMQ-uvhdCCeIrQT0fmf6CFLAcQ0DRQ,366
|
|
9
|
+
openadmin/fastapi/types/bar_chart.py,sha256=ZHnK8oE3s0YSWXYwTyh-hziXgiIH5SvL2L1-0DKJMkg,365
|
|
10
|
+
openadmin/fastapi/types/form.py,sha256=tq6J3zdWT_S4y_j8UwclLqx2k8eYWhPmAht_E_1YCE0,380
|
|
11
|
+
openadmin/fastapi/types/line_chart.py,sha256=61Igaw_3_S65ZQZctrfLADZEo9rKhWH9iVUwOfhAc0M,366
|
|
12
|
+
openadmin/fastapi/types/markdown.py,sha256=iXTkZX4_L_-zCAWA7F6j5h0YR6BYjbl4tL6BPpfO0-g,365
|
|
12
13
|
openadmin/fastapi/types/page_protocol.py,sha256=zMio8SamTFO6_Dxp_8_xnErTC6VEfryVtW_5jOM6oDw,265
|
|
13
|
-
openadmin/fastapi/types/
|
|
14
|
+
openadmin/fastapi/types/pagination_params.py,sha256=oVI5VkYYwqpZkJBErQTCbDzGgvjRJFY0rl50rbWII5g,189
|
|
15
|
+
openadmin/fastapi/types/pie_chart.py,sha256=oUpOpCrgsnhsr742f10W3MoVQvtchsDJktLvmEuOLMk,365
|
|
14
16
|
openadmin/fastapi/types/section.py,sha256=oWo5caUkLrdmvXnc3pdCC3cwLk8iMT4slrH5GnxI0E8,296
|
|
15
|
-
openadmin/fastapi/types/stat.py,sha256=
|
|
16
|
-
openadmin/fastapi/types/table.py,sha256=
|
|
17
|
+
openadmin/fastapi/types/stat.py,sha256=eHLHzjld1E1RtiC6iVa-vdxIysNUtUynurHlxes1c-4,361
|
|
18
|
+
openadmin/fastapi/types/table.py,sha256=3DrRzt7QDQBzVU4bXNsDjr6QKtMKExaEkVQDDUs_tow,362
|
|
17
19
|
openadmin/spec/__init__.py,sha256=9ZZnQz67JN7TyZhoI43G7aNKkOidXFX5Lxjkr41lYQ8,660
|
|
18
20
|
openadmin/spec/page.py,sha256=XCiQM_37lTQjjMQjWhrWSHof-pD_j69HZu5n27iHfcA,279
|
|
19
21
|
openadmin/spec/section.py,sha256=9qZny4rGqHeMpl2VApF8vqLuR-oMsc2kE1DmQdO62BI,261
|
|
@@ -31,7 +33,7 @@ openadmin/spec/components/property.py,sha256=svoPxt3miGmK_ySFPFJmGdfZIAYBxaK37Vs
|
|
|
31
33
|
openadmin/spec/components/property_type.py,sha256=m1eJ7H5YIP4dhaa899Qc9BCRkZOwP_DELl6vPZB31HY,306
|
|
32
34
|
openadmin/spec/components/stat.py,sha256=sXQttzMJulS68foVeJ2Y0W4-UH_FSa4nOnxiLfQSGGE,400
|
|
33
35
|
openadmin/spec/components/table.py,sha256=8dJFnKNj-yOE85mFWQVdoku5tTWA4UZHwV8zId0z6j8,500
|
|
34
|
-
openadmin_dev-0.
|
|
35
|
-
openadmin_dev-0.
|
|
36
|
-
openadmin_dev-0.
|
|
37
|
-
openadmin_dev-0.
|
|
36
|
+
openadmin_dev-0.4.0.dist-info/METADATA,sha256=Jn-MNBsy7UfQdNkISX2MCqswjW8xwDafTbsir0GQkNQ,8940
|
|
37
|
+
openadmin_dev-0.4.0.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
|
|
38
|
+
openadmin_dev-0.4.0.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
|
|
39
|
+
openadmin_dev-0.4.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|