from fractions import Fraction from pathlib import Path from json import JSONEncoder from .utils import * def rmtree(path: Path): if path.is_file(): path.unlink() else: for ch in path.iterdir(): rmtree(ch) path.rmdir() def safe_save(fpath, data, save_fun, rewrite=False, error_msg='File {fpath} exists! To rewite it use `--rewrite` flag', **kwargs): if not fpath.is_file() or rewrite: save_fun(str(fpath), data, **kwargs) else: raise FileExistsError(error_msg.format(fpath=fpath)) class FractionJSONEncoder(JSONEncoder): def default(self, o): if isinstance(o, Fraction): return {'Fraction': [o.numerator, o.denominator]} else: return o.__dict__ def fraction_from_json(json_object): if 'Fraction' in json_object: return Fraction(*json_object['Fraction']) return json_object