Контроллер для работы с хранимыми процедурами
Project description
Контроллер для работы с хранимыми процедурами
Пример использования с функциями
from controller.core.models import FunctionModel
from typing import Optional
class GetOrder(FunctionModel):
"""Хранимка для получения списка заказов"""
_func_name = 'data.get_order'
id: Optional[int]
status_id: Optional[int]
cemetery_id: Optional[int]
customer_id: Optional[int]
search: str = ''
rows: Optional[int] = None
page: int = 1
user_id: Optional[int]
order = GetOrder(id=1984).get() # Вернет 1 объект {}
all_orders = GetOrder(id=1984).all() # Вернет все товары [{}]
top_5_orders = GetOrder(status_id=2).get(5) # Вернет 5 заказов
all_orders_count = GetOrder().length() # Вернет кол-во заказов 1923
Пример использования с процедурами
from controller.core.models import ProcedureModel
from typing import Optional
class RemoveOrder(ProcedureModel):
"""Хранимка для удаления заказа"""
_func_name = 'data.remove_order'
id: Optional[int]
status_id: Optional[int]
cemetery_id: Optional[int]
customer_id: Optional[int]
user_id: Optional[int]
response = RemoveOrder(id=1984).execute() # Удалит заказ
Поддержка Django
Основная часть расширения включает в себя особенность в качестве параметра в хранимку передавать request, а также специальное поле для получения user_id (AuthUser)
from controller.core.models import FunctionModel
from controller.django.models import DjangoModelMixin
from controller.django.fields import AuthUser
from django.http.response import JsonResponse
from typing import Optional
from controller.core.fields import Const
class GetOrder(FunctionModel, DjangoModelMixin):
"""Комментарий"""
_func_name = 'data.get_order'
id: Optional[int]
status_id: Optional[int]
cemetery_id: Optional[int]
customer_id: Optional[int]
search: str = ''
rows: Optional[int] = None
page: int = 1
user_id: AuthUser
class GetOrderCompleted(GetOrder):
status_id: Const = 2
def home(request):
return JsonResponse({'item': GetOrderCompleted(request).get()})
# Хранимка get_order заберет в себя все необходимые параметры,
# и провалидирует их и перезапишет status_id на 2. То есть с фронта можно не отправлять пустые значения или значения,
# которые не требуют переопределения
Валидация ошибок и создание своих полей
Есть возможность прописать свое поле для каких-то данных, например, для телефона у нас должны быть числа и длинной равной 10
from controller.core.models import FunctionModel
from controller.core.fields import CustomField
from pydantic import ValidationError
class Phone(CustomField):
__root__ = str
@classmethod
def validate(cls, value, values, config, field) -> str:
value = str(value)
if value and (not value.isdigit() or len(value) != 10):
raise ValueError("Это не номер телефона")
return value
class GetOrder(FunctionModel):
"""Комментарий"""
_func_name = 'data.get_order'
phone: Phone = ''
try:
GetOrder(phone=12)
except ValidationError as e:
print(e.json())
"""
[
{
"loc": [
"phone"
],
"msg": "Это не номер телефона",
"type": "value_error"
}
]
"""
Если данное поле валидацию не пройдет, то мы получим ошибку, которую можно вернуть в формате json
FastAPI
from controller.core.models import FunctionModel
from controller.core.db import DataBase
from typing import Optional
from fastapi import FastAPI, Depends
app = FastAPI()
db = DataBase()
class GetOrder(FunctionModel):
"""Хранимка для получения заказов"""
_func_name = 'data.get_order'
_db = db
id: Optional[int]
status_id: Optional[int]
@app.get('/')
def home(data: GetOrder = Depends()):
return data
Результат:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file FunctionStoredController-0.0.4.tar.gz.
File metadata
- Download URL: FunctionStoredController-0.0.4.tar.gz
- Upload date:
- Size: 18.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.28.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9dfb66926300bf8fae2bbe1687aba0efa6e5babd266fee00c59a4eea5a5e958a
|
|
| MD5 |
14035a0e661b6270be6c81e58c851660
|
|
| BLAKE2b-256 |
cfff1d2f628ebcd982a847922d4a9d96680ddb50373202bab376a5a56ccf6b0b
|
File details
Details for the file functionstoredcontroller-0.0.4-py2.py3-none-any.whl.
File metadata
- Download URL: functionstoredcontroller-0.0.4-py2.py3-none-any.whl
- Upload date:
- Size: 9.4 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.28.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f688edfef0e36bf801fa0490fe79b526b9036032d7228a17d7d5ccb91e76b8ed
|
|
| MD5 |
9f3571077859cd6a88534ae188815395
|
|
| BLAKE2b-256 |
4bb5799b7eb14ddc31ca0e8528bfe320c2d307147ea22a8a482edb0464b926f7
|