コード例 #1
0
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
コード例 #2
0
ファイル: history.py プロジェクト: azime/Chaos-1
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
コード例 #3
0
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)
コード例 #4
0
ファイル: disruption_test.py プロジェクト: kinnou02/Chaos-1
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)
コード例 #5
0
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
コード例 #6
0
ファイル: history.py プロジェクト: azime/Chaos-1
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