def fill_and_get_pt_object(navitia, all_objects, json, add_to_db=True): """ :param all_objects: dictionary of objects to be added in this session :param json: Flux which contains json information of pt_object :param add_to_db: ptobject insert into database :return: a pt_object and modify all_objects param """ if json["id"] in all_objects: return all_objects[json["id"]] pt_object = models.PTobject.get_pt_object_by_uri(json["id"]) if pt_object: all_objects[json["id"]] = pt_object return pt_object if not navitia.get_pt_object(json['id'], json['type']): raise exceptions.ObjectUnknown() pt_object = models.PTobject() mapper.fill_from_json(pt_object, json, mapper.object_mapping) if add_to_db: db.session.add(pt_object) all_objects[json["id"]] = pt_object return pt_object
def create_pt_object_from_json(json): pt_object = models.PTobject() mapper.fill_from_json(pt_object, json, mapper.object_mapping) if 'line_section' in json: pt_object.line_section = create_line_section_from_json( json['line_section']) elif 'name' in json: pt_object.name = json['name'] return pt_object
def test_disruption_with_rabbitmq_exception(): ''' Tests when a disruption fail to publish to rabbitmq :return: ''' disruption = models.Disruption() #contributor disruption.contributor = models.Contributor() disruption.contributor_id = disruption.contributor.id #cause disruption.cause = models.Cause() disruption.cause.wording = "CauseTest" disruption.cause.category = models.Category() disruption.cause.category.name = "CategoryTest" disruption.reference = "DisruptionTest" #localization localization = models.PTobject() localization.uri = "stop_area:123" localization.type = "stop_area" disruption.localizations.append(localization) # Wording wording = models.Wording() wording.key = "key_1" wording.value = "value_1" disruption.cause.wordings.append(wording) wording = models.Wording() wording.key = "key_2" wording.value = "value_2" disruption.cause.wordings.append(wording) # Tag tag = models.Tag() tag.name = "rer" disruption.tags.append(tag) disruption.status = 'published' chaos.publisher.publish = MagicMock(return_value=False) to_rabbitmq_not_sent = send_disruption_to_navitia(disruption) eq_(to_rabbitmq_not_sent, False)
def test_disruption_with_published_status_is_sent(): ''' Tests that a disruption with status published is sent to navitia :return: ''' disruption = models.Disruption() #contributor disruption.contributor = models.Contributor() disruption.contributor_id = disruption.contributor.id #cause disruption.cause = models.Cause() disruption.cause.wording = "CauseTest" disruption.cause.category = models.Category() disruption.cause.category.name = "CategoryTest" disruption.reference = "DisruptionTest" #localization localization = models.PTobject() localization.uri = "stop_area:123" localization.type = "stop_area" disruption.localizations.append(localization) # Wording wording = models.Wording() wording.key = "key_1" wording.value = "value_1" disruption.cause.wordings.append(wording) wording = models.Wording() wording.key = "key_2" wording.value = "value_2" disruption.cause.wordings.append(wording) # Tag tag = models.Tag() tag.name = "rer" disruption.tags.append(tag) disruption.status = 'published' has_been_sent = send_disruption_to_navitia(disruption) eq_(has_been_sent, None)
def fill_and_add_line_section(navitia, impact_id, all_objects, pt_object_json): """ :param impact_id: impact_id to construct uri of line_section object :param all_objects: dictionary of objects to be added in this session :param pt_object_json: Flux which contains json information of pt_object :return: pt_object and modify all_objects param """ ptobject = models.PTobject() mapper.fill_from_json(ptobject, pt_object_json, mapper.object_mapping) #Here we treat all the objects in line_section like line, start_point, end_point line_section_json = pt_object_json['line_section'] ptobject.uri = ":".join((line_section_json['line']['id'], ptobject.id)) line_section = models.LineSection(ptobject.id) try: line_object = fill_and_get_pt_object(navitia, all_objects, line_section_json['line']) except exceptions.ObjectUnknown: raise exceptions.ObjectUnknown('{} {} doesn\'t exist'.format( line_section_json['line']['type'], line_section_json['line']['id'])) line_section.line = line_object try: start_object = fill_and_get_pt_object(navitia, all_objects, line_section_json['start_point']) except exceptions.ObjectUnknown: raise exceptions.ObjectUnknown('{} {} doesn\'t exist'.format( line_section_json['line']['type'], line_section_json['line']['id'])) line_section.start_point = start_object try: end_object = fill_and_get_pt_object(navitia, all_objects, line_section_json['end_point']) except exceptions.ObjectUnknown: raise exceptions.ObjectUnknown('{} {} doesn\'t exist'.format( line_section_json['line']['type'], line_section_json['line']['id'])) line_section.end_point = end_object #Here we manage routes in line_section #"routes":[{"id":"route:MTD:9", "type": "route"}, {"id":"route:MTD:Nav23", "type": "route"}] if 'routes' in line_section_json: for route in line_section_json["routes"]: try: route_object = fill_and_get_pt_object(navitia, all_objects, route, True) line_section.routes.append(route_object) except exceptions.ObjectUnknown: raise exceptions.ObjectUnknown('{} {} doesn\'t exist'.format( route['type'], route['id'])) #Here we manage via in line_section #"via":[{"id":"stop_area:MTD:9", "type": "stop_area"}, {"id":"stop_area:MTD:Nav23", "type": "stop_area"}] if 'via' in line_section_json: for via in line_section_json["via"]: try: via_object = fill_and_get_pt_object(navitia, all_objects, via, True) line_section.via.append(via_object) except exceptions.ObjectUnknown: raise exceptions.ObjectUnknown('{} {} doesn\'t exist'.format( via['type'], via['id'])) #Fill sens from json if 'sens' in line_section_json: line_section.sens = line_section_json["sens"] #Fill wordings from json #"meta":[{"key":"direction", "value": "1234"}, {"key":"direction", "value": "5678"}] if 'metas' in line_section_json: try: metas = {} metas['wordings'] = line_section_json['metas'] manage_wordings(line_section, metas) except exceptions.InvalidJson: raise ptobject.insert_line_section(line_section) return ptobject
def generate_pt_object_from_json(json): pt_object = models.PTobject() mapper.fill_from_json(pt_object, json, mapper.object_mapping) pt_object.name = json['name'] return pt_object