forked from archive/andrewferrier_email2pdf
Fix some more pylint issues.
This commit is contained in:
parent
739fc17d01
commit
c344f205e8
2 changed files with 41 additions and 27 deletions
2
Makefile
2
Makefile
|
@ -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/
|
||||
|
|
66
email2pdf
66
email2pdf
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue