PynamoDB integration with the Marshmallow (de)serialization library
Project description
Welcome to Marshmallow-Pynamo-DB
Original Project: https://github.com/mathewmarcus/marshmallow-pynamodb
PynamoDB integration with the Marshmallow (de)serialization library.
Installation
From PyPi:
$ pip install marshmallow-pynamo-db
From GitHub:
$ pip install git+https://github.com/chrismaille/marshmallow-pynamodb#egg=marshmallow_pynamodb
Declare your models
from pynamodb.models import Model
from pynamodb.attributes import UnicodeAttribute
class User(Model):
class Meta:
table_name = "user"
email = UnicodeAttribute(null=True)
first_name = UnicodeAttribute(range_key=True)
last_name = UnicodeAttribute(hash_key=True)
Generate marshmallow schemas
from marshmallow_pynamodb import ModelSchema
class UserSchema(ModelSchema):
class Meta:
model = User
user_schema = UserSchema()
(De)serialize your data
user = User(last_name="Smith", first_name="John")
user_schema.dump(user).data
# {u'first_name': u'John', u'last_name': u'Smith', u'email': None}
user_schema.load({"last_name": "Smith", "first_name": "John"}).data
# user<Smith>
Nested models? No problem
from marshmallow_pynamodb.schema import ModelSchema
from pynamodb.models import Model
from pynamodb.attributes import (
ListAttribute,
MapAttribute,
NumberAttribute,
UnicodeAttribute,
)
class Location(MapAttribute):
latitude = NumberAttribute()
longitude = NumberAttribute()
name = UnicodeAttribute()
class Person(MapAttribute):
firstName = UnicodeAttribute()
lastName = UnicodeAttribute()
age = NumberAttribute()
class OfficeEmployeeMap(MapAttribute):
office_employee_id = NumberAttribute()
person = Person()
office_location = Location()
class Office(Model):
class Meta:
table_name = 'OfficeModel'
office_id = NumberAttribute(hash_key=True)
address = Location()
employees = ListAttribute(of=OfficeEmployeeMap)
class OfficeSchema(ModelSchema):
class Meta:
model = Office
# noinspection PyTypeChecker
OfficeSchema().load(
{
'office_id': 789,
'address': {
'latitude': 6.98454,
'longitude': 172.38832,
'name': 'some_location'
},
'employees': [
{
'office_employee_id': 123,
'person': {
'firstName': 'John',
'lastName': 'Smith',
'age': 45
},
'office_location': {
'latitude': -24.0853,
'longitude': 144.87660,
'name': 'other_location'
}
},
{
'office_employee_id': 456,
'person': {
'firstName': 'Jane',
'lastName': 'Doe',
'age': 33
},
'office_location': {
'latitude': -20.57989,
'longitude': 92.30463,
'name': 'yal'
}
}
]
}
)
# Office<789>
License
MIT licensed. See the bundled LICENSE file for more details.
Not working?
Dont panic. Get a towel and, please, open a issue.
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
Close
Hashes for marshmallow-pynamo-db-0.9.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 338839a86738bfeda8fd8d8caeacfec2b19ba2ff83f01f8ed51e2a9ae20e2abc |
|
MD5 | 1ba18b7aa4996b311001de31b1ed81d5 |
|
BLAKE2b-256 | a8b17a69881eb92f55ade9ddbfcdfba7b027037a554710d9a3760bc4a77666fd |
Close
Hashes for marshmallow_pynamo_db-0.9.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a5d2e56a90c34eaa7d45140e96a7b4094e1fa8c209af4badf8f77c23e7874fa1 |
|
MD5 | 5a401f8080a0770858e009e2e48a1492 |
|
BLAKE2b-256 | 0a7a7dff71e4457e661f95af90ee9027a5c7a8b6f7aa01f7b141834ee73dca28 |