import functools import logging import pickle from asyncio import iscoroutinefunction from typing import Union, Callable logger = logging.getLogger(__name__) def _dump(path, obj): # separate function to mock in tests with open(path, "wb") as w: pickle.dump(obj, w) def serialize_attr(*, path: str, attr: str): """ Make decorator to serialize an object or object's attribute :param path: path to file to serialize into :param attr: attribute name to serialize """ def decorator(f): @functools.wraps(f) def wrapper(self, *args, **kwargs): result = f(self, *args, **kwargs) obj = getattr(self, attr) logger.debug("Write %r to %r", obj, path) _dump(path, obj) return result @functools.wraps(f) async def async_wrapper(self, *args, **kwargs): result = await f(self, *args, **kwargs) obj = getattr(self, attr) logger.debug("Write %r to %r", obj, path) _dump(path, obj) return result if iscoroutinefunction(f): return async_wrapper return wrapper return decorator def unserialize(*, path: str, fallback: Union[Callable, object] = None): """ Restore an object from file :param path: path to read from :param fallback: return or call it if unserialization fails :return: """ try: with open(path, "rb") as r: return pickle.load(r) except FileNotFoundError: logger.warning("Can't find %s to unserialize", path) except Exception as e: logger.error("Unserialize failed with %r. Returning an fallback", e) return fallback() if callable(fallback) else fallback
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
__pycache__ | Folder | 0755 |
|
|
__init__.py | File | 51.54 KB | 0644 |
|
_shutil.py | File | 795 B | 0644 |
|
antivirus_mode.py | File | 497 B | 0644 |
|
benchmark.py | File | 576 B | 0644 |
|
buffer.py | File | 1.24 KB | 0644 |
|
check_db.py | File | 7.35 KB | 0644 |
|
cli.py | File | 7.08 KB | 0644 |
|
common.py | File | 14.41 KB | 0644 |
|
config.py | File | 999 B | 0644 |
|
cronjob.py | File | 902 B | 0644 |
|
hyperscan.py | File | 149 B | 0644 |
|
importer.py | File | 2.29 KB | 0644 |
|
json.py | File | 953 B | 0644 |
|
kwconfig.py | File | 1.56 KB | 0644 |
|
parsers.py | File | 11.1 KB | 0644 |
|
resource_limits.py | File | 2.29 KB | 0644 |
|
safe_fileops.py | File | 7.96 KB | 0644 |
|
safe_sequence.py | File | 363 B | 0644 |
|
serialization.py | File | 1.72 KB | 0644 |
|
subprocess.py | File | 1.53 KB | 0644 |
|
support.py | File | 5.19 KB | 0644 |
|
threads.py | File | 1005 B | 0644 |
|
whmcs.py | File | 7.6 KB | 0644 |
|
wordpress_mu_plugin.py | File | 2.47 KB | 0644 |
|