Merge branch 'format-entry-name'
authorW. Trevor King <wking@tremily.us>
Sat, 14 Sep 2013 16:57:12 +0000 (09:57 -0700)
committerW. Trevor King <wking@tremily.us>
Sat, 14 Sep 2013 16:57:12 +0000 (09:57 -0700)
* format-entry-name:
  feed: Give defaults for _get_entry_name formatting data
  feed: Convert 'friendly-name' setting to 'name-format'

Signed-off-by: W. Trevor King <wking@tremily.us>
1  2 
CHANGELOG
rss2email/feed.py

diff --combined CHANGELOG
index 82fa9a288b663262872cd68c2510a8ff4372ac11,2cd8b6869d6a5233af0954b320fdccdaee0b2c1c..a9a11d62d6ddef5e80f60f163704a964bad545b7
+++ b/CHANGELOG
@@@ -1,5 -1,5 +1,6 @@@
  v3.7 (unreleased)
+     * Convert the `friendly-name` boolean to the new `name-format` setting.  This allow users to customize how the friendly name is constructed.
 +    * Demote guessed encodings logs from 'error' to 'warning'.
  
  v3.6 (2013-09-09)
      * Fix missing port argument for IMAPAuthenticationError.
diff --combined rss2email/feed.py
index 164369dea6334b72543f081e504eb9dfb53fe765,876b9c39039174f8d309f2d041d8e49af45e41c3..e3bbeeff0034ee67502af01d276f49d2df969091
@@@ -64,10 -64,6 +64,10 @@@ for e in ['error', 'herror', 'gaierror'
  del e  # cleanup namespace
  _SOCKET_ERRORS = tuple(_SOCKET_ERRORS)
  
 +# drv_libxml2 raises:
 +#   TypeError: 'str' does not support the buffer interface
 +_feedparser.PREFERRED_XML_PARSERS = []
 +
  
  class Feed (object):
      """Utility class for feed manipulation and storage.
          'digest',
          'force_from',
          'use_publisher_email',
-         'friendly_name',
          'active',
          'date_header',
          'trust_guid',
          elif isinstance(exc, _sax.SAXParseException):
              _LOG.error('sax parsing error: {}: {}'.format(exc, self))
              warned = True
 +        elif (parsed.bozo and
 +              isinstance(exc, _feedparser.CharacterEncodingOverride)):
 +            _LOG.warning(
 +                'incorrectly declared encoding: {}: {}'.format(exc, self))
 +            warned = True
          elif parsed.bozo or exc:
              if exc is None:
                  exc = "can't process"
          ...     '</feed>\\n'
          ...     )
          >>> entry = parsed.entries[0]
-         >>> f.friendly_name = False
+         >>> f.name_format = ''
          >>> f._get_entry_name(parsed, entry)
          ''
-         >>> f.friendly_name = True
+         >>> f.name_format = '{author}'
          >>> f._get_entry_name(parsed, entry)
          'Example author'
+         >>> f.name_format = '{feed-title}: {author}'
+         >>> f._get_entry_name(parsed, entry)
+         ': Example author'
+         >>> f.name_format = '{author} ({feed.name})'
+         >>> f._get_entry_name(parsed, entry)
+         'Example author (test-feed)'
          """
-         if not self.friendly_name:
+         if not self.name_format:
              return ''
-         parts = ['']
+         data = {
+             'feed': self,
+             'feed-title': '<feed title>',
+             'author': '<author>',
+             'publisher': '<publisher>',
+             }
          feed = parsed.feed
-         parts.append(feed.get('title', ''))
+         data['feed-title'] = feed.get('title', '')
          for x in [entry, feed]:
              if 'name' in x.get('author_detail', []):
                  if x.author_detail.name:
-                     if ''.join(parts):
-                         parts.append(': ')
-                     parts.append(x.author_detail.name)
+                     data['author'] = x.author_detail.name
                      break
-         if not ''.join(parts) and self.use_publisher_email:
-             if 'name' in feed.get('publisher_detail', []):
-                 if ''.join(parts):
-                     parts.append(': ')
-                 parts.append(feed.publisher_detail.name)
-         return _html2text.unescape(''.join(parts))
+         if 'name' in feed.get('publisher_detail', []):
+             data['publisher'] = feed.publisher_detail.name
+         name = self.name_format.format(**data)
+         return _html2text.unescape(name)
  
      def _validate_email(self, email, default=None):
          """Do a basic quality check on email address