Prepare for timetable data
This commit is contained in:
parent
dd15c3ba77
commit
e142143fad
68
src/timetable.py
Normal file
68
src/timetable.py
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
# db-manager - Builds and manages an OwlBoard database instance - To be run on a
|
||||||
|
# cron schedule
|
||||||
|
# Copyright (C) 2023 Frederick Boniface
|
||||||
|
|
||||||
|
# This program is free software: you can redistribute it and/or modify it under the
|
||||||
|
# terms of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation, either version 3 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
|
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
|
# You should have received a copy of the GNU General Public License along with this
|
||||||
|
# program. If not, see
|
||||||
|
# https://git.fjla.uk/OwlBoard/db-manager/src/branch/main/LICENSE
|
||||||
|
|
||||||
|
#Imports
|
||||||
|
import os
|
||||||
|
import requests
|
||||||
|
import logger as log
|
||||||
|
import zlib
|
||||||
|
import json
|
||||||
|
import mongo
|
||||||
|
import time
|
||||||
|
|
||||||
|
# This module downloads a single TOCs Schedule data
|
||||||
|
TOC_Code = "EF" # Business code for GWR
|
||||||
|
fullDataUrl = f"https://publicdatafeeds.networkrail.co.uk/ntrod/CifFileAuthenticate?type=CIF_{TOC_Code}_TOC_FULL_DAILY&day=toc-full"
|
||||||
|
updateDataUrl = f"https://publicdatafeeds.networkrail.co.uk/ntrod/CifFileAuthenticate?type=CIF_{TOC_Code}_TOC_UPDATE_DAILY&day=toc-update-{day}"
|
||||||
|
CORPUS_USER = os.getenv('OWL_LDB_CORPUSUSER')
|
||||||
|
CORPUS_PASS = os.getenv('OWL_LDB_CORPUSPASS')
|
||||||
|
|
||||||
|
# Determine state of current Timetable Database
|
||||||
|
def isUpdateRequired():
|
||||||
|
timetableLength = mongo.getLength("timetable")
|
||||||
|
log.out(f"timetable.isUpdateRequired: timetable collection contains {timetableLength} documents")
|
||||||
|
timetableUpdateDate = mongo.metaUpdateTime("timetable")
|
||||||
|
if (not timetableLength or int(time.time()) > timetableUpdateDate + 172800):
|
||||||
|
log.out(f"timetable.isUpdateRequired: timetable collection requires rebuild")
|
||||||
|
return "full"
|
||||||
|
if (int(time.time()) > (timetableUpdateDate + 86400)):
|
||||||
|
log.out(f"timetable.isUpdateRequired: timetable collection requires update")
|
||||||
|
return "update"
|
||||||
|
return False
|
||||||
|
|
||||||
|
def getTimetable(full = False):
|
||||||
|
download_url = full_data_url if full else update_data_url
|
||||||
|
response = requests.get(downloadUrl, auth=(CORPUS_USER, CORPUS_PASS))
|
||||||
|
mongo.incrementCounter("schedule_api")
|
||||||
|
return response
|
||||||
|
|
||||||
|
def parseTimetable(data):
|
||||||
|
## Parse the update file
|
||||||
|
return
|
||||||
|
|
||||||
|
def runUpdate():
|
||||||
|
required = isUpdateRequired()
|
||||||
|
if (required == "full"):
|
||||||
|
log.out("timetable.runUpdate: Fetching full timetable data")
|
||||||
|
data = getTimetable(full = True)
|
||||||
|
elif (required == "update"):
|
||||||
|
log.out("timetable.runUpdate: Fetching todays timetable update")
|
||||||
|
data = getTimetable()
|
||||||
|
else:
|
||||||
|
log.out("timetable.runUpdate: timetable update is not needed")
|
||||||
|
return "done"
|
||||||
|
## Check how the downloaded data is displayed
|
||||||
|
## Check what happens if there is no update
|
Reference in New Issue
Block a user