More work;

This commit is contained in:
StevanFreeborn
2022-04-16 22:55:22 -05:00
parent 889ae19609
commit 700e523809
4 changed files with 321 additions and 71 deletions
+81
View File
@@ -0,0 +1,81 @@
import uuid
# connectivity endpoints
def GetPingEndpoint(baseUrl: str):
return f'{baseUrl}/Ping'
# app endpoints
def GetAppsEndpoint(baseUrl: str):
return f'{baseUrl}/Apps'
def GetAppByIdEndpoint(baseUrl: str, appId: int):
return f'{baseUrl}/Apps/id/{appId}'
def GetAppByIdsEndpoint(baseUrl: str):
return f'{baseUrl}/Apps/batch-get'
# field endpoints
def GetFieldByIdEndpoint(baseUrl: str, fieldId: int):
return f'{baseUrl}/Fields/id/{fieldId}'
def GetFieldsByIdsEndpoint(baseUrl: str):
return f'{baseUrl}/Fields/batch-get'
def GetFieldsByAppIdEndpoint(baseUrl: str, appId: int):
return f'{baseUrl}/Fields/appId/{appId}'
# file endpoints
def GetFileInfoByIdEndpoint(baseUrl: str, recordId: int, fieldId: int, fileId: int):
return f'{baseUrl}/Files/recordId/{recordId}/fieldId/{fieldId}/fileId/{fileId}'
def DeleteFileByIdEndpoint(baseUrl: str, recordId: int, fieldId: int, fileId: int):
return f'{baseUrl}/Files/recordId/{recordId}/fieldId/{fieldId}/fileId/{fileId}'
def GetFileByIdEndpoint(baseUrl: str, recordId: int, fieldId: int, fileId: int):
return f'{baseUrl}/Files/recordId/{recordId}/fieldId/{fieldId}/fileId/{fileId}/file'
def SaveFileEndpoint(baseUrl: str):
return f'{baseUrl}/Files'
# list endpoints
def AddOrUpdateListItemEndpoint(baseUrl, listId: int):
return f'{baseUrl}/Lists/id/{listId}/items'
def DeleteListItemEndpoint(baseUrl: str, listId: int, itemId: uuid):
return f'{baseUrl}/Lists/id/{listId}/itemId/{itemId}'
# record endpoints
def GetRecordsByAppIdEndpoint(baseUrl, appId: int):
return f'{baseUrl}/Records/appId/{appId}'
def GetRecordByIdEndpoint(baseUrl, appId: int, recordId: int):
return f'{baseUrl}/Records/appId/{appId}/recordId/{recordId}'
def DeleteRecordByIdEndpoint(baseUrl, appId: int, recordId: int):
return f'{baseUrl}/Records/appId/{appId}/recordId/{recordId}'
def GetRecordsByIdsEndpoint(baseUrl):
return f'{baseUrl}/Records/batch-get'
def QueryRecordsEndpoint(baseUrl):
return f'{baseUrl}/Records/Query'
def AddOrUpdateRecordEndpoint(baseUrl):
return f'{baseUrl}/Records'
def DeleteRecordsByIds(baseUrl):
return f'{baseUrl}/Records/batch-delete'
# report endpoints
def GetReportByIdEndpoint(baseUrl, reportId: int):
return f'{baseUrl}/Reports/id/{reportId}'
def GetReportsByAppIdEndpoint(baseUrl, appId: int):
return f'{baseUrl}/Reports/appId/{appId}'
+15 -1
View File
@@ -1,4 +1,5 @@
import datetime import datetime
import uuid
# generic # generic
@@ -97,7 +98,6 @@ class GetFileByIdResponse:
def __init__(self, file: File): def __init__(self, file: File):
self.file = file self.file = file
class SaveFileRequest: class SaveFileRequest:
def __init__(self, recordId: int, fieldId: int, fileName: str, filePath: str, contentType: str, notes: str=None, modifiedDate: datetime=None): def __init__(self, recordId: int, fieldId: int, fileName: str, filePath: str, contentType: str, notes: str=None, modifiedDate: datetime=None):
self.recordId = recordId self.recordId = recordId
@@ -111,3 +111,17 @@ class SaveFileRequest:
class SaveFileResponse: class SaveFileResponse:
def __init__(self, id: int): def __init__(self, id: int):
self.id = id self.id = id
# list specific
class ListItemRequest:
def __init__(self, listId: int, name: str, id: uuid=None, numericValue: int=None, color: str=None):
self.listId = listId
self.name = name
self.id = id
self.numericValue = numericValue
self.color = color
class AddOrUpdateListItemResponse:
def __init__(self, id: uuid):
self.id = id
+224 -23
View File
@@ -2,7 +2,7 @@ import requests
import json import json
import re import re
from UrlHelper import * from Endpoints import *
from Models import * from Models import *
class OnspringClient: class OnspringClient:
@@ -96,6 +96,7 @@ class OnspringClient:
headers=self.headers) headers=self.headers)
if response.status_code == 401: if response.status_code == 401:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Unauthorized request', message='Unauthorized request',
@@ -103,6 +104,7 @@ class OnspringClient:
responseText=response.text) responseText=response.text)
if response.status_code == 403: if response.status_code == 403:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Client does not have read access to the app', message='Client does not have read access to the app',
@@ -110,6 +112,7 @@ class OnspringClient:
responseText=response.text) responseText=response.text)
if response.status_code == 404: if response.status_code == 404:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='App could not be found', message='App could not be found',
@@ -159,6 +162,7 @@ class OnspringClient:
data=appIds) data=appIds)
if response.status_code == 401: if response.status_code == 401:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Unauthorized request', message='Unauthorized request',
@@ -166,6 +170,7 @@ class OnspringClient:
responseText=response.text) responseText=response.text)
if response.status_code == 403: if response.status_code == 403:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Client does not have read access to the app', message='Client does not have read access to the app',
@@ -213,6 +218,7 @@ class OnspringClient:
headers=self.headers) headers=self.headers)
if response.status_code == 401: if response.status_code == 401:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Unauthorized request', message='Unauthorized request',
@@ -220,6 +226,7 @@ class OnspringClient:
responseText=response.text) responseText=response.text)
if response.status_code == 403: if response.status_code == 403:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Client does not have read access to the field', message='Client does not have read access to the field',
@@ -227,6 +234,7 @@ class OnspringClient:
responseText=response.text) responseText=response.text)
if response.status_code == 404: if response.status_code == 404:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Field could not be found', message='Field could not be found',
@@ -280,6 +288,7 @@ class OnspringClient:
data=fieldIds) data=fieldIds)
if response.status_code == 401: if response.status_code == 401:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Unauthorized request', message='Unauthorized request',
@@ -287,6 +296,7 @@ class OnspringClient:
responseText=response.text) responseText=response.text)
if response.status_code == 403: if response.status_code == 403:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Client does not have read access to the field(s)', message='Client does not have read access to the field(s)',
@@ -294,6 +304,7 @@ class OnspringClient:
responseText=response.text) responseText=response.text)
if response.status_code == 404: if response.status_code == 404:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Field(s) could not be found', message='Field(s) could not be found',
@@ -346,6 +357,7 @@ class OnspringClient:
params=params) params=params)
if response.status_code == 400: if response.status_code == 400:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Invalid paging information', message='Invalid paging information',
@@ -353,6 +365,7 @@ class OnspringClient:
responseText=response.text) responseText=response.text)
if response.status_code == 401: if response.status_code == 401:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Unauthorized request', message='Unauthorized request',
@@ -411,6 +424,7 @@ class OnspringClient:
headers=self.headers,) headers=self.headers,)
if response.status_code == 400: if response.status_code == 400:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Request is invalid based on underlying data', message='Request is invalid based on underlying data',
@@ -418,6 +432,7 @@ class OnspringClient:
responseText=response.text) responseText=response.text)
if response.status_code == 401: if response.status_code == 401:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Unauthorized request', message='Unauthorized request',
@@ -425,6 +440,7 @@ class OnspringClient:
responseText=response.text) responseText=response.text)
if response.status_code == 403: if response.status_code == 403:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Client does not have read access to the file', message='Client does not have read access to the file',
@@ -432,6 +448,7 @@ class OnspringClient:
responseText=response.text) responseText=response.text)
if response.status_code == 404: if response.status_code == 404:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='File could not be found', message='File could not be found',
@@ -443,13 +460,13 @@ class OnspringClient:
jsonResponse = response.json() jsonResponse = response.json()
fileInfo = FileInfo( fileInfo = FileInfo(
jsonResponse["type"], jsonResponse['type'],
jsonResponse["contentType"], jsonResponse['contentType'],
jsonResponse["name"], jsonResponse['name'],
jsonResponse["createdDate"], jsonResponse['createdDate'],
jsonResponse["modifiedDate"], jsonResponse['modifiedDate'],
jsonResponse["owner"], jsonResponse['owner'],
jsonResponse["fileHref"]) jsonResponse['fileHref'])
data = GetFileInfoByIdResponse(fileInfo) data = GetFileInfoByIdResponse(fileInfo)
@@ -478,6 +495,7 @@ class OnspringClient:
headers=self.headers,) headers=self.headers,)
if response.status_code == 400: if response.status_code == 400:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Request is invalid based on underlying data', message='Request is invalid based on underlying data',
@@ -485,6 +503,7 @@ class OnspringClient:
responseText=response.text) responseText=response.text)
if response.status_code == 401: if response.status_code == 401:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Unauthorized request', message='Unauthorized request',
@@ -497,11 +516,12 @@ class OnspringClient:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message=jsonResponse["message"], message=jsonResponse['message'],
headers=response.headers, headers=response.headers,
responseText=response.text) responseText=response.text)
if response.status_code == 500: if response.status_code == 500:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='File could not be deleted due to internal error', message='File could not be deleted due to internal error',
@@ -509,9 +529,10 @@ class OnspringClient:
responseText=response.text) responseText=response.text)
if response.status_code == 204: if response.status_code == 204:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message="File deleted successfully", message='File deleted successfully',
headers=response.headers, headers=response.headers,
responseText=response.text) responseText=response.text)
@@ -534,6 +555,7 @@ class OnspringClient:
headers=self.headers,) headers=self.headers,)
if response.status_code == 400: if response.status_code == 400:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Request is invalid based on underlying data', message='Request is invalid based on underlying data',
@@ -541,6 +563,7 @@ class OnspringClient:
responseText=response.text) responseText=response.text)
if response.status_code == 401: if response.status_code == 401:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Unauthorized request', message='Unauthorized request',
@@ -553,24 +576,24 @@ class OnspringClient:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message=jsonResponse["message"], message=jsonResponse['message'],
headers=response.headers, headers=response.headers,
responseText=response.text) responseText=response.text)
if response.status_code == 200: if response.status_code == 200:
fileName = response.headers["Content-Disposition"] fileName = response.headers['Content-Disposition']
result = re.search("filename=.*;", fileName).group() result = re.search('filename=.*;', fileName).group()
if result: if result:
fileName = re.sub("filename=|\"|;", "", result) fileName = re.sub('filename=|\'|;', '', result)
else: else:
fileName = None fileName = None
file = File( file = File(
fileName, fileName,
response.headers["Content-Type"], response.headers['Content-Type'],
response.headers["Content-Length"], response.headers['Content-Length'],
response.content) response.content)
data = GetFileByIdResponse(file) data = GetFileByIdResponse(file)
@@ -592,10 +615,10 @@ class OnspringClient:
endpoint = SaveFileEndpoint(self.baseUrl) endpoint = SaveFileEndpoint(self.baseUrl)
requestData = { requestData = {
"recordId": saveFileRequest.recordId, 'recordId': saveFileRequest.recordId,
"fieldId": saveFileRequest.fieldId, 'fieldId': saveFileRequest.fieldId,
"notes": saveFileRequest.notes, 'notes': saveFileRequest.notes,
"modifiedDate": saveFileRequest.modifiedDate 'modifiedDate': saveFileRequest.modifiedDate
} }
files = [ files = [
@@ -606,7 +629,7 @@ class OnspringClient:
] ]
response = requests.request( response = requests.request(
"POST", 'POST',
endpoint, endpoint,
headers=self.headers, headers=self.headers,
data=requestData, data=requestData,
@@ -614,6 +637,7 @@ class OnspringClient:
if response.status_code == 400: if response.status_code == 400:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Request is invalid based on underlying data', message='Request is invalid based on underlying data',
@@ -621,6 +645,7 @@ class OnspringClient:
responseText=response.text) responseText=response.text)
if response.status_code == 401: if response.status_code == 401:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message='Unauthorized request', message='Unauthorized request',
@@ -633,14 +658,14 @@ class OnspringClient:
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
message=jsonResponse["message"], message=jsonResponse['message'],
headers=response.headers, headers=response.headers,
responseText=response.text) responseText=response.text)
if response.status_code == 201: if response.status_code == 201:
responseJson = response.json() responseJson = response.json()
data = SaveFileResponse(responseJson["id"]) data = SaveFileResponse(responseJson['id'])
return ApiResponse( return ApiResponse(
response.status_code, response.status_code,
@@ -654,5 +679,181 @@ class OnspringClient:
responseText=response.text) responseText=response.text)
# list methods # list methods
def AddOrUpdateListItem(self, listItemRequest: ListItemRequest):
endpoint = AddOrUpdateListItemEndpoint(self.baseUrl, listItemRequest.listId)
self.headers['Content-Type'] = 'application/json'
requestData = json.dumps({
'id': listItemRequest.id,
'name': listItemRequest.name,
'numericValue': listItemRequest.numericValue,
'color': listItemRequest.color
})
response = requests.request(
'PUT',
endpoint,
headers=self.headers,
data=requestData)
if response.status_code == 401:
return ApiResponse(
response.status_code,
message='Unauthorized request',
headers=response.headers,
responseText=response.text)
if response.status_code in [403,404]:
jsonResponse = response.json()
return ApiResponse(
response.status_code,
message=jsonResponse['message'],
headers=response.headers,
responseText=response.text)
if response.status_code == 201:
responseJson = response.json()
data = AddOrUpdateListItemResponse(responseJson['id'])
return ApiResponse(
response.status_code,
data,
message='New list value successfully added',
headers=response.headers,
responseText=response.text)
if response.status_code == 200:
responseJson = response.json()
data = AddOrUpdateListItemResponse(responseJson['id'])
return ApiResponse(
response.status_code,
data,
message='Existing list value successfully updated',
headers=response.headers,
responseText=response.text)
return ApiResponse(
response.status_code,
headers=response.headers,
responseText=response.text)
def DeleteListItem(self, listId: int, itemId: uuid):
endpoint = DeleteListItemEndpoint(self.baseUrl, listId, itemId)
response = requests.request(
'DELETE',
endpoint,
headers=self.headers)
if response.status_code == 401:
return ApiResponse(
response.status_code,
message='Unauthorized request',
headers=response.headers,
responseText=response.text)
if response.status_code == 403:
jsonResponse = response.json()
return ApiResponse(
response.status_code,
message=jsonResponse['message'],
headers=response.headers,
responseText=response.text)
if response.status_code == 404:
return ApiResponse(
response.status_code,
message='List/item could not be found',
headers=response.headers,
responseText=response.text)
if response.status_code == 204:
return ApiResponse(
response.status_code,
message='Item deleted successfully',
headers=response.headers,
responseText=response.text)
return ApiResponse(
response.status_code,
headers=response.headers,
responseText=response.text)
# record methods # record methods
def GetRecordsByAppId(self, appId: int):
endpoint = GetRecordsByAppIdEndpoint(self.baseUrl, appId)
response = requests.request(
'GET',)
return
def GetRecordById(self, appId: int, recordId: int):
endpoint = GetRecordByIdEndpoint(self.baseUrl, appId, recordId)
return
def DeleteRecordById(self, appId: int, recordId: int):
endpoint = DeleteRecordByIdEndpoint(self.baseUrl, appId, recordId)
return
def GetRecordsByIds(self):
endpoint = GetRecordsByIdsEndpoint(self.baseUrl)
return
def QueryRecords(self):
endpoint = GetRecordsByIdsEndpoint(self.baseUrl)
return
def AddOrUpdateRecord(self):
endpoint = AddOrUpdateRecordEndpoint(self.baseUrl)
return
def DeleteRecordsByIds(self):
endpoint = DeleteRecordsByIds(self.baseUrl)
return
# report methods # report methods
def GetReportById(self, reportId: int):
endpoint = GetReportByIdEndpoint(self.baseUrl, reportId)
return
def GetReportsByAppId(self, appId: int):
endpoint = GetReportsByAppIdEndpoint(self.baseUrl, appId)
return
-46
View File
@@ -1,46 +0,0 @@
# connectivity endpoints
def GetPingEndpoint(baseUrl):
return f'{baseUrl}/Ping'
# app endpoints
def GetAppsEndpoint(baseUrl):
return f'{baseUrl}/Apps'
def GetAppByIdEndpoint(baseUrl, appId):
return f'{baseUrl}/Apps/id/{appId}'
def GetAppByIdsEndpoint(baseUrl):
return f'{baseUrl}/Apps/batch-get'
# field endpoints
def GetFieldByIdEndpoint(baseUrl, fieldId):
return f'{baseUrl}/Fields/id/{fieldId}'
def GetFieldsByIdsEndpoint(baseUrl):
return f'{baseUrl}/Fields/batch-get'
def GetFieldsByAppIdEndpoint(baseUrl, appId):
return f'{baseUrl}/Fields/appId/{appId}'
# file endpoints
def GetFileInfoByIdEndpoint(baseUrl, recordId, fieldId, fileId):
return f'{baseUrl}/Files/recordId/{recordId}/fieldId/{fieldId}/fileId/{fileId}'
def DeleteFileByIdEndpoint(baseUrl, recordId, fieldId, fileId):
return f'{baseUrl}/Files/recordId/{recordId}/fieldId/{fieldId}/fileId/{fileId}'
def GetFileByIdEndpoint(baseUrl, recordId, fieldId, fileId):
return f'{baseUrl}/Files/recordId/{recordId}/fieldId/{fieldId}/fileId/{fileId}/file'
def SaveFileEndpoint(baseUrl):
return f'{baseUrl}/Files'
# list endpoints
# record endpoints
# report endpoints