Metadata-Version: 2.4
Name: eluvia-base
Version: 2.0.2
Summary: Eluvia Base library
Author-email: Matěj Outlý <matej.outly@eluvia.com>
License-Expression: MIT
Project-URL: Documentation, https://gitlab.eluvia.dev/libraries/python/eluvia-base
Project-URL: Source Code, https://gitlab.eluvia.dev/libraries/python/eluvia-base
Keywords: package,base,eluvia
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development :: Libraries
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Operating System :: OS Independent
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: dacite>=1.8.0
Requires-Dist: requests>=2.28.2
Requires-Dist: pyjwt>=2.3.0
Requires-Dist: python-dateutil>=2.9.0
Provides-Extra: dev
Requires-Dist: check-manifest; extra == "dev"
Dynamic: license-file

# Eluvia Base


## Schema

### `eluvia.integrations.schemas.Empty`

Empty object is a singleton which purpose is to define unset value.

### `eluvia.integrations.schemas.empty`

Empty is instance of the Empty object. The value  `bool(empty)` is `False` which can 
simplify value checking implementations.

### `eluvia.integrations.schemas.Dataclass`

Dataclass is base class for service integration data objects. The class static method 
`map_from_dict` is a factory class that initialize object from a dict. It provides 
simple way how to convert a service response in a JSON format to the data class 
object. Example:

```python
from uuid import UUID
from dataclasses import dataclass

from eluvia.integrations.schemas import Dataclass, Empty, empty

@dataclass
class Role(Dataclass):
    
    name: str | Empty = empty

@dataclass
class User(Dataclass):
    
    id: UUID
    name: str | Empty = empty
    email: str | Empty = empty
    role: Role | Empty = empty


response_data = {
    'id': 'd2aa2bd0-b040-4348-9a18-4b717582048c',
    'name': 'Pert',
    'email': 'petr@eluvia.com',
    'role': {
        'name': 'capitan'
    }
}

User.map_from_dict(response_data)  # will create User and related Role objects
```

### `eluvia.integrations.signals`

Signals is a module that provides two signals `schema_obj_post_save` and `schema_obj_post_delete` that are emitted if
schema object is saved or deleted. You can use `reciever` decorator to register a callback function to the signal.

```python
from eluvia.integrations.signals import schema_obj_post_save, receiver


@receiver(schema_obj_post_save, sender=MySchema)
def my_callback(sender, instance, **kwargs):
    print(f'{sender} object {instance} was saved')
```

More signals can be registered to the same callback function.

```python
from eluvia.integrations.signals import schema_obj_post_save, schema_obj_post_delete, receiver


@receiver([schema_obj_post_save, schema_obj_post_delete], sender=MySchema)
def my_callback(sender, **kwargs):
    print(f'{sender} object was saved')
```
