Skip to content

CloverHealth/marshmallow-annotations

 
 

Repository files navigation

marshmallow-annotations

marshmallow-annotations allows you to create marshmallow schema from classes with annotations on them

class Album:
   id: int
   name: str

   def __init__(self, id: int, name: str):
       self.id = id
       self.name = name
class Artist:

id: int name: str albums: List[Album]

def __init__(self, id: int, name: str, albums: List[Album]):

self.id = id self.name = name self.albums = albums

# schema.py
from marshmallow_annotations import AnnotationSchema
from .music import Album, Artist

class AlbumScheme(AnnotationSchema):
    class Meta:
        target = Album
        register_as_scheme = True


class ArtistScheme(AnnotationSchema):
    class Meta:
        target = Artist
        register_as_scheme = True


scheme = ArtistScheme()
scheme.dump(
    Artist(
        id=1, name="Abominable Putridity",
        albums=[
            Album(
                id=1,
                name="The Anomalies of Artificial Origin"
            )
        ]
    )
)

# {
#     "albums": [
#         {
#             "id": 1,
#             "name": "The Anomalies of Artificial Origin"
#         }
#     ],
#     "id": 1,
#     "name": "Abominable Putridity"
# }

Installation

marshmallow-annotations is available on pypi and installable with:

pip install marshmallow-annotations

marshmallow-annotations supports Python 3.6+ and marshmallow 2.x.x

Note

If you are install marshmallow-annotations outside of a virtual environment, consider installing with pip install --user marshmallow-annotations rather than using sudo or adminstrator privileges to avoid installing it into your system Python.

Why?

Keeping up with entity definitions, ORM mappings and schema shapes can be a huge pain the butt. If you change one thing, you need to change three things.

Instead, marshmallow-annotations wants to drive schema shapes from your entity defintions (with a little help from you of course).

More Information

About

Allows declaring marshmallow schema through type annotations

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 100.0%