|
@@ -21,8 +21,7 @@ class labkeyDB:
|
|
|
if debug:
|
|
|
print("Sending {}").format(url)
|
|
|
response=self.net.get(url)
|
|
|
- encoding=chardet.detect(response.data)["encoding"]
|
|
|
- return json.loads(response.data.decode(encoding))
|
|
|
+ return self.toJSON(response)
|
|
|
|
|
|
def modifyRows(self,mode, project,schemaName, queryName, rows):
|
|
|
#mode can be insert/update/delete
|
|
@@ -34,7 +33,7 @@ class labkeyDB:
|
|
|
url=self.net.GetLabkeyUrl()+'/'+project
|
|
|
url+='/query-'+mode+'Rows.api?'
|
|
|
response=self.net.post(url,json.dumps(data))
|
|
|
- return response.data
|
|
|
+ return self.toJSON(response)
|
|
|
|
|
|
def addQuery(self,project,schemaName,queryName,fields,options=None):
|
|
|
|
|
@@ -68,8 +67,7 @@ class labkeyDB:
|
|
|
url=self.net.GetLabkeyUrl()+'/'+project
|
|
|
url+='/property-createDomain.api'
|
|
|
response=self.net.post(url,json.dumps(listDomainDefinition))
|
|
|
- encoding=chardet.detect(response.data)["encoding"]
|
|
|
- return json.loads(response.data.decode(encoding))
|
|
|
+ return self.toJSON(response)
|
|
|
|
|
|
def getQueryDesign(self,project,schemaName,queryName):
|
|
|
url=self.net.GetLabkeyUrl()+'/'+project
|
|
@@ -77,8 +75,19 @@ class labkeyDB:
|
|
|
url+='schemaName={}'.format(schemaName)
|
|
|
url+='&queryName={}'.format(queryName)
|
|
|
response=self.net.get(url)
|
|
|
+ return self.toJSON(response)
|
|
|
+
|
|
|
+ def toJSON(self,response):
|
|
|
encoding=chardet.detect(response.data)["encoding"]
|
|
|
- return json.loads(response.data.decode(encoding))
|
|
|
+ #try with a set of encodings to maximize probability of success
|
|
|
+ encodings=[encoding,'utf_8']
|
|
|
+ for x in encodings:
|
|
|
+ try:
|
|
|
+ return json.loads(response.data.decode(x))
|
|
|
+ except UnicodeDecodeError:
|
|
|
+ print(f'Failed to decode with [{x}]: {data}')
|
|
|
+ return None
|
|
|
+
|
|
|
|
|
|
|
|
|
|