1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import labkeyInterface
- import json
- import chardet
- class labkeyDB:
- def __init__(self,net):
- self.net=net
- def selectRows(self,project,schemaName, queryName,qfilter,viewName='default'):
- debug=False
- url=self.net.GetLabkeyUrl()+'/'+project
- url+='/query-selectRows.api?schemaName='+schemaName+\
- '&query.queryName='+queryName
- if viewName!='default':
- url+='&query.viewName={}'.format(viewName)
- for f in qfilter:
- url+="&query."+f['variable']+"~"+f['oper']+"="+f['value']
- if debug:
- print("Sending {}").format(url)
- response=self.net.get(url)
- encoding=chardet.detect(response.data)["encoding"]
- return json.loads(response.data.decode(encoding))
- def modifyRows(self,mode, project,schemaName, queryName, rows):
- #mode can be insert/update/delete
- debug=True
- data={}
- data['schemaName']=schemaName
- data['queryName']=queryName
- data['rows']=rows
- url=self.net.GetLabkeyUrl()+'/'+project
- url+='/query-'+mode+'Rows.api?'
- response=self.net.post(url,json.dumps(data))
- return response.data
- def addQuery(self,project,schemaName,queryName,fields):
- listDomainDefinition={}
- if schemaName=='lists':
- listDomainDefinition['kind']='IntList'
- fields.insert(0,{'name':'Key','rangeURI':'int'})
- options={}
- options['keyName']='Key'
- if queryName.find('enum')==0:
- options['keyType']='Integer'
- else:
- options['keyType']='AutoIncrementInteger'
- listDomainDefinition['options']=options
- if schemaName=='study':
- listDomainDefinition['kind']='StudyDatasetVisit'
- domainDesign={}
- domainDesign['name']=queryName
- domainDesign['description']='Some description'
- domainDesign['fields']=fields
- listDomainDefinition['domainDesign']=domainDesign
- url=self.net.GetLabkeyUrl()+'/'+project
- url+='/property-createDomain.api'
- response=self.net.post(url,json.dumps(listDomainDefinition))
- return response.data
- def getQueryDesign(self,project,schemaName,queryName):
- data={}
- data['schemaName']=schemaName
- data['queryName']=queryName
- url=self.net.GetLabkeyUrl()+'/'+project
- url+='/property-getDomainDetails.api'
- response=self.net.post(url,json.dumps(data))
- return response.data
|