2023-06-09 20:20:46 +00:00
|
|
|
from copy import deepcopy
|
2023-06-10 17:39:32 +00:00
|
|
|
from dataclasses import dataclass
|
2023-06-09 20:20:46 +00:00
|
|
|
|
2023-06-10 17:39:32 +00:00
|
|
|
@dataclass
|
2023-06-09 11:19:47 +00:00
|
|
|
class Base:
|
|
|
|
symbol: str
|
2023-06-10 17:39:32 +00:00
|
|
|
dirty: bool
|
2023-06-09 11:19:47 +00:00
|
|
|
|
|
|
|
def __init__(self, symbol, store):
|
|
|
|
self.symbol = symbol
|
|
|
|
self.store = store
|
2023-06-09 20:20:46 +00:00
|
|
|
self.dirty = True
|
|
|
|
|
2023-06-10 17:39:32 +00:00
|
|
|
def seta(self, d, name):
|
|
|
|
if name in d:
|
|
|
|
setattr(self, name, d[name])
|
|
|
|
|
|
|
|
def __setattr__(self, name, value):
|
|
|
|
if name != 'dirty':
|
|
|
|
self.dirty = True
|
|
|
|
super().__setattr__(name, value)
|
|
|
|
|
|
|
|
def update(self, d):
|
|
|
|
pass
|
|
|
|
|
2023-06-09 20:20:46 +00:00
|
|
|
def dict(self):
|
|
|
|
r = deepcopy(self.__dict__)
|
|
|
|
del r['store']
|
|
|
|
del r['dirty']
|
|
|
|
return r
|
2023-06-09 11:19:47 +00:00
|
|
|
|
|
|
|
def path(self):
|
|
|
|
raise NotImplementedError('path')
|
2023-06-10 17:39:32 +00:00
|
|
|
|
|
|
|
@classmethod
|
2023-06-09 11:19:47 +00:00
|
|
|
def ext(self):
|
|
|
|
raise NotImplementedError('extension')
|
|
|
|
|
|
|
|
def type(self):
|
|
|
|
return self.__class__.__name__
|
|
|
|
|
|
|
|
def __str__(self):
|
2023-06-10 17:39:32 +00:00
|
|
|
return self.f()
|
|
|
|
|
|
|
|
def f(self, detail=1):
|
|
|
|
r = self.symbol
|
|
|
|
if detail > 1:
|
|
|
|
r += '.' + self.ext()
|
|
|
|
return r
|