summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--app/constants/constants.py18
-rw-r--r--app/request/energy/energy_request.py59
3 files changed, 57 insertions, 23 deletions
diff --git a/.gitignore b/.gitignore
index d181f53..fbe451d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
__pycache__/
credentials.py
-get_response.json \ No newline at end of file
+get_response.json
+venv/
diff --git a/app/constants/constants.py b/app/constants/constants.py
index 4bdc5dd..f9acf56 100644
--- a/app/constants/constants.py
+++ b/app/constants/constants.py
@@ -1,6 +1,20 @@
from app.request.login.credentials import *
+from enum import Enum
-# TODO: Organize this better
+# Useless response key/pairs
+uselessResponseKeys = ['DemandColorCode', 'UsageDelvcolorCode', 'UsageReccolorCode',
+ 'UsageColorCode', 'SoFarColorCode', 'ExpectedUsageColorCode',
+ 'PeakLoadColorCode', 'AverageColorCode', 'LoadFactorColorCode',
+ 'HighestColorCode', 'IsOnlyAMI', 'Skey', 'AccountNumber',
+ 'UpToDecimalPlaces', 'UsageCycle', 'PeakLoad', 'LoadFactor',
+ 'DemandValue', 'UsageRecValue', 'WeatherUsageDate']
+
+# Possible energy request modes
+class RequestMode(Enum):
+ halfHour = 'MI'
+ hour = 'H'
+ day = 'D'
+ month = 'M'
# Shared
genericRequestHeaders = {
@@ -77,7 +91,6 @@ electricUsageRequestJson = {
# Set Mode
'UsageOrGeneration': '1',
'Type': 'K',
- 'strDate': '',
'hourlyType': 'H',
'SeasonId': '',
'weatherOverlay': 0,
@@ -90,7 +103,6 @@ electricUsageRequestJson = {
waterUsageRequestJson = {
# Set Mode
"Type":"W",
- "strDate":"",
"hourlyType":"H",
"seasonId":"",
"weatherOverlay":0,
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)