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 uuid
# generic
@@ -97,7 +98,6 @@ class GetFileByIdResponse:
def __init__(self, file: File):
self.file = file
class SaveFileRequest:
def __init__(self, recordId: int, fieldId: int, fileName: str, filePath: str, contentType: str, notes: str=None, modifiedDate: datetime=None):
self.recordId = recordId
@@ -111,3 +111,17 @@ class SaveFileRequest:
class SaveFileResponse:
def __init__(self, id: int):
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 re
from UrlHelper import *
from Endpoints import *
from Models import *
class OnspringClient:
@@ -96,6 +96,7 @@ class OnspringClient:
headers=self.headers)
if response.status_code == 401:
return ApiResponse(
response.status_code,
message='Unauthorized request',
@@ -103,6 +104,7 @@ class OnspringClient:
responseText=response.text)
if response.status_code == 403:
return ApiResponse(
response.status_code,
message='Client does not have read access to the app',
@@ -110,6 +112,7 @@ class OnspringClient:
responseText=response.text)
if response.status_code == 404:
return ApiResponse(
response.status_code,
message='App could not be found',
@@ -159,6 +162,7 @@ class OnspringClient:
data=appIds)
if response.status_code == 401:
return ApiResponse(
response.status_code,
message='Unauthorized request',
@@ -166,6 +170,7 @@ class OnspringClient:
responseText=response.text)
if response.status_code == 403:
return ApiResponse(
response.status_code,
message='Client does not have read access to the app',
@@ -213,6 +218,7 @@ class OnspringClient:
headers=self.headers)
if response.status_code == 401:
return ApiResponse(
response.status_code,
message='Unauthorized request',
@@ -220,6 +226,7 @@ class OnspringClient:
responseText=response.text)
if response.status_code == 403:
return ApiResponse(
response.status_code,
message='Client does not have read access to the field',
@@ -227,6 +234,7 @@ class OnspringClient:
responseText=response.text)
if response.status_code == 404:
return ApiResponse(
response.status_code,
message='Field could not be found',
@@ -280,6 +288,7 @@ class OnspringClient:
data=fieldIds)
if response.status_code == 401:
return ApiResponse(
response.status_code,
message='Unauthorized request',
@@ -287,6 +296,7 @@ class OnspringClient:
responseText=response.text)
if response.status_code == 403:
return ApiResponse(
response.status_code,
message='Client does not have read access to the field(s)',
@@ -294,6 +304,7 @@ class OnspringClient:
responseText=response.text)
if response.status_code == 404:
return ApiResponse(
response.status_code,
message='Field(s) could not be found',
@@ -346,6 +357,7 @@ class OnspringClient:
params=params)
if response.status_code == 400:
return ApiResponse(
response.status_code,
message='Invalid paging information',
@@ -353,6 +365,7 @@ class OnspringClient:
responseText=response.text)
if response.status_code == 401:
return ApiResponse(
response.status_code,
message='Unauthorized request',
@@ -411,6 +424,7 @@ class OnspringClient:
headers=self.headers,)
if response.status_code == 400:
return ApiResponse(
response.status_code,
message='Request is invalid based on underlying data',
@@ -418,6 +432,7 @@ class OnspringClient:
responseText=response.text)
if response.status_code == 401:
return ApiResponse(
response.status_code,
message='Unauthorized request',
@@ -425,6 +440,7 @@ class OnspringClient:
responseText=response.text)
if response.status_code == 403:
return ApiResponse(
response.status_code,
message='Client does not have read access to the file',
@@ -432,6 +448,7 @@ class OnspringClient:
responseText=response.text)
if response.status_code == 404:
return ApiResponse(
response.status_code,
message='File could not be found',
@@ -443,13 +460,13 @@ class OnspringClient:
jsonResponse = response.json()
fileInfo = FileInfo(
jsonResponse["type"],
jsonResponse["contentType"],
jsonResponse["name"],
jsonResponse["createdDate"],
jsonResponse["modifiedDate"],
jsonResponse["owner"],
jsonResponse["fileHref"])
jsonResponse['type'],
jsonResponse['contentType'],
jsonResponse['name'],
jsonResponse['createdDate'],
jsonResponse['modifiedDate'],
jsonResponse['owner'],
jsonResponse['fileHref'])
data = GetFileInfoByIdResponse(fileInfo)
@@ -478,6 +495,7 @@ class OnspringClient:
headers=self.headers,)
if response.status_code == 400:
return ApiResponse(
response.status_code,
message='Request is invalid based on underlying data',
@@ -485,6 +503,7 @@ class OnspringClient:
responseText=response.text)
if response.status_code == 401:
return ApiResponse(
response.status_code,
message='Unauthorized request',
@@ -497,11 +516,12 @@ class OnspringClient:
return ApiResponse(
response.status_code,
message=jsonResponse["message"],
message=jsonResponse['message'],
headers=response.headers,
responseText=response.text)
if response.status_code == 500:
return ApiResponse(
response.status_code,
message='File could not be deleted due to internal error',
@@ -509,9 +529,10 @@ class OnspringClient:
responseText=response.text)
if response.status_code == 204:
return ApiResponse(
response.status_code,
message="File deleted successfully",
message='File deleted successfully',
headers=response.headers,
responseText=response.text)
@@ -534,6 +555,7 @@ class OnspringClient:
headers=self.headers,)
if response.status_code == 400:
return ApiResponse(
response.status_code,
message='Request is invalid based on underlying data',
@@ -541,6 +563,7 @@ class OnspringClient:
responseText=response.text)
if response.status_code == 401:
return ApiResponse(
response.status_code,
message='Unauthorized request',
@@ -553,24 +576,24 @@ class OnspringClient:
return ApiResponse(
response.status_code,
message=jsonResponse["message"],
message=jsonResponse['message'],
headers=response.headers,
responseText=response.text)
if response.status_code == 200:
fileName = response.headers["Content-Disposition"]
result = re.search("filename=.*;", fileName).group()
fileName = response.headers['Content-Disposition']
result = re.search('filename=.*;', fileName).group()
if result:
fileName = re.sub("filename=|\"|;", "", result)
fileName = re.sub('filename=|\'|;', '', result)
else:
fileName = None
file = File(
fileName,
response.headers["Content-Type"],
response.headers["Content-Length"],
response.headers['Content-Type'],
response.headers['Content-Length'],
response.content)
data = GetFileByIdResponse(file)
@@ -592,10 +615,10 @@ class OnspringClient:
endpoint = SaveFileEndpoint(self.baseUrl)
requestData = {
"recordId": saveFileRequest.recordId,
"fieldId": saveFileRequest.fieldId,
"notes": saveFileRequest.notes,
"modifiedDate": saveFileRequest.modifiedDate
'recordId': saveFileRequest.recordId,
'fieldId': saveFileRequest.fieldId,
'notes': saveFileRequest.notes,
'modifiedDate': saveFileRequest.modifiedDate
}
files = [
@@ -606,7 +629,7 @@ class OnspringClient:
]
response = requests.request(
"POST",
'POST',
endpoint,
headers=self.headers,
data=requestData,
@@ -614,6 +637,7 @@ class OnspringClient:
if response.status_code == 400:
return ApiResponse(
response.status_code,
message='Request is invalid based on underlying data',
@@ -621,6 +645,7 @@ class OnspringClient:
responseText=response.text)
if response.status_code == 401:
return ApiResponse(
response.status_code,
message='Unauthorized request',
@@ -633,14 +658,14 @@ class OnspringClient:
return ApiResponse(
response.status_code,
message=jsonResponse["message"],
message=jsonResponse['message'],
headers=response.headers,
responseText=response.text)
if response.status_code == 201:
responseJson = response.json()
data = SaveFileResponse(responseJson["id"])
data = SaveFileResponse(responseJson['id'])
return ApiResponse(
response.status_code,
@@ -654,5 +679,181 @@ class OnspringClient:
responseText=response.text)
# 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
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
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