-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathScheduleServer.py
More file actions
62 lines (48 loc) · 2.17 KB
/
Copy pathScheduleServer.py
File metadata and controls
62 lines (48 loc) · 2.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
import StockGrabber as sg
from twilio.rest import TwilioRestClient
import TwilioFunctions as tf
import redis
from time import sleep
import json
TWILIO_ACCOUNT_SID = "***REMOVED***"
TWILIO_AUTH_TOKEN = "***REMOVED***"
SENDING_NUMBER = "***REMOVED***"
class ScheduleServer:
def __init__(self
, sqlite = None \
, redisConfig = {'host':'localhost', 'port':6379, 'db':0} \
, topic = 'schedulerMessage'):
self.scheduler = BackgroundScheduler()
if sqlite:
self.scheduler.add_jobstore('sqlalchemy', url=sqlite)
self.redisHandle = redis.StrictRedis(**redisConfig)
self.pub = self.redisHandle.pubsub()
# mapping of message keys => function to handle them
self.messageHandles = \
{ 'addToSchedule' : self.addToSchedule \
, 'removeFromSchedule' : self.removeFromSchedule }
self.listenTopic = topic
self.pub.subscribe(topic)
def removeFromSchedule(self, phoneNumberString):
self.scheduler.remove_job(str(hash(phoneNumberString)))
def addToSchedule(self, tickers, phoneNumberString, fromNumber, freq = 1440):
self.scheduler.add_job(tf.sendUpdate, 'interval', minutes=freq, id=str(hash(phoneNumberString)), replace_existing=True, args=[tickers, phoneNumberString, fromNumber] )
def run(self):
try:
# Start scheduler in background, then we simply listen for messages that need to be added to the scheduler
self.scheduler.start()
while True:
for message in self.pub.listen():
try:
messageContents = json.loads(message['data'])
if messageContents['action'] in self.messageHandles:
self.messageHandles[messageContents['action']](**messageContents['args'])
except:
pass
except (KeyboardInterrupt, SystemExit):
pass
if __name__ == '__main__':
ScheduleServer = ScheduleServer()
ScheduleServer.run()