|
8 | 8 |
|
9 | 9 |
|
10 | 10 | class APIService: |
11 | | - _last_login_time = None |
12 | | - _last_url = None |
13 | | - _api_instance = None |
| 11 | + _api_instances = {} |
| 12 | + _last_login_times = {} |
14 | 13 |
|
15 | 14 | def __init__(self, url: str, username: str, password: str): |
16 | | - if APIService._api_instance is None or APIService._last_url != url: |
17 | | - APIService._api_instance = AsyncApi(url, username, password) |
18 | | - APIService._last_url = url |
19 | | - self.api = APIService._api_instance |
| 15 | + self.url = url |
20 | 16 | self.username = username |
21 | 17 | self.password = password |
22 | | - self.url = url |
| 18 | + |
| 19 | + if url not in APIService._api_instances: |
| 20 | + APIService._api_instances[url] = AsyncApi(url, username, password) |
| 21 | + |
| 22 | + self.api = APIService._api_instances[url] |
23 | 23 |
|
24 | 24 | async def ensure_login(self): |
25 | | - if ( |
26 | | - APIService._last_login_time is None |
27 | | - or (datetime.now() - APIService._last_login_time).total_seconds() > 3500 |
28 | | - ): |
29 | | - await self.api.login() |
30 | | - APIService._last_login_time = datetime.now() |
| 25 | + last_login = APIService._last_login_times.get(self.url) |
| 26 | + |
| 27 | + if last_login is None or (datetime.now() - last_login).total_seconds() > 3500: |
| 28 | + try: |
| 29 | + await self.api.login() |
| 30 | + APIService._last_login_times[self.url] = datetime.now() |
| 31 | + except Exception as e: |
| 32 | + APIService._api_instances[self.url] = AsyncApi( |
| 33 | + self.url, self.username, self.password |
| 34 | + ) |
| 35 | + self.api = APIService._api_instances[self.url] |
| 36 | + await self.api.login() |
| 37 | + APIService._last_login_times[self.url] = datetime.now() |
31 | 38 |
|
32 | 39 | async def test_connection(self) -> Server: |
33 | 40 | try: |
34 | 41 | api = AsyncApi(self.url, self.username, self.password) |
35 | 42 | await api.login() |
36 | 43 | info = await api.server.get_status() |
37 | 44 | return info |
38 | | - |
39 | 45 | except Exception as e: |
40 | 46 | return None |
41 | 47 |
|
|
0 commit comments