53 lines
1019 B
Python
53 lines
1019 B
Python
from copy import deepcopy
|
|
from dataclasses import dataclass
|
|
from util import sg
|
|
@dataclass
|
|
class Base:
|
|
symbol: str
|
|
dirty: bool
|
|
|
|
def __init__(self, symbol, store):
|
|
self.symbol = symbol
|
|
self.store = store
|
|
self.dirty = True
|
|
|
|
def seta(self, attr, d, name=None):
|
|
if name is None:
|
|
name = attr
|
|
val = sg(d, name)
|
|
if val is not None:
|
|
setattr(self, attr, val)
|
|
|
|
def __setattr__(self, name, value):
|
|
if name != 'dirty':
|
|
self.dirty = True
|
|
super().__setattr__(name, value)
|
|
|
|
def update(self, d):
|
|
pass
|
|
|
|
def dict(self):
|
|
r = deepcopy(self.__dict__)
|
|
del r['store']
|
|
del r['dirty']
|
|
return r
|
|
|
|
def path(self):
|
|
raise NotImplementedError('path')
|
|
|
|
@classmethod
|
|
def ext(self):
|
|
raise NotImplementedError('extension')
|
|
|
|
def type(self):
|
|
return self.__class__.__name__
|
|
|
|
def __str__(self):
|
|
return self.f()
|
|
|
|
def f(self, detail=1):
|
|
r = self.symbol
|
|
if detail > 1:
|
|
r += '.' + self.ext()
|
|
return r
|