From 6da04d882ce5b0e32783ff76442e0d58b2251b1a Mon Sep 17 00:00:00 2001 From: Sam Kleiner Date: Mon, 29 Jul 2024 20:54:05 -0400 Subject: [PATCH] add entity address parser --- whoisit/parser.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/whoisit/parser.py b/whoisit/parser.py index 5b40b61..5e4cc11 100644 --- a/whoisit/parser.py +++ b/whoisit/parser.py @@ -25,10 +25,31 @@ def clean(s): return s.strip() +def clean_address(a): + if a is None: + a = '' + if isinstance(a, list): + a = ' '.join(a) + if not isinstance(a, str): + a = str(a) + return a.strip() + + class VCardArrayDataDict(TypedDict, total=False): name: str email: str tel: str + address: list[str] + + +class VCardArrayAddressDataDict(TypedDict, total=False): + po_box: str + ext_address: str + street_address: str + locality: str + region: str + postal_code: str + country: str class Parser: @@ -95,6 +116,16 @@ def parse_vcard_array(self, vcard) -> Optional[VCardArrayDataDict]: v_card_array_data_dict["email"] = clean(entry_label) elif entry_field == 'tel': v_card_array_data_dict["tel"] = clean(entry_label) + elif entry_field == 'adr' and isinstance(entry_label, list) and len(entry_label) == 7: + v_card_array_data_dict['address'] = VCardArrayAddressDataDict( + po_box= clean_address(entry_label[0]), + ext_address= clean_address(entry_label[1]), + street_address= clean_address(entry_label[2]), + locality= clean_address(entry_label[3]), + region= clean_address(entry_label[4]), + postal_code= clean_address(entry_label[5]), + country= clean_address(entry_label[6]) + ) return v_card_array_data_dict or None