diff options
author | rcoh <rcoh@mit.edu> | 2010-12-25 14:07:18 -0500 |
---|---|---|
committer | rcoh <rcoh@mit.edu> | 2010-12-25 14:07:18 -0500 |
commit | 1b84f44faacfe83d4f3603b4df913ed01bf79d09 (patch) | |
tree | 5c8af28f71d44d6fb234e3c9f4b9b1f2a2be0006 /util | |
parent | 2113f5363022e4ccb2b14d0a7ebd6765de820411 (diff) | |
parent | 9e1e0f0c0b6835cc3755bbaa6a364475133ce848 (diff) |
Merge branch 'master' into configimprovements
Conflicts:
util/Strings.py
Diffstat (limited to 'util')
-rw-r--r-- | util/ComponentRegistry.py | 36 | ||||
-rw-r--r-- | util/Config.py | 34 | ||||
-rw-r--r-- | util/NetworkOps.py | 6 | ||||
-rw-r--r-- | util/PacketComposition.py | 2 | ||||
-rw-r--r-- | util/Strings.py | 5 |
5 files changed, 72 insertions, 11 deletions
diff --git a/util/ComponentRegistry.py b/util/ComponentRegistry.py index f8fe00d..119ce18 100644 --- a/util/ComponentRegistry.py +++ b/util/ComponentRegistry.py @@ -1,17 +1,43 @@ import pdb +#component registry, a singleton +import thread +#class ComponentRegistry: +# def __init__(self): +# self.regDict = {} +# @staticmethod +# def getRegistry(self): +# if self.instance == None: +# self.instance = self.__class__() +# return self.instance +# def registerComponent(component, cid=None): +# if cid != None: +# globals()['Registry'][cid] = component +# else: +# try: +# cid = component['Id'] +# globals()['Registry'][cid] = component +# except: +# raise Exception('Must specify Id, component did not store it') +#def registerDefault( +def removeComponent(cid): + globals()['Registry'].pop(cid) +def getComponent(cid): + return globals()['Registry'][cid] #Registry of all components of the light system #TODO: pick a graceful failure behavior and implement it -registry = {} +def initRegistry(): + globals()['Registry'] = {} def registerComponent(component, cid=None): if cid != None: - registry[cid] = component + globals()['Registry'][cid] = component else: try: cid = component['Id'] - registry[cid] = component + globals()['Registry'][cid] = component except: raise Exception('Must specify Id, component did not store it') +#def registerDefault( def removeComponent(cid): - registry.pop(cid) + globals()['Registry'].pop(cid) def getComponent(cid): - return registry[cid] + return globals()['Registry'][cid] diff --git a/util/Config.py b/util/Config.py index 746350d..0349e3e 100644 --- a/util/Config.py +++ b/util/Config.py @@ -1,4 +1,5 @@ from xml.etree.ElementTree import ElementTree +import util.Strings as Strings classArgsMem = {} CONFIG_PATH = 'config/' def loadParamRequirementDict(className): @@ -6,7 +7,7 @@ def loadParamRequirementDict(className): classArgsMem[className] = fileToDict(CONFIG_PATH + className) return classArgsMem[className] def loadConfigFile(fileName): #TODO: error handling etc. - try: + #try: fileName = CONFIG_PATH + fileName if '.params' in fileName: return fileToDict(fileName) @@ -14,8 +15,37 @@ def loadConfigFile(fileName): #TODO: error handling etc. config = ElementTree() #use .fromstring, and resolve xincludes config.parse(fileName) return config - except: + #except: return None +def compositeXMLTrees(parentTree, overridingTree): + #type checking -- convert ElementTrees to their root elements + parentItems = parentTree.getchildren() + overrideItems = overridingTree.getchildren() + #first, lets figure out what tags we have in the override tree: + tagCollection = [el.tag for el in overrideItems] #we can speed this up with a dict if necessary + overrideRoot = overridingTree.getroot() + for item in parentItems: + if not item.tag in tagCollection: #no override + overrideRoot.insert(-1, item) #insert the new item at the end + else: + #do we merge or replace? + intersectingElements = findElementsByTag(item.tag, overrideItems) + if len(intersectingItems) > 1: + print 'ABUSE!' + interEl = intersectingElements[0] + mode = 'Replace' + if Strings.OVERRIDE_BEHAVIOR in interEl.attrib: + mode = interEl.attrib[Strings.OVERRIDE_BEHAVIOR] + if mode != 'Replace' and mode != 'Merge': + print 'Bad Mode. Replacing' + mode = 'Replace' + if mode == 'Replace': + pass #we don't need to do anything + if mode == 'Merge': + pass #TODO: code this + +def findElementsByTag(tag, eList): + return [el for el in eList if el.tag == tag] def fileToDict(fileName): fileText = '' try: diff --git a/util/NetworkOps.py b/util/NetworkOps.py index a247090..0404975 100644 --- a/util/NetworkOps.py +++ b/util/NetworkOps.py @@ -1,6 +1,8 @@ import socket def getConnectedSocket(ip,port): sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - print (ip, port) - sock.connect((ip, port)) + try: + sock.connect((ip, port)) + except: + print 'network down' return sock diff --git a/util/PacketComposition.py b/util/PacketComposition.py index 5133459..2563c61 100644 --- a/util/PacketComposition.py +++ b/util/PacketComposition.py @@ -26,7 +26,6 @@ def composePixelStripPacket(pixelStrip,port): subDict = dict(kinetDict) subDict['len'] = 38000 #I have no idea why this works. subDict['port'] = port - #pdb.set_trace() packet.extend(kinetPortOutPacket(subDict)) packet.append(0x0) packet.extend(data) @@ -50,7 +49,6 @@ def kinetPortOutPayload(argDict): #payload.append(0x00) #somepadding? lolwtf. payload.extend(struct.pack('H', argDict['len'])) payload.extend(struct.pack('H', argDict['startcode'])) - #pdb.set_trace() return payload def kinetPortOutPacket(payloadArgs): packet = bytearray() diff --git a/util/Strings.py b/util/Strings.py index d58202d..40ad86b 100644 --- a/util/Strings.py +++ b/util/Strings.py @@ -1,2 +1,7 @@ LOCATION = 'Location' +DEFAULT_MAPPER = 'DefaultPixelMapper' + + + +#XMLStuff OVERRIDE_BEHAVIOR = 'OverrideBehavior' |