gtfsrt_concepcion/fetcher/main.py

46 lines
2.0 KiB
Python

from apscheduler.schedulers.background import BlockingScheduler
from fetcher.model.feed import db, Registros
from tempfile import NamedTemporaryFile
from shutil import copyfile
from datetime import datetime
import requests
import logging
import time
import sys
import os
log = logging.getLogger('Fetcher')
log.setLevel(logging.DEBUG)
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
log.addHandler(handler)
def load_proto():
inicio = datetime.now()
final_dir = "static/ccp/{}/{}/{}".format(inicio.strftime("%Y"), inicio.strftime("%m"), inicio.strftime("%d"))
final_name = "static/ccp/{}/{}/{}/ccp_gtfs_{}.proto".format(inicio.strftime("%Y"), inicio.strftime("%m"), inicio.strftime("%d"), inicio.strftime("%Y%m%d_%H%M_%S"))
try:
response = requests.get("{}?apikey={}".format(os.environ.get('GTFS_RT_ENDPOINT'), os.environ.get('GTFS_RT_KEY')))
response.raise_for_status()
with NamedTemporaryFile() as tmp:
tmp.write(response.content)
os.makedirs(os.path.abspath(final_dir), exist_ok=True)
copyfile(tmp.name, os.path.abspath(final_name))
nuevo_registro = Registros(filename=final_name, status=0)
db.add(nuevo_registro)
db.commit()
log.info("Fetched GTFS-RT Record {} in {}s".format(inicio.strftime("%Y%m%d_%H%M_%S"), (datetime.now()-inicio).total_seconds()))
except:
import traceback
log.error("Failed to fetch GTFS-RT Record {} in {}s".format(inicio.strftime("%Y%m%d_%H%M_%S"), (datetime.now()-inicio).total_seconds()))
log.info('Traceback {}'.format(traceback.format_exc()))
nuevo_registro = Registros(filename=final_name, status=100)
db.add(nuevo_registro)
db.commit()
sched = BlockingScheduler()
sched.add_job(load_proto, 'interval', seconds=int(os.environ.get('GTFS_RT_INTERVAL'))) #will do the print_t work for every 30 seconds