80 lines
2.3 KiB
Python
80 lines
2.3 KiB
Python
from copy import deepcopy
|
|
from logging import config
|
|
|
|
from heurams.context import config_var
|
|
from heurams.services.logger import get_logger
|
|
from heurams.kernel.auxiliary.evalizor import Evalizer
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
|
|
class Nucleon:
|
|
"""原子核: 带有运行时隔离的模板化只读材料元数据容器"""
|
|
|
|
def __init__(self, ident, payload, common):
|
|
self.ident = ident
|
|
try:
|
|
data_safe = deepcopy((payload | common))
|
|
data_puz = deepcopy(data_safe['puzzles'])
|
|
data_safe['puzzles'] = {}
|
|
env = {
|
|
"payload": data_safe,
|
|
"default": config_var.get()['interface']["puzzles"],
|
|
"nucleon": data_safe,
|
|
}
|
|
self.evalizer = Evalizer(environment=env)
|
|
data_safe = self.evalizer(deepcopy(data_safe))
|
|
env = {
|
|
"payload": data_safe,
|
|
"default": config_var.get()['interface']["puzzles"],
|
|
"nucleon": data_safe,
|
|
}
|
|
self.evalizer = Evalizer(environment=env)
|
|
data_puz = self.evalizer(deepcopy(data_puz))
|
|
data_safe['puzzles'] = data_puz # type: ignore
|
|
self.data: dict = data_safe # type: ignore
|
|
except Exception:
|
|
self.data = (payload | common)
|
|
|
|
def __getitem__(self, key):
|
|
if isinstance(key, str):
|
|
if key == "ident":
|
|
return self.ident
|
|
return self.data[key]
|
|
else:
|
|
raise AttributeError
|
|
|
|
def __setitem__(self, key, value):
|
|
raise AttributeError("应为只读")
|
|
|
|
def __delitem__(self, key):
|
|
raise AttributeError("应为只读")
|
|
|
|
def __iter__(self):
|
|
return iter(self.data)
|
|
|
|
def __contains__(self, key):
|
|
return key in (self.data)
|
|
|
|
def get(self, key, default=None):
|
|
if key in self:
|
|
return self[key]
|
|
return default
|
|
|
|
def __len__(self):
|
|
return len(self.data)
|
|
|
|
def __repr__(self):
|
|
from pprint import pformat
|
|
|
|
s = pformat(self.data, indent=4)
|
|
return s
|
|
|
|
@staticmethod
|
|
def create_on_nucleonic_data(nucleonic_data: tuple):
|
|
_data = nucleonic_data
|
|
payload = _data[1][0]
|
|
common = _data[1][1]
|
|
ident = _data[0] # TODO:实现eval
|
|
return Nucleon(ident, payload, common)
|