|
@@ -7,7 +7,7 @@ import datetime
|
7
|
7
|
import enum
|
8
|
8
|
import logging
|
9
|
9
|
from dataclasses import dataclass
|
10
|
|
-from typing import Any, List, NamedTuple, Optional, Sequence, Tuple, Union
|
|
10
|
+from typing import Any, Dict, List, NamedTuple, Optional, Sequence, Tuple, Union
|
11
|
11
|
from urllib.parse import urljoin
|
12
|
12
|
|
13
|
13
|
import requests
|
|
@@ -473,8 +473,9 @@ class Settlement(NamedTuple):
|
473
|
473
|
|
474
|
474
|
settlement_id: int
|
475
|
475
|
name: str
|
476
|
|
- consumption_summary: dict
|
477
|
|
- count_info: dict = {}
|
|
476
|
+ consumption_summary: Dict[str, Any]
|
|
477
|
+ count_info: Dict[str, Any] = {}
|
|
478
|
+ per_person_counts: Dict[str, Any] = {}
|
478
|
479
|
|
479
|
480
|
@classmethod
|
480
|
481
|
def from_dict(cls, data: dict) -> "Settlement":
|
|
@@ -482,7 +483,8 @@ class Settlement(NamedTuple):
|
482
|
483
|
settlement_id=data["settlement_id"],
|
483
|
484
|
name=data["name"],
|
484
|
485
|
consumption_summary=data["consumption_summary"],
|
485
|
|
- count_info=data.get("count_info", {}),
|
|
486
|
+ count_info=data["count_info"],
|
|
487
|
+ per_person_counts=data["per_person_counts"],
|
486
|
488
|
)
|
487
|
489
|
|
488
|
490
|
@classmethod
|
|
@@ -494,22 +496,23 @@ class Settlement(NamedTuple):
|
494
|
496
|
return cls.from_dict(req.json()["settlement"])
|
495
|
497
|
|
496
|
498
|
@classmethod
|
497
|
|
- def get(cls, settlement_id: int) -> Optional[Settlement]:
|
498
|
|
- req = requests.get(urljoin(SERVER_URL, f"/settlements/{settlement_id}"))
|
499
|
|
-
|
|
499
|
+ def get(cls, settlement_id: int) -> Union[Settlement, NetworkError]:
|
500
|
500
|
try:
|
|
501
|
+ req = requests.get(urljoin(SERVER_URL, f"/settlements/{settlement_id}"))
|
|
502
|
+ req.raise_for_status()
|
501
|
503
|
data = req.json()
|
502
|
|
- except ValueError:
|
503
|
|
- LOG.error(
|
504
|
|
- "Did not get JSON on retrieving Settlement (%s): %s",
|
505
|
|
- req.status_code,
|
506
|
|
- req.content,
|
507
|
|
- )
|
508
|
|
- return None
|
509
|
504
|
|
510
|
|
- if "error" in data or req.status_code != 200:
|
511
|
|
- LOG.error("Could not get Export (%s): %s", req.status_code, data)
|
512
|
|
- return None
|
|
505
|
+ except ValueError as e:
|
|
506
|
+ LOG.exception(e)
|
|
507
|
+ return NetworkError.InvalidData
|
|
508
|
+
|
|
509
|
+ except requests.ConnectionError as e:
|
|
510
|
+ LOG.exception(e)
|
|
511
|
+ return NetworkError.ConnectionFailure
|
|
512
|
+
|
|
513
|
+ except requests.HTTPError as e:
|
|
514
|
+ LOG.exception(e)
|
|
515
|
+ return NetworkError.HttpFailure
|
513
|
516
|
|
514
|
517
|
data["settlement"]["count_info"] = data["count_info"]
|
515
|
518
|
|