brilliance-admin 0.44.0__tar.gz → 0.44.1__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.
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/.configs/docker/docker-compose.yml +19 -14
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/.gitignore +1 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/PKG-INFO +3 -1
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/api/views/table.py +2 -1
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/locales/en.yml +4 -2
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/locales/ru.yml +1 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/schema/table/fields/base.py +21 -6
- brilliance_admin-0.44.0/brilliance_admin/static/index-MLuDem5W.js → brilliance_admin-0.44.1/brilliance_admin/static/index-rBvEkjGg.js +2 -2
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/templates/index.html +1 -1
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin.egg-info/PKG-INFO +3 -1
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin.egg-info/SOURCES.txt +1 -2
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin.egg-info/requires.txt +2 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/example/sections/merchant.py +2 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/example/sections/models.py +19 -1
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/example/sqlite.py +7 -1
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/pyproject.toml +3 -1
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/tests/test_action.py +1 -1
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/tests/test_settings.py +1 -1
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/uv.lock +549 -444
- brilliance_admin-0.44.0/.env +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/.configs/docker/Dockerfile +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/.configs/nginx/example.conf +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/.github/workflows/certbot.yml +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/.github/workflows/deploy.yml +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/.github/workflows/install-docker.yml +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/.isort.cfg +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/.python-version +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/LICENSE +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/README.md +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/__init__.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/api/__init__.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/api/routers.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/api/utils.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/api/views/__init__.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/api/views/auth.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/api/views/autocomplete.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/api/views/graphs.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/api/views/index.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/api/views/schema.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/api/views/settings.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/auth.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/docs.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/exceptions.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/integrations/__init__.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/__init__.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/auth.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/autocomplete.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/fields.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/fields_schema.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/table/__init__.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/table/base.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/table/create.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/table/delete.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/table/list.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/table/retrieve.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/integrations/sqlalchemy/table/update.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/schema/__init__.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/schema/admin_schema.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/schema/category.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/schema/graphs/__init__.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/schema/graphs/category_graphs.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/schema/table/__init__.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/schema/table/admin_action.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/schema/table/category_table.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/schema/table/fields/__init__.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/schema/table/fields/function_field.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/schema/table/fields_schema.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/schema/table/table_models.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/index-P_wdMBbz.css +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/materialdesignicons-webfont-CYDMK1kx.woff2 +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/materialdesignicons-webfont-CgCzGbLl.woff +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/materialdesignicons-webfont-D3kAzl71.ttf +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/materialdesignicons-webfont-DttUABo4.eot +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/dark-first/content.min.css +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/dark-first/skin.min.css +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/dark-slim/content.min.css +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/dark-slim/skin.min.css +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/img/example.png +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/img/tinymce.woff2 +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/lightgray/content.min.css +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/lightgray/fonts/tinymce.woff +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/lightgray/skin.min.css +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/plugins/accordion/css/accordion.css +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/plugins/accordion/plugin.js +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/plugins/codesample/css/prism.css +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/plugins/customLink/css/link.css +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/plugins/customLink/plugin.js +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/tinymce/tinymce.min.js +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/static/vanilla-picker-B6E6ObS_.js +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/translations.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/utils.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin.egg-info/dependency_links.txt +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin.egg-info/top_level.txt +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/example/README.md +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/example/__init__.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/example/locales/en.yml +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/example/locales/ru.yml +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/example/main.py +1 -1
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/example/sections/__init__.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/example/sections/currency.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/example/sections/graphs.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/example/sections/payments.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/example/sections/terminal.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/example/sections/users.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/example/static/favicon.ico +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/example/static/favicon.jpg +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/example/static/logo-outline.png +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/example/static/logo.png +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/example/utils.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/screenshots/PC-graphs.jpeg +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/screenshots/PC-table.jpeg +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/screenshots/iPad-edit.jpeg +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/screenshots/iPhone 15-edit.jpeg +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/screenshots/iPhone 15-login.jpeg +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/screenshots/websitemockupgenerator.png +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/setup.cfg +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/tests/__init__.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/tests/conftest.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/tests/test_payments_fields_schema.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/tests/test_sqlalcmeny_auth.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/tests/test_sqlalcmeny_crud.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/tests/test_sqlalcmeny_filters.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/tests/test_sqlalcmeny_schema.py +0 -0
- {brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/tests/test_translations.py +0 -0
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
name: brilliance
|
|
2
2
|
|
|
3
|
-
volumes:
|
|
4
|
-
db_data:
|
|
5
|
-
|
|
6
3
|
services:
|
|
7
4
|
backend:
|
|
8
5
|
build:
|
|
@@ -12,24 +9,32 @@ services:
|
|
|
12
9
|
- ./../../:/app
|
|
13
10
|
- ~/.ssh/id_rsa:/root/.ssh/id_rsa:delegated
|
|
14
11
|
- ~/.ssh/known_hosts:/root/.ssh/known_hosts:delegated
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
environment:
|
|
13
|
+
POSTGRES_DB: brilliance
|
|
14
|
+
POSTGRES_USER: brilliance
|
|
15
|
+
POSTGRES_PASSWORD: brilliance
|
|
16
|
+
POSTGRES_HOST: postgres
|
|
17
17
|
tmpfs:
|
|
18
18
|
- /tmp
|
|
19
19
|
ports:
|
|
20
20
|
- 8082:8082
|
|
21
21
|
command: uv run uvicorn example.main:app --host 0.0.0.0 --port 8082 --reload --proxy-headers --forwarded-allow-ips='*'
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
timeout: 2s
|
|
26
|
-
retries: 5
|
|
22
|
+
depends_on:
|
|
23
|
+
postgres:
|
|
24
|
+
condition: service_healthy
|
|
27
25
|
|
|
28
26
|
postgres:
|
|
29
27
|
image: postgres:alpine
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
environment:
|
|
29
|
+
POSTGRES_DB: brilliance
|
|
30
|
+
POSTGRES_USER: brilliance
|
|
31
|
+
POSTGRES_PASSWORD: brilliance
|
|
32
|
+
tmpfs:
|
|
33
|
+
- /var/lib/postgresql/data
|
|
34
34
|
ports:
|
|
35
35
|
- 5432:5432
|
|
36
|
+
healthcheck:
|
|
37
|
+
test: ['CMD', 'pg_isready', '-h', 'localhost', '-p', '5432', '-U', 'brilliance']
|
|
38
|
+
interval: 2s
|
|
39
|
+
timeout: 2s
|
|
40
|
+
retries: 10
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: brilliance-admin
|
|
3
|
-
Version: 0.44.
|
|
3
|
+
Version: 0.44.1
|
|
4
4
|
Summary: Simple and lightweight data managment framework powered by FastAPI and Vue3 Vuetify all-in-one. Some call it heavenly in its brilliance.
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Requires-Python: >=3.10
|
|
@@ -16,6 +16,8 @@ Requires-Dist: faker>=38.2.0; extra == "example"
|
|
|
16
16
|
Requires-Dist: pyjwt>=2.10.1; extra == "example"
|
|
17
17
|
Requires-Dist: structlog>=25.5.0; extra == "example"
|
|
18
18
|
Requires-Dist: rich>=14.2.0; extra == "example"
|
|
19
|
+
Requires-Dist: asyncpg>=0.31.0; extra == "example"
|
|
20
|
+
Requires-Dist: pydantic-settings>=2.12.0; extra == "example"
|
|
19
21
|
Provides-Extra: tests
|
|
20
22
|
Requires-Dist: pytest>=8.4.2; extra == "tests"
|
|
21
23
|
Requires-Dist: pytest-asyncio>=1.2.0; extra == "tests"
|
|
@@ -8,7 +8,8 @@ from brilliance_admin.exceptions import AdminAPIException, APIError
|
|
|
8
8
|
from brilliance_admin.schema import AdminSchema
|
|
9
9
|
from brilliance_admin.schema.table.admin_action import ActionData, ActionResult
|
|
10
10
|
from brilliance_admin.schema.table.category_table import CategoryTable
|
|
11
|
-
from brilliance_admin.schema.table.table_models import
|
|
11
|
+
from brilliance_admin.schema.table.table_models import (
|
|
12
|
+
CreateResult, ListData, RetrieveResult, TableListResult, UpdateResult)
|
|
12
13
|
from brilliance_admin.translations import LanguageContext
|
|
13
14
|
from brilliance_admin.utils import get_logger
|
|
14
15
|
|
|
@@ -3,16 +3,18 @@ delete_confirmation_text: "Are you sure you want to delete those records?\nThis
|
|
|
3
3
|
deleted_successfully: 'The entries were successfully deleted.'
|
|
4
4
|
|
|
5
5
|
errors:
|
|
6
|
+
pk_not_found: 'The "%(pk_name)s" field was not found in the submitted data.'
|
|
7
|
+
record_not_found: 'No record found for %(pk_name)s=%(pk)s.'
|
|
6
8
|
db_error_create: 'Error creating a record in the database.'
|
|
7
9
|
db_error_update: 'Error updating the record in the database.'
|
|
8
10
|
db_error_retrieve: 'Error retrieving the record from the database.'
|
|
9
11
|
db_error_list: 'Failed to retrieve table data from the database.'
|
|
10
|
-
pk_not_found: 'The "%(pk_name)s" field was not found in the submitted data.'
|
|
11
|
-
record_not_found: 'No record found for %(pk_name)s=%(pk)s.'
|
|
12
12
|
connection_refused_error: 'Database connection error: %(error)s'
|
|
13
13
|
filters_exception: 'An unknown technical error occurred while filtering data.'
|
|
14
14
|
method_not_allowed: 'Error, method not allowed. This action is not permitted.'
|
|
15
15
|
filter_error: 'An error occurred during filtering: {error}'
|
|
16
|
+
serialize_field_error: 'Serialize error: %(error)s'
|
|
17
|
+
bad_type_error: 'Invalid data type: %(type)s but %(expected)s expected'
|
|
16
18
|
|
|
17
19
|
search_help: 'Available search fields: %(fields)s'
|
|
18
20
|
sqlalchemy_search_help: |
|
|
@@ -14,6 +14,7 @@ errors:
|
|
|
14
14
|
method_not_allowed: 'Ошибка, данный метод недоступен.'
|
|
15
15
|
filter_error: 'Проишла ошибка при фильтрации: %(error)s'
|
|
16
16
|
serialize_field_error: 'Ошибка чтения данных: %(error)s'
|
|
17
|
+
bad_type_error: 'Некорректный тип данных: %(type)s; ожидается %(expected)s'
|
|
17
18
|
|
|
18
19
|
search_help: 'Доступные поля для поиска: %(fields)s'
|
|
19
20
|
sqlalchemy_search_help: |
|
{brilliance_admin-0.44.0 → brilliance_admin-0.44.1}/brilliance_admin/schema/table/fields/base.py
RENAMED
|
@@ -8,6 +8,7 @@ from pydantic.dataclasses import dataclass
|
|
|
8
8
|
from brilliance_admin.exceptions import FieldError
|
|
9
9
|
from brilliance_admin.schema.category import FieldSchemaData
|
|
10
10
|
from brilliance_admin.translations import LanguageContext
|
|
11
|
+
from brilliance_admin.translations import TranslateText as _
|
|
11
12
|
from brilliance_admin.utils import DeserializeAction, SupportsStr, humanize_field_name
|
|
12
13
|
|
|
13
14
|
|
|
@@ -80,7 +81,7 @@ class IntegerField(TableField):
|
|
|
80
81
|
async def deserialize(self, value, action: DeserializeAction, extra: dict, *args, **kwargs) -> Any:
|
|
81
82
|
value = await super().deserialize(value, action, extra, *args, **kwargs)
|
|
82
83
|
if value and not isinstance(value, int):
|
|
83
|
-
raise FieldError(
|
|
84
|
+
raise FieldError(_('errors.bad_type_error') % {'type': type(value), 'expected': 'init'})
|
|
84
85
|
|
|
85
86
|
return value
|
|
86
87
|
|
|
@@ -116,7 +117,7 @@ class StringField(TableField):
|
|
|
116
117
|
async def deserialize(self, value, action: DeserializeAction, extra: dict, *args, **kwargs) -> Any:
|
|
117
118
|
value = await super().deserialize(value, action, extra, *args, **kwargs)
|
|
118
119
|
if value and not isinstance(value, str):
|
|
119
|
-
raise FieldError(
|
|
120
|
+
raise FieldError(_('errors.bad_type_error') % {'type': type(value), 'expected': 'string'})
|
|
120
121
|
|
|
121
122
|
return value
|
|
122
123
|
|
|
@@ -151,7 +152,7 @@ class DateTimeField(TableField):
|
|
|
151
152
|
return
|
|
152
153
|
|
|
153
154
|
if value and not isinstance(value, (str, dict)):
|
|
154
|
-
raise FieldError(
|
|
155
|
+
raise FieldError(_('errors.bad_type_error') % {'type': type(value), 'expected': 'datetime'})
|
|
155
156
|
|
|
156
157
|
if isinstance(value, str):
|
|
157
158
|
return datetime.datetime.strptime(value, self.format)
|
|
@@ -166,13 +167,24 @@ class DateTimeField(TableField):
|
|
|
166
167
|
'to': datetime.datetime.strptime(value.get('to'), self.format),
|
|
167
168
|
}
|
|
168
169
|
|
|
169
|
-
raise
|
|
170
|
+
raise FieldError(_('errors.bad_type_error') % {'type': type(value), 'expected': 'datetime'})
|
|
170
171
|
|
|
171
172
|
|
|
172
173
|
@dataclass
|
|
173
174
|
class JSONField(TableField):
|
|
174
175
|
_type = 'json'
|
|
175
176
|
|
|
177
|
+
async def deserialize(self, value, action: DeserializeAction, extra: dict, *args, **kwargs) -> Any:
|
|
178
|
+
value = await super().deserialize(value, action, extra, *args, **kwargs)
|
|
179
|
+
|
|
180
|
+
if value is None:
|
|
181
|
+
return
|
|
182
|
+
|
|
183
|
+
if not isinstance(value, (dict, list)):
|
|
184
|
+
raise FieldError(_('errors.bad_type_error') % {'type': type(value), 'expected': 'JSON'})
|
|
185
|
+
|
|
186
|
+
return value
|
|
187
|
+
|
|
176
188
|
|
|
177
189
|
@dataclass
|
|
178
190
|
class ArrayField(TableField):
|
|
@@ -190,8 +202,11 @@ class ArrayField(TableField):
|
|
|
190
202
|
async def deserialize(self, value, action: DeserializeAction, extra: dict, *args, **kwargs) -> Any:
|
|
191
203
|
value = await super().deserialize(value, action, extra, *args, **kwargs)
|
|
192
204
|
|
|
193
|
-
if value
|
|
194
|
-
|
|
205
|
+
if value is None:
|
|
206
|
+
return
|
|
207
|
+
|
|
208
|
+
if not isinstance(value, list):
|
|
209
|
+
raise FieldError(_('errors.bad_type_error') % {'type': type(value), 'expected': 'Array'})
|
|
195
210
|
|
|
196
211
|
return value
|
|
197
212
|
|