PynamoDB integration with the marshmallow (de)serialization library.
Installation
From PyPi:
$ pip install marshmallow-pynamodb
From GitHub:
$ pip install git+https://github.com/mathewmarcus/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
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'}}]}).data
# Office<789>
License
MIT licensed. See the bundled LICENSE file for more details.
Metadata
Release files for marshmallow-pynamodb 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| marshmallow-pynamodb-0.4.0.tar.gz | 4.3 kB | Details |
Release files / marshmallow-pynamodb-0.4.0.tar.gz
| Download URL | marshmallow-pynamodb-0.4.0.tar.gz |
|---|---|
| Size | 4.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
06de51d002e1fe1405303122c48f01567afdc78aa8b299cf3ae69f00f48d713a
|
|
BLAKE2b-256 checksum How to use checksums |
181b7584aa55165ea2267a07679f3e05151eec058e633c200a82c95682255977
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |