Initial commit
This commit is contained in:
73
classes/garbage_entry.py
Normal file
73
classes/garbage_entry.py
Normal file
@@ -0,0 +1,73 @@
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime
|
||||
from typing import Any, List, Mapping, Union
|
||||
|
||||
from bson import ObjectId
|
||||
|
||||
from classes.enums.garbage_type import GarbageType
|
||||
from classes.location import Location
|
||||
|
||||
|
||||
@dataclass
|
||||
class GarbageEntry:
|
||||
__slots__ = (
|
||||
"_id",
|
||||
"locations",
|
||||
"garbage_type",
|
||||
"date",
|
||||
)
|
||||
|
||||
_id: Union[ObjectId, None]
|
||||
locations: List[Location]
|
||||
garbage_type: GarbageType
|
||||
date: datetime
|
||||
|
||||
@classmethod
|
||||
async def from_dict(cls, data: Mapping[str, Any]):
|
||||
"""Generate GarbageEntry object from the mapping provided
|
||||
|
||||
### Args:
|
||||
* data (`Mapping[str, Any]`): Entry
|
||||
|
||||
### Raises:
|
||||
* `KeyError`: Key is missing.
|
||||
* `TypeError`: Key of a wrong type provided.
|
||||
* `ValueError`: "date" is not a valid ISO string.
|
||||
|
||||
### Returns:
|
||||
* `GarbageEntry`: Valid GarbageEntry object.
|
||||
"""
|
||||
for key in ("locations", "garbage_type", "date"):
|
||||
if key not in data:
|
||||
raise KeyError
|
||||
if key == "locations" and not isinstance(data[key], list):
|
||||
raise TypeError
|
||||
if key == "garbage_type" and not isinstance(data[key], int):
|
||||
raise TypeError
|
||||
if key == "date":
|
||||
datetime.fromisoformat(str(data[key]))
|
||||
|
||||
locations = [
|
||||
await Location.get(location_id) for location_id in data["locations"]
|
||||
]
|
||||
garbage_type = GarbageType(data["garbage_type"])
|
||||
|
||||
return cls(
|
||||
None,
|
||||
locations,
|
||||
garbage_type,
|
||||
data["date"],
|
||||
)
|
||||
|
||||
@classmethod
|
||||
async def from_record(cls, data: Mapping[str, Any]):
|
||||
locations = [
|
||||
await Location.get(location_id) for location_id in data["locations"]
|
||||
]
|
||||
garbage_type = GarbageType(data["garbage_type"])
|
||||
return cls(
|
||||
data["_id"],
|
||||
locations,
|
||||
garbage_type,
|
||||
data["date"],
|
||||
)
|
||||
Reference in New Issue
Block a user