37 | | def updateFromFile( self, filename, must_exist=False): |
---|
38 | | filename = os.path.expanduser(filename) |
---|
39 | | log.debug("DeviceList::updateFromFile(%s)" % filename) |
---|
40 | | if not os.path.exists( filename ): |
---|
41 | | if must_exist: |
---|
42 | | log.error("cannot open file") |
---|
43 | | return |
---|
44 | | f = open( filename, "r" ) |
---|
| 37 | def updateFromFile( self, filename, must_exist=False): |
---|
| 38 | filename = os.path.expanduser(filename) |
---|
| 39 | log.debug("DeviceList::updateFromFile(%s)" % filename) |
---|
| 40 | if not os.path.exists( filename ): |
---|
| 41 | if must_exist: |
---|
| 42 | log.error("cannot open file") |
---|
| 43 | return |
---|
| 44 | f = open( filename, "r" ) |
---|
46 | | lex = Parser( f ) |
---|
47 | | config = {} |
---|
48 | | while lex.peaktoken() != lex.eof: |
---|
49 | | tmp = lex.parsenamedvalue() |
---|
50 | | if tmp != None: |
---|
51 | | config[ tmp[0] ] = tmp[1] |
---|
52 | | for dev in config["device_definitions"]: |
---|
53 | | self.addDevice( dev ) |
---|
| 46 | lex = Parser( f ) |
---|
| 47 | config = {} |
---|
| 48 | while lex.peaktoken() != lex.eof: |
---|
| 49 | tmp = lex.parsenamedvalue() |
---|
| 50 | if tmp != None: |
---|
| 51 | config[ tmp[0] ] = tmp[1] |
---|
| 52 | if config.has_key("device_definitions"): |
---|
| 53 | for dev in config["device_definitions"]: |
---|
| 54 | self.addDevice( dev ) |
---|
55 | | def getDeviceById( self, vendor, model ): |
---|
56 | | log.debug("DeviceList::getDeviceById( %s, %s )" % (vendor, model )) |
---|
57 | | for dev in self.devices: |
---|
58 | | if int("%s" % dev['vendorid'], 0) == int("%s" % vendor, 0) and \ |
---|
59 | | int("%s" % dev['modelid'], 0) == int("%s" % model, 0): |
---|
60 | | return dev |
---|
61 | | tmp = dict() |
---|
62 | | self.devices.append( tmp ) |
---|
63 | | return tmp |
---|
| 56 | def getDeviceById( self, vendor, model ): |
---|
| 57 | log.debug("DeviceList::getDeviceById( %s, %s )" % (vendor, model )) |
---|
| 58 | for dev in self.devices: |
---|
| 59 | if int("%s" % dev['vendorid'], 0) == int("%s" % vendor, 0) and \ |
---|
| 60 | int("%s" % dev['modelid'], 0) == int("%s" % model, 0): |
---|
| 61 | return dev |
---|
| 62 | tmp = dict() |
---|
| 63 | self.devices.append( tmp ) |
---|
| 64 | return tmp |
---|
65 | | def addDevice( self, device_dict ): |
---|
66 | | log.debug("DeviceList::addDevice()") |
---|
67 | | dev = self.getDeviceById( device_dict['vendorid'], device_dict['modelid'] ) |
---|
68 | | dev.update( device_dict ) |
---|
| 66 | def addDevice( self, device_dict ): |
---|
| 67 | log.debug("DeviceList::addDevice()") |
---|
| 68 | dev = self.getDeviceById( device_dict['vendorid'], device_dict['modelid'] ) |
---|
| 69 | dev.update( device_dict ) |
---|
80 | | def parselist( self, level="" ): |
---|
81 | | token = self.peaktoken() |
---|
82 | | if token != "(": |
---|
83 | | return |
---|
84 | | self.lex.get_token() |
---|
85 | | log.debug("%sWill parse list" % level) |
---|
86 | | ret = [] |
---|
87 | | token = self.peaktoken() |
---|
88 | | while token != ")": |
---|
89 | | ret.append( self.parsenamedvalue( level+" " ) ) |
---|
90 | | token = self.peaktoken() |
---|
91 | | log.debug("%slist is %s" % (level, str(ret))) |
---|
92 | | self.lex.get_token() |
---|
93 | | if self.peaktoken() == ",": |
---|
94 | | log.debug("%sFound a delimiter" % level) |
---|
95 | | self.lex.get_token() |
---|
96 | | return ret |
---|
| 81 | def parselist( self, level="" ): |
---|
| 82 | token = self.peaktoken() |
---|
| 83 | if token != "(": |
---|
| 84 | return |
---|
| 85 | self.lex.get_token() |
---|
| 86 | log.debug("%sWill parse list" % level) |
---|
| 87 | ret = [] |
---|
| 88 | token = self.peaktoken() |
---|
| 89 | while token != ")": |
---|
| 90 | ret.append( self.parsenamedvalue( level+" " ) ) |
---|
| 91 | token = self.peaktoken() |
---|
| 92 | log.debug("%slist is %s" % (level, str(ret))) |
---|
| 93 | self.lex.get_token() |
---|
| 94 | if self.peaktoken() == ",": |
---|
| 95 | log.debug("%sFound a delimiter" % level) |
---|
| 96 | self.lex.get_token() |
---|
| 97 | return ret |
---|
98 | | def parsemap( self, level="" ): |
---|
99 | | token = self.lex.get_token() |
---|
100 | | if token != "{": |
---|
101 | | return |
---|
102 | | log.debug("%sWill parse map" % level) |
---|
103 | | ret = {} |
---|
104 | | token = self.peaktoken() |
---|
105 | | while token != "}": |
---|
106 | | #self.push_token( token ) |
---|
107 | | tmp = self.parsenamedvalue( level+" " ) |
---|
108 | | if tmp != None: |
---|
109 | | ret[ tmp[0] ] = tmp[1] |
---|
110 | | token = self.peaktoken() |
---|
111 | | token = self.lex.get_token() |
---|
112 | | log.debug("%sMap ended with '%s' and '%s'"% (level,token,self.peaktoken())) |
---|
113 | | if self.peaktoken() in (",",";"): |
---|
114 | | log.debug("%sFound a delimiter!" % level) |
---|
115 | | self.lex.get_token() |
---|
116 | | return ret |
---|
| 99 | def parsemap( self, level="" ): |
---|
| 100 | token = self.lex.get_token() |
---|
| 101 | if token != "{": |
---|
| 102 | return |
---|
| 103 | log.debug("%sWill parse map" % level) |
---|
| 104 | ret = {} |
---|
| 105 | token = self.peaktoken() |
---|
| 106 | while token != "}": |
---|
| 107 | #self.push_token( token ) |
---|
| 108 | tmp = self.parsenamedvalue( level+" " ) |
---|
| 109 | if tmp != None: |
---|
| 110 | ret[ tmp[0] ] = tmp[1] |
---|
| 111 | token = self.peaktoken() |
---|
| 112 | token = self.lex.get_token() |
---|
| 113 | log.debug("%sMap ended with '%s' and '%s'"% (level,token,self.peaktoken())) |
---|
| 114 | if self.peaktoken() in (",",";"): |
---|
| 115 | log.debug("%sFound a delimiter!" % level) |
---|
| 116 | self.lex.get_token() |
---|
| 117 | return ret |
---|
118 | | def parsevalue( self, level="" ): |
---|
119 | | token = self.lex.get_token() |
---|
120 | | log.debug("%sparsevalue() called on token '%s'" % (level, token)) |
---|
121 | | self.lex.push_token( token ) |
---|
122 | | if token == "(": |
---|
123 | | value = self.parselist( level+" " ) |
---|
124 | | elif token == "{": |
---|
125 | | value = self.parsemap( level+" " ) |
---|
126 | | else: |
---|
127 | | value = self.lex.get_token().replace( "\"", "" ) |
---|
128 | | token = self.peaktoken() |
---|
129 | | if token == ";": |
---|
130 | | log.debug("%sFound a delimiter!" % level) |
---|
131 | | self.lex.get_token() |
---|
132 | | return value |
---|
| 119 | def parsevalue( self, level="" ): |
---|
| 120 | token = self.lex.get_token() |
---|
| 121 | log.debug("%sparsevalue() called on token '%s'" % (level, token)) |
---|
| 122 | self.lex.push_token( token ) |
---|
| 123 | if token == "(": |
---|
| 124 | value = self.parselist( level+" " ) |
---|
| 125 | elif token == "{": |
---|
| 126 | value = self.parsemap( level+" " ) |
---|
| 127 | else: |
---|
| 128 | value = self.lex.get_token().replace( "\"", "" ) |
---|
| 129 | token = self.peaktoken() |
---|
| 130 | if token == ";": |
---|
| 131 | log.debug("%sFound a delimiter!" % level) |
---|
| 132 | self.lex.get_token() |
---|
| 133 | return value |
---|
134 | | def parsenamedvalue( self, level="" ): |
---|
135 | | token = self.lex.get_token() |
---|
136 | | log.debug("%sparsenamedvalue() called on token '%s'" % (level, token)) |
---|
137 | | if token == "{": |
---|
138 | | self.lex.push_token( token ) |
---|
139 | | return self.parsemap( level+" " ) |
---|
140 | | if len(token) > 0 and token not in ("{","}","(",")",",",";"): |
---|
141 | | log.debug("%sGot name '%s'" %(level,token)) |
---|
142 | | name = token |
---|
143 | | token = self.lex.get_token() |
---|
144 | | if token in ("=",":"): |
---|
145 | | #print "%sWill parse value" % level |
---|
146 | | value = self.parsevalue( level ) |
---|
147 | | return (name,value) |
---|
148 | | log.debug("%sparsenamedvalue() will return None!" % level) |
---|
149 | | return |
---|
| 135 | def parsenamedvalue( self, level="" ): |
---|
| 136 | token = self.lex.get_token() |
---|
| 137 | log.debug("%sparsenamedvalue() called on token '%s'" % (level, token)) |
---|
| 138 | if token == "{": |
---|
| 139 | self.lex.push_token( token ) |
---|
| 140 | return self.parsemap( level+" " ) |
---|
| 141 | if len(token) > 0 and token not in ("{","}","(",")",",",";"): |
---|
| 142 | log.debug("%sGot name '%s'" %(level,token)) |
---|
| 143 | name = token |
---|
| 144 | token = self.lex.get_token() |
---|
| 145 | if token in ("=",":"): |
---|
| 146 | #print "%sWill parse value" % level |
---|
| 147 | value = self.parsevalue( level ) |
---|
| 148 | return (name,value) |
---|
| 149 | log.debug("%sparsenamedvalue() will return None!" % level) |
---|
| 150 | return |
---|