refactor the code to abstract from the weather provider
This commit is contained in:
61
aman/com/Weather.py
Normal file
61
aman/com/Weather.py
Normal file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import datetime
|
||||
import pytz
|
||||
import sys
|
||||
import time
|
||||
|
||||
from datetime import datetime as dt
|
||||
from threading import Thread
|
||||
|
||||
from aman.com.DwdCrawler import DwdCrawler
|
||||
import aman.config.Weather
|
||||
|
||||
class Weather(Thread):
|
||||
def __init__(self, config : aman.config.Weather.Weather):
|
||||
Thread.__init__(self)
|
||||
self.nextUpdate = dt.utcfromtimestamp(int(time.time()))
|
||||
self.lastUpdateTried = None
|
||||
self.stopThread = False
|
||||
self.provider = None
|
||||
|
||||
if 'DWD' == config.Provider.upper():
|
||||
self.provider = DwdCrawler()
|
||||
else:
|
||||
sys.stderr.write('Invalid or unknown weather-provider defined')
|
||||
sys.exit(-1)
|
||||
|
||||
self.start()
|
||||
|
||||
def stop(self):
|
||||
self.stopThread = True
|
||||
|
||||
def currentClock():
|
||||
clock = dt.utcfromtimestamp(int(time.time()))
|
||||
clock = datetime.datetime(
|
||||
year = clock.year,
|
||||
month = clock.month,
|
||||
day = clock.day,
|
||||
hour = clock.hour,
|
||||
minute = clock.minute,
|
||||
second = clock.second,
|
||||
tzinfo = pytz.UTC
|
||||
)
|
||||
return clock
|
||||
|
||||
def run(self):
|
||||
while False == self.stopThread and None != self.provider:
|
||||
now = Weather.currentClock()
|
||||
|
||||
# check if an update is required
|
||||
if None != self.provider.updateTime and self.provider.updateTime > now:
|
||||
time.sleep(1)
|
||||
continue
|
||||
|
||||
# calculate the theoretical next try for an update
|
||||
if None != self.lastUpdateTried:
|
||||
earliestUpdate = self.lastUpdateTried + datetime.timedelta(minutes=2)
|
||||
|
||||
if None == self.lastUpdateTried or self.lastUpdateTried <= now:
|
||||
if True == self.provider.receiveWindData():
|
||||
self.nextUpdate = self.provider.updateTime
|
||||
Reference in New Issue
Block a user