|
17 | 17 | config_db.listen() |
18 | 18 |
|
19 | 19 | """ |
20 | | - |
21 | 20 | import sys |
22 | 21 | import time |
23 | 22 | from .dbconnector import SonicV2Connector |
24 | 23 |
|
| 24 | +PY3K = sys.version_info >= (3, 0) |
| 25 | + |
25 | 26 | class ConfigDBConnector(SonicV2Connector): |
26 | 27 |
|
27 | 28 | INIT_INDICATOR = 'CONFIG_DB_INITIALIZED' |
@@ -101,16 +102,28 @@ def __raw_to_typed(self, raw_data): |
101 | 102 | if raw_data == None: |
102 | 103 | return None |
103 | 104 | typed_data = {} |
104 | | - for key in raw_data: |
| 105 | + for raw_key in raw_data: |
| 106 | + key = raw_key |
| 107 | + if PY3K: |
| 108 | + key = raw_key.decode('utf-8') |
| 109 | + |
105 | 110 | # "NULL:NULL" is used as a placeholder for objects with no attributes |
106 | 111 | if key == "NULL": |
107 | 112 | pass |
108 | 113 | # A column key with ending '@' is used to mark list-typed table items |
109 | 114 | # TODO: Replace this with a schema-based typing mechanism. |
110 | 115 | elif key.endswith("@"): |
111 | | - typed_data[key[:-1]] = raw_data[key].split(',') |
| 116 | + value = "" |
| 117 | + if PY3K: |
| 118 | + value = raw_data[raw_key].decode("utf-8").split(',') |
| 119 | + else: |
| 120 | + value = raw_data[raw_key].split(',') |
| 121 | + typed_data[key[:-1]] = value |
112 | 122 | else: |
113 | | - typed_data[key] = raw_data[key] |
| 123 | + if PY3K: |
| 124 | + typed_data[key] = raw_data[raw_key].decode('utf-8') |
| 125 | + else: |
| 126 | + typed_data[key] = raw_data[raw_key] |
114 | 127 | return typed_data |
115 | 128 |
|
116 | 129 | def __typed_to_raw(self, typed_data): |
@@ -212,10 +225,15 @@ def get_table(self, table): |
212 | 225 | data = {} |
213 | 226 | for key in keys: |
214 | 227 | try: |
215 | | - (_, row) = key.split(self.TABLE_NAME_SEPARATOR, 1) |
216 | 228 | entry = self.__raw_to_typed(client.hgetall(key)) |
217 | | - if entry != None: |
218 | | - data[self.deserialize_key(row)] = entry |
| 229 | + if entry: |
| 230 | + if PY3K: |
| 231 | + key = key.decode('utf-8') |
| 232 | + (_, row) = key.split(self.TABLE_NAME_SEPARATOR, 1) |
| 233 | + data[self.deserialize_key(row)] = entry |
| 234 | + else: |
| 235 | + (_, row) = key.split(self.TABLE_NAME_SEPARATOR, 1) |
| 236 | + data[self.deserialize_key(row)] = entry |
219 | 237 | except ValueError: |
220 | 238 | pass #Ignore non table-formated redis entries |
221 | 239 | return data |
|
0 commit comments