Source code for zoom_api_helper.utils
from __future__ import annotations
__all__ = [
'cached_property',
'CustomEncoder',
'log_time',
'read_json_file_if_exists',
'save_json_file',
'write_to_csv',
]
from csv import DictWriter
from datetime import datetime
from json import load, dump, JSONEncoder
from time import time
from typing import TYPE_CHECKING, Any, TypeVar
from functools import wraps
try:
from functools import cached_property
except ImportError:
# noinspection PyUnresolvedReferences, PyPackageRequirements
from backports.cached_property import cached_property
from .log import LOG
[docs]class CustomEncoder(JSONEncoder):
[docs] def default(self, o: Any) -> Any:
if isinstance(o, datetime):
return o.isoformat()
return JSONEncoder.default(self, o)
if TYPE_CHECKING:
_F = TypeVar('_F')
[docs]def log_time(func: _F) -> _F:
@wraps(func)
def inner(*args, _fn_name=func.__name__, **kwargs):
start = time()
ret = func(*args, **kwargs)
end = time()
LOG.debug('[%s] completed in %.3fs', _fn_name, end - start)
return ret
return inner
[docs]def read_json_file_if_exists(filename: str) -> dict | list | None:
try:
with open(filename) as in_file:
return load(in_file)
except FileNotFoundError:
return None
[docs]def save_json_file(filename: str, data: dict | list):
with open(filename, 'w') as out_file:
dump(data, out_file)
[docs]def write_to_csv(out_file: str, rows: list[dict]):
with open(out_file, 'w') as output:
writer = DictWriter(output, fieldnames=rows[0].keys())
writer.writeheader()
writer.writerows(rows)