diff --git a/src/person_name/contact_manager.py b/src/person_name/contact_manager.py index e197b73..c20a6db 100755 --- a/src/person_name/contact_manager.py +++ b/src/person_name/contact_manager.py @@ -1,4 +1,5 @@ import datetime +import math import random from pathlib import Path @@ -71,7 +72,7 @@ def write_new_contacts_to_excel(valid_contacts: list, file_name=str(datetime.dat row = 0 col = 0 # Create a workbook and add a worksheet. - workbook = xlsxwriter.Workbook('contact_list_{}.xlsx'.format(file_name)) + workbook = xlsxwriter.Workbook('contact_list_{}.xlsx'.format(file_name), {'nan_inf_to_errors': True}) header_data = ['name', 'phone', 'passport', 'email', 'store', 'serial', 'ip_country', 'ua', 'resident_card_number', 'source_from'] worksheet = workbook.add_worksheet() @@ -80,6 +81,27 @@ def write_new_contacts_to_excel(valid_contacts: list, file_name=str(datetime.dat for col_num, data in enumerate(header_data): worksheet.write(row, col_num, data, header_format) row = row + 1 + + def safe_write(row_num, col_num, value): + """Écrire une valeur en la rendant vide si elle est NaN ou INF""" + try: + # Vérifier si c'est une chaîne contenant nan ou inf (case insensitive) + if isinstance(value, str): + if value.lower() in ['nan', 'inf', '-inf'] or 'nan' in value.lower() or 'inf' in value.lower(): + worksheet.write(row_num, col_num, "") + else: + worksheet.write(row_num, col_num, value) + # Vérifier si c'est un nombre et si c'est NaN ou INF + elif isinstance(value, (int, float)): + if math.isnan(value) or math.isinf(value): + worksheet.write(row_num, col_num, "") + else: + worksheet.write(row_num, col_num, value) + else: + worksheet.write(row_num, col_num, value if value is not None else "") + except (TypeError, ValueError): + worksheet.write(row_num, col_num, "") + for info in valid_contacts: # Iterate over the data and write it out row by row. worksheet.write(row, col, "{} {}".format(info.last_name, info.first_name)) @@ -89,7 +111,7 @@ def write_new_contacts_to_excel(valid_contacts: list, file_name=str(datetime.dat worksheet.write(row, col + 4, info.store) worksheet.write(row, col + 5, info.serial) worksheet.write(row, col + 6, info.ip_country) - worksheet.write(row, col + 7, info.ua) + safe_write(row, col + 7, info.ua) worksheet.write(row, col + 8, info.resident_card_number) worksheet.write(row, col + 9, info.source_from) row += 1 @@ -97,7 +119,7 @@ def write_new_contacts_to_excel(valid_contacts: list, file_name=str(datetime.dat def generate_valid_contact_list_for_day(segment_number=1): - _collection_name = "2025-08-14" + _collection_name = "2026-03-26" _valid_contact_list = MONGO_STORE_MANAGER.get_all_successful_items_for_one_day(_collection_name) _all_contacts = MONGO_STORE_MANAGER.get_all_contacts_to_book() _contact_to_save = [] @@ -112,7 +134,8 @@ def generate_valid_contact_list_for_day(segment_number=1): _contact.passport = str(_true_contact.resident_card_number)[:9] _contact.first_name = _true_contact.first_name _contact.resident_card_number = str(_true_contact.resident_card_number)[:9] - if _true_contact.source_from is not None and len(_true_contact.source_from) > 0: + print("{}:{}".format(_true_contact.mail, _true_contact.source_from)) + if isinstance(_true_contact.source_from, str) and _true_contact.source_from is not None and len(_true_contact.source_from) > 0: print(_true_contact.source_from) _contact.source_from = _true_contact.source_from else: