Trabajadores de acciones
This commit is contained in:
44
src/action/questions.py
Normal file
44
src/action/questions.py
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import os
|
||||||
|
from threading import Thread
|
||||||
|
import queue
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
|
class QuestionWorker(Thread):
|
||||||
|
def __init__(self, params, configs):
|
||||||
|
super(QuestionWorker, self).__init__()
|
||||||
|
self.queue = params['queues']['questions']
|
||||||
|
self.logging = params['logging']
|
||||||
|
self.logger = params['queues']['log']
|
||||||
|
self.event = params['events']['stop']
|
||||||
|
self.wait = configs.get('supervisor.wait')
|
||||||
|
self.folder = params['folders']['data']
|
||||||
|
|
||||||
|
def question(self, text):
|
||||||
|
filename = os.path.join(self.folder, 'questions.json')
|
||||||
|
with open(filename, 'w+', encoding='utf8') as f:
|
||||||
|
try:
|
||||||
|
data = json.load(f)
|
||||||
|
except json.decoder.JSONDecodeError:
|
||||||
|
data = []
|
||||||
|
if text in data:
|
||||||
|
return
|
||||||
|
data.append(text)
|
||||||
|
json.dump(data, f, ensure_ascii=False, indent=4)
|
||||||
|
self.logging.log(text, type(self))
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
self.logging.log('Starting', type(self))
|
||||||
|
self.logger.put({'action': type(self)})
|
||||||
|
while not self.event.is_set():
|
||||||
|
try:
|
||||||
|
question = self.queue.get(timeout=self.wait)
|
||||||
|
if question.type == 'email':
|
||||||
|
self.question(
|
||||||
|
'¿Que hago con este correo de {0} y el texto dice {1} en la fecha {2}?'.
|
||||||
|
format(question.sender, question.text, question.datetime.strftime('%d-%m-%Y %H:%M:%S'))
|
||||||
|
)
|
||||||
|
except queue.Empty:
|
||||||
|
pass
|
||||||
|
self.logging.log('Exiting', type(self))
|
||||||
|
return
|
112
src/action/reminder.py
Normal file
112
src/action/reminder.py
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
import datetime
|
||||||
|
import queue
|
||||||
|
from threading import Thread
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
class Reminder:
|
||||||
|
def __init__(self, timezone):
|
||||||
|
self.datetime = 0
|
||||||
|
self.message = ''
|
||||||
|
self.recursive = False
|
||||||
|
self.last = 0
|
||||||
|
self.repeats = 0
|
||||||
|
self.tz = timezone
|
||||||
|
|
||||||
|
def should_remind(self):
|
||||||
|
now = datetime.datetime.now(tz=self.tz)
|
||||||
|
event = self.get_remind_time()
|
||||||
|
dif = event - now
|
||||||
|
if dif.days * 24 * 60 * 60 + dif.seconds == 0:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def get_remind_time(self):
|
||||||
|
if self.recursive:
|
||||||
|
event = self.last + self.datetime
|
||||||
|
return event
|
||||||
|
return self.datetime
|
||||||
|
|
||||||
|
def remind(self):
|
||||||
|
# Do remind
|
||||||
|
if self.recursive:
|
||||||
|
self.last = datetime.datetime.now(tz=self.tz)
|
||||||
|
self.repeats -= 1
|
||||||
|
|
||||||
|
|
||||||
|
class RemindRegisterWorker(Thread):
|
||||||
|
def __init__(self, params, configs):
|
||||||
|
super().__init__()
|
||||||
|
self.event = params['events']['stop']
|
||||||
|
self.queue = params['queues']['reminders']
|
||||||
|
self.lock = params['locks']['reminders']
|
||||||
|
self.folder = params['folders']['data']
|
||||||
|
self.logging = params['logging']
|
||||||
|
self.wait = configs.get('supervisor.wait')
|
||||||
|
|
||||||
|
def add_reminder(self, reminder):
|
||||||
|
self.lock.acquire()
|
||||||
|
filename = os.path.join(self.folder, 'reminders.json')
|
||||||
|
with open(filename, 'w+') as f:
|
||||||
|
reminders = json.load(f)
|
||||||
|
reminders.append(reminder)
|
||||||
|
json.dump(reminders, f)
|
||||||
|
self.lock.release()
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
self.logging.log('Starting', caller=type(self))
|
||||||
|
while not self.event.is_set():
|
||||||
|
self.logging.log('Looping status {0}'.format(not self.event.is_set()),
|
||||||
|
caller=type(self))
|
||||||
|
try:
|
||||||
|
reminder = self.queue.get(timeout=self.wait)
|
||||||
|
self.add_reminder(reminder)
|
||||||
|
except queue.Empty:
|
||||||
|
pass
|
||||||
|
self.logging.log('Exiting', caller=type(self))
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
class ReminderWorker(Thread):
|
||||||
|
def __init__(self, params, configs):
|
||||||
|
super().__init__()
|
||||||
|
self.event = params['events']['stop']
|
||||||
|
self.folder = params['folders']['data']
|
||||||
|
self.lock = params['locks']['reminders']
|
||||||
|
self.logging = params['logging']
|
||||||
|
self.wait = configs.get('supervisor.wait')
|
||||||
|
self.tz = configs.get('timezone')
|
||||||
|
|
||||||
|
def check_reminders(self):
|
||||||
|
self.lock.acquire()
|
||||||
|
filename = os.path.join(self.folder, 'reminders.json')
|
||||||
|
if not os.path.isfile(filename):
|
||||||
|
self.lock.release()
|
||||||
|
return
|
||||||
|
with open(filename, 'w+') as f:
|
||||||
|
reminders = json.load(f)
|
||||||
|
new_reminders = []
|
||||||
|
for r in reminders:
|
||||||
|
reminder = Reminder(self.tz)
|
||||||
|
for k, val in r.items():
|
||||||
|
setattr(reminder, k, val)
|
||||||
|
if reminder.should_remind():
|
||||||
|
reminder.remind()
|
||||||
|
if reminder.recursive and reminder.repeats > 0:
|
||||||
|
new_reminders.append(reminder)
|
||||||
|
else:
|
||||||
|
new_reminders.append(reminder)
|
||||||
|
json.dump(new_reminders, f)
|
||||||
|
self.lock.release()
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
self.logging.log('Starting', caller=type(self))
|
||||||
|
while not self.event.is_set():
|
||||||
|
self.logging.log('Looping status {0}'.format(not self.event.is_set()),
|
||||||
|
caller=type(self))
|
||||||
|
self.check_reminders()
|
||||||
|
time.sleep(self.wait)
|
||||||
|
self.logging.log('Exiting', caller=type(self))
|
||||||
|
return
|
Reference in New Issue
Block a user