rjdbcm/Aspidites

View on GitHub
Aspidites/woma/pickleutils.py

Summary

Maintainability
A
0 mins
Test Coverage
import builtins
import io
import pickle
from .._vendor.RestrictedPython import safe_builtins, compile_restricted


def _print(text):
    print(text)


print = _print
safe_builtins["print"] = print
safe_builtins["compile"] = compile_restricted
globals().update(dict(__builtins__=safe_builtins))


class RestrictedUnpickler(pickle.Unpickler):
    def find_class(self, module, name):
        # Only allow safe classes from builtins.
        if module == "builtins" and name in safe_builtins:
            return getattr(safe_builtins, name)
        # Forbid everything else.
        raise pickle.UnpicklingError("global '%s.%s' is forbidden" % (module, name))


def pickle_loads(s):
    """Helper function analogous to pickle.loads()."""
    return RestrictedUnpickler(io.BytesIO(s)).load()