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)
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')
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
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
def test_name_impact(): impact = models.Impact() eq_(str(impact), "<Impact '{}'>".format(impact.id))