-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathcli.py
103 lines (84 loc) · 3.38 KB
/
cli.py
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import argparse
import asyncio
import logging
import aiohttp
from cli_ac_menu import show_aircon_menu
from cli_oven_menu import show_oven_menu
from cli_refrigerator_menu import show_refrigerator_menu
from cli_washerdryer_menu import show_washerdryer_menu
from whirlpool.appliancesmanager import AppliancesManager
from whirlpool.auth import Auth
from whirlpool.backendselector import BackendSelector, Brand, Region
logging.basicConfig(format="%(asctime)s [%(name)s %(levelname)s]: %(message)s")
logger = logging.getLogger("whirlpool")
logger.setLevel(logging.DEBUG)
logger = logging.getLogger("whirlpool.eventsocket")
logger.setLevel(logging.INFO)
parser = argparse.ArgumentParser()
parser.add_argument("-e", "--email", help="Email address")
parser.add_argument("-p", "--password", help="Password")
parser.add_argument(
"-b",
"--brand",
help="Brand (whirlpool/maytag/kitchenaid/consul)",
default="whirlpool",
)
parser.add_argument("-r", "--region", help="Region (EU/US)", default="EU")
parser.add_argument("-l", "--list", help="List appliances", action="store_true")
parser.add_argument("-s", "--said", help="The appliance to load")
args = parser.parse_args()
async def start():
def attr_upd():
logger.info("Attributes updated")
if args.brand == "whirlpool":
selected_brand = Brand.Whirlpool
elif args.brand == "maytag":
selected_brand = Brand.Maytag
elif args.brand == "kitchenaid":
selected_brand = Brand.KitchenAid
elif args.brand == "consul":
selected_brand = Brand.Consul
else:
logger.error("Invalid brand argument")
return
if args.region == "EU":
selected_region = Region.EU
elif args.region == "US":
selected_region = Region.US
else:
logger.error("Invalid region argument")
return
backend_selector = BackendSelector(selected_brand, selected_region)
async with aiohttp.ClientSession() as session:
auth = Auth(backend_selector, args.email, args.password, session)
await auth.do_auth(store=False)
appliance_manager = AppliancesManager(backend_selector, auth, session)
if not await appliance_manager.fetch_appliances():
logger.error("Could not fetch appliances")
return
if args.list:
print(appliance_manager.aircons)
print(appliance_manager.washer_dryers)
print(appliance_manager.ovens)
print(appliance_manager.refrigerators)
return
if not args.said:
logger.error("No appliance specified")
return
for ac_data in appliance_manager.aircons:
if ac_data["SAID"] == args.said:
await show_aircon_menu(backend_selector, auth, args.said, session)
return
for wd_data in appliance_manager.washer_dryers:
if wd_data["SAID"] == args.said:
await show_washerdryer_menu(backend_selector, auth, args.said, session)
return
for mo_data in appliance_manager.ovens:
if mo_data["SAID"] == args.said:
await show_oven_menu(backend_selector, auth, args.said, session)
return
for rf_data in appliance_manager.refrigerators:
if rf_data["SAID"] == args.said:
await show_refrigerator_menu(backend_selector, auth, args.said, session)
return
asyncio.run(start())