class SynchronizationManager(object):
    def __init__(self):
        self.next_bus_client = NextBusClient()

    def run(self):
        agencies = self.next_bus_client.get_agency_list()

        # move to separate RabbitMQ tasks
        for agency in agencies:
            sleep(3)
            routes = self.next_bus_client.get_agency_route_list(agency_tag=agency['tag'])

            for route in routes:
                sleep(1)
                schedule_list = self.next_bus_client.get_schedule(agency_tag=agency['tag'], route_tag=route['tag'])

                # TODO: move to Repository
                for schedule_desc in schedule_list:
                    departure = Departure(**schedule_desc)
                    db.session.add(departure)

                db.session.commit()

                sleep(1)
                stops_list = self.next_bus_client.get_route_config(agency_tag=agency['tag'], route_tag=route['tag'])

                # TODO: move to Repository
                for uuid, doc in stops_list.items():
                    es.index(index="next_bus", doc_type='stop', id=uuid, body=doc)
 def __init__(self):
     self.next_bus_client = NextBusClient()