diff options
author | Alexander Verbovetsky <alik@ejik.org> | 2020-09-19 00:54:17 +0700 |
---|---|---|
committer | Willy Sudiarto Raharjo <willysr@slackbuilds.org> | 2020-09-19 00:54:17 +0700 |
commit | a436d194f572e8ec475c4e2c6d1f2ff9d4179c4f (patch) | |
tree | 31a5446cf5620add550baf59d2d99d602be8885e /network/rss2email/4b36e28.patch | |
parent | 3b97d8ee65fbbb4163f3b5ebd93ee832b0f82396 (diff) |
network/rss2email: Added (rss to email gateway).
Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
Diffstat (limited to 'network/rss2email/4b36e28.patch')
-rw-r--r-- | network/rss2email/4b36e28.patch | 239 |
1 files changed, 239 insertions, 0 deletions
diff --git a/network/rss2email/4b36e28.patch b/network/rss2email/4b36e28.patch new file mode 100644 index 0000000000000..5b6a050c7eaaa --- /dev/null +++ b/network/rss2email/4b36e28.patch @@ -0,0 +1,239 @@ +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 |