def get_address(accident, streets): """ extracts the address of the main street. tries to build the full address: <street_name> <street_number>, <settlement>, but might return a partial one if unsuccessful. """ street = get_street( accident.get(field_names.yishuv_symbol), accident.get(field_names.street1), streets ) if not street: return "" # the house_number field is invalid if it's empty or if it contains 9999 house_number = ( int(accident.get(field_names.house_number)) if not pd.isnull(accident.get(field_names.house_number)) and int(accident.get(field_names.house_number)) != 9999 else None ) settlement = localization.get_city_name(accident.get(field_names.yishuv_symbol)) if not house_number and not settlement: return street if not house_number and settlement: return "{}, {}".format(street, settlement) if house_number and not settlement: return "{} {}".format(street, house_number) return "{} {}, {}".format(street, house_number, settlement)
def import_involved(involved, **kwargs): logging.info("Importing involved") involved_result = [] for _, involve in involved.iterrows(): if not involve.get(field_names.id) or pd.isnull( involve.get(field_names.id) ): # skip lines with no accident id continue involved_result.append( { "accident_id": int(involve.get(field_names.id)), "provider_and_id": int( str(int(involve.get(field_names.file_type))) + str(int(involve.get(field_names.id))) ), "provider_code": int(involve.get(field_names.file_type)), "file_type_police": get_data_value(involve.get(field_names.file_type_police)), "involved_type": int(involve.get(field_names.involved_type)), "license_acquiring_date": int(involve.get(field_names.license_acquiring_date)), "age_group": int(involve.get(field_names.age_group)), "sex": get_data_value(involve.get(field_names.sex)), "vehicle_type": get_data_value(involve.get(field_names.vehicle_type_involved)), "safety_measures": get_data_value(involve.get(field_names.safety_measures)), "involve_yishuv_symbol": get_data_value( involve.get(field_names.involve_yishuv_symbol) ), "involve_yishuv_name": localization.get_city_name( involve.get(field_names.involve_yishuv_symbol) ), "injury_severity": get_data_value(involve.get(field_names.injury_severity)), "injured_type": get_data_value(involve.get(field_names.injured_type)), "injured_position": get_data_value(involve.get(field_names.injured_position)), "population_type": get_data_value(involve.get(field_names.population_type)), "home_region": get_data_value(involve.get(field_names.home_region)), "home_district": get_data_value(involve.get(field_names.home_district)), "home_natural_area": get_data_value(involve.get(field_names.home_natural_area)), "home_municipal_status": get_data_value( involve.get(field_names.home_municipal_status) ), "home_yishuv_shape": get_data_value(involve.get(field_names.home_yishuv_shape)), "hospital_time": get_data_value(involve.get(field_names.hospital_time)), "medical_type": get_data_value(involve.get(field_names.medical_type)), "release_dest": get_data_value(involve.get(field_names.release_dest)), "safety_measures_use": get_data_value(involve.get(field_names.safety_measures_use)), "late_deceased": get_data_value(involve.get(field_names.late_deceased)), "car_id": get_data_value(involve.get(field_names.car_id)), "involve_id": get_data_value(involve.get(field_names.involve_id)), "accident_year": get_data_value(involve.get(field_names.accident_year)), "accident_month": get_data_value(involve.get(field_names.accident_month)), } ) db.session.bulk_insert_mappings(Involved, involved_result) db.session.commit() logging.info("Finished Importing involved") return len(involved_result)
def test_hebrew(self): self.assertEqual(get_city_name(RAMAT_GAN_CITY_CODE, "he"), "רמת גן")
def test_not_found(self): self.assertIsNone(get_city_name("NOT_AN_ACTUAL_CODE", "en"))
def test_english(self): self.assertEqual(get_city_name(RAMAT_GAN_CITY_CODE, "en"), "RAMAT GAN")
def create_marker(accident, streets, roads, non_urban_intersection): if field_names.x not in accident or field_names.y not in accident: raise ValueError("Missing x and y coordinates") if ( accident.get(field_names.x) and not math.isnan(accident.get(field_names.x)) and accident.get(field_names.y) and not math.isnan(accident.get(field_names.y)) ): lng, lat = coordinates_converter.convert( accident.get(field_names.x), accident.get(field_names.y) ) else: lng, lat = None, None # Must insert everything to avoid foreign key failure main_street, secondary_street = get_streets(accident, streets) km = accident.get(field_names.km) km = None if km is None or math.isnan(km) else str(km) km_accurate = None if km is not None: km_accurate = False if "-" in km else True km = float(km.strip("-")) accident_datetime = parse_date(accident) marker = { "id": int(accident.get(field_names.id)), "provider_and_id": int( str(int(accident.get(field_names.file_type))) + str(int(accident.get(field_names.id))) ), "provider_code": int(accident.get(field_names.file_type)), "file_type_police": get_data_value(accident.get(field_names.file_type_police)), "title": "Accident", "description": json.dumps(load_extra_data(accident, streets, roads)), "address": get_address(accident, streets), "latitude": lat, "longitude": lng, "accident_type": get_data_value(accident.get(field_names.accident_type)), "accident_severity": get_data_value(accident.get(field_names.accident_severity)), "created": accident_datetime, "location_accuracy": get_data_value(accident.get(field_names.location_accuracy)), "road_type": get_data_value(accident.get(field_names.road_type)), "road_shape": get_data_value(accident.get(field_names.road_shape)), "day_type": get_data_value(accident.get(field_names.day_type)), "police_unit": get_data_value(accident.get(field_names.police_unit)), "mainStreet": main_street, "secondaryStreet": secondary_street, "junction": get_junction(accident, roads), "one_lane": get_data_value(accident.get(field_names.one_lane)), "multi_lane": get_data_value(accident.get(field_names.multi_lane)), "speed_limit": get_data_value(accident.get(field_names.speed_limit)), "road_intactness": get_data_value(accident.get(field_names.road_intactness)), "road_width": get_data_value(accident.get(field_names.road_width)), "road_sign": get_data_value(accident.get(field_names.road_sign)), "road_light": get_data_value(accident.get(field_names.road_light)), "road_control": get_data_value(accident.get(field_names.road_control)), "weather": get_data_value(accident.get(field_names.weather)), "road_surface": get_data_value(accident.get(field_names.road_surface)), "road_object": get_data_value(accident.get(field_names.road_object)), "object_distance": get_data_value(accident.get(field_names.object_distance)), "didnt_cross": get_data_value(accident.get(field_names.didnt_cross)), "cross_mode": get_data_value(accident.get(field_names.cross_mode)), "cross_location": get_data_value(accident.get(field_names.cross_location)), "cross_direction": get_data_value(accident.get(field_names.cross_direction)), "road1": get_data_value(accident.get(field_names.road1)), "road2": get_data_value(accident.get(field_names.road2)), "km": km, "km_raw": get_data_value(accident.get(field_names.km)), "km_accurate": km_accurate, "yishuv_symbol": get_data_value(accident.get(field_names.yishuv_symbol)), "yishuv_name": localization.get_city_name(accident.get(field_names.yishuv_symbol)), "geo_area": get_data_value(accident.get(field_names.geo_area)), "day_night": get_data_value(accident.get(field_names.day_night)), "day_in_week": get_data_value(accident.get(field_names.day_in_week)), "traffic_light": get_data_value(accident.get(field_names.traffic_light)), "region": get_data_value(accident.get(field_names.region)), "district": get_data_value(accident.get(field_names.district)), "natural_area": get_data_value(accident.get(field_names.natural_area)), "municipal_status": get_data_value(accident.get(field_names.municipal_status)), "yishuv_shape": get_data_value(accident.get(field_names.yishuv_shape)), "street1": get_data_value(accident.get(field_names.street1)), "street1_hebrew": get_street( accident.get(field_names.yishuv_symbol), accident.get(field_names.street1), streets ), "street2": get_data_value(accident.get(field_names.street2)), "street2_hebrew": get_street( accident.get(field_names.yishuv_symbol), accident.get(field_names.street2), streets ), "house_number": get_data_value(accident.get(field_names.house_number)), "urban_intersection": get_data_value(accident.get(field_names.urban_intersection)), "non_urban_intersection": get_data_value(accident.get(field_names.non_urban_intersection)), "non_urban_intersection_hebrew": get_non_urban_intersection(accident, roads), "non_urban_intersection_by_junction_number": get_non_urban_intersection_by_junction_number( accident, non_urban_intersection ), "accident_year": get_data_value(accident.get(field_names.accident_year)), "accident_month": get_data_value(accident.get(field_names.accident_month)), "accident_day": get_data_value(accident.get(field_names.accident_day)), "accident_hour_raw": get_data_value(accident.get(field_names.accident_hour)), "accident_hour": accident_datetime.hour, "accident_minute": accident_datetime.minute, "x": accident.get(field_names.x), "y": accident.get(field_names.y), "vehicle_type_rsa": None, "violation_type_rsa": None, "geom": None, } return marker