Spaces:
Running
on
L4
Running
on
L4
# Copyright (c) Meta Platforms, Inc. and affiliates. | |
# All rights reserved. | |
# | |
# This source code is licensed under the license found in the | |
# LICENSE file in the root directory of this source tree. | |
import json | |
class AttrDict: | |
def __init__(self, entries): | |
self.add_entries_(entries) | |
def keys(self): | |
return self.__dict__.keys() | |
def values(self): | |
return self.__dict__.values() | |
def __getitem__(self, key): | |
return self.__dict__[key] | |
def __setitem__(self, key, value): | |
self.__dict__[key] = value | |
def __delitem__(self, key): | |
return self.__dict__.__delitem__(key) | |
def __contains__(self, key): | |
return key in self.__dict__ | |
def __repr__(self): | |
return self.__dict__.__repr__() | |
def __getattr__(self, attr): | |
if attr.startswith("__"): | |
return self.__getattribute__(attr) | |
return self.__dict__[attr] | |
def items(self): | |
return self.__dict__.items() | |
def __iter__(self): | |
return iter(self.items()) | |
def add_entries_(self, entries, overwrite=True): | |
for key, value in entries.items(): | |
if key not in self.__dict__: | |
if isinstance(value, dict): | |
self.__dict__[key] = AttrDict(value) | |
else: | |
self.__dict__[key] = value | |
else: | |
if isinstance(value, dict): | |
self.__dict__[key].add_entries_(entries=value, overwrite=overwrite) | |
elif overwrite or self.__dict__[key] is None: | |
self.__dict__[key] = value | |
def serialize(self): | |
return json.dumps(self, default=self.obj_to_dict, indent=4) | |
def obj_to_dict(self, obj): | |
return obj.__dict__ | |
def get(self, key, default=None): | |
return self.__dict__.get(key, default) | |