flexget.utils.parsers.series module#
- class flexget.utils.parsers.series.SeriesParser(name=None, alternate_names=None, identified_by='auto', name_regexps=None, ep_regexps=None, date_regexps=None, sequence_regexps=None, id_regexps=None, strict_name=False, allow_groups=None, allow_seasonless=True, date_dayfirst=None, date_yearfirst=None, special_ids=None, prefer_specials=False, assume_special=False)[source]#
Bases:
TitleParserParse series.
- Name:
series name
- Data:
data to parse
- Expect_ep:
expect series to be in season, ep format (ep_regexps)
- Expect_id:
expect series to be in id format (id_regexps)
- parse_date(data)[source]#
Parse :data: for a date identifier.
If found, returns the date and regexp match object If no date is found returns False
- parse_episode(data)[source]#
Parse :data: for an episode identifier.
If found, returns a dict with keys for season, episode, end_episode and the regexp match object If no episode id is found returns False
- parse_season_packs(data)[source]#
Parse data for season packs. Return True if the data contains a hit.
- parse_unwanted(data)[source]#
Parse data for an unwanted hits. Return True if the data contains unwanted hits.
- parse_unwanted_sequence(data)[source]#
Parse data for an unwanted id hits.
Return True if the data contains unwanted hits.
- clean_regexps = [re.compile('\\[.*?\\]', re.IGNORECASE), re.compile('\\(.*?\\)', re.IGNORECASE)]#
- date_regexps = [re.compile('(?<![^\\W_])(\\d{2,4})[/ -](\\d{1,2})[/ -](\\d{1,2})(?![^\\W_])', re.IGNORECASE), re.compile('(?<![^\\W_])(\\d{1,2})[/ -](\\d{1,2})[/ -](\\d{2,4})(?![^\\W_])', re.IGNORECASE), re.compile('(?<![^\\W_])(\\d{4})x(\\d{1,2})[/ -](\\d{1,2})(?![^\\W_])', re.IGNORECASE), re.compile('(?<![^\\W_])(\\d{1,2})(?:st|nd|rd|th)?[/ -]([a-z]{3,10})[/ -](\\d{4})(?![^\\W_])', re.IGNORECASE)]#
- english_numbers = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten']#
- ep_regexps = [re.compile('(?<![^\\W_])(?:series|season|s)\\s?(\\d{1,4})(?:\\s(?:.*\\s)?)?(?:episode|ep|e|part|pt)\\s?(\\d{1,3}|X{0,3}(?:IX|XI{0,4}|VI{0,4}|IV|V|I{1,4}))(?:\\s?e?(\\d{1,2}))?(?![^\\W_])', re.IGNORECASE), re.compile('(?<![^\\W_])(?:series|season)\\s?(\\d{1,4})\\s(\\d{1,3})\\s?of\\s?(?:\\d{1,3})(?![^\\W_])', re.IGNORECASE), re.compile('(?<![^\\W_])(\\d{1,2})\\s?x\\s?(\\d+)(?:\\s(\\d{1,2}))?(?![^\\W_])', re.IGNORECASE), re.compile('(?<![^\\W_])(\\d{1,3})\\s?of\\s?(?:\\d{1,3})(?![^\\W_])', re.IGNORECASE), re.compile('(?<![^\\W_])(?:episode|e|ep|part|pt)\\s?(\\d{1,3}|X{0,3}(?:IX|XI{0,4}|VI{0,4}|IV|V|I{1,4}))(?![^\\W_])', re.IGNORECASE), re.compile('(?<![^\\W_])part\\s(one|two|three|four|five|six|seven|eight|nine|ten)(?![^\\W_])', re.IGNORECASE)]#
- id_regexps = []#
- ignore_prefixes = ['(?:\\[[^\\[\\]]*\\])', '(?:HD.720p?:)', '(?:HD.1080p?:)', '(?:HD.2160p?:)']#
- roman_numeral_re = 'X{0,3}(?:IX|XI{0,4}|VI{0,4}|IV|V|I{1,4})'#
- season_pack_regexps = [re.compile('(?:season\\s?|s)(\\d{1,}\\b)(?!(?:(?:.*?\\s)?(?:episode|e|ep|part|pt)\\s?(?:\\d{1,3}|X{0,3}(?:IX|XI{0,4}|VI{0,4}|IV|V|I{1,4}))|(?:\\d{1,3})\\s?of\\s?(?:\\d{1,3})))', re.IGNORECASE), re.compile('(\\d{1,3})\\s?x\\s?all', re.IGNORECASE)]#
- separators = '[/ -]'#
- sequence_regexps = [re.compile('(?<![^\\W_])(\\d{1,3})(?:v(?P<version>\\d))?(?![^\\W_])', re.IGNORECASE), re.compile('(?<![^\\W_])(?:pt|part)\\s?(\\d+|X{0,3}(?:IX|XI{0,4}|VI{0,4}|IV|V|I{1,4}))(?![^\\W_])', re.IGNORECASE)]#
- unwanted_regexps = [re.compile('(\\d{1,3})\\s?x\\s?(0+)[^1-9]', re.IGNORECASE), re.compile('S(\\d{1,3})D(\\d{1,3})', re.IGNORECASE), re.compile('(?:s|series|\\b)\\s?\\d\\s?(?:&\\s?\\d)?[\\s-]*(?:complete|full)', re.IGNORECASE), re.compile('disc\\s\\d', re.IGNORECASE)]#
- unwanted_sequence_regexps = [re.compile('seasons?\\s?\\d{1,2}', re.IGNORECASE)]#