This repository has been archived on 2025-02-10. You can view files and clone it, but cannot push or open issues or pull requests.
Files
beopen/server/modules/data/datetime.py
2025-02-10 12:37:33 +00:00

126 lines
3.8 KiB
Python

from datetime import date, timedelta, datetime
import random
import eventlet
# MODULES
from modules.data.config import read as config_read
from modules.data.database import connect as db_connect
from modules.handler import outgoing
from modules.track.logging import log
# MODULES
class timestamp():
def __init__(self):
self.time_limit = float(config_read("posts", "PostTimeLimit")) * 60
self.db = db_connect()
self.db.create(self)
@property
def start(self):
value = self.get_date_timestamp()
self._start = value
return self._start
@start.setter
def start(self, value):
value = self.get_date_timestamp()
self._start = value
@property
def end(self):
value = self.get_date_timestamp(day_mod=1) - 1
self._end = value
return self._end
@end.setter
def end(self, value):
value = self.get_date_timestamp(day_mod=1) - 1
self._end = value
@property
def now(self):
value = self.get_timestamp()
self._now = value
return value
@now.setter
def now(self, value):
value = self.get_timestamp()
self._now = value
@property
def post_slot_start(self):
value = self.get_slot()['start']
self._post_slot_start = value
return self._post_slot_start
@post_slot_start.setter
def post_slot_start(self, value):
self._post_slot_start = self._post_slot_start
@property
def post_slot_end(self):
value = self.get_slot()['end']
self._post_slot_end = value
return self._post_slot_end
@post_slot_end.setter
def post_slot_end(self, value):
self._post_slot_end = self._post_slot_end
@property
def date(self):
date = str(datetime.now().date())
self._date = date
return self._date
@date.setter
def date(self, value):
self._date = value
def get_date_timestamp(self, year_mod=0, month_mod=0, day_mod=0, *args, **kwargs):
modifier = [year_mod, month_mod, day_mod]
now_mod = (datetime.now()+timedelta(days=day_mod))
date = (str(now_mod.date()).replace("-0", "-")).split("-")
date = [int(string) for string in date]
timestamp = datetime(date[0], date[1], date[2]).timestamp()
return timestamp
def get_timestamp(self):
now = (float(datetime.now().timestamp()))
return now
def generate_slot(self, data=None):
for i in range(2):
if i == 0:
date = str(datetime.now().date())
start = self.get_date_timestamp()
else:
now_mod = (datetime.now()+timedelta(days=1))
date = (str(now_mod.date()))
start = self.get_date_timestamp(0, 0, 1)
self.cur.execute("SELECT date FROM time_slots WHERE date=?", (date,))
if not self.cur.fetchone():
log("INFO", f"Generating time slot for {date}")
day_start = start + int(config_read("posts", "DayStart")) * 60 * 60
day_end = start + int(config_read("posts", "DayStart")) * 60 * 60
slot_start = random.randint(day_start, day_end)
slot_end = slot_start + self.time_limit
self.cur.execute("INSERT INTO time_slots (date, start, end) VALUES (?, ?, ?)", (date, slot_start, slot_end))
self.db.commit()
def get_slot(self):
info = None
date = str(datetime.now().date())
self.cur.execute("SELECT start, end FROM time_slots WHERE date=?", (date,))
rez = self.cur.fetchone()
if rez:
info = {'start':rez[0], 'end':rez[1]}
return info
def is_valid_time(self):
if (self.now < self.post_slot_end) and (self.now >= self.post_slot_start):
return True
return False