From 131f657ce491de01c3d844006e68fc4493330606 Mon Sep 17 00:00:00 2001 From: Khiem Ton Date: Fri, 24 Mar 2023 14:45:56 +0700 Subject: [PATCH] feat: raid list --- ispoof/lists/raidlist.py | 58 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/ispoof/lists/raidlist.py b/ispoof/lists/raidlist.py index e69de29..5ad3f76 100644 --- a/ispoof/lists/raidlist.py +++ b/ispoof/lists/raidlist.py @@ -0,0 +1,58 @@ +from ispoof.objects.raid import Raid +from ispoof.spoofer.location import Location +from thefuzz.fuzz import partial_ratio +from sqlalchemy.orm import Session +from sqlalchemy.engine import Engine +from typing import List +from sqlalchemy import desc +from datetime import datetime, timedelta +import logging + +logger = logging.getLogger(__name__) + + +class RaidList: + def __init__(self, engine: Engine): + self.engine = engine + self.timedelta = timedelta(minutes=2) + + def sort_by_name(self, reverse=False): + with Session(self.engine) as session: + if reverse: + result = session.query(Raid).where(Raid.end_time > datetime.now() + self.timedelta) \ + .order_by(desc(Raid.name)) + else: + result = session.query(Raid).where(Raid.end_time > datetime.now() + self.timedelta) \ + .order_by(Raid.name) + session.commit() + return result.all() + + def sort_by_level(self, reverse=False): + with Session(self.engine) as session: + if reverse: + result = session.query(Raid).where(Raid.end_time > datetime.now() + self.timedelta) \ + .order_by(desc(Raid.level)) + else: + result = session.query(Raid).where(Raid.end_time > datetime.now() + self.timedelta) \ + .order_by(Raid.level) + session.commit() + return result.all() + + def sort_by_distance(self, location: Location, reverse=False): + with Session(self.engine) as session: + result = session.query(Raid).where(Raid.end_time > datetime.now() + self.timedelta) + session.commit() + return sorted(result.all(), key=lambda raid: location.distance(raid.location), reverse=reverse) + + def search_by_name(self, query: str): + with Session(self.engine) as session: + result = session.query(Raid).where(Raid.end_time > datetime.now() + self.timedelta) + session.commit() + return list(filter(lambda raid: partial_ratio(query.lower(), raid.name) >= 80, result.all())) + + def insert_to_database(self, raids: List[Raid]): + logger.info("Insert RAIDS to Database.") + with Session(self.engine) as session: + session.add_all(raids) + session.commit() +