|
|
|
|
|
#
|
|
|
# when Serializer is imported alone, fault indicates this package is
|
|
|
# dependent on lookup, but don't import Lookup, instead:
|
|
|
#
|
|
|
import DynamicObject # dependent on pysvn
|
|
|
import Serializer # dependent on Dynamic Object
|
|
|
|
|
|
import msgpack
|
|
|
import redis
|
|
|
|
|
|
import numpy as np
|
|
|
|
|
|
class NamedObject():
|
|
|
|
|
|
#---------------------------------------------
|
|
|
@staticmethod
|
|
|
def indexListMatch(list_of_lists, name, value, name2=None, value2=None, unique_f=False):
|
|
|
#
|
|
|
# for each list's <element> attribute compare with value
|
|
|
# if match, return True plus list
|
|
|
# else return False plus empty list
|
|
|
#
|
|
|
# search needs to be named part of class for object else .<value> is unrecognized
|
|
|
#
|
|
|
# unique_f finds non-uniqueness
|
|
|
|
|
|
|
|
|
index = [] # return empty indices
|
|
|
list_data = [] # return empty list
|
|
|
ii = 0
|
|
|
for theList in list_of_lists:
|
|
|
|
|
|
cmd0 = "theList.%s == value" % (name)
|
|
|
cmd1 = "isInlist(theList.%s,value)" % name
|
|
|
# if name is valid then
|
|
|
# match name against value
|
|
|
# match name (as list) against value
|
|
|
if (eval(cmd0) or eval(cmd1)):
|
|
|
if (name2 != None):
|
|
|
cmd2 = "theList.%s == value2" % name2
|
|
|
cmd3 = "isInlist(theList.%s,value2)" % name2
|
|
|
if (eval(cmd2) or eval(cmd3)):
|
|
|
if (unique_f):
|
|
|
index = index + [ii]
|
|
|
list_data = list_data + [theList] # save list of lists if non-unique
|
|
|
# don't exit on match, may be non-unique
|
|
|
else:
|
|
|
list_data = theList # save the list
|
|
|
index = [ii]
|
|
|
break
|
|
|
else:
|
|
|
if (unique_f):
|
|
|
index = index + [ii]
|
|
|
list_data = list_data + [theList] # list of lists if non-unique
|
|
|
else:
|
|
|
list_data = theList
|
|
|
index = [ii]
|
|
|
break # exit on match
|
|
|
#endif
|
|
|
ii = ii + 1
|
|
|
#end for
|
|
|
|
|
|
return index, list_data # return indices of matches and list (or list of lists)
|
|
|
|
|
|
#end indexListMatch
|
|
|
|
|
|
#---------------------------------------------
|
|
|
@staticmethod
|
|
|
def namedListMatch(list_of_lists, name, value, name2=None, value2=None, unique_f=None):
|
|
|
#
|
|
|
# for each list's <element> attribute compare with value
|
|
|
# if match, return True plus list
|
|
|
# else return False plus empty list
|
|
|
#
|
|
|
# search needs to be named part of class for object else .<value> is unrecognized
|
|
|
#
|
|
|
# unique_f finds non-uniqueness ('None' is same as False)
|
|
|
|
|
|
match_f = False
|
|
|
list_data = [] # initialize
|
|
|
|
|
|
for theList in list_of_lists:
|
|
|
|
|
|
cmd0 = "theList.%s == value" % (name)
|
|
|
cmd1 = "isInlist(theList.%s,value)" % name
|
|
|
# if name is valid then
|
|
|
# match name against value
|
|
|
# match name (as list) against value
|
|
|
if (eval(cmd0) or eval(cmd1)):
|
|
|
if (name2 != None):
|
|
|
cmd2 = "theList.%s == value2" % name2
|
|
|
cmd3 = "isInlist(theList.%s,value2)" % name2
|
|
|
if (eval(cmd2) or eval(cmd3)):
|
|
|
match_f = True
|
|
|
if (unique_f):
|
|
|
list_data = list_data + [theList] # save list of lists if non-unique
|
|
|
# don't exit on match, may be non-unique
|
|
|
else:
|
|
|
list_data = theList # save the list
|
|
|
break
|
|
|
else:
|
|
|
match_f = True
|
|
|
if (unique_f):
|
|
|
list_data = list_data + [theList] # list of lists if non-unique
|
|
|
else:
|
|
|
list_data = theList
|
|
|
break # exit on match
|
|
|
#endif
|
|
|
#end for
|
|
|
|
|
|
return match_f, list_data # return match, and list (or list of lists)
|
|
|
|
|
|
#end namedListMatch
|
|
|
|
|
|
#---------------------------------------------
|
|
|
@staticmethod
|
|
|
def combineLists(object):
|
|
|
#
|
|
|
# used for dumping elements in list of lists for debugging
|
|
|
#
|
|
|
ret_list =[]
|
|
|
ii = 0
|
|
|
while ii < len(object):
|
|
|
ret_list = ret_list + [object[ii].list] # not a real list, so can't use built-in list iterator
|
|
|
ii = ii + 1
|
|
|
return ret_list
|
|
|
|
|
|
# end combineLists
|
|
|
|
|
|
|
|
|
|
|
|
class StateListObject(NamedObject):
|
|
|
def __init__(self, concurrent=None, hierarchical=None, history=None, state=None):
|
|
|
self.concurrent = concurrent
|
|
|
self.hierarchical = hierarchical
|
|
|
self.history = history
|
|
|
self.state = state
|
|
|
self.list = [self.concurrent, self.hierarchical, self.history, self.state ]
|
|
|
#end class StateListObject
|
|
|
|
|
|
source_object = "my test string"
|
|
|
|
|
|
serializer = "yaml"
|
|
|
#
|
|
|
# python versioning issue (ver 2.7 -> else path)
|
|
|
#
|
|
|
if isinstance(serializer,Serializer.Serializer):
|
|
|
serial_type = Serializer.serial_types[serializer]
|
|
|
else:
|
|
|
serial_type = serializer
|
|
|
serializer = Serializer.serializers[serializer]()
|
|
|
|
|
|
|
|
|
|
|
|
datastr = serializer.toSerial(source_object)
|
|
|
|
|
|
dest_object = serializer.fromSerial(datastr)
|
|
|
|
|
|
print "dest_object=",dest_object
|
|
|
|
|
|
myObject = StateListObject(hierarchical="yes",state=np.array([1,2,3.0]))
|
|
|
|
|
|
datastr = serializer.toSerial(myObject)
|
|
|
|
|
|
packed = msgpack.packb(datastr)
|
|
|
|
|
|
try:
|
|
|
r= redis.StrictRedis(host='localhost',port=6379,db=0)
|
|
|
except Exception as eobj:
|
|
|
print "is the redis server running?",eobj
|
|
|
else:
|
|
|
|
|
|
r.set('baz',packed) # converts to string
|
|
|
x = r.get('baz')
|
|
|
|
|
|
unpacked = msgpack.unpackb(x)
|
|
|
|
|
|
dest_object = serializer.fromSerial(unpacked)
|
|
|
|
|
|
print "val1=",dest_object.hierarchical
|
|
|
val2 = dest_object.state
|
|
|
print "val2=",val2
|
|
|
# can numpy array be used as array?
|
|
|
print val2.shape
|
|
|
|
|
|
|
|
|
|