def release_group(show_id, name): from sickrage.core.nameparser import NameParser, InvalidNameException, InvalidShowException if name: name = remove_non_release_groups(remove_extension(name)) try: parse_result = NameParser(name, show_id=show_id, naming_pattern=True).parse(name) if parse_result.release_group: return parse_result.release_group except (InvalidNameException, InvalidShowException) as e: sickrage.app.log.debug("Unable to get parse release_group: {}".format(e)) return ''
def release_group(show, name): if name: name = remove_non_release_groups(remove_extension(name)) else: return "" try: np = NameParser(name, showObj=show, naming_pattern=True) parse_result = np.parse(name) except (InvalidNameException, InvalidShowException) as e: sickrage.LOGGER.debug("Unable to get parse release_group: {}".format(e)) return '' if not parse_result.release_group: return '' return parse_result.release_group
def release_group(show, name): if name: name = remove_non_release_groups(remove_extension(name)) else: return "" try: np = NameParser(name, showObj=show, naming_pattern=True) parse_result = np.parse(name) except (InvalidNameException, InvalidShowException) as e: sickrage.LOGGER.debug( "Unable to get parse release_group: {}".format(e)) return '' if not parse_result.release_group: return '' return parse_result.release_group
def parse(self, name, cache_result=True, skip_scene_detection=False): if self.naming_pattern: cache_result = False cached = name_parser_cache.get(name) if cached: return cached # break it into parts if there are any (dirname, file name, extension) dir_name, file_name = os.path.split(name) base_file_name = file_name if self.file_name: base_file_name = remove_extension(file_name) # set up a result to use final_result = ParseResult(name) # try parsing the file name file_name_result = self._parse_string(base_file_name, skip_scene_detection) # use only the direct parent dir dir_name = os.path.basename(dir_name) # parse the dirname for extra info if needed dir_name_result = self._parse_string(dir_name, skip_scene_detection) # build the ParseResult object final_result.air_date = self._combine_results(file_name_result, dir_name_result, 'air_date') # anime absolute numbers final_result.ab_episode_numbers = self._combine_results( file_name_result, dir_name_result, 'ab_episode_numbers') # season and episode numbers final_result.season_number = self._combine_results( file_name_result, dir_name_result, 'season_number') final_result.episode_numbers = self._combine_results( file_name_result, dir_name_result, 'episode_numbers') # if the dirname has a release group/show name I believe it over the filename final_result.series_name = self._combine_results( dir_name_result, file_name_result, 'series_name') final_result.extra_info = self._combine_results( dir_name_result, file_name_result, 'extra_info') final_result.release_group = self._combine_results( dir_name_result, file_name_result, 'release_group') final_result.version = self._combine_results(dir_name_result, file_name_result, 'version') if final_result == file_name_result: final_result.which_regex = file_name_result.which_regex elif final_result == dir_name_result: final_result.which_regex = dir_name_result.which_regex else: if file_name_result: final_result.which_regex |= file_name_result.which_regex if dir_name_result: final_result.which_regex |= dir_name_result.which_regex final_result.show = self._combine_results(file_name_result, dir_name_result, 'show') final_result.indexerid = self._combine_results(file_name_result, dir_name_result, 'indexerid') final_result.quality = self._combine_results(file_name_result, dir_name_result, 'quality') if self.validate_show and not self.naming_pattern and not final_result.show: raise InvalidShowException( "Unable to match {} to a show in your database. Parser result: {}" .format(name, final_result)) # if there's no useful info in it then raise an exception if final_result.season_number is None and not final_result.episode_numbers and final_result.air_date is None and not final_result.ab_episode_numbers and not final_result.series_name: raise InvalidNameException( "Unable to parse {} to a valid episode. Parser result: {}". format(name, final_result)) if cache_result and final_result.show: name_parser_cache.add(name, final_result) sickrage.app.log.debug("Parsed {} into {}".format(name, final_result)) return final_result
def release_name(name): if name: name = remove_non_release_groups(remove_extension(name)) return name
def parse(self, name, cache_result=True): if self.naming_pattern: cache_result = False cached = name_parser_cache.get(name) if cached: return cached # break it into parts if there are any (dirname, file name, extension) dir_name, file_name = os.path.split(name) base_file_name = file_name if self.file_name: base_file_name = remove_extension(file_name) # set up a result to use final_result = ParseResult(name) # try parsing the file name file_name_result = self._parse_string(base_file_name) # use only the direct parent dir dir_name = os.path.basename(dir_name) # parse the dirname for extra info if needed dir_name_result = self._parse_string(dir_name) # build the ParseResult object final_result.air_date = self._combine_results(file_name_result, dir_name_result, 'air_date') # anime absolute numbers final_result.ab_episode_numbers = self._combine_results(file_name_result, dir_name_result, 'ab_episode_numbers') # season and episode numbers final_result.season_number = self._combine_results(file_name_result, dir_name_result, 'season_number') final_result.episode_numbers = self._combine_results(file_name_result, dir_name_result, 'episode_numbers') # if the dirname has a release group/show name I believe it over the filename final_result.series_name = self._combine_results(dir_name_result, file_name_result, 'series_name') final_result.extra_info = self._combine_results(dir_name_result, file_name_result, 'extra_info') final_result.release_group = self._combine_results(dir_name_result, file_name_result, 'release_group') final_result.version = self._combine_results(dir_name_result, file_name_result, 'version') final_result.which_regex = [] if final_result == file_name_result: final_result.which_regex = file_name_result.which_regex elif final_result == dir_name_result: final_result.which_regex = dir_name_result.which_regex else: if file_name_result: final_result.which_regex += file_name_result.which_regex if dir_name_result: final_result.which_regex += dir_name_result.which_regex final_result.show = self._combine_results(file_name_result, dir_name_result, 'show') final_result.quality = self._combine_results(file_name_result, dir_name_result, 'quality') if not final_result.show: raise InvalidShowException("Unable to parse {}".format(name)) # if there's no useful info in it then raise an exception if final_result.season_number is None and not final_result.episode_numbers and final_result.air_date is None and not final_result.ab_episode_numbers and not final_result.series_name: raise InvalidNameException("Unable to parse {}".format(name)) if cache_result: name_parser_cache.add(name, final_result) sickrage.srCore.srLogger.debug("Parsed {} into {}".format(name, final_result)) return final_result