Fix some more pylint issues.

This commit is contained in:
Andrew Ferrier 2015-06-22 19:19:01 +01:00
parent 739fc17d01
commit c344f205e8
2 changed files with 41 additions and 27 deletions

View file

@ -38,7 +38,7 @@ unittest_verbose:
analysis:
# Debian version is badly packaged, make sure we are using Python 3.
/usr/bin/env python3 $(FLAKE8) --max-line-length=132 --max-complexity 10 .
pylint --report=n --disable=line-too-long --disable=missing-docstring email2pdf
pylint --report=n --disable=line-too-long --disable=missing-docstring --disable=locally-disabled email2pdf
coverage:
rm -rf cover/

View file

@ -1,11 +1,12 @@
#!/usr/bin/env python3
from PyPDF2 import PdfFileReader, PdfFileWriter
from PyPDF2.generic import NameObject, createStringObject
from bs4 import BeautifulSoup
from datetime import datetime
from email.header import decode_header
from itertools import chain
from PyPDF2.generic import NameObject, createStringObject
from PyPDF2 import PdfFileReader, PdfFileWriter
from requests.exceptions import RequestException
from subprocess import Popen, PIPE
from sys import platform as _platform
import argparse
@ -29,6 +30,8 @@ HEADER_MAPPING = {'Author': 'From',
'Title': 'Subject',
'X-email2pdf-To': 'To'}
FORMATTED_HEADERS_TO_INCLUDE = frozenset(['Subject', 'From', 'To', 'Date'])
MIME_TYPES_BLACKLIST = frozenset(['text/html', 'text/plain'])
AUTOCALCULATED_FILENAME_EXTENSION_BLACKLIST = frozenset(['.jpe', '.jpeg'])
@ -231,7 +234,7 @@ def handle_message_body(input_email, header_info):
warning("Could not find image cid " + matchobj.group(1) + " in email content.")
return "broken"
payload = re.sub('cid:([\w_@.-]+)', functools.partial(cid_replace, cid_parts_used),
payload = re.sub(r'cid:([\w_@.-]+)', functools.partial(cid_replace, cid_parts_used),
str(payload, charset))
return (header_info + payload, cid_parts_used)
@ -299,7 +302,7 @@ def remove_invalid_urls(payload):
# See https://github.com/kennethreitz/requests/issues/1882#issuecomment-44596534
request.connection.close()
request.raise_for_status()
except:
except RequestException:
logger.warning("Could not retrieve img URL " + src + ", replacing with blank.")
del img['src']
else:
@ -333,7 +336,7 @@ def handle_attachments(input_email, output_directory, add_prefix_date, ignore_fl
assert filename is not None
if add_prefix_date:
if not re.search("\d\d\d\d[-_]\d\d[-_]\d\d", filename):
if not re.search(r"\d\d\d\d[-_]\d\d[-_]\d\d", filename):
filename = datetime.now().strftime("%Y-%m-%d-") + filename
logger.info("Extracting attachment " + filename)
@ -349,6 +352,10 @@ def handle_attachments(input_email, output_directory, add_prefix_date, ignore_fl
def add_update_pdf_metadata(filename, update_dictionary):
# This seems to be the only way to modify the existing PDF metadata.
#
# pylint: disable=protected-access, no-member
def add_prefix(value):
return '/' + value
@ -371,7 +378,7 @@ def add_update_pdf_metadata(filename, update_dictionary):
assert full_update_dictionary[key] is not None
info_dict.update({NameObject(key): createStringObject(full_update_dictionary[key])})
unused_f_handle, temp_file_name = tempfile.mkstemp(prefix="email2pdf_add_update_pdf_metadata", suffix=".pdf")
_, temp_file_name = tempfile.mkstemp(prefix="email2pdf_add_update_pdf_metadata", suffix=".pdf")
with open(temp_file_name, 'wb') as file_out:
pdf_output.write(file_out)
@ -441,14 +448,12 @@ def find_all_attachments(message, parts_to_ignore):
return parts
def get_formatted_header_info(email):
HEADERS = frozenset(['Subject', 'From', 'To', 'Date'])
def get_formatted_header_info(input_email):
header_info = ""
for header in HEADERS:
if email[header]:
header_info = header_info + '<b>' + header + '</b>: ' + email[header] + '<br/>'
for header in FORMATTED_HEADERS_TO_INCLUDE:
if input_email[header]:
header_info = header_info + '<b>' + header + '</b>: ' + input_email[header] + '<br/>'
return header_info + '<br/>'
@ -458,6 +463,7 @@ def get_formatted_header_info(email):
def get_mime_type(buffer_data):
# pylint: disable=no-member
if 'from_buffer' in dir(magic):
mime_type = str(magic.from_buffer(buffer_data, mime=True), 'utf-8')
else:
@ -479,28 +485,43 @@ def warning(message):
class FatalException(Exception):
def __init__(self, value):
Exception.__init__(self, value)
self.value = value
def __str__(self):
return repr(self.value)
def call_main():
# pylint: disable=bare-except
try:
main(sys.argv, syslog_handler, syserr_handler)
except FatalException as exception:
logger_setup.error(exception.value)
sys.exit(2)
except:
traceback.print_exc()
sys.exit(3)
if __name__ == "__main__":
logger = logging.getLogger("email2pdf")
logger.propagate = False
logger.setLevel(logging.DEBUG)
logger_setup = logging.getLogger("email2pdf")
logger_setup.propagate = False
logger_setup.setLevel(logging.DEBUG)
syserr_handler = logging.StreamHandler(stream=sys.stderr)
syserr_handler.setLevel(logging.WARNING)
syserr_formatter = logging.Formatter('%(levelname)s: %(message)s')
syserr_handler.setFormatter(syserr_formatter)
logger.addHandler(syserr_handler)
logger_setup.addHandler(syserr_handler)
if _platform == "linux" or _platform == "linux2":
SYSLOG_ADDRESS = '/dev/log'
elif _platform == "darwin":
SYSLOG_ADDRESS = '/var/run/syslog'
else:
logger.warning("I don't know this platform (" + _platform + "); cannot log to syslog.")
logger_setup.warning("I don't know this platform (" + _platform + "); cannot log to syslog.")
SYSLOG_ADDRESS = None
if SYSLOG_ADDRESS and os.path.exists(SYSLOG_ADDRESS):
@ -508,18 +529,11 @@ if __name__ == "__main__":
syslog_handler.setLevel(logging.INFO)
SYSLOG_FORMATTER = logging.Formatter('%(pathname)s[%(process)d] %(levelname)s %(lineno)d %(message)s')
syslog_handler.setFormatter(SYSLOG_FORMATTER)
logger.addHandler(syslog_handler)
logger_setup.addHandler(syslog_handler)
else:
syslog_handler = None
try:
main(sys.argv, syslog_handler, syserr_handler)
except FatalException as exception:
logger.error(exception.value)
sys.exit(2)
except:
traceback.print_exc()
sys.exit(3)
call_main()
if warning_pending:
sys.exit(1)