Correctly decode, for sqlite and postgres, rows from pushers table

This commit is contained in:
Erik Johnston 2015-04-29 19:41:14 +01:00
parent 4a9dc5b2f5
commit b1ca784aca
1 changed files with 24 additions and 19 deletions

View File

@ -22,11 +22,33 @@ from syutil.jsonutil import encode_canonical_json
import logging import logging
import simplejson as json import simplejson as json
import types
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class PusherStore(SQLBaseStore): class PusherStore(SQLBaseStore):
def _decode_pushers_rows(self, rows):
for r in rows:
dataJson = r['data']
r['data'] = None
try:
if isinstance(dataJson, types.BufferType):
dataJson = str(dataJson).decode("UTF8")
r['data'] = json.loads(dataJson)
except Exception as e:
logger.warn(
"Invalid JSON in data for pusher %d: %s, %s",
r['id'], dataJson, e.message,
)
pass
if isinstance(r['pushkey'], types.BufferType):
r['pushkey'] = str(r['pushkey']).decode("UTF8")
return rows
@defer.inlineCallbacks @defer.inlineCallbacks
def get_pushers_by_app_id_and_pushkey(self, app_id, pushkey): def get_pushers_by_app_id_and_pushkey(self, app_id, pushkey):
def r(txn): def r(txn):
@ -38,10 +60,7 @@ class PusherStore(SQLBaseStore):
txn.execute(sql, (app_id, pushkey,)) txn.execute(sql, (app_id, pushkey,))
rows = self.cursor_to_dict(txn) rows = self.cursor_to_dict(txn)
for r in rows: return self._decode_pushers_rows(rows)
r['pushkey'] = str(r['pushkey']).decode("UTF8")
return rows
rows = yield self.runInteraction( rows = yield self.runInteraction(
"get_pushers_by_app_id_and_pushkey", r "get_pushers_by_app_id_and_pushkey", r
@ -55,21 +74,7 @@ class PusherStore(SQLBaseStore):
txn.execute("SELECT * FROM pushers") txn.execute("SELECT * FROM pushers")
rows = self.cursor_to_dict(txn) rows = self.cursor_to_dict(txn)
for r in rows: return self._decode_pushers_rows(rows)
dataJson = r['data']
r['data'] = None
try:
r['data'] = json.loads(str(dataJson).decode("UTF8"))
except Exception as e:
logger.warn(
"Invalid JSON in data for pusher %d: %s, %s",
r['id'], dataJson, e.message,
)
pass
r['pushkey'] = str(r['pushkey']).decode("UTF8")
return rows
rows = yield self.runInteraction("get_all_pushers", get_pushers) rows = yield self.runInteraction("get_all_pushers", get_pushers)
defer.returnValue(rows) defer.returnValue(rows)