Skip to content

Commit 9bea32d

Browse files
committed
Create a single entrypoint to create client
1 parent 36b163d commit 9bea32d

File tree

4 files changed

+184
-167
lines changed

4 files changed

+184
-167
lines changed

pyoverkiz/clients/overkiz.py

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import urllib.parse
66
from abc import ABC, abstractmethod
77
from json import JSONDecodeError
8-
from types import TracebackType
98
from typing import Any, Mapping, cast
109

1110
import backoff
@@ -138,24 +137,6 @@ async def delete(
138137
) as response:
139138
await self.check_response(response)
140139

141-
async def __aenter__(self) -> OverkizClient:
142-
return self
143-
144-
async def __aexit__(
145-
self,
146-
exc_type: type[BaseException] | None,
147-
exc_value: BaseException | None,
148-
traceback: TracebackType | None,
149-
) -> None:
150-
await self.close()
151-
152-
async def close(self) -> None:
153-
"""Close the session."""
154-
if self.event_listener_id:
155-
await self.unregister_event_listener()
156-
157-
await self.session.close()
158-
159140
@backoff.on_exception(
160141
backoff.expo,
161142
(NotAuthenticatedException, ServerDisconnectedError),

pyoverkiz/const.py

Lines changed: 18 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -1,150 +1,22 @@
11
from __future__ import annotations
22

3-
from typing import Callable
3+
from enum import Enum, unique
44

5-
from aiohttp import ClientSession
65

7-
from pyoverkiz.clients.atlantic_cozytouch import AtlanticCozytouchClient
8-
from pyoverkiz.clients.default import DefaultClient
9-
from pyoverkiz.clients.nexity import NexityClient
10-
from pyoverkiz.clients.overkiz import OverkizClient
11-
from pyoverkiz.clients.somfy import SomfyClient
12-
from pyoverkiz.clients.somfy_local import SomfyLocalClient
13-
14-
SUPPORTED_SERVERS: dict[str, Callable[[str, str, ClientSession], OverkizClient]] = {
15-
"atlantic_cozytouch": lambda username, password, session: AtlanticCozytouchClient(
16-
name="Atlantic Cozytouch",
17-
endpoint="https://ha110-1.overkiz.com/enduser-mobile-web/enduserAPI/",
18-
manufacturer="Atlantic",
19-
configuration_url=None,
20-
session=session,
21-
username=username,
22-
password=password,
23-
),
24-
"brandt": lambda username, password, session: DefaultClient(
25-
name="Brandt Smart Control",
26-
endpoint="https://ha3-1.overkiz.com/enduser-mobile-web/enduserAPI/",
27-
manufacturer="Brandt",
28-
configuration_url=None,
29-
session=session,
30-
username=username,
31-
password=password,
32-
),
33-
"flexom": lambda username, password, session: DefaultClient(
34-
name="Flexom",
35-
endpoint="https://ha108-1.overkiz.com/enduser-mobile-web/enduserAPI/",
36-
manufacturer="Bouygues",
37-
configuration_url=None,
38-
session=session,
39-
username=username,
40-
password=password,
41-
),
42-
"hexaom_hexaconnect": lambda username, password, session: DefaultClient(
43-
name="Hexaom HexaConnect",
44-
endpoint="https://ha5-1.overkiz.com/enduser-mobile-web/enduserAPI/",
45-
manufacturer="Hexaom",
46-
configuration_url=None,
47-
session=session,
48-
username=username,
49-
password=password,
50-
),
51-
"hi_kumo_asia": lambda username, password, session: DefaultClient(
52-
name="Hitachi Hi Kumo (Asia)",
53-
endpoint="https://ha203-1.overkiz.com/enduser-mobile-web/enduserAPI/",
54-
manufacturer="Hitachi",
55-
configuration_url=None,
56-
session=session,
57-
username=username,
58-
password=password,
59-
),
60-
"hi_kumo_europe": lambda username, password, session: DefaultClient(
61-
name="Hitachi Hi Kumo (Europe)",
62-
endpoint="https://ha117-1.overkiz.com/enduser-mobile-web/enduserAPI/",
63-
manufacturer="Hitachi",
64-
configuration_url=None,
65-
session=session,
66-
username=username,
67-
password=password,
68-
),
69-
"hi_kumo_oceania": lambda username, password, session: DefaultClient(
70-
name="Hitachi Hi Kumo (Oceania)",
71-
endpoint="https://ha203-1.overkiz.com/enduser-mobile-web/enduserAPI/",
72-
manufacturer="Hitachi",
73-
configuration_url=None,
74-
session=session,
75-
username=username,
76-
password=password,
77-
),
78-
"nexity": lambda username, password, session: NexityClient(
79-
name="Nexity Eugénie",
80-
endpoint="https://ha106-1.overkiz.com/enduser-mobile-web/enduserAPI/",
81-
manufacturer="Nexity",
82-
configuration_url=None,
83-
session=session,
84-
username=username,
85-
password=password,
86-
),
87-
"rexel": lambda username, password, session: DefaultClient(
88-
name="Rexel Energeasy Connect",
89-
endpoint="https://ha112-1.overkiz.com/enduser-mobile-web/enduserAPI/",
90-
manufacturer="Rexel",
91-
configuration_url="https://utilisateur.energeasyconnect.com/user/#/zone/equipements",
92-
session=session,
93-
username=username,
94-
password=password,
95-
),
96-
"simu_livein2": lambda username, password, session: DefaultClient( # alias of https://tahomalink.com
97-
name="SIMU (LiveIn2)",
98-
endpoint="https://ha101-1.overkiz.com/enduser-mobile-web/enduserAPI/",
99-
manufacturer="Somfy",
100-
configuration_url=None,
101-
session=session,
102-
username=username,
103-
password=password,
104-
),
105-
"somfy_europe": lambda username, password, session: SomfyClient( # alias of https://tahomalink.com
106-
name="Somfy (Europe)",
107-
endpoint="https://ha101-1.overkiz.com/enduser-mobile-web/enduserAPI/",
108-
manufacturer="Somfy",
109-
configuration_url="https://www.tahomalink.com",
110-
session=session,
111-
username=username,
112-
password=password,
113-
),
114-
"somfy_europe_local": lambda gateway_id, token, session: SomfyLocalClient(
115-
name="Somfy Local(Europe)",
116-
endpoint=f"https://gateway-{gateway_id}.local:8443/enduser-mobile-web/1/enduserAPI/",
117-
manufacturer="Somfy",
118-
configuration_url=None,
119-
session=session,
120-
username=gateway_id, # not used
121-
password=token,
122-
),
123-
"somfy_america": lambda username, password, session: DefaultClient(
124-
name="Somfy (North America)",
125-
endpoint="https://ha401-1.overkiz.com/enduser-mobile-web/enduserAPI/",
126-
manufacturer="Somfy",
127-
configuration_url=None,
128-
session=session,
129-
username=username,
130-
password=password,
131-
),
132-
"somfy_oceania": lambda username, password, session: DefaultClient(
133-
name="Somfy (Oceania)",
134-
endpoint="https://ha201-1.overkiz.com/enduser-mobile-web/enduserAPI/",
135-
manufacturer="Somfy",
136-
configuration_url=None,
137-
session=session,
138-
username=username,
139-
password=password,
140-
),
141-
"ubiwizz": lambda username, password, session: DefaultClient(
142-
name="Ubiwizz",
143-
endpoint="https://ha129-1.overkiz.com/enduser-mobile-web/enduserAPI/",
144-
manufacturer="Decelect",
145-
configuration_url=None,
146-
session=session,
147-
username=username,
148-
password=password,
149-
),
150-
}
6+
@unique
7+
class Server(str, Enum):
8+
ATLANTIC_COZYTOUCH = "atlantic_cozytouch"
9+
BRANDT = "brandt"
10+
FLEXOM = "flexom"
11+
HEXAOM_HEXACONNECT = "hexaom_hexaconnect"
12+
HI_KUMO_ASIA = "hi_kumo_asia"
13+
HI_KUMO_EUROPE = "hi_kumo_europe"
14+
HI_KUMO_OCEANIA = "hi_kumo_oceania"
15+
NEXITY = "nexity"
16+
REXEL = "rexel"
17+
SIMU_LIVEIN2 = "simu_livein2"
18+
SOMFY_EUROPE = "somfy_europe"
19+
SOMFY_DEV_MODE = "somfy_dev_mode"
20+
SOMFY_AMERICA = "somfy_america"
21+
SOMFY_OCEANIA = "somfy_oceania"
22+
UBIWIZZ = "ubiwizz"

pyoverkiz/overkiz.py

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
"""Main entropoint for the Overkiz API client."""
2+
from __future__ import annotations
3+
4+
from typing import Callable
5+
6+
from aiohttp import ClientSession
7+
8+
from pyoverkiz.clients.atlantic_cozytouch import AtlanticCozytouchClient
9+
from pyoverkiz.clients.default import DefaultClient
10+
from pyoverkiz.clients.nexity import NexityClient
11+
from pyoverkiz.clients.overkiz import OverkizClient
12+
from pyoverkiz.clients.somfy import SomfyClient
13+
from pyoverkiz.clients.somfy_local import SomfyLocalClient
14+
from pyoverkiz.const import Server
15+
16+
SUPPORTED_SERVERS: dict[Server, Callable[[str, str, ClientSession], OverkizClient]] = {
17+
Server.ATLANTIC_COZYTOUCH: lambda username, password, session: AtlanticCozytouchClient(
18+
name="Atlantic Cozytouch",
19+
endpoint="https://ha110-1.overkiz.com/enduser-mobile-web/enduserAPI/",
20+
manufacturer="Atlantic",
21+
configuration_url=None,
22+
session=session,
23+
username=username,
24+
password=password,
25+
),
26+
Server.BRANDT: lambda username, password, session: DefaultClient(
27+
name="Brandt Smart Control",
28+
endpoint="https://ha3-1.overkiz.com/enduser-mobile-web/enduserAPI/",
29+
manufacturer="Brandt",
30+
configuration_url=None,
31+
session=session,
32+
username=username,
33+
password=password,
34+
),
35+
Server.FLEXOM: lambda username, password, session: DefaultClient(
36+
name="Flexom",
37+
endpoint="https://ha108-1.overkiz.com/enduser-mobile-web/enduserAPI/",
38+
manufacturer="Bouygues",
39+
configuration_url=None,
40+
session=session,
41+
username=username,
42+
password=password,
43+
),
44+
Server.HEXAOM_HEXACONNECT: lambda username, password, session: DefaultClient(
45+
name="Hexaom HexaConnect",
46+
endpoint="https://ha5-1.overkiz.com/enduser-mobile-web/enduserAPI/",
47+
manufacturer="Hexaom",
48+
configuration_url=None,
49+
session=session,
50+
username=username,
51+
password=password,
52+
),
53+
Server.HI_KUMO_ASIA: lambda username, password, session: DefaultClient(
54+
name="Hitachi Hi Kumo (Asia)",
55+
endpoint="https://ha203-1.overkiz.com/enduser-mobile-web/enduserAPI/",
56+
manufacturer="Hitachi",
57+
configuration_url=None,
58+
session=session,
59+
username=username,
60+
password=password,
61+
),
62+
Server.HI_KUMO_EUROPE: lambda username, password, session: DefaultClient(
63+
name="Hitachi Hi Kumo (Europe)",
64+
endpoint="https://ha117-1.overkiz.com/enduser-mobile-web/enduserAPI/",
65+
manufacturer="Hitachi",
66+
configuration_url=None,
67+
session=session,
68+
username=username,
69+
password=password,
70+
),
71+
Server.HI_KUMO_OCEANIA: lambda username, password, session: DefaultClient(
72+
name="Hitachi Hi Kumo (Oceania)",
73+
endpoint="https://ha203-1.overkiz.com/enduser-mobile-web/enduserAPI/",
74+
manufacturer="Hitachi",
75+
configuration_url=None,
76+
session=session,
77+
username=username,
78+
password=password,
79+
),
80+
Server.NEXITY: lambda username, password, session: NexityClient(
81+
name="Nexity Eugénie",
82+
endpoint="https://ha106-1.overkiz.com/enduser-mobile-web/enduserAPI/",
83+
manufacturer="Nexity",
84+
configuration_url=None,
85+
session=session,
86+
username=username,
87+
password=password,
88+
),
89+
Server.REXEL: lambda username, password, session: DefaultClient(
90+
name="Rexel Energeasy Connect",
91+
endpoint="https://ha112-1.overkiz.com/enduser-mobile-web/enduserAPI/",
92+
manufacturer="Rexel",
93+
configuration_url="https://utilisateur.energeasyconnect.com/user/#/zone/equipements",
94+
session=session,
95+
username=username,
96+
password=password,
97+
),
98+
Server.SIMU_LIVEIN2: lambda username, password, session: DefaultClient( # alias of https://tahomalink.com
99+
name="SIMU (LiveIn2)",
100+
endpoint="https://ha101-1.overkiz.com/enduser-mobile-web/enduserAPI/",
101+
manufacturer="Somfy",
102+
configuration_url=None,
103+
session=session,
104+
username=username,
105+
password=password,
106+
),
107+
Server.SOMFY_EUROPE: lambda username, password, session: SomfyClient( # alias of https://tahomalink.com
108+
name="Somfy (Europe)",
109+
endpoint="https://ha101-1.overkiz.com/enduser-mobile-web/enduserAPI/",
110+
manufacturer="Somfy",
111+
configuration_url="https://www.tahomalink.com",
112+
session=session,
113+
username=username,
114+
password=password,
115+
),
116+
Server.SOMFY_DEV_MODE: lambda gateway_id, token, session: SomfyLocalClient(
117+
name="Somfy Developer Mode (Local API)",
118+
endpoint=f"https://gateway-{gateway_id}.local:8443/enduser-mobile-web/1/enduserAPI/",
119+
manufacturer="Somfy",
120+
configuration_url=None,
121+
session=session,
122+
username=gateway_id, # not used
123+
password=token,
124+
),
125+
Server.SOMFY_AMERICA: lambda username, password, session: DefaultClient(
126+
name="Somfy (North America)",
127+
endpoint="https://ha401-1.overkiz.com/enduser-mobile-web/enduserAPI/",
128+
manufacturer="Somfy",
129+
configuration_url=None,
130+
session=session,
131+
username=username,
132+
password=password,
133+
),
134+
Server.SOMFY_OCEANIA: lambda username, password, session: DefaultClient(
135+
name="Somfy (Oceania)",
136+
endpoint="https://ha201-1.overkiz.com/enduser-mobile-web/enduserAPI/",
137+
manufacturer="Somfy",
138+
configuration_url=None,
139+
session=session,
140+
username=username,
141+
password=password,
142+
),
143+
Server.UBIWIZZ: lambda username, password, session: DefaultClient(
144+
name="Ubiwizz",
145+
endpoint="https://ha129-1.overkiz.com/enduser-mobile-web/enduserAPI/",
146+
manufacturer="Decelect",
147+
configuration_url=None,
148+
session=session,
149+
username=username,
150+
password=password,
151+
),
152+
}
153+
154+
155+
class Overkiz:
156+
@staticmethod
157+
def get_client_for(
158+
server: Server, username: str, password: str, session: ClientSession
159+
) -> OverkizClient:
160+
"""Get the client for the given server"""
161+
return SUPPORTED_SERVERS[server](username, password, session)

tests/test_client.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,19 @@
66
import pytest
77
from pytest import fixture
88

9-
from pyoverkiz.const import SUPPORTED_SERVERS
9+
from pyoverkiz.const import Server
1010
from pyoverkiz.enums import DataType
11+
from pyoverkiz.overkiz import Overkiz
1112

1213
CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
1314

1415

1516
class TestOverkizClient:
1617
@fixture
1718
def client(self):
18-
return SUPPORTED_SERVERS["somfy_europe"]("foo", "pass", aiohttp.ClientSession())
19+
return Overkiz.get_client_for(
20+
Server.SOMFY_EUROPE, "foo", "pass", aiohttp.ClientSession()
21+
)
1922

2023
@pytest.mark.asyncio
2124
async def test_get_devices_basic(self, client):

0 commit comments

Comments
 (0)