]>
Commit | Line | Data |
---|---|---|
dcddc10a PH |
1 | from __future__ import unicode_literals |
2 | ||
dd29eb7f S |
3 | import os |
4 | ||
5 | from ..utils import ( | |
6 | PostProcessingError, | |
7 | encodeFilename, | |
8 | ) | |
496c1923 PH |
9 | |
10 | ||
11 | class PostProcessor(object): | |
12 | """Post Processor class. | |
13 | ||
14 | PostProcessor objects can be added to downloaders with their | |
15 | add_post_processor() method. When the downloader has finished a | |
16 | successful download, it will take its internal chain of PostProcessors | |
17 | and start calling the run() method on each one of them, first with | |
18 | an initial argument and then with the returned value of the previous | |
19 | PostProcessor. | |
20 | ||
21 | The chain will be stopped if one of them ever returns None or the end | |
22 | of the chain is reached. | |
23 | ||
24 | PostProcessor objects follow a "mutual registration" process similar | |
e35b23f5 S |
25 | to InfoExtractor objects. |
26 | ||
27 | Optionally PostProcessor can use a list of additional command-line arguments | |
28 | with self._configuration_args. | |
496c1923 PH |
29 | """ |
30 | ||
31 | _downloader = None | |
32 | ||
aa5d9a79 | 33 | def __init__(self, downloader=None): |
496c1923 PH |
34 | self._downloader = downloader |
35 | ||
36 | def set_downloader(self, downloader): | |
37 | """Sets the downloader for this PP.""" | |
38 | self._downloader = downloader | |
39 | ||
40 | def run(self, information): | |
41 | """Run the PostProcessor. | |
42 | ||
43 | The "information" argument is a dictionary like the ones | |
44 | composed by InfoExtractors. The only difference is that this | |
45 | one has an extra field called "filepath" that points to the | |
46 | downloaded file. | |
47 | ||
592e97e8 JMF |
48 | This method returns a tuple, the first element is a list of the files |
49 | that can be deleted, and the second of which is the updated | |
50 | information. | |
496c1923 PH |
51 | |
52 | In addition, this method may raise a PostProcessingError | |
53 | exception if post processing fails. | |
54 | """ | |
592e97e8 | 55 | return [], information # by default, keep file and do nothing |
496c1923 | 56 | |
dd29eb7f S |
57 | def try_utime(self, path, atime, mtime, errnote='Cannot update utime of file'): |
58 | try: | |
59 | os.utime(encodeFilename(path), (atime, mtime)) | |
60 | except Exception: | |
61 | self._downloader.report_warning(errnote) | |
62 | ||
e35b23f5 S |
63 | def _configuration_args(self, default=[]): |
64 | pp_args = self._downloader.params.get('postprocessor_args') | |
65 | if pp_args is None: | |
66 | return default | |
67 | assert isinstance(pp_args, list) | |
68 | return pp_args | |
69 | ||
496c1923 PH |
70 | |
71 | class AudioConversionError(PostProcessingError): | |
72 | pass |