def test_name(pattern, multi=None, abd=False, sports=False, anime_type=None): ep = generate_sample_ep(multi, abd, sports, anime_type) return { 'name': formatted_filename(ep.show, ep, pattern, multi, anime_type), 'dir': formatted_dir(ep.show, ep, pattern, multi) }
def validate_name(pattern, multi=None, anime_type=None, file_only=False, abd=False, sports=False): """ See if we understand a name :param pattern: Name to analyse :param multi: Is this a multi-episode name :param anime_type: Is this anime :param file_only: Is this just a file or a dir :param abd: Is air-by-date enabled :param sports: Is this sports :return: True if valid name, False if not """ ep = generate_sample_ep(multi, abd, sports, anime_type) new_name = formatted_filename(ep.show, ep, pattern, multi, anime_type) + '.ext' new_path = formatted_dir(ep.show, ep, pattern, multi) if not file_only: new_name = os.path.join(new_path, new_name) if not new_name: sickrage.LOGGER.debug("Unable to create a name out of " + pattern) return False sickrage.LOGGER.debug("Trying to parse " + new_name) parser = NameParser(True, showObj=ep.show, naming_pattern=True) try: result = parser.parse(new_name) except Exception: sickrage.LOGGER.debug("Unable to parse " + new_name + ", not valid") return False sickrage.LOGGER.debug("Parsed " + new_name + " into " + str(result)) if abd or sports: if result.air_date != ep.airdate: sickrage.LOGGER.debug("Air date incorrect in parsed episode, pattern isn't valid") return False elif anime_type != 3: if len(result.ab_episode_numbers) and result.ab_episode_numbers != [x.absolute_number for x in [ep] + ep.relatedEps]: sickrage.LOGGER.debug("Absolute numbering incorrect in parsed episode, pattern isn't valid") return False else: if result.season_number != ep.season: sickrage.LOGGER.debug("Season number incorrect in parsed episode, pattern isn't valid") return False if result.episode_numbers != [x.episode for x in [ep] + ep.relatedEps]: sickrage.LOGGER.debug("Episode numbering incorrect in parsed episode, pattern isn't valid") return False return True
def proper_path(self): """ Figures out the path where this episode SHOULD live according to the renaming rules, relative from the show dir """ anime_type = sickrage.NAMING_ANIME if not self.show.is_anime: anime_type = 3 result = formatted_filename(self.show, self, anime_type=anime_type) # if they want us to flatten it and we're allowed to flatten it then we will if self.show.flatten_folders and not sickrage.NAMING_FORCE_FOLDERS: return result # if not we append the folder on and use that else: result = os.path.join(formatted_dir(self.show, self), result) return result
def validate_name(pattern, multi=None, anime_type=None, file_only=False, abd=False, sports=False): """ See if we understand a name :param pattern: Name to analyse :param multi: Is this a multi-episode name :param anime_type: Is this anime :param file_only: Is this just a file or a dir :param abd: Is air-by-date enabled :param sports: Is this sports :return: True if valid name, False if not """ ep = generate_sample_ep(multi, abd, sports, anime_type) new_name = formatted_filename(ep.show, ep, pattern, multi, anime_type) + '.ext' new_path = formatted_dir(ep.show, ep, pattern, multi) if not file_only: new_name = os.path.join(new_path, new_name) if not new_name: sickrage.LOGGER.debug("Unable to create a name out of " + pattern) return False sickrage.LOGGER.debug("Trying to parse " + new_name) parser = NameParser(True, showObj=ep.show, naming_pattern=True) try: result = parser.parse(new_name) except Exception: sickrage.LOGGER.debug("Unable to parse " + new_name + ", not valid") return False sickrage.LOGGER.debug("Parsed " + new_name + " into " + str(result)) if abd or sports: if result.air_date != ep.airdate: sickrage.LOGGER.debug( "Air date incorrect in parsed episode, pattern isn't valid") return False elif anime_type != 3: if len(result.ab_episode_numbers) and result.ab_episode_numbers != [ x.absolute_number for x in [ep] + ep.relatedEps ]: sickrage.LOGGER.debug( "Absolute numbering incorrect in parsed episode, pattern isn't valid" ) return False else: if result.season_number != ep.season: sickrage.LOGGER.debug( "Season number incorrect in parsed episode, pattern isn't valid" ) return False if result.episode_numbers != [x.episode for x in [ep] + ep.relatedEps]: sickrage.LOGGER.debug( "Episode numbering incorrect in parsed episode, pattern isn't valid" ) return False return True
def test_name(pattern, multi=None, abd=False, sports=False, anime_type=None): ep = generate_sample_ep(multi, abd, sports, anime_type) return {'name': formatted_filename(ep.show, ep, pattern, multi, anime_type), 'dir': formatted_dir(ep.show, ep, pattern, multi)}
def rename(self): """ Renames an episode file and all related files to the location and filename as specified in the naming settings. """ if not os.path.isfile(self.location): sickrage.LOGGER.warning("Can't perform rename on " + self.location + " when it doesn't exist, skipping") return proper_path = self.proper_path() absolute_proper_path = os.path.join(self.show.location, proper_path) absolute_current_path_no_ext, file_ext = os.path.splitext(self.location) absolute_current_path_no_ext_length = len(absolute_current_path_no_ext) related_subs = [] current_path = absolute_current_path_no_ext if absolute_current_path_no_ext.startswith(self.show.location): current_path = absolute_current_path_no_ext[len(self.show.location):] sickrage.LOGGER.debug("Renaming/moving episode from the base path " + self.location + " to " + absolute_proper_path) # if it's already named correctly then don't do anything if proper_path == current_path: sickrage.LOGGER.debug(str(self.indexerid) + ": File " + self.location + " is already named correctly, skipping") return related_files = post_processor.PostProcessor(self.location).list_associated_files( self.location, base_name_only=True, subfolders=True) # This is wrong. Cause of pp not moving subs. if self.show.subtitles and sickrage.SUBTITLES_DIR != '': related_subs = post_processor.PostProcessor(self.location).list_associated_files(sickrage.SUBTITLES_DIR, subtitles_only=True, subfolders=True) absolute_proper_subs_path = os.path.join(sickrage.SUBTITLES_DIR, formatted_filename(self.show, self)) sickrage.LOGGER.debug("Files associated to " + self.location + ": " + str(related_files)) # move the ep file result = rename_ep_file(self.location, absolute_proper_path, absolute_current_path_no_ext_length) # move related files for cur_related_file in related_files: # We need to fix something here because related files can be in subfolders and the original code doesn't handle this (at all) cur_related_dir = os.path.dirname(os.path.abspath(cur_related_file)) subfolder = cur_related_dir.replace(os.path.dirname(os.path.abspath(self.location)), '') # We now have a subfolder. We need to add that to the absolute_proper_path. # First get the absolute proper-path dir proper_related_dir = os.path.dirname(os.path.abspath(absolute_proper_path + file_ext)) proper_related_path = absolute_proper_path.replace(proper_related_dir, proper_related_dir + subfolder) cur_result = rename_ep_file(cur_related_file, proper_related_path, absolute_current_path_no_ext_length + len(subfolder)) if not cur_result: sickrage.LOGGER.error(str(self.indexerid) + ": Unable to rename file " + cur_related_file) for cur_related_sub in related_subs: absolute_proper_subs_path = os.path.join(sickrage.SUBTITLES_DIR, formatted_filename(self.show, self)) cur_result = rename_ep_file(cur_related_sub, absolute_proper_subs_path, absolute_current_path_no_ext_length) if not cur_result: sickrage.LOGGER.error(str(self.indexerid) + ": Unable to rename file " + cur_related_sub) # save the ep with self.lock: if result: self.location = absolute_proper_path + file_ext for relEp in self.relatedEps: relEp.location = absolute_proper_path + file_ext # in case something changed with the metadata just do a quick check for curEp in [self] + self.relatedEps: curEp.checkForMetaFiles() # save any changes to the databas sql_l = [] with self.lock: for relEp in [self] + self.relatedEps: sql_l.append(relEp.get_sql()) if len(sql_l) > 0: main_db.MainDB().mass_action(sql_l)