[metadatafromtitle] Some improvements and cleanup
* Remove the 'songtitle' field, 'title' can be used instead. * Remove newlines in the help text, for consistency with other options. * Add 'from __future__ import unicode_literals'. * Call '__init__' from the parent class. * Add test for the format_to_regex method
This commit is contained in:
		
							parent
							
								
									e7db87f700
								
							
						
					
					
						commit
						88cf6fb368
					
				
					 4 changed files with 25 additions and 11 deletions
				
			
		
							
								
								
									
										17
									
								
								test/test_postprocessors.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								test/test_postprocessors.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
#!/usr/bin/env python
 | 
			
		||||
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
 | 
			
		||||
# Allow direct execution
 | 
			
		||||
import os
 | 
			
		||||
import sys
 | 
			
		||||
import unittest
 | 
			
		||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 | 
			
		||||
 | 
			
		||||
from youtube_dl.postprocessor import MetadataFromTitlePP
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestMetadataFromTitle(unittest.TestCase):
 | 
			
		||||
    def test_format_to_regex(self):
 | 
			
		||||
        pp = MetadataFromTitlePP(None, '%(title)s - %(artist)s')
 | 
			
		||||
        self.assertEqual(pp._titleregex, '(?P<title>.+)\ \-\ (?P<artist>.+)')
 | 
			
		||||
| 
						 | 
				
			
			@ -738,10 +738,10 @@ def parseOpts(overrideArguments=None):
 | 
			
		|||
    postproc.add_option(
 | 
			
		||||
        '--metadata-from-title',
 | 
			
		||||
        metavar='FORMAT', dest='metafromtitle',
 | 
			
		||||
        help='parse additional metadata like song title / artist from the video title. \n'
 | 
			
		||||
        help='parse additional metadata like song title / artist from the video title. '
 | 
			
		||||
             'The format syntax is the same as --output, '
 | 
			
		||||
             'the parsed parameters replace existing values.\n'
 | 
			
		||||
             'Additional templates: %(songtitle), %(album), %(artist). \n'
 | 
			
		||||
             'the parsed parameters replace existing values. '
 | 
			
		||||
             'Additional templates: %(album), %(artist). '
 | 
			
		||||
             'Example: --metadata-from-title "%(artist)s - %(title)s" matches a title like '
 | 
			
		||||
             '"Coldplay - Paradise"')
 | 
			
		||||
    postproc.add_option(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -541,9 +541,7 @@ class FFmpegEmbedSubtitlePP(FFmpegPostProcessor):
 | 
			
		|||
class FFmpegMetadataPP(FFmpegPostProcessor):
 | 
			
		||||
    def run(self, info):
 | 
			
		||||
        metadata = {}
 | 
			
		||||
        if info.get('songtitle') is not None:
 | 
			
		||||
            metadata['title'] = info['songtitle']
 | 
			
		||||
        elif info.get('title') is not None:
 | 
			
		||||
        if info.get('title') is not None:
 | 
			
		||||
            metadata['title'] = info['title']
 | 
			
		||||
        if info.get('upload_date') is not None:
 | 
			
		||||
            metadata['date'] = info['upload_date']
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
 | 
			
		||||
import re
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -12,20 +12,19 @@ class MetadataFromTitlePPError(PostProcessingError):
 | 
			
		|||
 | 
			
		||||
class MetadataFromTitlePP(PostProcessor):
 | 
			
		||||
    def __init__(self, downloader, titleformat):
 | 
			
		||||
        super(MetadataFromTitlePP, self).__init__(downloader)
 | 
			
		||||
        self._titleformat = titleformat
 | 
			
		||||
        self._titleregex = self.fmtToRegex(titleformat)
 | 
			
		||||
        self._titleregex = self.format_to_regex(titleformat)
 | 
			
		||||
 | 
			
		||||
    def fmtToRegex(self, fmt):
 | 
			
		||||
    def format_to_regex(self, fmt):
 | 
			
		||||
        """
 | 
			
		||||
        Converts a string like
 | 
			
		||||
           '%(title)s - %(artist)s'
 | 
			
		||||
        to a regex like
 | 
			
		||||
           '(?P<title>.+)\ \-\ (?P<artist>.+)'
 | 
			
		||||
        and a list of the named groups [title, artist]
 | 
			
		||||
        """
 | 
			
		||||
        lastpos = 0
 | 
			
		||||
        regex = ""
 | 
			
		||||
        groups = []
 | 
			
		||||
        # replace %(..)s with regex group and escape other string parts
 | 
			
		||||
        for match in re.finditer(r'%\((\w+)\)s', fmt):
 | 
			
		||||
            regex += re.escape(fmt[lastpos:match.start()])
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue