Skip to content

Commit

Permalink
Filter function for TokenRegister,duplicate_with_keymap for token, va…
Browse files Browse the repository at this point in the history
…rious token creation functions
  • Loading branch information
johnsekar committed Oct 15, 2018
1 parent 50699f3 commit d25a854
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 1 deletion.
40 changes: 39 additions & 1 deletion wc_rules/rete_token.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from .utils import generate_id
from .utils import generate_id, iter_to_string

class Token(object):
def __init__(self,contents=None):
Expand Down Expand Up @@ -37,6 +37,8 @@ def prep_safe_delete(self):
for value in self._dict.values():
if hasattr(value,'_tokens'):
value._tokens.remove(self)
if self._location is not None:
self._location.remove_token(self)
return self

def items(self): return self._dict.items()
Expand All @@ -49,12 +51,22 @@ def modify_with_keymap(self,keymap):
self._dict.pop(key)
return self

def duplicate_with_keymap(self,keymap=None):
if keymap is None:
return Token(self)
t = Token()
for key in self.keys():
t[keymap[key]] = self[key]
return t

class TokenRegister(object):
def __init__(self):
self._dict = dict()
self._set = set()

def __str__(self):
return iter_to_string(self._set)

def register(self,key,value,token):
t = tuple([key,value])
if t not in self._dict:
Expand Down Expand Up @@ -84,3 +96,29 @@ def remove_token(self,token):
self.deregister(key,value,token)
self._set.remove(token)
return self

def get(self,key,value):
t = tuple([key,value])
if t in self._dict:
return self._dict[tuple([key,value])]
return set()

def filter(self,token):
return set.intersection(*(self.get(key,value) for key, value in token.items()))


def token_create_node(node):
attrs = node.get_nonempty_scalar_attributes()
return Token({'create_node':node,'modified_attrs':tuple(attrs)})

def token_edit_attrs(node,attrlist):
return Token({'node':node,'modified_attrs':tuple(attrlist)})

def token_delete_node(node):
return Token({'delete_node':node})

def token_create_edge(node1,attr1,attr2,node2):
return Token({'create_edge':(node1,attr1,attr2,node2)})

def token_delete_edge(node1,attr1,attr2,node2):
return Token({'delete_edge':(node1,attr1,attr2,node2)})
3 changes: 3 additions & 0 deletions wc_rules/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ def listify(value):
return [value]
return value

def iter_to_string(iterable):
return '\n'.join([str(x) for x in list(iterable)])

def generate_id():
return str(uuid.UUID(int=idgen.getrandbits(128)))

Expand Down

0 comments on commit d25a854

Please sign in to comment.