diff options
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | app/constants/constants.py | 18 | ||||
| -rw-r--r-- | app/request/energy/energy_request.py | 59 |
3 files changed, 57 insertions, 23 deletions
@@ -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) |
