import scripts for stations and trains done
This commit is contained in:
parent
e0956c28f1
commit
8dc7f32ca4
169
indianrails/trains/imports.py
Normal file
169
indianrails/trains/imports.py
Normal file
|
@ -0,0 +1,169 @@
|
||||||
|
from models import *
|
||||||
|
from settings import DATA_DIR
|
||||||
|
import json
|
||||||
|
from os.path import join
|
||||||
|
import re
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
def import_stations():
|
||||||
|
stations = json.load(open(join(DATA_DIR, "stations.json")))
|
||||||
|
'''
|
||||||
|
states = []
|
||||||
|
for s in stations:
|
||||||
|
if s['state'] not in states and s['state'] != None and s['state'].strip() != '':
|
||||||
|
states.append(s['state'])
|
||||||
|
for s in states:
|
||||||
|
state = State(name=s)
|
||||||
|
print state.name
|
||||||
|
state.save()
|
||||||
|
'''
|
||||||
|
|
||||||
|
for s in stations:
|
||||||
|
station = Station()
|
||||||
|
station.data_id = s['id']
|
||||||
|
station.code = s['code']
|
||||||
|
station.name = s['name']
|
||||||
|
station.zone = s['zone']
|
||||||
|
if s['state'] is None:
|
||||||
|
s['state'] = ''
|
||||||
|
station.state = s['state']
|
||||||
|
if s['address'] is None:
|
||||||
|
s['address'] = ''
|
||||||
|
station.address = s['address']
|
||||||
|
print station.name
|
||||||
|
station.save()
|
||||||
|
|
||||||
|
|
||||||
|
def import_trains():
|
||||||
|
trains = json.load(open(join(DATA_DIR, "trains.json")))
|
||||||
|
errors = []
|
||||||
|
print(len(trains))
|
||||||
|
for t in trains:
|
||||||
|
train = Train()
|
||||||
|
train.data_id = t['id']
|
||||||
|
train.name = t['name']
|
||||||
|
train.number = t['number']
|
||||||
|
if t['return_train'] is None:
|
||||||
|
t['return_train'] = ''
|
||||||
|
train.return_train = t['return_train']
|
||||||
|
duration_h = getHours(t['duration'])
|
||||||
|
if duration_h is None:
|
||||||
|
errors.append({
|
||||||
|
'typ': 'Invalid Duration (H)',
|
||||||
|
'train_data_id': t['id'],
|
||||||
|
'duration': t['duration']
|
||||||
|
})
|
||||||
|
duration_h = 0
|
||||||
|
train.duration_h = duration_h
|
||||||
|
|
||||||
|
duration_m = getMinutes(t['duration'])
|
||||||
|
if duration_m is None:
|
||||||
|
errors.append({
|
||||||
|
'typ': 'Invalid Duration (M)',
|
||||||
|
'train_data_id': t['id'],
|
||||||
|
'duration': t['duration']
|
||||||
|
})
|
||||||
|
duration_m = 0
|
||||||
|
train.duration_m = duration_m
|
||||||
|
|
||||||
|
train.zone = t['zone']
|
||||||
|
train.date_from = getDate(t['date_from'])
|
||||||
|
train.date_to = getDate(t['date_to'])
|
||||||
|
try:
|
||||||
|
train.from_station = Station.objects.get(code=t['from_station_code'])
|
||||||
|
except:
|
||||||
|
errors.append({
|
||||||
|
'typ': 'From Station Not Found',
|
||||||
|
'train_data_id': t['id'],
|
||||||
|
'train_number': t['number'],
|
||||||
|
'from_station_code': t['from_station_code'],
|
||||||
|
'from_station_name': t['from_station_name']
|
||||||
|
})
|
||||||
|
try:
|
||||||
|
train.to_station = Station.objects.get(code=t['to_station_code'])
|
||||||
|
except:
|
||||||
|
errors.append({
|
||||||
|
'typ': 'To Station Not Found',
|
||||||
|
'train_data_id': t['id'],
|
||||||
|
'train_number': t['number'],
|
||||||
|
'to_station_code': t['to_station_code'],
|
||||||
|
'to_station_name': t['to_station_name']
|
||||||
|
})
|
||||||
|
|
||||||
|
train.number_of_halts = int(t['number_of_halts'])
|
||||||
|
train.typ = t['type']
|
||||||
|
departure = getTime(t['departure'])
|
||||||
|
if departure is None:
|
||||||
|
errors.append({
|
||||||
|
'typ': 'Invalid Departure Time',
|
||||||
|
'train_data_id': t['id'],
|
||||||
|
'departure': t['departure']
|
||||||
|
})
|
||||||
|
departure = datetime.time(0,0)
|
||||||
|
train.departure = departure
|
||||||
|
|
||||||
|
arrival = getTime(t['arrival'])
|
||||||
|
if departure is None:
|
||||||
|
errors.append({
|
||||||
|
'typ': 'Invalid Arrival Time',
|
||||||
|
'train_data_id': t['id'],
|
||||||
|
'arrival': t['arrival']
|
||||||
|
})
|
||||||
|
arrival = datetime.time(0,0)
|
||||||
|
train.arrival = arrival
|
||||||
|
# train.arrival = getTime(t['arrival'])
|
||||||
|
try:
|
||||||
|
train.distance = int(t['distance'].replace("km", "").strip())
|
||||||
|
except:
|
||||||
|
train.distance = 0
|
||||||
|
train.departure_days = t['departure_days']
|
||||||
|
|
||||||
|
boolFields = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday', 'chair_car', 'sleeper', 'first_class', 'third_ac', 'second_ac', 'first_ac']
|
||||||
|
for b in boolFields:
|
||||||
|
train.__setattr__(b, getBool(t[b]))
|
||||||
|
print train.name
|
||||||
|
train.save()
|
||||||
|
errors_file = open(join(DATA_DIR, "trainErrors.json"), "w")
|
||||||
|
json.dump(errors, errors_file, indent=2)
|
||||||
|
errors_file.close()
|
||||||
|
|
||||||
|
timeRe = re.compile(r'([0-9]{1,2})h\s([0-9]{1,2})m')
|
||||||
|
|
||||||
|
def getHours(s):
|
||||||
|
try:
|
||||||
|
return int(re.findall(timeRe,s)[0][0])
|
||||||
|
except:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def getMinutes(s):
|
||||||
|
try:
|
||||||
|
return int(re.findall(timeRe,s)[0][1])
|
||||||
|
except:
|
||||||
|
return None
|
||||||
|
|
||||||
|
timeRe2 = re.compile(r'([0-9]{1,2})\:([0-9]{1,2})')
|
||||||
|
def getTime(s):
|
||||||
|
try:
|
||||||
|
hrs = int(re.findall(timeRe2,s)[0][0])
|
||||||
|
mins = int(re.findall(timeRe2,s)[0][1])
|
||||||
|
return datetime.time(hrs, mins)
|
||||||
|
except:
|
||||||
|
return None
|
||||||
|
|
||||||
|
dateRe = re.compile(r'([a-zA-Z]{3})\s([0-9]{1,2})')
|
||||||
|
months = ['', 'jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
|
||||||
|
def getDate(s):
|
||||||
|
if s is None or s == '':
|
||||||
|
return ''
|
||||||
|
s = s.strip()
|
||||||
|
matches = re.findall(dateRe, s)
|
||||||
|
monthStr = matches[0][0]
|
||||||
|
monthInt = months.index(monthStr.lower())
|
||||||
|
date = int(matches[0][1])
|
||||||
|
return "%02d-%02d" % (monthInt, date,)
|
||||||
|
|
||||||
|
def getBool(s):
|
||||||
|
if s == None or int(s) == 0:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return True
|
|
@ -25,21 +25,21 @@ class Station(models.Model):
|
||||||
class Train(models.Model):
|
class Train(models.Model):
|
||||||
data_id = models.IntegerField()
|
data_id = models.IntegerField()
|
||||||
name = models.CharField(max_length=255)
|
name = models.CharField(max_length=255)
|
||||||
number = models.CharField(max_length=12, db_index=True)
|
number = models.CharField(max_length=64, db_index=True)
|
||||||
return_train = models.CharField(max_length=12, db_index=True)
|
return_train = models.CharField(max_length=64, db_index=True, blank=True)
|
||||||
duration_h = models.IntegerField()
|
duration_h = models.IntegerField()
|
||||||
duration_m = models.IntegerField()
|
duration_m = models.IntegerField()
|
||||||
zone = models.CharField(max_length=10)
|
zone = models.CharField(max_length=64)
|
||||||
date_from = models.DateField(null=True)
|
date_from = models.CharField(max_length=5, blank=True)
|
||||||
date_to = models.DateField(null=True)
|
date_to = models.CharField(max_length=5, blank=True)
|
||||||
from_station = models.ForeignKey(Station, related_name='trains_from')
|
from_station = models.ForeignKey(Station, related_name='trains_from')
|
||||||
to_station = models.ForeignKey(Station, related_name='trains_to')
|
to_station = models.ForeignKey(Station, related_name='trains_to')
|
||||||
number_of_halts = models.IntegerField()
|
number_of_halts = models.IntegerField()
|
||||||
typ = models.CharField(max_length=12)
|
typ = models.CharField(max_length=32)
|
||||||
departure = models.TimeField()
|
departure = models.TimeField()
|
||||||
arrival = models.TimeField()
|
arrival = models.TimeField()
|
||||||
distance = models.IntegerField()
|
distance = models.IntegerField()
|
||||||
departure_days = models.CharField(max_length=12) #this is just a string for display, we use the booleans in our code
|
departure_days = models.CharField(max_length=64) #this is just a string for display, we use the booleans in our code
|
||||||
monday = models.BooleanField()
|
monday = models.BooleanField()
|
||||||
tuesday = models.BooleanField()
|
tuesday = models.BooleanField()
|
||||||
wednesday = models.BooleanField()
|
wednesday = models.BooleanField()
|
||||||
|
@ -47,7 +47,7 @@ class Train(models.Model):
|
||||||
friday = models.BooleanField()
|
friday = models.BooleanField()
|
||||||
saturday = models.BooleanField()
|
saturday = models.BooleanField()
|
||||||
sunday = models.BooleanField()
|
sunday = models.BooleanField()
|
||||||
classes = models.CharField(max_length=32)
|
classes = models.CharField(max_length=64)
|
||||||
chair_car = models.BooleanField()
|
chair_car = models.BooleanField()
|
||||||
sleeper = models.BooleanField()
|
sleeper = models.BooleanField()
|
||||||
first_class = models.BooleanField()
|
first_class = models.BooleanField()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user