Skip to content

Commit bac4582

Browse files
committed
feat: use standard logging
1 parent 1cead06 commit bac4582

File tree

8 files changed

+385
-392
lines changed

8 files changed

+385
-392
lines changed

fritzbox/CSV.py

+13-12
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#
1818

1919
import csv
20+
import logging
2021

2122
# fritzbox
2223
import fritzbox.phonebook
@@ -50,18 +51,18 @@ def __iter__(self):
5051
return self
5152

5253

53-
def find_delimiter(filname, debug=False):
54+
def find_delimiter(filname, logger: logging.Logger):
5455
with open(filname, 'r') as f:
5556
line = f.readline()
5657
semi_cnt = line.count(";")
5758
comma_cnt = line.count(",")
5859
delimiter = ","
5960
if semi_cnt > comma_cnt: delimiter = ";"
60-
if debug: print("Correct delimiter is '%s'" % delimiter)
61+
logger.debug("Correct delimiter is '%s'" % delimiter)
6162
return delimiter
6263

6364

64-
def find_encoding(filname, delimiter, debug=False):
65+
def find_encoding(filname, delimiter, logger: logging.Logger):
6566
all_encoding = [
6667
"utf-8", "iso-8859-1", "iso-8859-2", "iso-8859-15",
6768
"iso-8859-3", "us-ascii", "windows-1250", "windows-1252",
@@ -71,7 +72,7 @@ def find_encoding(filname, delimiter, debug=False):
7172
csv_reader = None
7273
while csv_reader == None:
7374
next_encoding = all_encoding[encoding_index]
74-
if debug: print("Trying %s" % (next_encoding))
75+
logger.debug("Trying %s" % (next_encoding))
7576
csv_file = open(filname, "rt")
7677
csv_reader = FindEncodingDictReader(csv_file, delimiter=delimiter, encoding=next_encoding)
7778
try:
@@ -82,7 +83,7 @@ def find_encoding(filname, delimiter, debug=False):
8283
csv_reader = None
8384
encoding_index = encoding_index + 1
8485

85-
if debug: print("Correct encoding is %s" % next_encoding)
86+
logger.debug("Correct encoding is %s" % next_encoding)
8687
csv_file.close()
8788
return next_encoding
8889

@@ -113,15 +114,15 @@ def getEntityPerson(fields):
113114
return fritzbox.phonebook.Person(givenName, familyName)
114115

115116

116-
def parse_csv(filename, delimiter, encoding, debug=False):
117+
def parse_csv(filename, delimiter, encoding, logger: logging.Logger):
117118
csv_file = open(filename, "rt")
118119
csv_reader = FindEncodingDictReader(csv_file, delimiter=delimiter, encoding=encoding)
119120

120121
phoneBook = fritzbox.phonebook.Phonebook()
121122
for (line, fields) in enumerate(csv_reader):
122-
#if debug: print(fields)
123+
#logger.debug(fields)
123124
person = getEntityPerson(fields)
124-
#if debug: print(person)
125+
#logger.debug(person)
125126

126127
# phone number: CardDav to Fritz!Box
127128
map_number_names = {
@@ -175,10 +176,10 @@ def parse_csv(filename, delimiter, encoding, debug=False):
175176

176177

177178
class Import(object):
178-
def get_books(self, filename, vipGroups, debug=False):
179-
delimiter = find_delimiter(filename, debug=debug)
180-
encoding = find_encoding(filename, delimiter, debug=debug)
181-
book = parse_csv(filename, delimiter, encoding, debug=debug)
179+
def get_books(self, filename, vipGroups, logger: logging.Logger=logging.getLogger()):
180+
delimiter = find_delimiter(filename, logger)
181+
encoding = find_encoding(filename, delimiter, logger)
182+
book = parse_csv(filename, delimiter, encoding, logger)
182183
books = fritzbox.phonebook.Phonebooks()
183184
books.addPhonebook(book)
184185
return books

fritzbox/CardDAV.py

+15-15
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
1717
#
1818

19+
import logging
1920
import requests
2021
import urllib.parse
2122
import xml.etree.ElementTree as ET
@@ -34,19 +35,19 @@ def _raise_for_status_code(self, resp):
3435
raise requests.exceptions.HTTPError(msg)
3536

3637

37-
def _get_xml(self, session, url_dav, settings, debug=False):
38+
def _get_xml(self, session, url_dav, settings, logger: logging.Logger):
3839
response = session.request('PROPFIND', url_dav, headers=[], **settings)
3940
self._raise_for_status_code(response)
40-
#if debug: print("Response: %s" % response.content)
41+
#logger.debug("Response: %s" % response.content)
4142
if response.headers['DAV'].count('addressbook') == 0:
4243
raise Exception("URL is not a CardDAV resource")
4344
return response.content
4445

4546

46-
def _process_xml(self, xml, debug=False):
47+
def _process_xml(self, xml, logger: logging.Logger):
4748
namespace = "{DAV:}"
4849
root = ET.XML(xml)
49-
#if debug: print("root: %s" % ET.tostring(root, "utf-8"))
50+
#logger.debug("root: %s" % ET.tostring(root, "utf-8"))
5051
hrefs = dict()
5152
for response in root:
5253
if response.tag != namespace + "response":
@@ -72,18 +73,18 @@ def _process_xml(self, xml, debug=False):
7273
return hrefs
7374

7475

75-
def _get_vcard(self, session, url_vcard, settings, debug=False):
76-
if debug: print("_get_vcard(%s)" % url_vcard)
76+
def _get_vcard(self, session, url_vcard, settings, logger: logging.Logger):
77+
logger.debug("_get_vcard(%s)" % url_vcard)
7778
response = session.get(url_vcard, headers=[], **settings)
7879
self._raise_for_status_code(response)
79-
#if debug: print("Response: %s" % response.content)
80+
#logger.debug("Response: %s" % response.content)
8081
ret = vobject.readOne(response.content.decode())
8182
return ret
8283

8384

8485
def get_books(self, url, username, password, vipGroups, picture_path,
85-
conn_auth="basic", conn_verify=True, debug=False):
86-
if debug: print("get_books(%s)" % url)
86+
conn_auth="basic", conn_verify=True, logger: logging.Logger=logging.getLogger()):
87+
logger.debug("get_books(%s)" % url)
8788

8889
# url base
8990
url_split = urllib.parse.urlparse(url)
@@ -95,18 +96,17 @@ def get_books(self, url, username, password, vipGroups, picture_path,
9596
settings["auth"] = (username, password)
9697
elif conn_auth == "digest":
9798
from requests.auth import HTTPDigestAuth
98-
settings["auth"] = HTTPDigestAuth(user, passwd)
99+
settings["auth"] = HTTPDigestAuth(username, password)
99100

100101
session = requests.session()
101-
xml = self._get_xml(session, url, settings, debug)
102-
hrefs = self._process_xml(xml, debug)
102+
xml = self._get_xml(session, url, settings, logger)
103+
hrefs = self._process_xml(xml, logger)
103104

104105
# convert into vcard objects
105106
cards = []
106107
for href in hrefs.keys():
107-
cards.append(self._get_vcard(session, url_base + href, settings, debug))
108+
cards.append(self._get_vcard(session, url_base + href, settings, logger))
108109

109110
vcf = fritzbox.VCF.Import()
110-
books = vcf.get_books_by_cards(cards, vipGroups, picture_path, debug=debug)
111+
books = vcf.get_books_by_cards(cards, vipGroups, picture_path, logger)
111112
return books
112-

fritzbox/LDIF.py

+12-12
Original file line numberDiff line numberDiff line change
@@ -16,45 +16,45 @@
1616
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
1717
#
1818

19+
import logging
1920
from ldif import LDIFParser
2021

2122
# fritzbox
2223
import fritzbox.phonebook
2324

2425

2526
class ParseGroups(LDIFParser):
26-
def __init__(self, infile, vipGroupArray, debug=False):
27+
def __init__(self, infile, vipGroupArray, logger: logging.Logger):
2728
LDIFParser.__init__(self, infile)
2829
self.vipGroupDict = {}
2930
for g in vipGroupArray:
3031
self.vipGroupDict[g] = []
31-
self._debug = debug
32+
self._logger = logger
3233

3334
def _handle(self, dn, entry):
34-
#debug(entry)
35+
#self._logger.debug(entry)
3536
cn = self._get_value(entry, "cn")
3637
oc = entry["objectclass"]
3738
if cn and len(oc) == 2 and oc[0] == "top" and oc[1] == "groupOfNames":
38-
#debug(cn)
39+
#self._logger.debug(cn)
3940
if cn in self.vipGroupDict:
4041
for m in entry["member"]:
41-
#debug(m)
42+
#self._logger.debug(m)
4243
self.vipGroupDict[cn].append(m)
4344

4445
def _get_value(self, entry, name):
4546
return entry[name][0] if name in entry else None
4647

4748

4849
class ParsePersons(LDIFParser):
49-
def __init__(self, infile, vipGroupDict, debug=False):
50+
def __init__(self, infile, vipGroupDict, logger: logging.Logger):
5051
LDIFParser.__init__(self, infile)
5152
self.phoneBook = fritzbox.phonebook.Phonebook()
5253
self._vipGroupDict = vipGroupDict
53-
self._debug = debug
54+
self._logger = logger
5455

5556
def handle(self, dn, entry):
56-
if self._debug:
57-
print("entry: %s" % entry)
57+
self._logger.debug("entry: %s" % entry)
5858
cn = self._get_value(entry, "cn")
5959

6060
category = self._get_category(entry, cn)
@@ -120,14 +120,14 @@ def _get_services(self, entry):
120120

121121

122122
class Import(object):
123-
def get_books(self, filename, vipGroupArray, debug=False):
123+
def get_books(self, filename, vipGroupArray, logger: logging.Logger=logging.getLogger()):
124124
# parse groups
125-
parser = ParseGroups(open(filename, "rb"), vipGroupArray, debug=debug)
125+
parser = ParseGroups(open(filename, "rb"), vipGroupArray, logger)
126126
parser.parse()
127127
vipGroupDict = parser.vipGroupDict
128128

129129
# parse persons
130-
parser = ParsePersons(open(filename, "rb"), vipGroupDict, debug)
130+
parser = ParsePersons(open(filename, "rb"), vipGroupDict, logger)
131131
parser.parse()
132132
phoneBook = parser.phoneBook
133133

fritzbox/VCF.py

+13-12
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import re
2323
import codecs
2424
import vobject
25+
import logging
2526

2627
from PIL import Image
2728
from PIL import ImageOps
@@ -31,16 +32,16 @@
3132

3233

3334
class Import(object):
34-
def get_books(self, filename, vipGroups, picture_path, debug=False):
35+
def get_books(self, filename, vipGroups, picture_path, logger: logging.Logger=logging.getLogger()):
3536
cards = []
3637
with codecs.open(filename, "r", "utf-8") as infile:
3738
data = infile.read()
3839
for card in vobject.readComponents(data):
3940
cards.append(card)
40-
return self.get_books_by_cards(cards, vipGroups, picture_path, debug)
41+
return self.get_books_by_cards(cards, vipGroups, picture_path, logger)
4142

4243

43-
def get_books_by_cards(self, cards, vipGroups, picture_path, debug=False):
44+
def get_books_by_cards(self, cards, vipGroups, picture_path, logger: logging.Logger):
4445
# phone number: CardDav to Fritz!Box
4546
map_number_types = {
4647
"work": "work",
@@ -63,7 +64,7 @@ def get_books_by_cards(self, cards, vipGroups, picture_path, debug=False):
6364

6465
book = fritzbox.phonebook.Phonebook()
6566
for card in cards: # card: vobject.base.Component
66-
#print (card)
67+
#logger.debug(card)
6768

6869
# name
6970
givenName = ""
@@ -79,8 +80,8 @@ def get_books_by_cards(self, cards, vipGroups, picture_path, debug=False):
7980
familyName = tmp_split[1]
8081
else:
8182
givenName = tmp
82-
print("Warning: N field missing, using FN field instead: '%s'" % givenName)
83-
#print("Name: %s %s" % (givenName, familyName))
83+
logger.warn("N field missing, using FN field instead: '%s'" % givenName)
84+
#logger.debug("Name: %s %s" % (givenName, familyName))
8485

8586
# category
8687
category = 0
@@ -99,7 +100,7 @@ def get_books_by_cards(self, cards, vipGroups, picture_path, debug=False):
99100
params_types = child.params.get("TYPE", [])
100101
itype = self._get_params_type(params_types, map_number_types)
101102
if itype is None:
102-
print("Warning: Phone number missing/unsupported TYPE, using 'home' instead (%s %s, %s)" % (givenName, familyName, params_types))
103+
logger.warn("Phone number missing/unsupported TYPE, using 'home' instead (%s %s, %s)" % (givenName, familyName, params_types))
103104
itype = "home"
104105

105106
ntype = map_number_types[itype]
@@ -116,7 +117,7 @@ def get_books_by_cards(self, cards, vipGroups, picture_path, debug=False):
116117
params_types = child.params.get("TYPE", [])
117118
itype = self._get_params_type(params_types, map_email_types)
118119
if itype is None:
119-
print("Warning: Email missing/unsupported TYPE, using 'home' instead (%s %s, %s)" % (givenName, familyName, params_types))
120+
logger.warn("Email missing/unsupported TYPE, using 'home' instead (%s %s, %s)" % (givenName, familyName, params_types))
120121
itype = "home"
121122

122123
etype = map_email_types[itype]
@@ -130,10 +131,10 @@ def get_books_by_cards(self, cards, vipGroups, picture_path, debug=False):
130131
params_types = card.photo.params.get("TYPE", [])
131132
itype = self._get_params_type(params_types, map_image_types)
132133
if itype is None:
133-
print("Error: Not supported photo type (%s %s): '%s'" % (givenName, familyName, params_types))
134+
logger.error("Not supported photo type (%s %s): '%s'" % (givenName, familyName, params_types))
134135
continue
135136
if card.photo.encoding_param.lower() != "b":
136-
print("Error: Unknown photo encoding (%s %s): '%s'" % (givenName, familyName, card.photo.encoding_param.lower()))
137+
logger.error("Unknown photo encoding (%s %s): '%s'" % (givenName, familyName, card.photo.encoding_param.lower()))
137138
continue
138139

139140
if not os.path.exists(picture_path):
@@ -161,10 +162,10 @@ def get_books_by_cards(self, cards, vipGroups, picture_path, debug=False):
161162
max_size = (128, 128)
162163
width, height = img.size
163164
if width != height:
164-
print("Warning: Photo not square (%s %s %s): make it square with %s" % (givenName, familyName, img.size, max_size))
165+
logger.warn("Photo not square (%s %s %s): make it square with %s" % (givenName, familyName, img.size, max_size))
165166
img = ImageOps.fit(img, max_size, Image.BICUBIC)
166167
elif img.size > max_size:
167-
print("Warning: Photo too big (%s %s %s): resize to %s" % (givenName, familyName, img.size, max_size))
168+
logger.warn("Photo too big (%s %s %s): resize to %s" % (givenName, familyName, img.size, max_size))
168169
img = img.resize(max_size, Image.BICUBIC)
169170

170171
# remove alpha channel if there

fritzbox/phonebook.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ def calculateMainNumber(self):
9494
found = True
9595
break
9696
if found: break
97-
97+
9898
def getXML(self):
9999
xml = ET.Element("telephony")
100100
for ntype in self.numberDict:

requirements.txt

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
beautifulsoup4==4.12.2
22
fritzconnection==1.13.2
33
lxml==5.0.0
4+
pillow==10.2.0
5+
python-ldap==3.4.4
46
requests==2.31.0
7+
vobject==0.9.6.1
58

0 commit comments

Comments
 (0)