A Python object (de)serializer
Project description
Pyrializer
A Python object (de)serializer
Installation
$ pip install pyrializer
Basic usage
You must define classes and describe what attributes and their types using class attributes like this:
class Person
name = str
age = int
gender = str
See Supported types below.
Decoding from a serialized value
Decoding an object maps a serialized value into a Python object:
from pyrializer import decode
payload = {
'name': 'John Doe',
'age': 52,
'job': {
'name': 'Software Engineer',
'salary': 24000
},
'hobbies': ['fishing', 'skating']
}
class Job:
name = str
role = str
salary = int
class Address:
desc = str
city = str
country = str
zip = int
class Person:
name = str
age = int
job = Job
hobbies = [str]
address = Address
person = decode(Person, payload)
person.name # John Doe
person.job.salary # 24000
person.job.role # None
person.hobbies[1] # skating
person.address.city # None
Encoding to a serialized value
Encoding an object transform a Python object into a serializable format that can be easily exported to others formats, such as JSON:
from pyrializer import encode
encode(Person, person) # --> { 'name': 'John Doe', ... }
Additionaly, you can decorate the classes you want to (de)serialize with the
serializable decorator. This decorator extends the classes with two
additional methods:
from pyrializer import serializable
@serializable
class Person:
...
person = Person.decode(person_payload)
person.encode() # --> { 'name': 'John Doe', ... }
Supported types
Here is some examples of supported types
| <type> | JSON equivalent |
|---|---|
None |
Any type |
str |
String |
int |
Integer |
float |
Float |
bool |
Boolean |
[] |
Array of any type |
ClassName |
Object |
| Custom type | Any. See Custom types below. |
More advanced examples:
class Example:
array_of_array_of_ints = [ [ int ] ] # [ [1,2], [3, 4], [], [5, 6] ]
whatever = None # 42, False, AnotherObject(), etc...
Custom types
Custom types allows to decode values that have been previously encoded using a primitive type and in a convenience format.
Some examples include:
- Unix timestamps: Dates encoded as integers
- ISO-8601: Dates encoded as strings
- Gender: Male or female encoded as booleans
To declare a Custom Type you need to create a class that inherit the CustomType
and define two methods: decode and encode.
For example, the following snippets declares a custom type to decode an ISO-8601 date into a Python's datetime object and vice versa.
from json import loads
from datetime import datetime
from pyrializer import serializable
from pyrializer.types import CustomType
class ISO_8601(CustomType):
def decode(self, fvalue):
return datetime.strptime(fvalue, '%Y-%m-%dT%H:%M:%SZ')
def encode(self, fvalue):
return datetime.strftime(fvalue, '%Y-%m-%dT%H:%M:%SZ')
@serializable
class Person:
name = str
birthdate = ISO_8601 # here we use the custom type
json_payload = json_loads('''
{
"name": "John Doe",
"birthdate": "1984-01-23T09:37:21Z"
}
''')
person = Person.decode(payload)
print(type(person.birthdate)) # <class 'datetime.datetime'>
print(person.birthdate.year) # 1984
print(person.encode()) # {'name': 'John Doe', 'birthdate': '2000-01-23T09:37:21Z'}
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyrializer-0.2.0.tar.gz.
File metadata
- Download URL: pyrializer-0.2.0.tar.gz
- Upload date:
- Size: 5.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.0.3 CPython/3.7.6 Darwin/18.7.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0b219e51e56a8ecd4112e2c4e498b38c2a203436e814a08c8aa52bcc04fc0d6a
|
|
| MD5 |
35c01702ec8a8cb8135824bb4cf41f10
|
|
| BLAKE2b-256 |
0464a3bcea0583129c5ba4328b01f5122770ebc69d04e1a6736df90fd3724f21
|
File details
Details for the file pyrializer-0.2.0-py3-none-any.whl.
File metadata
- Download URL: pyrializer-0.2.0-py3-none-any.whl
- Upload date:
- Size: 5.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.0.3 CPython/3.7.6 Darwin/18.7.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1c6327ff82bcc502c8242eddfa917e3e8b700a0f9f14b4a949cfe6c684610499
|
|
| MD5 |
f6c803c596a4ee5f43efd214fb0edfea
|
|
| BLAKE2b-256 |
8fa090019e3d6b468f49fb4f719a51d01f9adf885d3741880ec97dd83c66d4a4
|