From e411c01d5d4e0cfa019b318bdebefa7f7d066486 Mon Sep 17 00:00:00 2001 From: PAN Lei Date: Wed, 25 Sep 2024 22:49:20 +0200 Subject: [PATCH 1/7] add method to get old valid contact list --- src/person_name/contact_manager.py | 59 ++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 19 deletions(-) diff --git a/src/person_name/contact_manager.py b/src/person_name/contact_manager.py index 0089854..29d4eb3 100755 --- a/src/person_name/contact_manager.py +++ b/src/person_name/contact_manager.py @@ -11,7 +11,7 @@ from src.utils.excel_reader import read_contacts, fr_phone_number_prefix, get_ra def upload_contacts_list(): - _contacts_to_book = read_contacts("/Users/lpan/Desktop/contact_list_2024-06-17.xlsx") + _contacts_to_book = read_contacts("/Users/lpan/Desktop/contact_list_2024-09-25.xlsx") return _contacts_to_book @@ -138,28 +138,49 @@ def generate_all_contact_list(): write_new_contacts_to_excel(_all_contacts, file_name="all") +def get_old_validated_contact_list(): + _valid_contact_list = MONGO_STORE_MANAGER.get_all_successful_items_for_one_day("2024-09-10") + _all_contacts = MONGO_STORE_MANAGER.get_all_contacts_to_book() + _contact_to_save = [] + for _contact in _valid_contact_list: + # _contact.store = "faubourg" + _contact.store = "random" + if _contact.last_name is None or len(_contact.last_name) == 0: + for _true_contact in _all_contacts: + if _true_contact.mail == _contact.mail: + _contact.last_name = _true_contact.last_name + _contact.phone = _true_contact.phone + _contact.passport = _true_contact.passport + _contact.first_name = _true_contact.first_name + + if _contact.url_validated: + if _contact.last_name is not None and len(_contact.last_name) > 0: + _need_to_save = True + # remove the duplicated items + for _added_item in _contact_to_save: + if (_added_item.mail == _contact.mail + and _added_item.phone == _contact.phone + and _added_item.passport == _contact.passport + and _added_item.last_name == _contact.last_name + and _added_item.first_name == _contact.first_name): + _need_to_save = False + if _need_to_save: + _contact_to_save.append(_contact) + _contact_to_save_list = _contact_to_save + write_new_contacts_to_excel(_contact_to_save_list) + + # 把新的联系人存到网上 if __name__ == '__main__': - # contacts_to_book = upload_contacts_list() - # MONGO_STORE_MANAGER.upload_contact_list(contacts_to_book) + contacts_to_book = upload_contacts_list() + MONGO_STORE_MANAGER.upload_contact_list(contacts_to_book) # print("start at {}".format(datetime.datetime.now())) # generate_valid_contact_list_for_day(segment_number=2) - # generate_contact_from_mail_list("/Users/panlei/Downloads/邮箱及密码.xlsx") + # get_old_validated_contact_list() + # generate_contact_from_mail_list("/Users/lpan/Downloads/邮箱及密码.xlsx") # print("end at {}".format(datetime.datetime.now())) - generate_all_contact_list() + # generate_all_contact_list() # merge_contact_list_files( - # ["/Users/lpan/Desktop/contact_list_2024-05-07.xlsx", - # "/Users/lpan/Desktop/contact_list_2024-05-06.xlsx", - # "/Users/lpan/Desktop/contact_list_2024-05-04.xlsx", - # "/Users/lpan/Desktop/contact_list_2024-05-03.xlsx", - # "/Users/lpan/Desktop/contact_list_2024-05-02.xlsx", - # "/Users/lpan/Desktop/contact_list_2024-04-30.xlsx", - # "/Users/lpan/Desktop/contact_list_2024-04-26.xlsx", - # "/Users/lpan/Desktop/contact_list_2024-04-25.xlsx", - # "/Users/lpan/Desktop/contact_list_2024-04-24.xlsx", - # "/Users/lpan/Desktop/contact_list_2024-04-23.xlsx", - # "/Users/lpan/Desktop/contact_list_2024-04-22.xlsx", - # "/Users/lpan/Desktop/contact_list_2024-04-20.xlsx", - # "/Users/lpan/Desktop/contact_list_2024-04-18.xlsx", - # "/Users/lpan/Desktop/contact_list_2024-04-19.xlsx"]) + # ["/Users/lpan/Desktop/contact_list_2024-06-24.xlsx", + # "/Users/lpan/Desktop/contact_list_2024-06-25.xlsx"]) # fix_phone_number_format("/Users/lpan/Desktop/15_05_to_test.xlsx") From 1a1788c9d72734290a27583c8601ba76980e218a Mon Sep 17 00:00:00 2001 From: PAN Lei Date: Wed, 25 Sep 2024 22:49:51 +0200 Subject: [PATCH 2/7] add method to get old valid contact list --- src/utils/contacts/generate_ip_with_contact.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/utils/contacts/generate_ip_with_contact.py b/src/utils/contacts/generate_ip_with_contact.py index 8fd456d..78fb470 100644 --- a/src/utils/contacts/generate_ip_with_contact.py +++ b/src/utils/contacts/generate_ip_with_contact.py @@ -40,7 +40,7 @@ def write_contact_with_ip_info_to_file(contact_list): col = 0 # Create a workbook and add a worksheet. workbook = xlsxwriter.Workbook('ip_info_{}.xlsx'.format(len(contact_list))) - header_data = ['name', 'email', 'isp', 'ip_address', 'created_at'] + header_data = ['name', 'email', 'isp', 'ip_address', 'created_at', "passport"] worksheet = workbook.add_worksheet() header_format = workbook.add_format({'bold': True}) @@ -54,6 +54,7 @@ def write_contact_with_ip_info_to_file(contact_list): worksheet.write(row, col + 2, info.isp) worksheet.write(row, col + 3, info.ip_address) worksheet.write(row, col + 4, info.created_at) + worksheet.write(row, col + 5, info.passport) row += 1 workbook.close() From ee8269e5ccc3dea95c8c0c00cff35b7d7ea0b5b7 Mon Sep 17 00:00:00 2001 From: PAN Lei Date: Thu, 26 Sep 2024 22:02:57 +0200 Subject: [PATCH 3/7] add possibility to add to black list --- src/person_name/contact_manager.py | 21 +++++++++++++++++---- src/pojo/black_contact.py | 9 +++------ 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/person_name/contact_manager.py b/src/person_name/contact_manager.py index 8f1ea94..a735ac0 100755 --- a/src/person_name/contact_manager.py +++ b/src/person_name/contact_manager.py @@ -2,16 +2,16 @@ import datetime import random import xlsxwriter +from src.person_name.cython_extract_methods import filter_already_validated_contacts, read_pinyin_list_from_file from src.db.mongo_manager import MONGO_STORE_MANAGER -from src.person_name.cython_extract_methods import filter_already_validated_contacts, read_pinyin_list_from_file from src.pojo.contact_pojo import ContactPojo from src.utils.contacts.generate_random_passport_id import get_random_passport_id_number from src.utils.excel_reader import read_contacts, fr_phone_number_prefix, get_random_fr_phone_numbers, ExcelHelper def upload_contacts_list(): - _contacts_to_book = read_contacts("/Users/lpan/Desktop/contact_list_2024-09-16.xlsx") + _contacts_to_book = read_contacts("/Users/lpan/Desktop/contact_list_2024-09-24.xlsx") return _contacts_to_book @@ -138,15 +138,28 @@ def generate_all_contact_list(): write_new_contacts_to_excel(_all_contacts, file_name="all") +def write_to_black_list(contacts: list): + for contact in contacts: + MONGO_STORE_MANAGER.insert_blacklist_contact(contact) + + +def get_contact_list_not_received_mail(): + _contact_list = MONGO_STORE_MANAGER.get_all_successful_items_for_day() + for _contact in _contact_list: + if not _contact.url_validated: + write_to_black_list([_contact]) + + # 把新的联系人存到网上 if __name__ == '__main__': # contacts_to_book = upload_contacts_list() # MONGO_STORE_MANAGER.upload_contact_list(contacts_to_book) # print("start at {}".format(datetime.datetime.now())) - # generate_valid_contact_list_for_day(segment_number=2) + generate_valid_contact_list_for_day(segment_number=2) # generate_contact_from_mail_list("/Users/lpan/Downloads/邮箱及密码.xlsx") # print("end at {}".format(datetime.datetime.now())) - generate_all_contact_list() + # get_contact_list_not_received_mail() + # generate_all_contact_list() # merge_contact_list_files( # ["/Users/lpan/Desktop/contact_list_all_old_not_used_contact.xlsx", # "/Users/lpan/Desktop/contact_list_2024-06-26.xlsx"]) diff --git a/src/pojo/black_contact.py b/src/pojo/black_contact.py index 097f600..f028db8 100644 --- a/src/pojo/black_contact.py +++ b/src/pojo/black_contact.py @@ -9,9 +9,8 @@ class BlackContactPojo(ContactPojo): def __init__(self, phone_number: str, passport_number: str, last_name: str, first_name: str, mail: str, update_at_in_s: Union[float, None] = None, - ccid: str = "", - position: int = 0, ): - super().__init__(phone_number, passport_number, last_name, first_name, mail, ccid, position) + ): + super().__init__(phone_number, passport_number, last_name, first_name, mail, store="random") if update_at_in_s: self.update_at_in_s = update_at_in_s else: @@ -24,15 +23,13 @@ class BlackContactPojo(ContactPojo): @staticmethod def from_firestore_dict(source): - ccid = source['ccid'] phone = source['phone'] - position = source['position'] passport = source['passport'] email = source['mail'] last_name = source['last_name'] first_name = source['first_name'] update_at_in_s = source['update_at_in_s'] - result = BlackContactPojo(ccid=ccid, phone_number=phone, passport_number=passport, position=position, + result = BlackContactPojo(phone_number=phone, passport_number=passport, mail=email, update_at_in_s=update_at_in_s, last_name=last_name, first_name=first_name) return result From c190186d4610bb57b6f0ccb3ea5e72f0f3a4f438 Mon Sep 17 00:00:00 2001 From: PAN Lei Date: Thu, 26 Sep 2024 23:16:35 +0200 Subject: [PATCH 4/7] print subject of email --- src/mail/mail_confirmation.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mail/mail_confirmation.py b/src/mail/mail_confirmation.py index 9f0e15a..d016665 100755 --- a/src/mail/mail_confirmation.py +++ b/src/mail/mail_confirmation.py @@ -78,6 +78,7 @@ class MailConfirmationReader(): body = body + str(part.get_payload(decode=True).decode("utf-8")) elif part.get_content_type() == "text/plain": body = body + part.get_payload() + print("mail is {} and subject is {}".format(self.login, subject)) if CONFIRMATION_SUBJECT_FR in subject or CONFIRMATION_SUBJECT_EN in subject or "Votre_rendez-vous_est_confirm" in subject: mail = MailPojo(subject=subject, body=body, from_address=from_address) mail.isImapClient = True From 9b33360aaa36a53c42e89f9363b36d00da1707d4 Mon Sep 17 00:00:00 2001 From: PAN Lei Date: Fri, 27 Sep 2024 21:46:37 +0200 Subject: [PATCH 5/7] add possibility to add to black list --- src/person_name/contact_manager.py | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/person_name/contact_manager.py b/src/person_name/contact_manager.py index 38e55a0..032ce25 100755 --- a/src/person_name/contact_manager.py +++ b/src/person_name/contact_manager.py @@ -11,7 +11,7 @@ from src.utils.excel_reader import read_contacts, fr_phone_number_prefix, get_ra def upload_contacts_list(): - _contacts_to_book = read_contacts("/Users/lpan/Desktop/contact_list_2024-09-25.xlsx") + _contacts_to_book = read_contacts("/Users/lpan/Desktop/contact_list_2024-09-27_today.xlsx") return _contacts_to_book @@ -143,15 +143,16 @@ def write_to_black_list(contacts: list): MONGO_STORE_MANAGER.insert_blacklist_contact(contact) -def get_contact_list_not_received_mail(): +def update_contact_list_not_received_mail(): _contact_list = MONGO_STORE_MANAGER.get_all_successful_items_for_day() for _contact in _contact_list: if not _contact.url_validated: write_to_black_list([_contact]) -def get_old_validated_contact_list(remove_blacklisted_contact=True): - _valid_contact_list = MONGO_STORE_MANAGER.get_all_successful_items_for_one_day("2024-09-10") +def get_old_validated_contact_list(remove_blacklisted_contact=True, _day_in_str="2024-09-09"): + _valid_contact_list = MONGO_STORE_MANAGER.get_all_successful_items_for_one_day(_day_in_str) + _domain_list_to_remove = ["firemail.de", "onet.pl", "yahoo.com", "gmx.com"] _all_contacts = MONGO_STORE_MANAGER.get_all_contacts_to_book() _contact_to_save = [] for _contact in _valid_contact_list: @@ -177,23 +178,30 @@ def get_old_validated_contact_list(remove_blacklisted_contact=True): and _added_item.first_name == _contact.first_name): _need_to_save = False if _need_to_save: - _contact_to_save.append(_contact) + # remove the contact if domain is not in the list + if _contact.mail.split("@")[1] not in _domain_list_to_remove: + _contact_to_save.append(_contact) + # remove blacklisted contact if needed + if remove_blacklisted_contact: + _blacklisted_contact = MONGO_STORE_MANAGER.get_blacklist_contacts() + _list_without_blacklisted = [contact for contact in _contact_to_save if + contact.mail not in [bl.mail for bl in _blacklisted_contact]] + write_new_contacts_to_excel(_list_without_blacklisted, file_name=_day_in_str + "_without_blacklisted") _contact_to_save_list = _contact_to_save - write_new_contacts_to_excel(_contact_to_save_list) + write_new_contacts_to_excel(_contact_to_save_list, file_name=_day_in_str) # 把新的联系人存到网上 if __name__ == '__main__': - # contacts_to_book = upload_contacts_list() - # MONGO_STORE_MANAGER.upload_contact_list(contacts_to_book) + contacts_to_book = upload_contacts_list() + MONGO_STORE_MANAGER.upload_contact_list(contacts_to_book) # print("start at {}".format(datetime.datetime.now())) # generate_valid_contact_list_for_day(segment_number=2) # generate_contact_from_mail_list("/Users/lpan/Downloads/邮箱及密码.xlsx") # print("end at {}".format(datetime.datetime.now())) - # get_contact_list_not_received_mail() + # update_contact_list_not_received_mail() # generate_valid_contact_list_for_day(segment_number=2) - get_old_validated_contact_list() - # generate_contact_from_mail_list("/Users/lpan/Downloads/邮箱及密码.xlsx") + # get_old_validated_contact_list() # print("end at {}".format(datetime.datetime.now())) # generate_all_contact_list() # merge_contact_list_files( From d57ae44c864b5f41a9e4ec6700fce5ad5c1ca809 Mon Sep 17 00:00:00 2001 From: PAN Lei Date: Tue, 1 Oct 2024 23:20:13 +0200 Subject: [PATCH 6/7] support serial --- src/person_name/contact_manager.py | 29 ++++++++++++++++++----------- src/pojo/ReserveResultPojo.py | 4 ++++ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/person_name/contact_manager.py b/src/person_name/contact_manager.py index 032ce25..22506ec 100755 --- a/src/person_name/contact_manager.py +++ b/src/person_name/contact_manager.py @@ -9,9 +9,11 @@ from src.pojo.contact_pojo import ContactPojo from src.utils.contacts.generate_random_passport_id import get_random_passport_id_number from src.utils.excel_reader import read_contacts, fr_phone_number_prefix, get_random_fr_phone_numbers, ExcelHelper +DEFAULT_SERIAL = "47e7e36b" + def upload_contacts_list(): - _contacts_to_book = read_contacts("/Users/lpan/Desktop/contact_list_2024-09-27_today.xlsx") + _contacts_to_book = read_contacts("/Users/lpan/Desktop/contact_list_2024-09-28.xlsx") return _contacts_to_book @@ -61,7 +63,7 @@ def write_new_contacts_to_excel(valid_contacts: list, file_name=str(datetime.dat col = 0 # Create a workbook and add a worksheet. workbook = xlsxwriter.Workbook('contact_list_{}.xlsx'.format(file_name)) - header_data = ['name', 'phone', 'passport', 'email', 'store', 'ip_country', 'ua'] + header_data = ['name', 'phone', 'passport', 'email', 'store', 'serial', 'ip_country', 'ua'] worksheet = workbook.add_worksheet() header_format = workbook.add_format({'bold': True}) @@ -75,14 +77,16 @@ def write_new_contacts_to_excel(valid_contacts: list, file_name=str(datetime.dat worksheet.write(row, col + 2, info.passport) worksheet.write(row, col + 3, info.mail) worksheet.write(row, col + 4, info.store) - worksheet.write(row, col + 5, info.ip_country) - worksheet.write(row, col + 6, info.ua) + worksheet.write(row, col + 5, info.serial) + worksheet.write(row, col + 6, info.ip_country) + worksheet.write(row, col + 7, info.ua) row += 1 workbook.close() def generate_valid_contact_list_for_day(segment_number=1): - _valid_contact_list = MONGO_STORE_MANAGER.get_all_successful_items_for_day() + _collection_name = "2024-09-23" + _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 = [] for _contact in _valid_contact_list: @@ -96,6 +100,8 @@ def generate_valid_contact_list_for_day(segment_number=1): _contact.passport = _true_contact.passport _contact.first_name = _true_contact.first_name + if len(_contact.serial) == 0: + _contact.serial = DEFAULT_SERIAL if _contact.url_validated: if _contact.last_name is not None and len(_contact.last_name) > 0: _need_to_save = True @@ -107,14 +113,15 @@ def generate_valid_contact_list_for_day(segment_number=1): and _added_item.last_name == _contact.last_name and _added_item.first_name == _contact.first_name): _need_to_save = False + if _need_to_save: _contact_to_save.append(_contact) _contact_to_save_list = _contact_to_save - write_new_contacts_to_excel(_contact_to_save_list) + write_new_contacts_to_excel(_contact_to_save_list, file_name=_collection_name) for i in range(0, segment_number): _step = int(len(_contact_to_save_list) / segment_number) _sublist = _contact_to_save_list[i * _step:_step * (i + 1)] - _file_name = str(datetime.date.today()) + "_" + str(i + 1) + _file_name = _collection_name + "_" + str(i + 1) write_new_contacts_to_excel(_sublist, file_name=_file_name) @@ -150,7 +157,7 @@ def update_contact_list_not_received_mail(): write_to_black_list([_contact]) -def get_old_validated_contact_list(remove_blacklisted_contact=True, _day_in_str="2024-09-09"): +def get_old_validated_contact_list(remove_blacklisted_contact=True, _day_in_str="2024-09-06"): _valid_contact_list = MONGO_STORE_MANAGER.get_all_successful_items_for_one_day(_day_in_str) _domain_list_to_remove = ["firemail.de", "onet.pl", "yahoo.com", "gmx.com"] _all_contacts = MONGO_STORE_MANAGER.get_all_contacts_to_book() @@ -193,10 +200,10 @@ def get_old_validated_contact_list(remove_blacklisted_contact=True, _day_in_str= # 把新的联系人存到网上 if __name__ == '__main__': - contacts_to_book = upload_contacts_list() - MONGO_STORE_MANAGER.upload_contact_list(contacts_to_book) + # contacts_to_book = upload_contacts_list() + # MONGO_STORE_MANAGER.upload_contact_list(contacts_to_book) # print("start at {}".format(datetime.datetime.now())) - # generate_valid_contact_list_for_day(segment_number=2) + generate_valid_contact_list_for_day(segment_number=2) # generate_contact_from_mail_list("/Users/lpan/Downloads/邮箱及密码.xlsx") # print("end at {}".format(datetime.datetime.now())) # update_contact_list_not_received_mail() diff --git a/src/pojo/ReserveResultPojo.py b/src/pojo/ReserveResultPojo.py index ba86c50..602f7bc 100644 --- a/src/pojo/ReserveResultPojo.py +++ b/src/pojo/ReserveResultPojo.py @@ -39,6 +39,7 @@ class ReserveResultPojo: validated_at = None ip_address = None ua = "" + serial = "" def __hash__(self): return hash("{}".format(self.mail)) @@ -102,6 +103,9 @@ class ReserveResultPojo: if 'accepted' in source: accepted = source['accepted'] result.accepted = accepted + if 'serial' in source: + serial = source['serial'] + result.serial = serial if 'message' in source: message = source['message'] result.message = message From 278b5b6a0e0cb982942adca1da0a3f83df89a280 Mon Sep 17 00:00:00 2001 From: panlei Date: Thu, 3 Oct 2024 23:42:33 +0200 Subject: [PATCH 7/7] support mobile serial --- src/person_name/contact_manager.py | 9 +++++---- src/pojo/contact_pojo.py | 7 ++++++- src/utils/excel_reader.py | 3 +++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/person_name/contact_manager.py b/src/person_name/contact_manager.py index 22506ec..31029be 100755 --- a/src/person_name/contact_manager.py +++ b/src/person_name/contact_manager.py @@ -1,8 +1,9 @@ import datetime import random +from pathlib import Path import xlsxwriter -from src.person_name.cython_extract_methods import filter_already_validated_contacts, read_pinyin_list_from_file +# from src.person_name.cython_extract_methods import filter_already_validated_contacts, read_pinyin_list_from_file from src.db.mongo_manager import MONGO_STORE_MANAGER from src.pojo.contact_pojo import ContactPojo @@ -13,7 +14,7 @@ DEFAULT_SERIAL = "47e7e36b" def upload_contacts_list(): - _contacts_to_book = read_contacts("/Users/lpan/Desktop/contact_list_2024-09-28.xlsx") + _contacts_to_book = read_contacts(str(Path.home()) + "/Desktop/contact_list_2024-10-03.xlsx") return _contacts_to_book @@ -203,14 +204,14 @@ if __name__ == '__main__': # contacts_to_book = upload_contacts_list() # MONGO_STORE_MANAGER.upload_contact_list(contacts_to_book) # print("start at {}".format(datetime.datetime.now())) - generate_valid_contact_list_for_day(segment_number=2) + # generate_valid_contact_list_for_day(segment_number=2) # generate_contact_from_mail_list("/Users/lpan/Downloads/邮箱及密码.xlsx") # print("end at {}".format(datetime.datetime.now())) # update_contact_list_not_received_mail() # generate_valid_contact_list_for_day(segment_number=2) # get_old_validated_contact_list() # print("end at {}".format(datetime.datetime.now())) - # generate_all_contact_list() + generate_all_contact_list() # merge_contact_list_files( # ["/Users/lpan/Desktop/contact_list_all_old_not_used_contact.xlsx", # "/Users/lpan/Desktop/contact_list_2024-06-26.xlsx"]) diff --git a/src/pojo/contact_pojo.py b/src/pojo/contact_pojo.py index b66a114..e46a4f6 100644 --- a/src/pojo/contact_pojo.py +++ b/src/pojo/contact_pojo.py @@ -15,6 +15,7 @@ class ContactPojo: ip_address: str isp: str = None ua: str = "" + serial: str = "" def __repr__(self): return "phone:{}, passport:{}, last_name:{}, first_name:{}, mail:{}, store:{}, ip_country:{},isp:{}".format( @@ -45,7 +46,8 @@ class ContactPojo: u'mail': self.mail, u'store': self.store, u'ip_country': self.ip_country, - u'ua': self.ua + u'ua': self.ua, + u'serial': self.serial } return dest @@ -74,5 +76,8 @@ class ContactPojo: result = ContactPojo(phone_number=phone, passport_number=passport, mail=email, last_name=last_name, first_name=first_name, store=store) result.ip_country = ip_country + if source.get('serial'): + serial = source['serial'] + result.serial = serial result.ua = ua return result diff --git a/src/utils/excel_reader.py b/src/utils/excel_reader.py index 9c784e8..b249193 100755 --- a/src/utils/excel_reader.py +++ b/src/utils/excel_reader.py @@ -58,6 +58,9 @@ def read_contacts(file_name) -> list: first_name=first_name, passport_number=contact_dict['passport'], mail=contact_dict['email'], store=store) + if contact_dict.get('serial') is not None: + serial = contact_dict['serial'] + contact.serial = serial contact.ip_country = ip_country contact.ua = ua contact_list.append(contact)