1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
import json
import requests
from ..constants.constants import usageRequestCookies, genericRequestHeaders, electricUsageRequestJson, waterUsageRequestJson, waterRequestEndpoint, electricRequestEndpoint
# Electric
def dayElectricRequest():
electricUsageRequestJson['Mode'] = 'D'
return performElectricRequest()
def monthElectricRequest():
electricUsageRequestJson['Mode'] = 'M'
return performElectricRequest()
def performElectricRequest():
electricUsageResponse = requests.post(
electricRequestEndpoint,
cookies=usageRequestCookies,
headers=genericRequestHeaders,
json=electricUsageRequestJson
)
return parseResponse(electricUsageResponse)
def requestElectric():
return {
"day": dayElectricRequest(),
"month": monthElectricRequest()
}
# Water
def dayWaterRequest():
waterUsageRequestJson['Mode'] = 'D'
return performWaterRequest()
def monthWaterRequest():
waterUsageRequestJson['Mode'] = 'M'
return performWaterRequest()
def performWaterRequest():
waterUsageResponse = requests.post(
waterRequestEndpoint,
cookies=usageRequestCookies,
headers=genericRequestHeaders,
json=waterUsageRequestJson
)
return parseResponse(waterUsageResponse)
def requestWater():
return {
"day": dayWaterRequest(),
"month": monthWaterRequest()
}
# Utility methods
def parseResponse(response):
# such an icky response from an endpoint
# TODO: Remove unneeded JSON entries?
return json.loads(response.text.replace("\\\"", "\"").replace("\\\"", "\"").replace("\"{\"", "{\"").replace("}\"}", "}}"))['d']['objUsageGenerationResultSetTwo']
def setupRequestParameters(parameters):
# Setup cookies and csrftoken to perform requests
usageRequestCookies['ApplicationGatewayAffinityCORS'] = parameters['aga']
usageRequestCookies['ApplicationGatewayAffinity'] = parameters['aga']
usageRequestCookies['ASP.NET_SessionId'] = parameters['asi']
usageRequestCookies['SCP'] = parameters['lt']
genericRequestHeaders['csrftoken'] = parameters['ct']
# Service calling method
def request(requestParameters):
setupRequestParameters(requestParameters)
return {
"electric": requestElectric(),
"water": requestWater()
}
|