Initial commit
This commit is contained in:
58
classes/location.py
Normal file
58
classes/location.py
Normal file
@@ -0,0 +1,58 @@
|
||||
from dataclasses import dataclass
|
||||
|
||||
from bson import ObjectId
|
||||
|
||||
from classes.point import Point
|
||||
from modules.database import col_locations
|
||||
|
||||
|
||||
@dataclass
|
||||
class Location:
|
||||
__slots__ = (
|
||||
"_id",
|
||||
"id",
|
||||
"name",
|
||||
"location",
|
||||
"country",
|
||||
"timezone",
|
||||
)
|
||||
|
||||
_id: ObjectId
|
||||
id: int
|
||||
name: str
|
||||
location: Point
|
||||
country: int
|
||||
timezone: str
|
||||
|
||||
@classmethod
|
||||
async def get(cls, id: int):
|
||||
db_entry = await col_locations.find_one({"id": id})
|
||||
|
||||
if db_entry is None:
|
||||
raise ValueError(f"No location with ID {id} found.")
|
||||
|
||||
db_entry["location"] = Point(*db_entry["location"]) # type: ignore
|
||||
|
||||
return cls(**db_entry)
|
||||
|
||||
@classmethod
|
||||
async def find(cls, name: str):
|
||||
db_entry = await col_locations.find_one({"name": {"$regex": name}})
|
||||
|
||||
if db_entry is None:
|
||||
raise ValueError(f"No location with name {name} found.")
|
||||
|
||||
db_entry["location"] = Point(*db_entry["location"]) # type: ignore
|
||||
|
||||
return cls(**db_entry)
|
||||
|
||||
@classmethod
|
||||
async def nearby(cls, lat: float, lon: float):
|
||||
db_entry = await col_locations.find_one({"location": {"$near": [lon, lat]}})
|
||||
|
||||
if db_entry is None:
|
||||
raise ValueError(f"No location near {lat}, {lon} found.")
|
||||
|
||||
db_entry["location"] = Point(*db_entry["location"]) # type: ignore
|
||||
|
||||
return cls(**db_entry)
|
Reference in New Issue
Block a user