def should_process(self, path): """ Determine if a directory should be processed. :param path: Path we want to verify :return: True if the directory is valid for processing, otherwise False :rtype: Boolean """ if not self._is_valid_folder(path): return False folder = os.path.basename(path) if helpers.is_hidden_folder(path) or any(f == folder for f in self.IGNORED_FOLDERS): self.log_and_output('Ignoring folder: {folder}', level=logging.DEBUG, **{'folder': folder}) self.missed_files.append('{0}: Hidden or ignored folder'.format(path)) return False for root, dirs, files in os.walk(path): for subfolder in dirs: if not self._is_valid_folder(os.path.join(root, subfolder)): return False for each_file in files: if helpers.is_media_file(each_file) or helpers.is_rar_file(each_file): return True # Stop at first subdirectories if post-processing path if self.directory == path and not self.resource_name: break self.log_and_output('No processable items found in folder: {path}', level=logging.DEBUG, **{'path': path}) return False
def unpack_rar_files(dirpath): """Unpack any existing rar files present in the specified dirpath. :param dirpath: the directory path to be used :type dirpath: str """ from medusa import process_tv for root, _, files in os.walk(dirpath, topdown=False): # Skip folders that are being used for unpacking if u'_UNPACK' in root.upper(): continue rar_files = [ rar_file for rar_file in files if is_rar_file(rar_file) ] if rar_files and app.UNPACK: video_files = [ video_file for video_file in files if is_media_file(video_file) ] if not video_files or root == app.TV_DOWNLOAD_DIR: logger.debug(u'Found rar files in post-process folder: %s', rar_files) process_tv.ProcessResult(app.TV_DOWNLOAD_DIR).unrar( root, rar_files, False) elif rar_files and not app.UNPACK: logger.warning(u'Unpack is disabled. Skipping: %s', rar_files)
def should_process(self, path, failed=False): """ Determine if a directory should be processed. :param path: Path we want to verify :param failed: (optional) Mark the directory as failed :return: True if the directory is valid for processing, otherwise False :rtype: Boolean """ if not self._is_valid_folder(path, failed): return False folder = os.path.basename(path) if helpers.is_hidden_folder(path) or any(f == folder for f in self.IGNORED_FOLDERS): self.log('Ignoring folder: {0}'.format(folder), logger.DEBUG) self.missedfiles.append('{0}: Hidden or ignored folder'.format(path)) return False for root, dirs, files in os.walk(path): for subfolder in dirs: if not self._is_valid_folder(os.path.join(root, subfolder), failed): return False for each_file in files: if helpers.is_media_file(each_file) or helpers.is_rar_file(each_file): return True # Stop at first subdirectories if post-processing path if self.directory == path: break self.log('No processable items found in folder: {0}'.format(path), logger.DEBUG) return False
def prepare_files(self, path, files, force=False): """ Prepare files for post-processing. Separate the Rar and Video files. -> self.video_files Extract the rar files. -> self.rar_content Collect new video files. -> self.video_in_rar List unwanted files -> self.unwanted_files :param path: Path to start looking for rar/video files. :param files: Array of files. """ video_files = [] rar_files = [] for each_file in files: if helpers.is_media_file(each_file): video_files.append(each_file) elif helpers.is_rar_file(each_file): rar_files.append(each_file) rar_content = [] video_in_rar = [] if rar_files: rar_content = self.unrar(path, rar_files, force) files.extend(rar_content) video_in_rar = [ each_file for each_file in rar_content if helpers.is_media_file(each_file) ] video_files.extend(video_in_rar) self.log_and_output('Post-processing files: {files}', level=logging.DEBUG, **{'files': files}) self.log_and_output('Post-processing video files: {video_files}', level=logging.DEBUG, **{'video_files': video_files}) if rar_content: self.log_and_output('Post-processing rar content: {rar_content}', level=logging.DEBUG, **{'rar_content': rar_content}) self.log_and_output('Post-processing video in rar: {video_in_rar}', level=logging.DEBUG, **{'video_in_rar': video_in_rar}) unwanted_files = [ filename for filename in files if filename not in video_files and helpers.get_extension(filename) not in self.allowed_extensions ] if unwanted_files: self.log_and_output('Found unwanted files: {unwanted_files}', level=logging.DEBUG, **{'unwanted_files': unwanted_files}) self.video_files = video_files self.rar_content = rar_content self.video_in_rar = video_in_rar self.unwanted_files = unwanted_files
def should_process(self, path, failed=False): """ Determine if a directory should be processed. :param path: Path we want to verify :param failed: (optional) Mark the directory as failed :return: True if the directory is valid for processing, otherwise False :rtype: Boolean """ folder = os.path.basename(path) if folder in self.IGNORED_FOLDERS: return False if folder.startswith('_FAILED_'): self._log('The directory name indicates it failed to extract.', logger.DEBUG) failed = True elif folder.startswith('_UNDERSIZED_'): self._log( 'The directory name indicates that it was previously rejected for being undersized.', logger.DEBUG) failed = True elif folder.upper().startswith('_UNPACK'): self._log( 'The directory name indicates that this release is in the process of being unpacked.', logger.DEBUG) self.missedfiles.append('{0}: Being unpacked'.format(folder)) return False if failed: self.process_failed(path) self.missedfiles.append('{0}: Failed download'.format(folder)) return False if helpers.is_hidden_folder(path): self._log('Ignoring hidden folder: {0}'.format(folder), logger.DEBUG) self.missedfiles.append('{0}: Hidden folder'.format(folder)) return False for root, dirs, files in os.walk(path): for each_file in files: if helpers.is_media_file(each_file) or helpers.is_rar_file( each_file): return True del root # unused variable del dirs # unused variable self._log('No processable items found in folder: {0}'.format(path), logger.DEBUG) return False
def prepare_files(self, path, files, force=False): """Prepare files for post-processing.""" video_files = [] rar_files = [] for each_file in files: if helpers.is_media_file(each_file): video_files.append(each_file) elif helpers.is_rar_file(each_file): rar_files.append(each_file) rar_content = [] video_in_rar = [] if rar_files: rar_content = self.unrar(path, rar_files, force) files.extend(rar_content) video_in_rar = [ each_file for each_file in rar_content if helpers.is_media_file(each_file) ] video_files.extend(video_in_rar) self._log('Post-processing files: {0}'.format(files), logger.DEBUG) self._log('Post-processing video files: {0}'.format(video_files), logger.DEBUG) if rar_content: self._log('Post-processing rar content: {0}'.format(rar_content), logger.DEBUG) self._log('Post-processing video in rar: {0}'.format(video_in_rar), logger.DEBUG) unwanted_files = [ filename for filename in files if filename not in video_files and helpers.get_extension(filename) not in self.allowed_extensions ] if unwanted_files: self._log('Found unwanted files: {0}'.format(unwanted_files), logger.DEBUG) self.video_files = video_files self.rar_content = rar_content self.video_in_rar = video_in_rar self.unwanted_files = unwanted_files
def unpack_rar_files(dirpath): """Unpack any existing rar files present in the specified dirpath. :param dirpath: the directory path to be used :type dirpath: str """ from medusa import process_tv for root, _, files in os.walk(dirpath, topdown=False): # Skip folders that are being used for unpacking if u'_UNPACK' in root.upper(): continue rar_files = [rar_file for rar_file in files if is_rar_file(rar_file)] if rar_files and app.UNPACK: video_files = [video_file for video_file in files if is_media_file(video_file)] if not video_files or root == app.TV_DOWNLOAD_DIR: logger.debug(u'Found rar files in post-process folder: %s', rar_files) process_tv.ProcessResult(app.TV_DOWNLOAD_DIR).unrar(root, rar_files, False) elif rar_files and not app.UNPACK: logger.warning(u'Unpack is disabled. Skipping: %s', rar_files)
def prepare_files(self, path, files, force=False): """Prepare files for post-processing.""" video_files = [] rar_files = [] for each_file in files: if helpers.is_media_file(each_file): video_files.append(each_file) elif helpers.is_rar_file(each_file): rar_files.append(each_file) rar_content = [] video_in_rar = [] if rar_files: rar_content = self.unrar(path, rar_files, force) files.extend(rar_content) video_in_rar = [each_file for each_file in rar_content if helpers.is_media_file(each_file)] video_files.extend(video_in_rar) self.log('Post-processing files: {0}'.format(files), logger.DEBUG) self.log('Post-processing video files: {0}'.format(video_files), logger.DEBUG) if rar_content: self.log('Post-processing rar content: {0}'.format(rar_content), logger.DEBUG) self.log('Post-processing video in rar: {0}'.format(video_in_rar), logger.DEBUG) unwanted_files = [filename for filename in files if filename not in video_files and helpers.get_extension(filename) not in self.allowed_extensions] if unwanted_files: self.log('Found unwanted files: {0}'.format(unwanted_files), logger.DEBUG) self.video_files = video_files self.rar_content = rar_content self.video_in_rar = video_in_rar self.unwanted_files = unwanted_files