def handle(self, *args, **options): obj = json.loads(open('mendoza-all.json').read()) lineas = list(set([o['grupo'] for o in obj])) print(lineas) ci = Ciudad.objects.get(slug='mendoza') ls = [] for l in lineas: li = Linea(nombre=l) li.save() ls.append(li) for o in obj: for l in ls: if o['grupo'].startswith(l.nombre): print("Agregando recorrido " + o['grupo'] + " - " + o['recorrido']) sys.stdout.flush() poly = [] for p in o['route']: poly.append((float(p.split(",")[1]), float(p.split(",")[0]))) poly = LineString(poly) # IDA recorrido = Recorrido( nombre=o['recorrido'] + " - " + o['nombre'], # DatabaseError: value too long for type character varying(100) sentido='IDA-VUELTA', linea=l, inicio=o['desde'], fin=o['hasta'], ruta=poly, descripcion=o['nombre'], paradas_completas=False ) recorrido.save() for p in o['stops']: sys.stdout.flush() p = Point((float(p["lng"]), float(p["lat"]))) try: parada = Parada.objects.get(latlng=p) print("-") except ObjectDoesNotExist: print('+') parada = Parada(latlng=p) parada.save() horario = Horario(recorrido=recorrido, parada=parada) horario.save() print("") sys.stdout.flush()
def handle(self, *args, **options): stats = {"lineas": 0, "recorridos": 0} tucuman = Ciudad.objects.get(slug="san-miguel-de-tucuman") with open("/path/to/json/file.json") as fixture: recorridos = json.loads(fixture.read()) for recorrido in recorridos: try: linea = Linea.objects.get( nombre=recorrido["linea"], ciudad=tucuman) except Linea.DoesNotExist: print("Creando linea '{0}'...".format(recorrido["linea"])) linea = Linea(nombre=recorrido["linea"]) linea.save() tucuman.lineas.add(linea) stats["lineas"] += 1 print("Creando recorrido '{0}' de linea '{1}'...".format( recorrido["nombre"], recorrido["linea"])) try: Recorrido.objects.get( nombre=recorrido["nombre"], linea=linea, ciudad=tucuman ) continue except Recorrido.DoesNotExist: recorrido = Recorrido( nombre=recorrido["nombre"], linea=linea, ruta=recorrido["wkt"], inicio=recorrido["inicio"], fin=recorrido["fin"], color_polilinea=recorrido["color"] ) recorrido.save() tucuman.recorridos.add(recorrido) stats["recorridos"] += 1 print(stats)
def handle(self, *args, **options): obj = json.loads(open('rosario-all.json').read()) lineas = ['101', '102', '103', '106', '107', '110', '112', '113', '115', '116', '120', '121', '122', '123', '125', '126', '127', '128', '129', '130', '131', '132', '133', '134', '135', '136', '137', '138', '139', '140', '141', '142', '143', '144', '145', '146', '153', '35/9', 'Enlace', 'K', 'Linea de la Costa', 'Ronda del Centro', 'Expreso', 'Las Rosas', 'M', 'Metropolitana', 'Monticas', 'Serodino', 'TIRSA'] ci = Ciudad.objects.get(slug='rosario') ls = [] for l in lineas: li = Linea(nombre=l) li.save() ls.append(li) for o in obj: for l in ls: if o['linea'].startswith(l.nombre): print("Agregando recorrido " + o['linea']) print("IDA: ") sys.stdout.flush() # IDA recorrido = Recorrido( nombre=o['linea'].replace(l.nombre, ''), sentido='IDA', linea=l, inicio=o['descripcionIDA'].split(',')[0].replace('Desde', '').strip().capitalize(), fin=o['descripcionIDA'].split(',')[-1].replace('Hasta', '').strip().capitalize(), ruta=WKTReader().read(o['ida']), descripcion=o['descripcionIDA'], paradas_completas=True ) recorrido.save() for p in o['paradas']: if WKTReader().read(p['point']).distance(recorrido.ruta) < 0.0005555: # ~50 metros print(p['codigo']) sys.stdout.flush() try: parada = Parada.objects.get(codigo=p['codigo']) except ObjectDoesNotExist: parada = Parada(codigo=p['codigo'], latlng=WKTReader().read(p['point'])) parada.save() horario = Horario(recorrido=recorrido, parada=parada) horario.save() print("") print("VUELTA: ") sys.stdout.flush() # VUELTA recorrido = Recorrido( nombre=o['linea'].replace(l.nombre, ''), sentido='VUELTA', linea=l, inicio=o['descripcionVUELTA'].split(',')[-1].replace('Hasta', '').strip().capitalize(), fin=o['descripcionVUELTA'].split(',')[0].replace('Desde', '').strip().capitalize(), ruta=WKTReader().read(o['vuelta']), descripcion=o['descripcionVUELTA'], paradas_completas=True ) recorrido.save() for p in o['paradas']: print(p['codigo']) sys.stdout.flush() if WKTReader().read(p['point']).distance(recorrido.ruta) < 0.0005555: # ~50 metros try: parada = Parada.objects.get(codigo=p['codigo']) except ObjectDoesNotExist: parada = Parada(codigo=p['codigo'], latlng=WKTReader().read(p['point'])) parada.save() horario = Horario(recorrido=recorrido, parada=parada) horario.save() print("") print("--------------------------------")
def handle(self, *args, **options): cursor = connection.cursor() db = psycopg2.connect(host='127.0.0.1', database='colectivos', user='******', password='******') cursor = db.cursor(cursor_factory=RealDictCursor) stats = {'ciudades': 0, 'lineas': 0, 'recorridos': 0} # agrego una provincia falsa para referenciar las ciudades provincia = Provincia(nombre="fake") provincia.save() cursor.execute(""" SELECT id FROM ciudad; """) for row in cursor.fetchall(): try: Ciudad.objects.get(slug=row['id']) except ObjectDoesNotExist: nombre = row['id'].replace("-", " ").title() ciudad = Ciudad(nombre=nombre, provincia=provincia) ciudad.save() stats['ciudades'] += 1 cursor.execute(""" SELECT nombre, descripcion, foto, info_empresa, info_terminal, id, semirrapido, localidad, cp, telefono FROM linea; """) for row in cursor.fetchall(): try: Linea.objects.get(id=row['id']) except ObjectDoesNotExist: linea = Linea(id=row['id'], nombre=row['nombre'], descripcion=row['descripcion'], foto=row['foto'], info_empresa=row['info_empresa'], info_terminal=row['info_terminal'], localidad=row['localidad'], cp=row['cp'], telefono=row['telefono']) linea.save() stats['lineas'] += 1 cursor.execute(""" SELECT ra.nombre as ra_nombre, ra.descripcion as ra_descripcion, ra.id_linea as ra_id_linea, ra.id as ra_id, re.nombre as re_nombre, re.zona_inicio as re_zona_inicio, re.zona_fin as re_zona_fin, re.descripcion as re_descripcion, re.id_ramal as re_id_ramal, re.color_polilinea as re_color_polilinea, re.horarios as re_horarios, re.id as re_id, ST_Affine(re.camino, cos(pi()/2), sin(pi()/2), sin(pi()/2), cos(pi()/2), 0, 0 ) as re_camino, re.edicion_fuente_nombre as re_edicion_fuente_nombre, re.edicion_fuente_contacto as re_edicion_fuente_contacto, re.edicion_id_usuario as re_edicion_id_usuario, re.save_timestamp as re_save_timestamp, re.edicion_datatimestamp as re_edicion_datatimestamp FROM recorrido re JOIN ramal ra on (ra.id = re.id_ramal); """) for row in cursor.fetchall(): try: Recorrido.objects.get(id=row['re_id']) except ObjectDoesNotExist: recorrido = Recorrido( id=row['re_id'], nombre=row['ra_nombre'], sentido=row['re_nombre'], linea=Linea.objects.get(id=row['ra_id_linea']), inicio=row['re_zona_inicio'], fin=row['re_zona_fin'], ruta=row['re_camino'], color_polilinea=row['re_color_polilinea'], horarios=row['re_horarios'], pois=row['ra_descripcion'], descripcion=row['re_descripcion']) recorrido.save() stats['recorridos'] += 1 print("Se han agregado:", stats)