Source code for aim._sdk.record
import sys
from types import new_class
from typing import Union, List
from aim._core.storage.object import CustomObject as AimStorageObject
from aim._sdk.blob import BLOB
[docs]@AimStorageObject.alias('aim.Record')
class Record(AimStorageObject):
AIM_NAME = 'aim.Record'
RESOLVE_BLOBS = False
[docs] def __init_subclass__(cls, **kwargs):
super().__init_subclass__(**kwargs)
if 'SEQUENCE_NAME' in cls.__dict__:
from aim._sdk.sequence import Sequence
if 'SEQUENCE_BASE_TYPE' in cls.__dict__:
base_cls = cls.SEQUENCE_BASE_TYPE
sequence_cls = type(cls.SEQUENCE_NAME, (base_cls,), {
'__record_type__': Union[cls, List[cls]]
})
else:
sequence_cls = new_class(cls.SEQUENCE_NAME, (Sequence[Union[cls, List[cls]]],), {})
module = sys.modules[cls.__module__]
setattr(module, cls.SEQUENCE_NAME, sequence_cls)
@classmethod
def get_full_typename(cls):
if cls == Record:
return cls.get_typename()
# if hasattr(cls, 'extends'):
# extended_cls = getattr(cls, 'extends')
# assert issubclass(extended_cls, Object)
for base in cls.__bases__:
if issubclass(base, Record):
base_typename = base.get_full_typename()
typename = cls.get_typename()
return '->'.join((base_typename, typename))
@staticmethod
def extends(co_cls):
assert issubclass(co_cls, Record)
def decorator(cls):
setattr(cls, '__extends', co_cls)
return cls
return decorator
def dump(self):
# TODO: V4 handle nested blob values
data = self.storage[...]
keys_list = list(data.keys())
for key in keys_list:
if isinstance(data[key], BLOB):
if self.RESOLVE_BLOBS:
data[key] = data[key].load()
else:
del data[key]
return data