]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/postprocessor/metadatafromtitle.py
42377fa0f0bde0d3fa6ae578c6eaa0fe4a73474d
1 from __future__
import unicode_literals
5 from .common
import PostProcessor
6 from ..utils
import PostProcessingError
9 class MetadataFromTitlePPError(PostProcessingError
):
13 class MetadataFromTitlePP(PostProcessor
):
14 def __init__(self
, downloader
, titleformat
):
15 super(MetadataFromTitlePP
, self
).__init
__(downloader
)
16 self
._titleformat
= titleformat
17 self
._titleregex
= self
.format_to_regex(titleformat
)
19 def format_to_regex(self
, fmt
):
21 Converts a string like
22 '%(title)s - %(artist)s'
24 '(?P<title>.+)\ \-\ (?P<artist>.+)'
28 # replace %(..)s with regex group and escape other string parts
29 for match
in re
.finditer(r
'%\((\w+)\)s', fmt
):
30 regex
+= re
.escape(fmt
[lastpos
:match
.start()])
31 regex
+= r
'(?P<' + match
.group(1) + '>.+)'
33 if lastpos
< len(fmt
):
34 regex
+= re
.escape(fmt
[lastpos
:len(fmt
)])
39 match
= re
.match(self
._titleregex
, title
)
41 raise MetadataFromTitlePPError('Could not interpret title of video as "%s"' % self
._titleformat
)
42 for attribute
, value
in match
.groupdict().items():
43 value
= match
.group(attribute
)
44 info
[attribute
] = value
45 self
._downloader
.to_screen('[fromtitle] parsed ' + attribute
+ ': ' + value
)