Implemented SheerkaOntology
This commit is contained in:
+5
-58
@@ -5,8 +5,7 @@ import os
|
||||
import pkgutil
|
||||
from copy import deepcopy
|
||||
|
||||
from cache.Cache import Cache
|
||||
from core.ast_helpers import ast_to_props
|
||||
from core.global_symbols import CustomType
|
||||
from core.tokenizer import TokenKind, Tokenizer
|
||||
from pyparsing import *
|
||||
|
||||
@@ -35,8 +34,6 @@ CONSOLE_COLORS_MAP = {
|
||||
|
||||
PRIMITIVES_TYPES = (str, bool, type(None), int, float, list, dict, set, bytes, tuple, type)
|
||||
|
||||
expressions_cache = Cache()
|
||||
|
||||
ESC = Literal('\x1b')
|
||||
integer = Word(nums)
|
||||
escapeSeq = Combine(ESC + '[' + Optional(delimitedList(integer, ';')) +
|
||||
@@ -603,59 +600,6 @@ def flatten_all_children(item, get_children):
|
||||
return inner_get_all_children(item)
|
||||
|
||||
|
||||
def evaluate_expression(expr, bag):
|
||||
"""
|
||||
Try to evaluate expr in context of bag
|
||||
:param expr:
|
||||
:param bag:
|
||||
:return:
|
||||
"""
|
||||
|
||||
if expr is None or expr.strip() == "":
|
||||
return None
|
||||
|
||||
if expr in bag:
|
||||
return bag[expr]
|
||||
|
||||
props_definitions = expressions_cache.get(expr)
|
||||
if props_definitions is None:
|
||||
_ast = ast.parse(expr, mode="eval")
|
||||
props_definitions = []
|
||||
ast_to_props(props_definitions, _ast.body, None)
|
||||
props_definitions.reverse()
|
||||
expressions_cache.put(expr, props_definitions)
|
||||
|
||||
return evaluate_object(bag, props_definitions)
|
||||
|
||||
|
||||
def evaluate_object(bag, properties):
|
||||
"""
|
||||
Evaluate the properties of an object
|
||||
Works with evaluate_expression
|
||||
:param bag:
|
||||
:param properties: List of ast_helpers.PropDef
|
||||
:return:
|
||||
"""
|
||||
for prop in properties:
|
||||
try:
|
||||
obj = bag[prop.prop]
|
||||
except KeyError:
|
||||
try:
|
||||
obj = bag["self"][prop.prop]
|
||||
except Exception:
|
||||
raise NameError(prop.prop)
|
||||
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
if prop.index is not None:
|
||||
obj = obj[prop.index]
|
||||
|
||||
bag = as_bag(obj)
|
||||
|
||||
return obj
|
||||
|
||||
|
||||
def get_text_from_tokens(tokens, custom_switcher=None, tracker=None):
|
||||
"""
|
||||
Create the source code, from the list of token
|
||||
@@ -729,7 +673,9 @@ def sheerka_deepcopy(obj):
|
||||
return instance
|
||||
|
||||
from core.concept import Concept
|
||||
if isinstance(obj, dict):
|
||||
if isinstance(obj, CustomType):
|
||||
return obj
|
||||
elif isinstance(obj, dict):
|
||||
res = {sheerka_deepcopy(k): sheerka_deepcopy(v) for k, v in obj.items()}
|
||||
return res
|
||||
elif isinstance(obj, list):
|
||||
@@ -759,6 +705,7 @@ class NextIdManager:
|
||||
"""
|
||||
solely return the next integer
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
self.id = -1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user