mirror of
https://github.com/Ponce/slackbuilds
synced 2024-12-02 13:04:42 +01:00
240 lines
10 KiB
Diff
240 lines
10 KiB
Diff
|
diff -Naur orig/CHANGELOG new/CHANGELOG
|
||
|
--- orig/CHANGELOG 2020-08-31 18:03:24.000000000 +0300
|
||
|
+++ new/CHANGELOG 2020-09-05 16:09:45.000000000 +0300
|
||
|
@@ -1,4 +1,7 @@
|
||
|
UNRELEASED
|
||
|
+ * Improve log messages
|
||
|
+ * Remove documentation of `smtp-ssl-protocol` as this option was dropped in 2016
|
||
|
+ * Stop forging SMTP and sendmail envelope sender (#134)
|
||
|
|
||
|
v3.12.2 (2020-08-31)
|
||
|
* Fix bug `AttributeError: 'NoneType' object has no attribute 'close'` (#126)
|
||
|
diff -Naur orig/r2e.1 new/r2e.1
|
||
|
--- orig/r2e.1 2020-08-31 18:03:24.000000000 +0300
|
||
|
+++ new/r2e.1 2020-09-05 16:09:45.000000000 +0300
|
||
|
@@ -253,8 +253,6 @@
|
||
|
SMTP server
|
||
|
.IP smtp-ssl
|
||
|
Connect to the SMTP server using SSL
|
||
|
-.IP smtp-ssl-protocol
|
||
|
-TLS/SSL version to use on STARTTLS when not using 'smtp-ssl'.
|
||
|
.RE
|
||
|
.SS IMAP configuration
|
||
|
.IP imap-auth
|
||
|
diff -Naur orig/rss2email/__init__.py new/rss2email/__init__.py
|
||
|
--- orig/rss2email/__init__.py 2020-08-31 18:03:24.000000000 +0300
|
||
|
+++ new/rss2email/__init__.py 2020-09-05 16:09:45.000000000 +0300
|
||
|
@@ -26,7 +26,7 @@
|
||
|
import sys as _sys
|
||
|
|
||
|
|
||
|
-__version__ = '3.12.2'
|
||
|
+__version__ = '3.12.1'
|
||
|
__url__ = 'https://github.com/rss2email/rss2email'
|
||
|
__author__ = 'The rss2email maintainers'
|
||
|
__email__ = 'rss2email@tremily.us'
|
||
|
diff -Naur orig/rss2email/config.py new/rss2email/config.py
|
||
|
--- orig/rss2email/config.py 2020-08-31 18:03:24.000000000 +0300
|
||
|
+++ new/rss2email/config.py 2020-09-05 16:09:45.000000000 +0300
|
||
|
@@ -83,11 +83,11 @@
|
||
|
# Transfer-Encoding. For local mailing it is safe and
|
||
|
# convenient to use 8bit.
|
||
|
('use-8bit', str(False)),
|
||
|
- # True: Only use the 'from' address.
|
||
|
+ # True: Only use the 'from' address. Overrides the use-publisher-email setting.
|
||
|
# False: Use the email address specified by the feed, when possible.
|
||
|
('force-from', str(False)),
|
||
|
- # True: Use the publisher's email if you can't find the author's.
|
||
|
- # False: Just use the 'from' email instead.
|
||
|
+ # True: Use author's email if found, or use publisher's email if found, or use the 'from' setting.
|
||
|
+ # False: Use author's email if found, or use the 'from' setting.
|
||
|
('use-publisher-email', str(False)),
|
||
|
# If empty, only use the feed email address rather than
|
||
|
# friendly name plus email address. Available attributes may
|
||
|
@@ -132,7 +132,7 @@
|
||
|
# because the old entries will not be recorded under their new
|
||
|
# link-based ids.
|
||
|
('trust-link', str(False)),
|
||
|
- # If 'trust-guid' or 'trust-link' is True, this settings allows to receive
|
||
|
+ # If 'trust-guid' or 'trust-link' is True, this setting allows to receive
|
||
|
# a new email message in reply to the previous one when the post changes.
|
||
|
('reply-changes', str(False)),
|
||
|
# To most correctly encode emails with international
|
||
|
diff -Naur orig/rss2email/email.py new/rss2email/email.py
|
||
|
--- orig/rss2email/email.py 2020-08-31 18:03:24.000000000 +0300
|
||
|
+++ new/rss2email/email.py 2020-09-05 16:09:45.000000000 +0300
|
||
|
@@ -151,7 +151,7 @@
|
||
|
message[key] = _Header(value, encoding)
|
||
|
return message
|
||
|
|
||
|
-def smtp_send(sender, recipient, message, config=None, section='DEFAULT'):
|
||
|
+def smtp_send(recipient, message, config=None, section='DEFAULT'):
|
||
|
if config is None:
|
||
|
config = _config.CONFIG
|
||
|
server = config.get(section, 'smtp-server')
|
||
|
@@ -190,7 +190,7 @@
|
||
|
except Exception as e:
|
||
|
raise _error.SMTPAuthenticationError(
|
||
|
server=server, username=username)
|
||
|
- smtp.send_message(message, sender, recipient.split(','))
|
||
|
+ smtp.send_message(message, config.get(section, 'from'), recipient.split(','))
|
||
|
smtp.quit()
|
||
|
|
||
|
def imap_send(message, config=None, section='DEFAULT'):
|
||
|
@@ -345,12 +345,12 @@
|
||
|
else:
|
||
|
return bytesio.getvalue()
|
||
|
|
||
|
-def sendmail_send(sender, recipient, message, config=None, section='DEFAULT'):
|
||
|
+def sendmail_send(recipient, message, config=None, section='DEFAULT'):
|
||
|
if config is None:
|
||
|
config = _config.CONFIG
|
||
|
message_bytes = _flatten(message)
|
||
|
sendmail = config.get(section, 'sendmail')
|
||
|
- sender_name,sender_addr = _parseaddr(sender)
|
||
|
+ sender_name,sender_addr = _parseaddr(config.get(section, 'from'))
|
||
|
_LOG.debug(
|
||
|
'sending message to {} via {}'.format(recipient, sendmail))
|
||
|
try:
|
||
|
@@ -366,11 +366,11 @@
|
||
|
except Exception as e:
|
||
|
raise _error.SendmailError() from e
|
||
|
|
||
|
-def send(sender, recipient, message, config=None, section='DEFAULT'):
|
||
|
+def send(recipient, message, config=None, section='DEFAULT'):
|
||
|
protocol = config.get(section, 'email-protocol')
|
||
|
if protocol == 'smtp':
|
||
|
smtp_send(
|
||
|
- sender=sender, recipient=recipient, message=message,
|
||
|
+ recipient=recipient, message=message,
|
||
|
config=config, section=section)
|
||
|
elif protocol == 'imap':
|
||
|
imap_send(message=message, config=config, section=section)
|
||
|
@@ -378,5 +378,5 @@
|
||
|
maildir_send(message=message, config=config, section=section)
|
||
|
else:
|
||
|
sendmail_send(
|
||
|
- sender=sender, recipient=recipient, message=message,
|
||
|
+ recipient=recipient, message=message,
|
||
|
config=config, section=section)
|
||
|
diff -Naur orig/rss2email/error.py new/rss2email/error.py
|
||
|
--- orig/rss2email/error.py 2020-08-31 18:03:24.000000000 +0300
|
||
|
+++ new/rss2email/error.py 2020-09-05 16:09:45.000000000 +0300
|
||
|
@@ -42,15 +42,14 @@
|
||
|
|
||
|
|
||
|
class TimeoutError (RSS2EmailError):
|
||
|
- def __init__(self, time_limited_function, message=None):
|
||
|
- if message is None:
|
||
|
- if time_limited_function.error is not None:
|
||
|
- message = (
|
||
|
- 'error while running time limited function: {}'.format(
|
||
|
- time_limited_function.error[1]))
|
||
|
- else:
|
||
|
- message = '{} second timeout exceeded'.format(
|
||
|
- time_limited_function.timeout)
|
||
|
+ def __init__(self, time_limited_function):
|
||
|
+ if time_limited_function.error is not None:
|
||
|
+ message = (
|
||
|
+ 'error while running time limited function in {}: {}'.format(
|
||
|
+ time_limited_function.name, time_limited_function.error[1]))
|
||
|
+ else:
|
||
|
+ message = '{} second timeout exceeded in {}'.format(
|
||
|
+ time_limited_function.timeout, time_limited_function.name)
|
||
|
super(TimeoutError, self).__init__(message=message)
|
||
|
self.time_limited_function = time_limited_function
|
||
|
|
||
|
@@ -148,8 +147,9 @@
|
||
|
class InvalidFeedConfig (FeedError):
|
||
|
def __init__(self, setting, feed, message=None, **kwargs):
|
||
|
if not message:
|
||
|
- message = "invalid feed configuration {}".format(
|
||
|
- {setting: getattr(feed, setting)})
|
||
|
+ message = (
|
||
|
+ "invalid feed configuration '{setting}' in {feed}".format(
|
||
|
+ setting=getattr(feed, setting), feed=feed))
|
||
|
super(InvalidFeedConfig, self).__init__(
|
||
|
feed=feed, message=message, **kwargs)
|
||
|
self.setting = setting
|
||
|
diff -Naur orig/rss2email/feed.py new/rss2email/feed.py
|
||
|
--- orig/rss2email/feed.py 2020-08-31 18:03:24.000000000 +0300
|
||
|
+++ new/rss2email/feed.py 2020-09-05 16:09:45.000000000 +0300
|
||
|
@@ -373,7 +373,7 @@
|
||
|
kwargs = {}
|
||
|
if proxy:
|
||
|
kwargs['handlers'] = [_urllib_request.ProxyHandler({'http':proxy})]
|
||
|
- f = _util.TimeLimitedFunction(timeout, _feedparser.parse)
|
||
|
+ f = _util.TimeLimitedFunction('feed {}'.format(self.name), timeout, _feedparser.parse)
|
||
|
return f(self.url, self.etag, modified=self.modified, **kwargs)
|
||
|
|
||
|
def _process(self, parsed):
|
||
|
@@ -773,9 +773,9 @@
|
||
|
if entry.get('summary_detail', None):
|
||
|
contents.append(entry.summary_detail)
|
||
|
if self.html_mail:
|
||
|
- types = ['text/html', 'text/plain']
|
||
|
+ types = ['application/xhtml+xml', 'text/html', 'text/plain']
|
||
|
else:
|
||
|
- types = ['text/plain', 'text/html']
|
||
|
+ types = ['text/plain', 'text/html', 'application/xhtml+xml']
|
||
|
for content_type in types:
|
||
|
for content in contents:
|
||
|
if content['type'] == content_type:
|
||
|
@@ -871,7 +871,7 @@
|
||
|
section = self.section
|
||
|
if section not in self.config:
|
||
|
section = 'DEFAULT'
|
||
|
- _email.send(sender=sender, recipient=self.to, message=message,
|
||
|
+ _email.send(recipient=self.to, message=message,
|
||
|
config=self.config, section=section)
|
||
|
|
||
|
def run(self, send=True):
|
||
|
diff -Naur orig/rss2email/feeds.py new/rss2email/feeds.py
|
||
|
--- orig/rss2email/feeds.py 2020-08-31 18:03:24.000000000 +0300
|
||
|
+++ new/rss2email/feeds.py 2020-09-05 16:09:45.000000000 +0300
|
||
|
@@ -239,11 +239,10 @@
|
||
|
def load(self, require=False):
|
||
|
_LOG.debug('load feed configuration from {}'.format(self.configfiles))
|
||
|
if self.configfiles:
|
||
|
- self.read_configfiles = self.config.read(self.configfiles)
|
||
|
+ read_configfiles = self.config.read(self.configfiles)
|
||
|
else:
|
||
|
- self.read_configfiles = []
|
||
|
- _LOG.debug('loaded configuration from {}'.format(
|
||
|
- self.read_configfiles))
|
||
|
+ read_configfiles = []
|
||
|
+ _LOG.debug('loaded configuration from {}'.format(read_configfiles))
|
||
|
self._load_feeds(require=require)
|
||
|
|
||
|
def _load_feeds(self, require):
|
||
|
diff -Naur orig/rss2email/util.py new/rss2email/util.py
|
||
|
--- orig/rss2email/util.py 2020-08-31 18:03:24.000000000 +0300
|
||
|
+++ new/rss2email/util.py 2020-09-05 16:09:45.000000000 +0300
|
||
|
@@ -35,19 +35,20 @@
|
||
|
>>> def sleeping_return(sleep, x):
|
||
|
... time.sleep(sleep)
|
||
|
... return x
|
||
|
- >>> TimeLimitedFunction(0.5, sleeping_return)(0.1, 'x')
|
||
|
+ >>> TimeLimitedFunction('sleeping', 0.5, sleeping_return)(0.1, 'x')
|
||
|
'x'
|
||
|
- >>> TimeLimitedFunction(0.5, sleeping_return)(10, 'y')
|
||
|
+ >>> TimeLimitedFunction('sleeping', 0.5, sleeping_return)(10, 'y')
|
||
|
Traceback (most recent call last):
|
||
|
...
|
||
|
- rss2email.error.TimeoutError: 0.5 second timeout exceeded
|
||
|
- >>> TimeLimitedFunction(0.5, time.sleep)('x')
|
||
|
+ rss2email.error.TimeoutError: 0.5 second timeout exceeded in sleeping
|
||
|
+ >>> TimeLimitedFunction('sleep', 0.5, time.sleep)('x')
|
||
|
Traceback (most recent call last):
|
||
|
...
|
||
|
- rss2email.error.TimeoutError: error while running time limited function: a float is required
|
||
|
+ rss2email.error.TimeoutError: error while running time limited function in sleep: a float is required
|
||
|
"""
|
||
|
- def __init__(self, timeout, target, **kwargs):
|
||
|
+ def __init__(self, name, timeout, target, **kwargs):
|
||
|
super(TimeLimitedFunction, self).__init__(target=target, daemon=True, **kwargs)
|
||
|
+ self.name = name
|
||
|
self.timeout = timeout
|
||
|
self.result = None
|
||
|
self.error = None
|