Beispiel #1
0
def create_or_update_impact(disruption, json_impact, navitia, impact_id=None):
    if impact_id:
        # impact exist in database
        impact_bd = models.Impact.get(impact_id, disruption.contributor.id)
        impact_bd.upgrade_version()
    else:
        impact_bd = models.Impact()
        impact_bd.severity = models.Severity.get(json_impact['severity']['id'],
                                                 disruption.client.id)
    impact_bd.disruption_id = disruption.id
    if 'send_notifications' in json_impact:
        impact_bd.send_notifications = json_impact['send_notifications']

    db.session.add(impact_bd)
    #The ptobject is not added in the database before commit. If we have duplicate ptobject
    #in the json we have to handle it by using a dictionary. Each time we add a ptobject, we also
    #add it in the dictionary
    try:
        manage_pt_object_without_line_section(navitia, impact_bd.objects,
                                              'objects', json_impact)
    except exceptions.ObjectUnknown:
        raise
    all_objects = dict()
    if 'objects' in json_impact:
        for pt_object_json in json_impact['objects']:
            #For an pt_objects of the type 'line_section' we format uri : uri:impact_id
            # we insert this object in the table pt_object
            if pt_object_json["type"] == 'line_section':
                try:
                    ptobject = fill_and_add_line_section(
                        navitia, impact_bd.id, all_objects, pt_object_json)
                except exceptions.ObjectUnknown, exceptions.InvalidJson:
                    raise
                impact_bd.objects.append(ptobject)
Beispiel #2
0
def test_past_disruption_2_periods():
    '''
        application_period  2014-02-10  2014-03-10
        application_period  2014-03-12  2014-03-15
        current date                                2014-03-16
        disruption.status   past
    '''
    disruption = models.Disruption()
    disruption.start_publication_date = datetime(2014, 2, 10, 13, 5, 10)
    disruption.end_publication_date = datetime(2014, 3, 16, 13, 5, 10)

    impact = models.Impact()
    application_period = models.ApplicationPeriods()
    application_period.start_date = datetime(2014, 2, 10, 13, 5, 10)
    application_period.end_date = datetime(2014, 3, 10, 13, 5, 10)
    impact.application_periods.append(application_period)

    application_period = models.ApplicationPeriods()
    application_period.start_date = datetime(2014, 3, 12, 13, 5, 10)
    application_period.end_date = datetime(2014, 3, 15, 13, 5, 10)
    impact.application_periods.append(application_period)

    disruption.impacts.append(impact)
    impact.disruption = disruption
    with app.app_context():
        g.current_time = datetime(2014, 3, 16, 13, 5, 10)
        class_time = fields.ComputeDisruptionStatus(Obj())
        eq_(class_time.output(None, impact), 'past')
Beispiel #3
0
def create_or_update_impact(disruption, json_impact, navitia, impact_id=None):
    if impact_id:
        # impact exist in database
        impact_bd = models.Impact.get(impact_id, disruption.contributor.id)
        impact_bd.upgrade_version()
    else:
        impact_bd = models.Impact()
        impact_bd.severity = models.Severity.get(json_impact['severity']['id'],
                                                 disruption.client.id)
    impact_bd.disruption_id = disruption.id
    if 'send_notifications' in json_impact:
        impact_bd.send_notifications = json_impact['send_notifications']
    if 'notification_date' in json_impact:
        impact_bd.notification_date = json_impact['notification_date']

    db.session.add(impact_bd)
    # The ptobject is not added in the database before commit. If we have duplicate ptobject
    # in the json we have to handle it by using a dictionary. Each time we add a ptobject, we also
    # add it in the dictionary
    try:
        manage_pt_object_without_line_section(navitia, impact_bd.objects,
                                              'objects', json_impact)
    except exceptions.ObjectUnknown:
        raise
    all_objects = dict()
    if 'objects' in json_impact:
        for pt_object_json in json_impact['objects']:
            # For an pt_objects of the type 'line_section' we format uri : uri:impact_id
            # we insert this object in the table pt_object
            if pt_object_json["type"] == 'line_section':
                try:
                    ptobject = fill_and_add_line_section(
                        navitia, all_objects, pt_object_json)
                except exceptions.ObjectUnknown as xxx_todo_changeme:
                    exceptions.InvalidJson = xxx_todo_changeme
                    raise
                impact_bd.objects.append(ptobject)
    # Severity
    severity_json = json_impact['severity']
    if (not impact_bd.severity_id) or (
            impact_bd.severity_id and
        (severity_json['id'] != impact_bd.severity_id)):
        impact_bd.severity_id = severity_json['id']
        impact_bd.severity = models.Severity.get(impact_bd.severity_id,
                                                 disruption.client.id)

    # For each object application_period_patterns create and fill a pattern and time_slots
    manage_patterns(impact_bd, json_impact)
    # This method creates a list of application periods either from application_period_patterns
    # or from apllication_periods in the data json
    app_periods_by_pattern = get_application_periods(json_impact)
    manage_application_periods(impact_bd, app_periods_by_pattern)
    manage_message(impact_bd, json_impact, disruption.client.id)

    return impact_bd
Beispiel #4
0
def create_impact_from_json(json, disruption_id):
    impact = models.Impact()
    impact.id = json['id']
    impact.status = 'published'
    impact.disruption_id = disruption_id
    impact.updated_at = get_datetime_from_json_attr(json, 'updated_at')
    impact.created_at = get_datetime_from_json_attr(json, 'created_at')
    impact.send_notifications = json['send_notifications']
    impact.notification_date = get_datetime_from_json_attr(
        json, 'notification_date')

    severity = create_severity_from_json(json['severity'])

    impact.severity_id = severity.id
    impact.severity = severity

    impact.application_periods = create_application_periods_from_json(json)
    impact.patterns = create_application_period_patterns_from_json(json)
    impact.messages = create_messages_from_json(json)
    impact.objects = create_pt_objects_from_json(json)

    return impact
Beispiel #5
0
def test_name_impact():
    impact = models.Impact()
    eq_(str(impact), "<Impact '{}'>".format(impact.id))