Provides primitives for application errors
Project description
Classic App Layer
This package provides primitives for application layer. Part of project "Classic".
Usage for validation:
from dataclasses import dataclass
from classic.app import DTO, validate_with_dto
from pydantic import validate_arguments
class SomeDTO(DTO):
"""Based on pydantic.BaseModel. Used for validating input"""
some_field: int
another_field: str
@dataclass
class SomeAppCls:
"""Some class with app logic. May be mapped on DB."""
some_field: int
another_field: str
class SomeService:
@validate_arguments
def some_method(self, arg: int):
assert isinstance(arg, int)
@validate_with_dto
def another_method(self, params: SomeDTO):
instance = params.create_obj(SomeAppCls)
print(instance)
Usage for errors:
from classic.app import AppError, ErrorsList
# Describe errors, possible in application
class IncorrectState(AppError):
msg_template = 'Incorrect app state - "{text}"'
code = 'app.incorrect_state'
class ServiceNotReady(AppError):
msg_template = 'Service not ready yet'
code = 'app.service_not_ready'
# In another file with services:
class SomeService:
def __init__(self):
self.ready_to_serve = False
def is_ready(self):
"""Demonstrates simple usage"""
if not self.ready_to_serve:
raise ServiceNotReady()
def mark_as_ready(self):
"""Demonstrates usage of error message templates"""
if self.ready_to_serve:
raise IncorrectState(text='Service are ready')
self.ready_to_serve = True
def just_give_errors(self):
"""Demonstrates method, what may have more than 1 error"""
errors = [IncorrectState(text='error 1'),
IncorrectState(text='error 2')]
raise ErrorsList(errors)
# Somewhere in adapters:
service = SomeService()
try:
service.is_ready()
except AppError as error:
print(f'Application responses with error code "{error.code}", '
f'message is "{error.message}"')
try:
service.mark_as_ready()
service.mark_as_ready()
except AppError as error:
print(f'Application responses with error code "{error.code}", '
f'message is "{error.message}"')
try:
service.just_give_errors()
except ErrorsList as errors_list:
for error in errors_list.errors:
print(f'Application responses with error code "{error.code}", '
f'message is "{error.message}"')
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
File details
Details for the file classic-error-handling-0.2.0.tar.gz
.
File metadata
- Download URL: classic-error-handling-0.2.0.tar.gz
- Upload date:
- Size: 4.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 62008e9c91ba8740644df8b778abe24a7d78e72b88b09a61f8684a3209271ad2 |
|
MD5 | 27a4cdbb2c8d0347121c29f334274530 |
|
BLAKE2b-256 | c94092cddcce4d982b10a315b60a7e812ab51631a334f13b660322d03c5d4921 |