Add active checking

This commit is contained in:
Ivan Vazhenin
2023-09-11 19:15:04 +03:00
parent 8f9562ac21
commit 361c346d8b
2 changed files with 19 additions and 2 deletions

16
db.py
View File

@@ -1,8 +1,13 @@
from datetime import datetime
from typing import List, Optional from typing import List, Optional
from sqlalchemy import create_engine, String, select, ForeignKey from sqlalchemy import create_engine, String, select, ForeignKey
from sqlalchemy.orm import Session, DeclarativeBase, Mapped, mapped_column, relationship from sqlalchemy.orm import Session, DeclarativeBase, Mapped, mapped_column, relationship
def tow(day: int, hour: int, minute: int):
return minute + hour * 60 + day * 60 * 24
class Base(DeclarativeBase): class Base(DeclarativeBase):
pass pass
@@ -46,6 +51,17 @@ class User(Base):
'queue': [x.to_dict() for x in self.queue], 'queue': [x.to_dict() for x in self.queue],
} }
def is_active_now(self):
if not len(self.schedule):
return True
dt = datetime.now()
curr_tow = tow(dt.weekday(), dt.hour, dt.minute)
for x in self.schedule:
if (tow(x.day_start, x.hour_start, x.minute_start) <= curr_tow
<= tow(x.day_end, x.hour_end, x.minute_end)):
return True
return False
class Profile(Base): class Profile(Base):
__tablename__ = 'profiles' __tablename__ = 'profiles'

View File

@@ -70,6 +70,7 @@ def replication_task():
with (Session(conn) as session): with (Session(conn) as session):
for bndname in connected: for bndname in connected:
for item in session.query(db.Queue).join(db.Queue.user).filter_by(bndname=bndname).all(): for item in session.query(db.Queue).join(db.Queue.user).filter_by(bndname=bndname).all():
if item.user.is_active_now():
replication(bndname, item.commit_id, item.schema) replication(bndname, item.commit_id, item.schema)
session.delete(item) session.delete(item)
session.commit() session.commit()