summaryrefslogtreecommitdiff
path: root/app/request/energy
diff options
context:
space:
mode:
authorDylan Bolger <dylan.bolger00@gmail.com>2023-11-16 20:40:52 -0600
committerDylan Bolger <dylan.bolger00@gmail.com>2023-11-16 20:40:52 -0600
commitade346b2e048c1adbfc656dee4778741fe773c4f (patch)
treecec1d32a1689f0c9ebf6c54909f7a93e4c00514e /app/request/energy
parentfb4b161ae30fd2f730a4c2d5935e8a761a335ed7 (diff)
downloadcity-utilities-restful-wrapper-ade346b2e048c1adbfc656dee4778741fe773c4f.tar.xz
city-utilities-restful-wrapper-ade346b2e048c1adbfc656dee4778741fe773c4f.zip
Refactor energy_request, do data cleanup in response for API consumer
Diffstat (limited to 'app/request/energy')
-rw-r--r--app/request/energy/energy_request.py59
1 files changed, 40 insertions, 19 deletions
diff --git a/app/request/energy/energy_request.py b/app/request/energy/energy_request.py
index 5217b18..20c65d3 100644
--- a/app/request/energy/energy_request.py
+++ b/app/request/energy/energy_request.py
@@ -1,15 +1,15 @@
import json
import requests
-from ...constants.constants import usageRequestCookies, genericRequestHeaders, electricUsageRequestJson, waterUsageRequestJson, waterRequestEndpoint, electricRequestEndpoint
+from ...constants.constants import usageRequestCookies, genericRequestHeaders, electricUsageRequestJson, waterUsageRequestJson, waterRequestEndpoint, electricRequestEndpoint, RequestMode, uselessResponseKeys
+from datetime import date
+from datetime import timedelta
# Electric
-def dayElectricRequest():
- electricUsageRequestJson['Mode'] = 'D'
- return performElectricRequest()
-
-def monthElectricRequest():
- electricUsageRequestJson['Mode'] = 'M'
+def doElectricRequest(requestMode: RequestMode):
+ electricUsageRequestJson['Mode'] = requestMode.value
+ if (requestMode in [RequestMode.halfHour, RequestMode.hour]):
+ electricUsageRequestJson['strDate'] = getYesterday()
return performElectricRequest()
def performElectricRequest():
@@ -23,18 +23,18 @@ def performElectricRequest():
def requestElectric():
return {
- "day": dayElectricRequest(),
- "month": monthElectricRequest()
+ "halfHour": doElectricRequest(RequestMode.halfHour),
+ "hour": doElectricRequest(RequestMode.hour),
+ "day": doElectricRequest(RequestMode.day),
+ "month": doElectricRequest(RequestMode.month)
}
# Water
-def dayWaterRequest():
- waterUsageRequestJson['Mode'] = 'D'
- return performWaterRequest()
-
-def monthWaterRequest():
- waterUsageRequestJson['Mode'] = 'M'
+def doWaterRequest(requestMode: RequestMode):
+ waterUsageRequestJson['Mode'] = requestMode.value
+ if (requestMode in [RequestMode.hour]):
+ waterUsageRequestJson['strDate'] = getYesterday()
return performWaterRequest()
def performWaterRequest():
@@ -48,16 +48,16 @@ def performWaterRequest():
def requestWater():
return {
- "day": dayWaterRequest(),
- "month": monthWaterRequest()
+ "hour": doWaterRequest(RequestMode.hour),
+ "day": doWaterRequest(RequestMode.day),
+ "month": doWaterRequest(RequestMode.month)
}
# Utility methods
def parseResponse(response):
- # such an icky response from an endpoint
jsonResponse = json.loads(response.text.replace("\\\"", "\"").replace("\\\"", "\"").replace("\"{\"", "{\"").replace("}\"}", "}}"))['d']
- # TODO: Remove useless data from response
+ cleanResponse(jsonResponse)
return {
"usageData": jsonResponse['objUsageGenerationResultSetTwo'], # Raw usage data for each timeframe
"tentativeData": jsonResponse['getTentativeData'] # Accumulated usage data and predictions
@@ -80,3 +80,24 @@ def requestUsageData(requestParameters):
"water": requestWater()
}
+def getYesterday():
+ yesterday = date.today() - timedelta(days = 1)
+ return yesterday.strftime("%x")
+
+def cleanResponse(response: dict):
+ # Remove the response keys that provide no information
+ for key in uselessResponseKeys:
+ removeKey(response, key)
+
+def removeKey(object, keyBeingRemoved):
+ # If object is a dict, recursively search over data for keyBeingRemoved
+ if (isinstance(object, dict)):
+ for listData in list(object):
+ if listData == keyBeingRemoved:
+ del object[keyBeingRemoved]
+ else:
+ removeKey(object[listData], keyBeingRemoved)
+ # If the object is a list, iterate over each object in the list
+ elif (isinstance(object, list)):
+ for listData in list(object):
+ removeKey(listData, keyBeingRemoved)