def create_service_demarches(row, place: Place): print("in service: demarches") service_demarches = Service() service_demarches.place_id = place.id service_demarches.name = "Accompagnement aux démarches administratives en ligne" service_demarches.description = row["Type démarches"] service_demarches.support_access = utilities.process_support_access( row["Conditions accès démarches"] ) service_demarches.support_mode = utilities.process_support_mode( row["Accompagnement démarches"] ) service_demarches.is_free = utilities.process_price(row["Coût accès démarches"]) service_demarches.schedule_hours_raw = row["Horaires démarches"] service_demarches.schedule_hours_osm_format = utilities.process_opening_hours_to_osm_format( service_demarches.schedule_hours_raw ) service_demarches.additional_information = { "demarches_specifiques": row["Démarches spécifiques"], "frequence_demarches": row["Fréquence démarches"], } service_demarches.save() print( row["ID Exporter les données"], "-->", place.id, service_demarches.id, )
def create_service_mednum(row, place: Place): print("in service: mednum") service_mednum = Service() service_mednum.place_id = place.id service_mednum.name = "Acquisition de compétences numériques" service_mednum.description = row["Compétences médnum"] service_mednum.support_access = utilities.process_support_access( row["Conditions accès médnum"] ) service_mednum.support_mode = utilities.process_support_mode( row["Accompagnement médnum"] ) service_mednum.is_free = utilities.process_price(row["Coût accès démarches"]) service_mednum.price_details = row["Coût accès démarches"] service_mednum.schedule_hours_raw = row["Horaires médnum"] service_mednum.schedule_hours_osm_format = utilities.process_opening_hours_to_osm_format( service_mednum.schedule_hours_raw ) service_mednum.additional_information = { "support_access_raw": row["Conditions accès médnum"], "support_mode_raw": row["Accompagnement médnum"], "frequence_mednum": row["Fréquence médnum"], } service_mednum.save() print( row["ID Exporter les données"], "-->", place.id, service_mednum.id, )
def create_service_equipement(row, place: Place): print("in service: acces équipement") service_equipement = Service() service_equipement.place_id = place.id service_equipement.name = "Accès à un équipement informatique" service_equipement.description = row["Type équipement"] service_equipement.support_access = utilities.process_support_access( row["Conditions accès équipement"] ) service_equipement.is_free = utilities.process_price(row["Coût accès équipement"]) service_equipement.price_details = row["Coût accès équipement"] service_equipement.schedule_hours_raw = row["Horaires équipement"] service_equipement.schedule_hours_osm_format = utilities.process_opening_hours_to_osm_format( service_equipement.schedule_hours_raw ) service_equipement.additional_information = { "support_access_raw": row["Conditions accès équipement"], } service_equipement.save() print( row["ID Exporter les données"], "-->", place.id, service_equipement.id, )
def create_place(row, data_set): print("in place") place_dict = {} """ place_fields_set """ for elem in data_set.import_config.get("place_fields_set", []): if "type" in elem: if elem["type"] == "boolean": place_dict[elem["place_field"]] = bool(elem["value"] == "true") else: place_dict[elem["place_field"]] = elem["value"] """ place_fields_mapping_auto """ for elem in data_set.import_config.get("place_fields_mapping_auto", []): place_dict[elem["place_field"]] = row[elem["file_field"]] """ place_fields_mapping_boolean """ for elem in data_set.import_config.get("place_fields_mapping_boolean", []): place_dict[elem["place_field"]] = utilities.process_boolean( row[elem["file_field"]]) """ place_fields_mapping_process - type - status - legal_entity_type - target_audience_raw - support_access_raw - support_mode_raw - contact_phone_raw - price_details - labels_raw - address_raw - opening_hours_raw """ for elem in data_set.import_config.get("place_fields_mapping_process", []): if elem["place_field"] == "type": place_dict["type"] = utilities.process_type( row[elem["file_field"]]) if elem["place_field"] == "status": place_dict["status"] = utilities.process_status( row[elem["file_field"]]) if elem["place_field"] == "legal_entity_type": place_dict[ "legal_entity_type"] = utilities.process_legal_entity_type( row[elem["file_field"]]) if elem["place_field"] == "target_audience_raw": place_dict["target_audience_raw"] = row[elem["file_field"]] place_dict["target_audience"] = utilities.process_target_audience( place_dict["target_audience_raw"]) if elem["place_field"] == "support_access_raw": place_dict["support_access_raw"] = row[elem["file_field"]] place_dict["support_access"] = utilities.process_support_access( place_dict["support_access_raw"]) if elem["place_field"] == "support_mode_raw": place_dict["support_mode_raw"] = row[elem["file_field"]] place_dict["support_mode"] = utilities.process_support_mode( place_dict["support_mode_raw"]) if elem["place_field"] == "labels_raw": place_dict["labels_raw"] = row[elem["file_field"]] place_dict["labels"] = utilities.process_labels( place_dict["labels_raw"]) if elem["place_field"] == "contact_phone_raw": place_dict["contact_phone_raw"] = row[elem["file_field"]] place_dict["contact_phone"] = utilities.process_phone_number( place_dict["contact_phone_raw"]) if elem["place_field"] == "price_details": place_dict["price_details"] = row[elem["file_field"]] place_dict["is_free"] = utilities.process_price( place_dict["price_details"]) if elem["place_field"] == "address_raw": """ Different options: - "20 Avenue de Ségur 75007 Paris" - ["20 Avenue de Ségur", "75007", "Paris"] - [["20", "Avenue", "de Ségur"], "75007", "Paris"] - "" """ if type(elem["file_field"]) == list: address_temp = "" if type(elem["file_field"][0]) == list: address_temp = " ".join([ row[item].strip() for item in elem["file_field"][0] if item not in ["", "0", 0, False, None] ]) else: address_temp = row[elem["file_field"][0]] place_dict["address_raw"] = utilities.clean_address_raw_list( address=address_temp, postcode=row[elem["file_field"][1]], city=row[elem["file_field"][2]], ) else: place_dict["address_raw"] = row[elem["file_field"]] address_api_results_processed = utilities.process_address( place_dict["address_raw"]) if address_api_results_processed: place_dict[ "address_housenumber"] = address_api_results_processed[ "housenumber"] place_dict["address_street"] = address_api_results_processed[ "street"] place_dict["address_postcode"] = address_api_results_processed[ "postcode"] place_dict["address_citycode"] = address_api_results_processed[ "citycode"] place_dict["address_city"] = address_api_results_processed[ "city"] place_dict[ "address_departement_code"] = address_api_results_processed[ "departement_code"] place_dict[ "address_departement_name"] = address_api_results_processed[ "departement_name"] place_dict[ "address_region_name"] = address_api_results_processed[ "region_name"] place_dict["latitude"] = address_api_results_processed[ "latitude"] place_dict["longitude"] = address_api_results_processed[ "longitude"] if elem["place_field"] == "opening_hours_raw": """ Different options: - "du lundi au vendredi de 9h à 18h" - ["Lundi: 9h-18h", "Mardi: 9h-12h"] - "" """ if type(elem["file_field"]) == list: place_dict["opening_hours_raw"] = [ row[item] for item in elem["file_field"] ] else: place_dict["opening_hours_raw"] = row[elem["file_field"]] place_dict[ "opening_hours_osm_format"] = utilities.process_opening_hours_to_osm_format( place_dict["opening_hours_raw"]) """ additional_information """ place_dict["additional_information"] = {} for elem in data_set.import_config.get( "place_fields_mapping_additional_information", []): if type(elem) == dict: # elem["place_field"] place_dict["additional_information"][elem["file_field"]] = row[ elem["file_field"]] if type(elem) == str: place_dict["additional_information"][elem] = row[elem] place_dict["data_set_id"] = data_set.id print(place_dict) place = Place.objects.create(**place_dict) # print(row["ID"], "-->", place.id) print("-->", place.id) return place
def test_process_support_access_to_file(self): for support_access in self.support_access_list: self.assertEqual( utilities.process_support_access(support_access[0], destination="file"), support_access[2], )
def test_process_support_access(self): for support_access in self.support_access_list: self.assertEqual( utilities.process_support_access(support_access[0]), support_access[1], )
def create_place_output_dict(place_input_dict, data_set_import_config): """ Process each field from the data_set_import_config Fields adresse_brut & horaires_ouverture_brut have a special processing, because they update collateral fields """ place_output_dict = {} for champ in data_set_import_config: # champ example : {'modele': 'contact_telephone', 'fichier': 'telephone', 'commentaire': ''} if champ["modele"] not in place_output_dict: if re.match(f"^{DEFAULT_QUOTES_CUSTOM_VALUE}.*$", champ["fichier"]): place_output_dict[champ["modele"]] = champ["fichier"].split( DEFAULT_QUOTES_CUSTOM_VALUE)[1] else: if champ["modele"] == "type_lieu": if champ["fichier"]: place_output_dict[ champ["modele"]] = utilities.process_type( place_input_dict[champ["fichier"]], destination="file") elif champ["modele"] == "statut": if champ["fichier"]: place_output_dict[ champ["modele"]] = utilities.process_status( place_input_dict[champ["fichier"]], destination="file") elif champ["modele"] == "nature_juridique": if champ["fichier"]: place_output_dict[champ[ "modele"]] = utilities.process_legal_entity_type( place_input_dict[champ["fichier"]], destination="file") elif champ["modele"] == "adresse_brut": place_output_dict = process_place_address( place_output_dict, place_input_dict, champ["fichier"]) elif champ["modele"] == "en_ligne": input_field = (place_input_dict[champ["fichier"]] if champ["fichier"] else None) place_output_dict[ champ["modele"]] = utilities.process_is_online( input_field, destination="file") elif champ["modele"] == "contact_telephone": if champ["fichier"]: # place_output_dict["contact_phone_raw"] = place_input_dict[champ["fichier"]] place_output_dict[ champ["modele"]] = utilities.process_phone_number( place_input_dict[champ["fichier"]]) elif champ["modele"] == "horaires_ouverture_brut": place_output_dict = process_place_opening_hours( place_output_dict, place_input_dict, champ["fichier"]) elif champ["modele"] == "public_cible": if champ["fichier"]: # place_output_dict["target_audience_raw"] = place_input_dict[champ["fichier"]] place_output_dict[champ[ "modele"]] = utilities.process_target_audience( place_input_dict[champ["fichier"]], destination="file") elif champ["modele"] == "modalites_acces": if champ["fichier"]: # place_output_dict["support_access_raw"] = place_input_dict[champ["fichier"]] place_output_dict[champ[ "modele"]] = utilities.process_support_access( place_input_dict[champ["fichier"]], destination="file") elif champ["modele"] == "modalites_accompagnement": if champ["fichier"]: # place_output_dict["support_mode_raw"] = place_input_dict[champ["fichier"]] place_output_dict[ champ["modele"]] = utilities.process_support_mode( place_input_dict[champ["fichier"]], destination="file") elif champ["modele"] == "labels": if champ["fichier"]: # place_output_dict["labels_raw"] = place_input_dict[champ["fichier"]] place_output_dict[ champ["modele"]] = utilities.process_labels( place_input_dict[champ["fichier"]], destination="file") elif champ["modele"] == "services": if champ["fichier"]: # place_output_dict["services_raw"] = place_input_dict[champ["fichier"]] place_output_dict[ champ["modele"]] = utilities.process_services( place_input_dict[champ["fichier"]], destination="file") # elif champ["modele"] == "price_details": # place_output_dict["price_details"] = place_input_dict[champ["fichier"]] # place_output_dict["is_free"] = utilities.process_price(place_input_dict[champ["fichier"]]) # elif place_fields_mapping_boolean else: place_output_dict[champ["modele"]] = ( place_input_dict[champ["fichier"]] if champ["fichier"] else "") # TODO: to be removed, by updating the utilities # Some fields are set as arrays, we need to transform them back to strings for champ in place_output_dict: if type(place_output_dict[champ]) == list: place_output_dict[ champ] = DEFAULT_SEPARATEUR_CHAMPS_MULTIPLES.join( place_output_dict[champ]) return place_output_dict