101 lines
3.6 KiB
Python
101 lines
3.6 KiB
Python
from core.builtin_concepts import BuiltinConcepts
|
|
from core.concept import Concept
|
|
from core.sheerka.ExecutionContext import ExecutionContext
|
|
from sdp.sheerkaDataProvider import SheerkaDataProvider, Event
|
|
import pprint
|
|
import os
|
|
|
|
|
|
def get_pp():
|
|
rows, columns = os.popen('stty size', 'r').read().split()
|
|
pp = pprint.PrettyPrinter(width=columns, compact=True)
|
|
return pp
|
|
|
|
|
|
class SheerkaDump:
|
|
def __init__(self, sheerka):
|
|
self.sheerka = sheerka
|
|
|
|
def dump_concepts(self):
|
|
lst = self.sheerka.sdp.list(self.sheerka.CONCEPTS_ENTRY)
|
|
for item in lst:
|
|
if hasattr(item, "__iter__"):
|
|
for i in item:
|
|
self.sheerka.log.info(i)
|
|
else:
|
|
self.sheerka.log.info(item)
|
|
|
|
def dump_definitions(self):
|
|
defs = self.sheerka.sdp.get(self.sheerka.CONCEPTS_DEFINITIONS_ENTRY)
|
|
self.sheerka.log.info(defs)
|
|
|
|
def dump_desc(self, *concept_names, eval=False):
|
|
first = True
|
|
event = Event(f"Dumping description", "")
|
|
context = ExecutionContext("dump_desc", event, self.sheerka)
|
|
for concept_name in concept_names:
|
|
if isinstance(concept_name, Concept):
|
|
concepts = concept_name
|
|
else:
|
|
concepts = self.sheerka.get(concept_name)
|
|
if self.sheerka.isinstance(concepts, BuiltinConcepts.UNKNOWN_CONCEPT):
|
|
self.sheerka.log.error(f"Concept '{concept_name}' is unknown")
|
|
return False
|
|
|
|
if not hasattr(concepts, "__iter__"):
|
|
concepts = [concepts]
|
|
|
|
for c in concepts:
|
|
if eval:
|
|
evaluated = self.sheerka.evaluate_concept(context, c)
|
|
value = evaluated.body if evaluated.key == c.key else evaluated
|
|
|
|
if not first:
|
|
self.sheerka.log.info("")
|
|
self.sheerka.log.info(f"name : {c.name}")
|
|
self.sheerka.log.info(f"bnf : {c.metadata.definition}")
|
|
self.sheerka.log.info(f"key : {c.key}")
|
|
self.sheerka.log.info(f"body : {c.metadata.body}")
|
|
if eval:
|
|
self.sheerka.log.info(f"value : {value}")
|
|
for p in c.props:
|
|
self.sheerka.log.info(f"{p}: {c.get_prop(p)}")
|
|
else:
|
|
self.sheerka.log.info("No property")
|
|
|
|
self.sheerka.log.info(f"digest : {c.get_digest()}")
|
|
|
|
if self.sheerka.isaset(context, c):
|
|
items = self.sheerka.get_set_elements(context, c)
|
|
self.sheerka.log.info(f"elements : {items}")
|
|
|
|
first = False
|
|
|
|
def dump_history(self, page=20, start=0):
|
|
count = 0
|
|
resolved_page = page if page > 0 else 50
|
|
page_count = 0
|
|
|
|
while count < page if page > 0 else True:
|
|
history = self.sheerka.history(resolved_page, start + page_count * resolved_page)
|
|
try:
|
|
h = next(history)
|
|
except StopIteration:
|
|
break
|
|
|
|
while True:
|
|
try:
|
|
if h.event.user != self.sheerka.name:
|
|
self.sheerka.log.info(h)
|
|
count += 1
|
|
h = next(history)
|
|
except StopIteration:
|
|
break
|
|
|
|
page_count += 1
|
|
|
|
def dump_state(self):
|
|
snapshot = self.sheerka.sdp.get_snapshot(SheerkaDataProvider.HeadFile)
|
|
state = self.sheerka.sdp.load_state(snapshot)
|
|
self.sheerka.log.info(get_pp().pformat(state.data))
|