summaryrefslogtreecommitdiff
path: root/app/energy_request/energy_request.py
blob: f6aac3fa90252429167a4ff4d19335a64bf6bb2e (plain)
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()
    }