Elysia
Elysia is an addon for attrs that provides an alternative API for creating fields on
@defined classes.
Installation
pip install elysia
Usage
Elysia's sole export is the Fields class, which wraps attrs.field, attrs.setters, and attrs.validators to
provide a more concise API for defining instance attributes.
Here's a brief example of a class created with attrs and Elysia:
from datetime import datetime
from attrs import define
from elysia import Fields
@define
class User:
name: str = Fields.field()
password: str = Fields.field(
on_setattr=Fields.setters.validate,
validator=Fields.validators.min_len(8)
)
created_at: datetime = Fields.attr(factory=datetime.utcnow, frozen=True)
The User class has two __init__ arguments: name and password. Whenever set, password is validated to
ensure it's at least 8 characters long.
User also has a created_at attribute that can't set via an __init__ argument. When a User object is
instantiated, created_at is set to the current time and cannot be changed afterwards.
So...how does all that work, exactly?
Glad you asked.
There are two ways to define an attribute with Elysia: Fields.field() and Fields.attr(). Fields.field() defines
attributes that map to __init__ arguments; Fields.attr() defines attributes that do not. Both are wrappers around
attrs.field and accept all the same arguments. Like attrs.field, all arguments to Fields.field()
and Fields.attr() are keyword-only.
Both methods also accept an optional, boolean, frozen argument. Setting it to True is a shortcut
for on_setattr=attrs.setters.frozen — that is, it freezes the attribute, raising an exception if you try to set it
after initialization.
Warning
Elysia is happy to combine
frozen=Truewith anything else you pass toon_setattr, butattrs.setters.frozenwill be applied first, which may not be what you expect.
Fields also provides access to attrs' setters and validators via Fields.setters and Fields.validators,
respectively. It makes no difference whether setters and validators are accessed through Fields or attrs. Do what
you like.
License
Elysia is licensed under the MIT License.
Metadata
Release files for elysia 1.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| elysia-1.1.1.tar.gz | 3.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| elysia-1.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 7.4 kB
Release files / elysia-1.1.1.tar.gz
| Download URL | elysia-1.1.1.tar.gz |
|---|---|
| Size | 3.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1f45374f994ae86833d59200c960bd0aaccdb5ccc65f5d7a6bbe3fc8376f7976
|
|
BLAKE2b-256 checksum How to use checksums |
abde67b9761b33016a3b3ef06bd385fe8446f4e8b2ea3ad972f52d5010678c93
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.4.1 CPython/3.11.1 Linux/5.15.0-1034-azure
|
Release files / elysia-1.1.1-py3-none-any.whl
| Download URL | elysia-1.1.1-py3-none-any.whl |
|---|---|
| Size | 4.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3fc07c5c4e42c3e32fbc3b830a379fc7edea03c825627c1c46a98660fa88fd1d
|
|
BLAKE2b-256 checksum How to use checksums |
c3da1e089a52feecb5e5b776e06afce515eedff616469a88837a76e9c7de49b5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.4.1 CPython/3.11.1 Linux/5.15.0-1034-azure
|