Notes to Self

Alex Sokolsky's Notes on Computers and Programming

jsonpickle

From https://realpython.com/python-serialize-data/#use-formats-foreign-to-python

customize-pickle/models.py:

import time
from dataclasses import dataclass

@dataclass
class User:
    name: str
    password: str

    def __getstate__(self):
        state = self.__dict__.copy()
        state["timestamp"] = int(time.time())
        del state["password"]
        return state

    def __setstate__(self, state):
        self.__dict__.update(state)
        with open("/dev/random", mode="rb") as file:
            self.password = file.read(8).decode("ascii", errors="ignore")

Use jsonpickle to serialize/deserialize instance of class User:

>>> import jsonpickle
>>> from models import User
>>> user = User(name="John", password="*%!U8n9erx@GdqK(@J")
>>> user_json = jsonpickle.dumps(user, indent=4)
>>> print(user_json)
{
    "py/object": "models.User",
    "py/state": {
        "name": "John",
        "timestamp": 1699805990
    }
}

>>> jsonpickle.loads(user_json)
User(name='John', password='\\\x06,\x19')