Building out timetable logic
This commit is contained in:
@@ -47,12 +47,30 @@ 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
|
||||
return zlib.decompress(response.content, 16+zlib.MAX_WBITS)
|
||||
|
||||
def parseTimetable(data):
|
||||
## Parse the update file
|
||||
## Check how the downloaded data is displayed
|
||||
return
|
||||
def loopTimetable(data):
|
||||
listify = data.splitlines()
|
||||
documents = []
|
||||
for item in listify:
|
||||
dic = json.loads(item)
|
||||
if ('JsonTimetableV1' in dic):
|
||||
timestamp = dic['JsonTimetableV1']['timestamp']
|
||||
sequence = dic['JsonTimetableV1']['Metadata']['sequence']
|
||||
detail = {timestamp: timestamp, sequence: sequence}
|
||||
# Do something with this data here
|
||||
# Check if timestamp and sequence are correct, if not trigger a full download
|
||||
elif ('TiplocV1' in dic):
|
||||
print("Disregarding TIPLOC Data")
|
||||
# Not used as TIPLOCs etc. are sourced from CORPUS
|
||||
elif ('JsonAssociationV1' in dic):
|
||||
print("JsonAssociationData")
|
||||
# Associates trains with eachother - not planning to use yet.
|
||||
elif ('JsonScheduleV1' in dic):
|
||||
print("JsonScheduleData")
|
||||
document = insertSchedule(dic)
|
||||
documents.append(document)
|
||||
return documents
|
||||
|
||||
def runUpdate():
|
||||
required = isUpdateRequired()
|
||||
@@ -66,3 +84,41 @@ def runUpdate():
|
||||
log.out("timetable.runUpdate: timetable update is not needed")
|
||||
return "done"
|
||||
## Check what happens if there is no update
|
||||
|
||||
def insertSchedule(sch_record):
|
||||
schedule = sch_record['JsonScheduleV1']
|
||||
scheduleId = schedule['CIF_train_uid']
|
||||
transactionType = schedule['transaction_type']
|
||||
document = {
|
||||
'stpIndicator': schedule['CIF_stp_indicator'],
|
||||
'trainUid': scheduleId,
|
||||
'headcode': schedule['schedule_segment']['signalling_id'],
|
||||
'powerType': schedule['schedule_segment']['CIF_power_type'],
|
||||
'planSpeed': schedule['schedule_segment']['CIF_speed'],
|
||||
'scheduleEndDate': schedule['schedule_end_date']
|
||||
}
|
||||
return document
|
||||
|
||||
# Proposed Document Schema:
|
||||
# {
|
||||
# stp_indicator: "O",
|
||||
# train_uid: "C07284"
|
||||
# atoc_code: "GW"
|
||||
# schedule_days_runs: [0,1,2,3,4,5,6] # Sunday-Saturday
|
||||
# schedule_end_date: "2023-06-02"
|
||||
# headcode: "5G30"
|
||||
# power_type: "DMU"
|
||||
# speed: "090"
|
||||
# catering_code: null
|
||||
# service_branding: ""
|
||||
# passenger_stops: [
|
||||
# {
|
||||
# 'tiploc': "TIPLOC",
|
||||
# 'pb_arr': "PublicArrival",
|
||||
# 'pb_dep': "PublicDepartr"
|
||||
# }
|
||||
# ]
|
||||
|
||||
### CURRENT STATE: loopTimetable and insertSchedule builds the data into
|
||||
### a suitable format to send to Mongo, passengerStops are not yet
|
||||
### parsed and there needs to be logic around the transaction_type
|
||||
Reference in New Issue
Block a user