You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.2 KiB
69 lines
2.2 KiB
from __future__ import unicode_literals |
|
|
|
import os |
|
|
|
from ..utils import ( |
|
PostProcessingError, |
|
cli_configuration_args, |
|
encodeFilename, |
|
) |
|
|
|
|
|
class PostProcessor(object): |
|
"""Post Processor class. |
|
|
|
PostProcessor objects can be added to downloaders with their |
|
add_post_processor() method. When the downloader has finished a |
|
successful download, it will take its internal chain of PostProcessors |
|
and start calling the run() method on each one of them, first with |
|
an initial argument and then with the returned value of the previous |
|
PostProcessor. |
|
|
|
The chain will be stopped if one of them ever returns None or the end |
|
of the chain is reached. |
|
|
|
PostProcessor objects follow a "mutual registration" process similar |
|
to InfoExtractor objects. |
|
|
|
Optionally PostProcessor can use a list of additional command-line arguments |
|
with self._configuration_args. |
|
""" |
|
|
|
_downloader = None |
|
|
|
def __init__(self, downloader=None): |
|
self._downloader = downloader |
|
|
|
def set_downloader(self, downloader): |
|
"""Sets the downloader for this PP.""" |
|
self._downloader = downloader |
|
|
|
def run(self, information): |
|
"""Run the PostProcessor. |
|
|
|
The "information" argument is a dictionary like the ones |
|
composed by InfoExtractors. The only difference is that this |
|
one has an extra field called "filepath" that points to the |
|
downloaded file. |
|
|
|
This method returns a tuple, the first element is a list of the files |
|
that can be deleted, and the second of which is the updated |
|
information. |
|
|
|
In addition, this method may raise a PostProcessingError |
|
exception if post processing fails. |
|
""" |
|
return [], information # by default, keep file and do nothing |
|
|
|
def try_utime(self, path, atime, mtime, errnote='Cannot update utime of file'): |
|
try: |
|
os.utime(encodeFilename(path), (atime, mtime)) |
|
except Exception: |
|
self._downloader.report_warning(errnote) |
|
|
|
def _configuration_args(self, default=[]): |
|
return cli_configuration_args(self._downloader.params, 'postprocessor_args', default) |
|
|
|
|
|
class AudioConversionError(PostProcessingError): |
|
pass
|
|
|