File subliminal.1 of Package python-subliminal

.\" Man page generated from reStructuredText.
.
.TH "SUBLIMINAL" "1" "Sep 03, 2016" "2.0.5" "subliminal"
.SH NAME
subliminal \- subliminal Documentation
.
.nr rst2man-indent-level 0
.
.de1 rstReportMargin
\\$1 \\n[an-margin]
level \\n[rst2man-indent-level]
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
-
\\n[rst2man-indent0]
\\n[rst2man-indent1]
\\n[rst2man-indent2]
..
.de1 INDENT
.\" .rstReportMargin pre:
. RS \\$1
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
. nr rst2man-indent-level +1
.\" .rstReportMargin post:
..
.de UNINDENT
. RE
.\" indent \\n[an-margin]
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
.nr rst2man-indent-level -1
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.sp
Subliminal is a python 2.7+ library to search and download subtitles.
It comes with an easy to use yet powerful CLI suitable for direct use or cron jobs.
.SH DOCUMENTATION
.SS Usage
.SS CLI
.sp
Download English subtitles:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
$ subliminal download \-l en The.Big.Bang.Theory.S05E18.HDTV.x264\-LOL.mp4
Collecting videos  [####################################]  100%
1 video collected / 0 video ignored
Downloading subtitles  [####################################]  100%
Downloaded 1 subtitle
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
\fBWARNING:\fP
.INDENT 0.0
.INDENT 3.5
For cron usage, make sure to specify a maximum age (with \fB\-\-age\fP) so subtitles are searched for recent videos
only. Otherwise you will get banned from the providers for abuse due to too many requests. If subliminal didn\(aqt
find subtitles for an old video, it\(aqs unlikely it will find subtitles for that video ever anyway.
.UNINDENT
.UNINDENT
.sp
See cli for more details on the available commands and options.
.SS Nautilus/Nemo integration
.sp
See the dedicated \fI\%project page\fP for more information.
.SS High level API
.sp
You can call subliminal in many different ways depending on how much control you want over the process. For most use
cases, you can stick to the standard API.
.SS Common
.sp
Let\(aqs start by importing subliminal:
.sp
.nf
.ft C
>>> import os
>>> from babelfish import *
>>> from subliminal import *
.ft P
.fi
.sp
Before going further, there are a few things to know about subliminal.
.SS Video
.sp
The \fBMovie\fP and \fBEpisode\fP classes represent a video,
existing or not. You can create a video by name (or path) with \fBVideo.fromname\fP,
use \fBscan_video()\fP on an existing file path to get even more information about the video or
use \fBscan_videos()\fP on an existing directory path to scan a whole directory for videos.
.sp
.nf
.ft C
>>> video = Video.fromname(\(aqThe.Big.Bang.Theory.S05E18.HDTV.x264\-LOL.mp4\(aq)
>>> video
<Episode [\(aqThe Big Bang Theory\(aq, 5x18]>
.ft P
.fi
.sp
Here video information was guessed based on the name of the video, you can access some video attributes:
.sp
.nf
.ft C
>>> video.video_codec
\(aqh264\(aq
>>> video.release_group
\(aqLOL\(aq
.ft P
.fi
.SS Configuration
.sp
Before proceeding to listing and downloading subtitles, you need to configure the cache. Subliminal uses a cache to
reduce repeated queries to providers and improve overall performance with no impact on search quality. For the sake
of this example, we\(aqre going to use a memory backend.
.sp
.nf
.ft C
>>> my_region = region.configure(\(aqdogpile.cache.memory\(aq)
.ft P
.fi
.sp
\fBWARNING:\fP
.INDENT 0.0
.INDENT 3.5
Choose a cache that fits your application and prefer persistent over volatile backends. The \fBfile\fP backend is
usually a good choice.
See \fI\%dogpile.cache\(aqs documentation\fP for more details on backends.
.UNINDENT
.UNINDENT
.sp
Now that we\(aqre done with the basics, let\(aqs have some \fIreal\fP fun.
.SS Listing
.sp
To list subtitles, subliminal provides a \fBlist_subtitles()\fP function that will return all found
subtitles:
.sp
.nf
.ft C
>>> subtitles = list_subtitles([video], {Language(\(aqhun\(aq)}, providers=[\(aqpodnapisi\(aq])
>>> subtitles[video]
[<PodnapisiSubtitle \(aqZtAW\(aq [hu]>, <PodnapisiSubtitle \(aqONAW\(aq [hu]>]
.ft P
.fi
.sp
\fBNOTE:\fP
.INDENT 0.0
.INDENT 3.5
As you noticed, all parameters are iterables but only contain one item which means you can deal with a lot of
videos, languages and providers at the same time. For the sake of this example, we filter providers to use only one,
pass \fBproviders=None\fP (default) to search on all providers.
.UNINDENT
.UNINDENT
.SS Scoring
.sp
It\(aqs usual you have multiple candidates for subtitles. To help you chose which one to download, subliminal can compare
them to the video and tell you exactly what matches with \fBget_matches()\fP:
.sp
.nf
.ft C
>>> for s in subtitles[video]:
\&...     sorted(s.get_matches(video))
[\(aqepisode\(aq, \(aqformat\(aq, \(aqrelease_group\(aq, \(aqseason\(aq, \(aqseries\(aq, \(aqvideo_codec\(aq, \(aqyear\(aq]
[\(aqepisode\(aq, \(aqformat\(aq, \(aqseason\(aq, \(aqseries\(aq, \(aqyear\(aq]
.ft P
.fi
.sp
And then compute a score with those matches with \fBcompute_score()\fP:
.sp
.nf
.ft C
>>> for s in subtitles[video]:
\&...     {s: compute_score(s, video)}
{<PodnapisiSubtitle \(aqZtAW\(aq [hu]>: 354}
{<PodnapisiSubtitle \(aqONAW\(aq [hu]>: 337}
.ft P
.fi
.sp
Now you should have a better idea about which one you should choose.
.SS Downloading
.sp
We can settle on the first subtitle and download its content using \fBdownload_subtitles()\fP:
.sp
.nf
.ft C
>>> subtitle = subtitles[video][0]
>>> subtitle.content is None
True
>>> download_subtitles([subtitle])
>>> subtitle.content.split(b\(aq\en\(aq)[2]
b\(aqElszaladok a boltba\(aq
.ft P
.fi
.sp
If you want a string instead of bytes, you can access decoded content with the
\fBtext\fP property:
.sp
.nf
.ft C
>>> subtitle.text.split(\(aq\en\(aq)[3]
\(aqnéhány apróságért.\(aq
.ft P
.fi
.SS Downloading best subtitles
.sp
Downloading best subtitles is what you want to do in almost all cases, as a shortcut for listing, scoring and
downloading you can use \fBdownload_best_subtitles()\fP:
.sp
.nf
.ft C
>>> best_subtitles = download_best_subtitles([video], {Language(\(aqhun\(aq)}, providers=[\(aqpodnapisi\(aq])
>>> best_subtitles[video]
[<PodnapisiSubtitle \(aqZtAW\(aq [hu]>]
>>> best_subtitle = best_subtitles[video][0]
>>> best_subtitle.content.split(b\(aq\en\(aq)[2]
b\(aqElszaladok a boltba\(aq
.ft P
.fi
.sp
We end up with the same subtitle but with one line of code. Neat.
.SS Save
.sp
We got ourselves a nice subtitle, now we can save it on the file system using \fBsave_subtitles()\fP:
.sp
.nf
.ft C
>>> save_subtitles(video, [best_subtitle])
[<PodnapisiSubtitle \(aqZtAW\(aq [hu]>]
>>> os.listdir()
[\(aqThe.Big.Bang.Theory.S05E18.HDTV.x264\-LOL.hu.srt\(aq]
.ft P
.fi
.SS How it works
.SS Providers
.sp
Subliminal uses multiple providers to give users a vast choice and have a better chance to find the best matching
subtitles. Current supported providers are:
.INDENT 0.0
.IP \(bu 2
Addic7ed
.IP \(bu 2
LegendasTV
.IP \(bu 2
NapiProjekt
.IP \(bu 2
OpenSubtitles
.IP \(bu 2
Podnapisi
.IP \(bu 2
Shooter
.IP \(bu 2
SubsCenter
.IP \(bu 2
TheSubDB
.IP \(bu 2
TvSubtitles
.UNINDENT
.sp
Providers all inherit the same \fBProvider\fP base class and thus share the same API.
They are registered on the \fBsubliminal.providers\fP entry point and are exposed through the
\fBprovider_manager\fP for easy access.
.sp
To work with multiple providers seamlessly, the \fBProviderPool\fP exposes the same API but
distributes it to its providers and \fBAsyncProviderPool\fP does it asynchronously.
.SS Scoring
.sp
Rating subtitles and comparing them is probably the most difficult part and this is where subliminal excels with its
powerful scoring algorithm.
.sp
Using \fI\%guessit\fP and \fI\%enzyme\fP, subliminal extracts
properties of the video and match them with the properties of the subtitles found with the providers.
.sp
Equations in \fBsubliminal.score\fP give a score to each property (called a match). The more matches the video and
the subtitle have, the higher the score computed with \fBcompute_score()\fP gets.
.SS Libraries
.sp
Various libraries are used by subliminal and are key to its success:
.INDENT 0.0
.IP \(bu 2
\fI\%guessit\fP to guess information from filenames
.IP \(bu 2
\fI\%enzyme\fP to detect embedded subtitles in videos and read other video metadata
.IP \(bu 2
\fI\%babelfish\fP to work with languages
.IP \(bu 2
\fI\%requests\fP to make human readable HTTP requests
.IP \(bu 2
\fI\%BeautifulSoup\fP to parse HTML and XML
.IP \(bu 2
\fI\%dogpile.cache\fP to cache intermediate search results
.IP \(bu 2
\fI\%stevedore\fP to manage the provider entry point
.IP \(bu 2
\fI\%chardet\fP to detect subtitles\(aq encoding
.IP \(bu 2
\fI\%pysrt\fP to validate downloaded subtitles
.UNINDENT
.SS CLI
.SS subliminal
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
Usage: subliminal [OPTIONS] COMMAND [ARGS]...

  Subtitles, faster than your thoughts.

Options:
  \-\-addic7ed USERNAME PASSWORD    Addic7ed configuration.
  \-\-legendastv USERNAME PASSWORD  LegendasTV configuration.
  \-\-opensubtitles USERNAME PASSWORD
                                  OpenSubtitles configuration.
  \-\-subscenter USERNAME PASSWORD  SubsCenter configuration.
  \-\-cache\-dir DIRECTORY           Path to the cache directory.  [default:
                                  /home/user/.cache/subliminal]
  \-\-debug                         Print useful information for debugging
                                  subliminal and for reporting bugs.
  \-\-version                       Show the version and exit.
  \-\-help                          Show this message and exit.

Commands:
  cache     Cache management.
  download  Download best subtitles.

  Suggestions and bug reports are greatly appreciated:
  https://github.com/Diaoul/subliminal/
.ft P
.fi
.UNINDENT
.UNINDENT
.SS subliminal download
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
Usage: subliminal download [OPTIONS] PATH...

  Download best subtitles.

  PATH can be an directory containing videos, a video file path or a video
  file name. It can be used multiple times.

  If an existing subtitle is detected (external or embedded) in the correct
  language, the download is skipped for the associated video.

Options:
  \-l, \-\-language LANGUAGE         Language as IETF code, e.g. en, pt\-BR (can
                                  be used multiple times).  [required]
  \-p, \-\-provider [addic7ed|legendastv|opensubtitles|podnapisi|shooter|subscenter|thesubdb|tvsubtitles]
                                  Provider to use (can be used multiple
                                  times).
  \-r, \-\-refiner [metadata|omdb|tvdb]
                                  Refiner to use (can be used multiple times).
  \-a, \-\-age AGE                   Filter videos newer than AGE, e.g. 12h,
                                  1w2d.
  \-d, \-\-directory DIR             Directory where to save subtitles, default
                                  is next to the video file.
  \-e, \-\-encoding ENC              Subtitle file encoding, default is to
                                  preserve original encoding.
  \-s, \-\-single                    Save subtitle without language code in the
                                  file name, i.e. use .srt extension. Do not
                                  use this unless your media player requires
                                  it.
  \-f, \-\-force                     Force download even if a subtitle already
                                  exist.
  \-hi, \-\-hearing\-impaired         Prefer hearing impaired subtitles.
  \-m, \-\-min\-score INTEGER RANGE   Minimum score for a subtitle to be
                                  downloaded (0 to 100).
  \-w, \-\-max\-workers INTEGER RANGE
                                  Maximum number of threads to use.
  \-z, \-\-archives / \-Z, \-\-no\-archives
                                  Scan archives for videos (supported
                                  extensions: .rar).  [default: True]
  \-v, \-\-verbose                   Increase verbosity.
  \-\-help                          Show this message and exit.
.ft P
.fi
.UNINDENT
.UNINDENT
.SS subliminal cache
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
Usage: subliminal cache [OPTIONS]

  Cache management.

Options:
  \-\-clear\-subliminal  Clear subliminal\(aqs cache. Use this ONLY if your cache is
                      corrupted or if you experience issues.
  \-\-help              Show this message and exit.
.ft P
.fi
.UNINDENT
.UNINDENT
.SS Provider Guide
.sp
This guide is going to explain how to add a \fBProvider\fP to subliminal. You are encouraged
to take a look at the existing providers, it can be a nice base to start your own provider.
.SS Requirements
.sp
When starting a provider you should be able to answer to the following questions:
.INDENT 0.0
.IP \(bu 2
What languages does my provider support?
.IP \(bu 2
What are the language codes for the supported languages?
.IP \(bu 2
Does my provider deliver subtitles for episodes? for movies?
.IP \(bu 2
Does my provider require a video hash?
.UNINDENT
.sp
Each response of these questions will help you set the correct attributes for your
\fBProvider\fP\&.
.SS Video Validation
.sp
Not all providers deliver subtitles for \fBEpisode\fP\&. Some may require a hash.
The \fBcheck()\fP method does validation against a \fBVideo\fP
object and will return \fIFalse\fP if the given \fBVideo\fP isn\(aqt suitable. If you\(aqre not happy
with the default implementation, you can override it.
.SS Configuration
.sp
API keys must not be configurable by the user and must remain linked to subliminal. Hence they must be written
in the provider module.
.sp
Per\-user authentication is allowed and must be configured at instantiation as keyword arguments. Configuration
will be done by the user through the \fIprovider_configs\fP argument of the \fBlist_subtitles()\fP and
\fBdownload_best_subtitles()\fP functions. No network operation must be done during instantiation,
only configuration. Any error in the configuration must raise a
\fBConfigurationError\fP\&.
.sp
Beyond this point, if an error occurs, a generic \fBProviderError\fP exception
must be raised. You can also use more explicit exception classes \fBAuthenticationError\fP
and \fBDownloadLimitExceeded\fP\&.
.SS Initialization / Termination
.sp
Actual authentication operations must take place in the \fBinitialize()\fP method.
If you need anything to be executed when the provider isn\(aqt used anymore like logout,
use \fBterminate()\fP\&.
.SS Caching policy
.sp
To save bandwidth and improve querying time, intermediate data should be cached when possible. Typical use case is
when a query to retrieve show ids is required prior to the query to actually search for subtitles. In that case
the function that gets the show id from the show name must be cached.
Expiration time should be \fBSHOW_EXPIRATION_TIME\fP for shows and
\fBEPISODE_EXPIRATION_TIME\fP for episodes.
.SS Language
.sp
To be able to handle various language codes, subliminal makes use of \fI\%babelfish\fP
Language and converters. You must set the attribute \fBlanguages\fP with a set of
supported \fI\%Language\fP\&.
.sp
If you cannot find a suitable converter for your provider, you can \fI\%make one of your own\fP\&.
.SS Querying
.sp
The \fBquery()\fP method parameters must include all aspects of provider\(aqs querying with
primary types.
.SS Subtitle
.sp
A custom \fBSubtitle\fP subclass must be created to represent a subtitle from the provider.
It must have relevant attributes that can be used to compute the matches of the subtitle against a
\fBVideo\fP object.
.SS Score computation
.sp
To be able to compare subtitles coming from different providers between them, the
\fBget_matches()\fP method must be implemented.
.SS Unittesting
.sp
All possible uses of \fBquery()\fP,
\fBlist_subtitles()\fP and \fBdownload_subtitle()\fP
methods must have integration tests. Use \fI\%vcrpy\fP for recording and playback
of network activity.
Other functions must be unittested. If necessary, you can use \fI\%unittest.mock\fP to mock some functions.
.SH API DOCUMENTATION
.sp
If you are looking for information on a specific function, class or method, this part of the documentation is for you.
.SS Core
.INDENT 0.0
.TP
.B subliminal.core.ARCHIVE_EXTENSIONS
Supported archive extensions
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.core.ProviderPool(providers=None, provider_configs=None)
A pool of providers with the same API as a single \fBProvider\fP\&.
.sp
It has a few extra features:
.INDENT 7.0
.INDENT 3.5
.INDENT 0.0
.IP \(bu 2
Lazy loads providers when needed and supports the \fIwith\fP statement to \fI\%terminate()\fP
the providers on exit.
.IP \(bu 2
Automatically discard providers on failure.
.UNINDENT
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBproviders\fP (\fI\%list\fP) \-\- name of providers to use, if not all.
.IP \(bu 2
\fBprovider_configs\fP (\fI\%dict\fP) \-\- provider configuration as keyword arguments per provider name to pass when
instanciating the \fBProvider\fP\&.
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B providers = None
Name of providers to use
.UNINDENT
.INDENT 7.0
.TP
.B provider_configs = None
Provider configuration
.UNINDENT
.INDENT 7.0
.TP
.B initialized_providers = None
Initialized providers
.UNINDENT
.INDENT 7.0
.TP
.B discarded_providers = None
Discarded providers
.UNINDENT
.INDENT 7.0
.TP
.B list_subtitles_provider(provider, video, languages)
List subtitles with a single provider.
.sp
The video and languages are checked against the provider.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBprovider\fP (\fI\%str\fP) \-\- name of the provider.
.IP \(bu 2
\fBvideo\fP (\fBVideo\fP) \-\- video to list subtitles for.
.IP \(bu 2
\fBlanguages\fP (set of \fI\%Language\fP) \-\- languages to search for.
.UNINDENT
.TP
.B Returns
found subtitles.
.TP
.B Return type
list of \fBSubtitle\fP or None
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B list_subtitles(video, languages)
List subtitles.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBvideo\fP (\fBVideo\fP) \-\- video to list subtitles for.
.IP \(bu 2
\fBlanguages\fP (set of \fI\%Language\fP) \-\- languages to search for.
.UNINDENT
.TP
.B Returns
found subtitles.
.TP
.B Return type
list of \fBSubtitle\fP
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B download_subtitle(subtitle)
Download \fIsubtitle\fP\(aqs \fBcontent\fP\&.
.INDENT 7.0
.TP
.B Parameters
\fBsubtitle\fP (\fBSubtitle\fP) \-\- subtitle to download.
.TP
.B Returns
\fITrue\fP if the subtitle has been successfully downloaded, \fIFalse\fP otherwise.
.TP
.B Return type
\fI\%bool\fP
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B download_best_subtitles(subtitles, video, languages, min_score=0, hearing_impaired=False, only_one=False, compute_score=None)
Download the best matching subtitles.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBsubtitles\fP (list of \fBSubtitle\fP) \-\- the subtitles to use.
.IP \(bu 2
\fBvideo\fP (\fBVideo\fP) \-\- video to download subtitles for.
.IP \(bu 2
\fBlanguages\fP (set of \fI\%Language\fP) \-\- languages to download.
.IP \(bu 2
\fBmin_score\fP (\fI\%int\fP) \-\- minimum score for a subtitle to be downloaded.
.IP \(bu 2
\fBhearing_impaired\fP (\fI\%bool\fP) \-\- hearing impaired preference.
.IP \(bu 2
\fBonly_one\fP (\fI\%bool\fP) \-\- download only one subtitle, not one per language.
.IP \(bu 2
\fBcompute_score\fP \-\- function that takes \fIsubtitle\fP and \fIvideo\fP as positional arguments,
\fIhearing_impaired\fP as keyword argument and returns the score.
.UNINDENT
.TP
.B Returns
downloaded subtitles.
.TP
.B Return type
list of \fBSubtitle\fP
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B terminate()
Terminate all the \fI\%initialized_providers\fP\&.
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.core.AsyncProviderPool(max_workers=None, *args, **kwargs)
Subclass of \fI\%ProviderPool\fP with asynchronous support for \fI\%list_subtitles()\fP\&.
.INDENT 7.0
.TP
.B Parameters
\fBmax_workers\fP (\fI\%int\fP) \-\- maximum number of threads to use. If \fINone\fP, \fI\%max_workers\fP will be set
to the number of \fI\%providers\fP\&.
.UNINDENT
.INDENT 7.0
.TP
.B max_workers = None
Maximum number of threads to use
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.core.check_video(video, languages=None, age=None, undefined=False)
Perform some checks on the \fIvideo\fP\&.
.sp
All the checks are optional. Return \fIFalse\fP if any of this check fails:
.INDENT 7.0
.INDENT 3.5
.INDENT 0.0
.IP \(bu 2
\fIlanguages\fP already exist in \fIvideo\fP\(aqs \fBsubtitle_languages\fP\&.
.IP \(bu 2
\fIvideo\fP is older than \fIage\fP\&.
.IP \(bu 2
\fIvideo\fP has an \fIundefined\fP language in \fBsubtitle_languages\fP\&.
.UNINDENT
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBvideo\fP (\fBVideo\fP) \-\- video to check.
.IP \(bu 2
\fBlanguages\fP (set of \fI\%Language\fP) \-\- desired languages.
.IP \(bu 2
\fBage\fP (\fI\%datetime.timedelta\fP) \-\- maximum age of the video.
.IP \(bu 2
\fBundefined\fP (\fI\%bool\fP) \-\- fail on existing undefined language.
.UNINDENT
.TP
.B Returns
\fITrue\fP if the video passes the checks, \fIFalse\fP otherwise.
.TP
.B Return type
\fI\%bool\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.core.search_external_subtitles(path, directory=None)
Search for external subtitles from a video \fIpath\fP and their associated language.
.sp
Unless \fIdirectory\fP is provided, search will be made in the same directory as the video file.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBpath\fP (\fI\%str\fP) \-\- path to the video.
.IP \(bu 2
\fBdirectory\fP (\fI\%str\fP) \-\- directory to search for subtitles.
.UNINDENT
.TP
.B Returns
found subtitles with their languages.
.TP
.B Return type
\fI\%dict\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.core.scan_video(path)
Scan a video from a \fIpath\fP\&.
.INDENT 7.0
.TP
.B Parameters
\fBpath\fP (\fI\%str\fP) \-\- existing path to the video.
.TP
.B Returns
the scanned video.
.TP
.B Return type
\fBVideo\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.core.scan_archive(path)
Scan an archive from a \fIpath\fP\&.
.INDENT 7.0
.TP
.B Parameters
\fBpath\fP (\fI\%str\fP) \-\- existing path to the archive.
.TP
.B Returns
the scanned video.
.TP
.B Return type
\fBVideo\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.core.scan_videos(path, age=None, archives=True)
Scan \fIpath\fP for videos and their subtitles.
.sp
See \fI\%refine()\fP to find additional information for the video.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBpath\fP (\fI\%str\fP) \-\- existing directory path to scan.
.IP \(bu 2
\fBage\fP (\fI\%datetime.timedelta\fP) \-\- maximum age of the video or archive.
.IP \(bu 2
\fBarchives\fP (\fI\%bool\fP) \-\- scan videos in archives.
.UNINDENT
.TP
.B Returns
the scanned videos.
.TP
.B Return type
list of \fBVideo\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.core.refine(video, episode_refiners=None, movie_refiners=None, **kwargs)
Refine a video using refiners\&.
.sp
\fBNOTE:\fP
.INDENT 7.0
.INDENT 3.5
Exceptions raised in refiners are silently passed and logged.
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBvideo\fP (\fBVideo\fP) \-\- the video to refine.
.IP \(bu 2
\fBepisode_refiners\fP (\fI\%tuple\fP) \-\- refiners to use for episodes.
.IP \(bu 2
\fBmovie_refiners\fP (\fI\%tuple\fP) \-\- refiners to use for movies.
.IP \(bu 2
\fB**kwargs\fP \-\- additional parameters for the \fBrefine()\fP functions.
.UNINDENT
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.core.list_subtitles(videos, languages, pool_class=<class \(aqsubliminal.core.ProviderPool\(aq>, **kwargs)
List subtitles.
.sp
The \fIvideos\fP must pass the \fIlanguages\fP check of \fI\%check_video()\fP\&.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBvideos\fP (set of \fBVideo\fP) \-\- videos to list subtitles for.
.IP \(bu 2
\fBlanguages\fP (set of \fI\%Language\fP) \-\- languages to search for.
.IP \(bu 2
\fBpool_class\fP (\fI\%ProviderPool\fP, \fI\%AsyncProviderPool\fP or similar) \-\- class to use as provider pool.
.IP \(bu 2
\fB**kwargs\fP \-\- additional parameters for the provided \fIpool_class\fP constructor.
.UNINDENT
.TP
.B Returns
found subtitles per video.
.TP
.B Return type
dict of \fBVideo\fP to list of \fBSubtitle\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.core.download_subtitles(subtitles, pool_class=<class \(aqsubliminal.core.ProviderPool\(aq>, **kwargs)
Download \fBcontent\fP of \fIsubtitles\fP\&.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBsubtitles\fP (list of \fBSubtitle\fP) \-\- subtitles to download.
.IP \(bu 2
\fBpool_class\fP (\fI\%ProviderPool\fP, \fI\%AsyncProviderPool\fP or similar) \-\- class to use as provider pool.
.IP \(bu 2
\fB**kwargs\fP \-\- additional parameters for the provided \fIpool_class\fP constructor.
.UNINDENT
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.core.download_best_subtitles(videos, languages, min_score=0, hearing_impaired=False, only_one=False, compute_score=None, pool_class=<class \(aqsubliminal.core.ProviderPool\(aq>, **kwargs)
List and download the best matching subtitles.
.sp
The \fIvideos\fP must pass the \fIlanguages\fP and \fIundefined\fP (\fIonly_one\fP) checks of \fI\%check_video()\fP\&.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBvideos\fP (set of \fBVideo\fP) \-\- videos to download subtitles for.
.IP \(bu 2
\fBlanguages\fP (set of \fI\%Language\fP) \-\- languages to download.
.IP \(bu 2
\fBmin_score\fP (\fI\%int\fP) \-\- minimum score for a subtitle to be downloaded.
.IP \(bu 2
\fBhearing_impaired\fP (\fI\%bool\fP) \-\- hearing impaired preference.
.IP \(bu 2
\fBonly_one\fP (\fI\%bool\fP) \-\- download only one subtitle, not one per language.
.IP \(bu 2
\fBcompute_score\fP \-\- function that takes \fIsubtitle\fP and \fIvideo\fP as positional arguments,
\fIhearing_impaired\fP as keyword argument and returns the score.
.IP \(bu 2
\fBpool_class\fP (\fI\%ProviderPool\fP, \fI\%AsyncProviderPool\fP or similar) \-\- class to use as provider pool.
.IP \(bu 2
\fB**kwargs\fP \-\- additional parameters for the provided \fIpool_class\fP constructor.
.UNINDENT
.TP
.B Returns
downloaded subtitles per video.
.TP
.B Return type
dict of \fBVideo\fP to list of \fBSubtitle\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.core.save_subtitles(video, subtitles, single=False, directory=None, encoding=None)
Save subtitles on filesystem.
.sp
Subtitles are saved in the order of the list. If a subtitle with a language has already been saved, other subtitles
with the same language are silently ignored.
.sp
The extension used is \fI\&.lang.srt\fP by default or \fI\&.srt\fP is \fIsingle\fP is \fITrue\fP, with \fIlang\fP being the IETF code for
the \fBlanguage\fP of the subtitle.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBvideo\fP (\fBVideo\fP) \-\- video of the subtitles.
.IP \(bu 2
\fBsubtitles\fP (list of \fBSubtitle\fP) \-\- subtitles to save.
.IP \(bu 2
\fBsingle\fP (\fI\%bool\fP) \-\- save a single subtitle, default is to save one subtitle per language.
.IP \(bu 2
\fBdirectory\fP (\fI\%str\fP) \-\- path to directory where to save the subtitles, default is next to the video.
.IP \(bu 2
\fBencoding\fP (\fI\%str\fP) \-\- encoding in which to save the subtitles, default is to keep original encoding.
.UNINDENT
.TP
.B Returns
the saved subtitles
.TP
.B Return type
list of \fBSubtitle\fP
.UNINDENT
.UNINDENT
.SS Video
.INDENT 0.0
.TP
.B subliminal.video.VIDEO_EXTENSIONS
Video extensions
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.video.Video(name, format=None, release_group=None, resolution=None, video_codec=None, audio_codec=None, imdb_id=None, hashes=None, size=None, subtitle_languages=None)
Base class for videos.
.sp
Represent a video, existing or not.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBname\fP (\fI\%str\fP) \-\- name or path of the video.
.IP \(bu 2
\fBformat\fP (\fI\%str\fP) \-\- format of the video (HDTV, WEB\-DL, BluRay, ...).
.IP \(bu 2
\fBrelease_group\fP (\fI\%str\fP) \-\- release group of the video.
.IP \(bu 2
\fBresolution\fP (\fI\%str\fP) \-\- resolution of the video stream (480p, 720p, 1080p or 1080i).
.IP \(bu 2
\fBvideo_codec\fP (\fI\%str\fP) \-\- codec of the video stream.
.IP \(bu 2
\fBaudio_codec\fP (\fI\%str\fP) \-\- codec of the main audio stream.
.IP \(bu 2
\fBimdb_id\fP (\fI\%str\fP) \-\- IMDb id of the video.
.IP \(bu 2
\fBhashes\fP (\fI\%dict\fP) \-\- hashes of the video file by provider names.
.IP \(bu 2
\fBsize\fP (\fI\%int\fP) \-\- size of the video file in bytes.
.IP \(bu 2
\fBsubtitle_languages\fP (\fI\%set\fP) \-\- existing subtitle languages.
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B name = None
Name or path of the video
.UNINDENT
.INDENT 7.0
.TP
.B format = None
Format of the video (HDTV, WEB\-DL, BluRay, ...)
.UNINDENT
.INDENT 7.0
.TP
.B release_group = None
Release group of the video
.UNINDENT
.INDENT 7.0
.TP
.B resolution = None
Resolution of the video stream (480p, 720p, 1080p or 1080i)
.UNINDENT
.INDENT 7.0
.TP
.B video_codec = None
Codec of the video stream
.UNINDENT
.INDENT 7.0
.TP
.B audio_codec = None
Codec of the main audio stream
.UNINDENT
.INDENT 7.0
.TP
.B imdb_id = None
IMDb id of the video
.UNINDENT
.INDENT 7.0
.TP
.B hashes = None
Hashes of the video file by provider names
.UNINDENT
.INDENT 7.0
.TP
.B size = None
Size of the video file in bytes
.UNINDENT
.INDENT 7.0
.TP
.B subtitle_languages = None
Existing subtitle languages
.UNINDENT
.INDENT 7.0
.TP
.B exists
Test whether the video exists
.UNINDENT
.INDENT 7.0
.TP
.B age
Age of the video
.UNINDENT
.INDENT 7.0
.TP
.B classmethod fromguess(name, guess)
Create an \fI\%Episode\fP or a \fI\%Movie\fP with the given \fIname\fP based on the \fIguess\fP\&.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBname\fP (\fI\%str\fP) \-\- name of the video.
.IP \(bu 2
\fBguess\fP (\fI\%dict\fP) \-\- guessed data.
.UNINDENT
.TP
.B Raise
\fI\%ValueError\fP if the \fItype\fP of the \fIguess\fP is invalid
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B classmethod fromname(name)
Shortcut for \fI\%fromguess()\fP with a \fIguess\fP guessed from the \fIname\fP\&.
.INDENT 7.0
.TP
.B Parameters
\fBname\fP (\fI\%str\fP) \-\- name of the video.
.UNINDENT
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.video.Episode(name, series, season, episode, title=None, year=None, original_series=True, tvdb_id=None, series_tvdb_id=None, series_imdb_id=None, **kwargs)
Episode \fI\%Video\fP\&.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBseries\fP (\fI\%str\fP) \-\- series of the episode.
.IP \(bu 2
\fBseason\fP (\fI\%int\fP) \-\- season number of the episode.
.IP \(bu 2
\fBepisode\fP (\fI\%int\fP) \-\- episode number of the episode.
.IP \(bu 2
\fBtitle\fP (\fI\%str\fP) \-\- title of the episode.
.IP \(bu 2
\fByear\fP (\fI\%int\fP) \-\- year of the series.
.IP \(bu 2
\fBoriginal_series\fP (\fI\%bool\fP) \-\- whether the series is the first with this name.
.IP \(bu 2
\fBtvdb_id\fP (\fI\%int\fP) \-\- TVDB id of the episode.
.IP \(bu 2
\fB**kwargs\fP \-\- additional parameters for the \fI\%Video\fP constructor.
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B series = None
Series of the episode
.UNINDENT
.INDENT 7.0
.TP
.B season = None
Season number of the episode
.UNINDENT
.INDENT 7.0
.TP
.B episode = None
Episode number of the episode
.UNINDENT
.INDENT 7.0
.TP
.B title = None
Title of the episode
.UNINDENT
.INDENT 7.0
.TP
.B year = None
Year of series
.UNINDENT
.INDENT 7.0
.TP
.B original_series = None
The series is the first with this name
.UNINDENT
.INDENT 7.0
.TP
.B tvdb_id = None
TVDB id of the episode
.UNINDENT
.INDENT 7.0
.TP
.B series_tvdb_id = None
TVDB id of the series
.UNINDENT
.INDENT 7.0
.TP
.B series_imdb_id = None
IMDb id of the series
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.video.Movie(name, title, year=None, **kwargs)
Movie \fI\%Video\fP\&.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBtitle\fP (\fI\%str\fP) \-\- title of the movie.
.IP \(bu 2
\fByear\fP (\fI\%int\fP) \-\- year of the movie.
.IP \(bu 2
\fB**kwargs\fP \-\- additional parameters for the \fI\%Video\fP constructor.
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B title = None
Title of the movie
.UNINDENT
.INDENT 7.0
.TP
.B year = None
Year of the movie
.UNINDENT
.UNINDENT
.SS Subtitle
.INDENT 0.0
.TP
.B subliminal.subtitle.SUBTITLE_EXTENSIONS
Subtitle extensions
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.subtitle.Subtitle(language, hearing_impaired=False, page_link=None, encoding=None)
Base class for subtitle.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBlanguage\fP (\fI\%Language\fP) \-\- language of the subtitle.
.IP \(bu 2
\fBhearing_impaired\fP (\fI\%bool\fP) \-\- whether or not the subtitle is hearing impaired.
.IP \(bu 2
\fBpage_link\fP (\fI\%str\fP) \-\- URL of the web page from which the subtitle can be downloaded.
.IP \(bu 2
\fBencoding\fP (\fI\%str\fP) \-\- Text encoding of the subtitle.
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B provider_name = \(aq\(aq
Name of the provider that returns that class of subtitle
.UNINDENT
.INDENT 7.0
.TP
.B language = None
Language of the subtitle
.UNINDENT
.INDENT 7.0
.TP
.B hearing_impaired = None
Whether or not the subtitle is hearing impaired
.UNINDENT
.INDENT 7.0
.TP
.B page_link = None
URL of the web page from which the subtitle can be downloaded
.UNINDENT
.INDENT 7.0
.TP
.B content = None
Content as bytes
.UNINDENT
.INDENT 7.0
.TP
.B encoding = None
Encoding to decode with when accessing \fI\%text\fP
.UNINDENT
.INDENT 7.0
.TP
.B id
Unique identifier of the subtitle
.UNINDENT
.INDENT 7.0
.TP
.B text
Content as string
.sp
If \fI\%encoding\fP is None, the encoding is guessed with \fI\%guess_encoding()\fP
.UNINDENT
.INDENT 7.0
.TP
.B is_valid()
Check if a \fI\%text\fP is a valid SubRip format.
.INDENT 7.0
.TP
.B Returns
whether or not the subtitle is valid.
.TP
.B Return type
\fI\%bool\fP
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B guess_encoding()
Guess encoding using the language, falling back on chardet.
.INDENT 7.0
.TP
.B Returns
the guessed encoding.
.TP
.B Return type
\fI\%str\fP
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B get_matches(video)
Get the matches against the \fIvideo\fP\&.
.INDENT 7.0
.TP
.B Parameters
\fBvideo\fP (\fBVideo\fP) \-\- the video to get the matches with.
.TP
.B Returns
matches of the subtitle.
.TP
.B Return type
\fI\%set\fP
.UNINDENT
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.subtitle.get_subtitle_path(video_path, language=None, extension=\(aq.srt\(aq)
Get the subtitle path using the \fIvideo_path\fP and \fIlanguage\fP\&.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBvideo_path\fP (\fI\%str\fP) \-\- path to the video.
.IP \(bu 2
\fBlanguage\fP (\fI\%Language\fP) \-\- language of the subtitle to put in the path.
.IP \(bu 2
\fBextension\fP (\fI\%str\fP) \-\- extension of the subtitle.
.UNINDENT
.TP
.B Returns
path of the subtitle.
.TP
.B Return type
\fI\%str\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.subtitle.guess_matches(video, guess, partial=False)
Get matches between a \fIvideo\fP and a \fIguess\fP\&.
.sp
If a guess is \fIpartial\fP, the absence information won\(aqt be counted as a match.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBvideo\fP (\fBVideo\fP) \-\- the video.
.IP \(bu 2
\fBguess\fP (\fI\%dict\fP) \-\- the guess.
.IP \(bu 2
\fBpartial\fP (\fI\%bool\fP) \-\- whether or not the guess is partial.
.UNINDENT
.TP
.B Returns
matches between the \fIvideo\fP and the \fIguess\fP\&.
.TP
.B Return type
\fI\%set\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.subtitle.fix_line_ending(content)
Fix line ending of \fIcontent\fP by changing it to 
.
.INDENT 7.0
.INDENT 3.5
.INDENT 0.0
.TP
.B param bytes content
content of the subtitle.
.TP
.B return
the content with fixed line endings.
.TP
.B rtype
bytes
.UNINDENT
.UNINDENT
.UNINDENT
.UNINDENT
.SS Providers
.INDENT 0.0
.TP
.B class subliminal.providers.TimeoutSafeTransport(timeout, *args, **kwargs)
Timeout support for \fBxmlrpc.client.SafeTransport\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.providers.ParserBeautifulSoup(markup, parsers, **kwargs)
A \fBbs4.BeautifulSoup\fP that picks the first parser available in \fIparsers\fP\&.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBmarkup\fP \-\- markup for the \fBbs4.BeautifulSoup\fP\&.
.IP \(bu 2
\fBparsers\fP (\fI\%list\fP) \-\- parser names, in order of preference.
.UNINDENT
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.providers.Provider
Base class for providers.
.sp
If any configuration is possible for the provider, like credentials, it must take place during instantiation.
.INDENT 7.0
.TP
.B Raise
\fBConfigurationError\fP if there is a configuration error
.UNINDENT
.INDENT 7.0
.TP
.B languages = set()
Supported set of \fI\%Language\fP
.UNINDENT
.INDENT 7.0
.TP
.B video_types = (<class \(aqsubliminal.video.Episode\(aq>, <class \(aqsubliminal.video.Movie\(aq>)
Supported video types
.UNINDENT
.INDENT 7.0
.TP
.B required_hash = None
Required hash, if any
.UNINDENT
.INDENT 7.0
.TP
.B initialize()
Initialize the provider.
.sp
Must be called when starting to work with the provider. This is the place for network initialization
or login operations.
.sp
\fBNOTE:\fP
.INDENT 7.0
.INDENT 3.5
This is called automatically when entering the \fIwith\fP statement
.UNINDENT
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B terminate()
Terminate the provider.
.sp
Must be called when done with the provider. This is the place for network shutdown or logout operations.
.sp
\fBNOTE:\fP
.INDENT 7.0
.INDENT 3.5
This is called automatically when exiting the \fIwith\fP statement
.UNINDENT
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B classmethod check(video)
Check if the \fIvideo\fP can be processed.
.sp
The \fIvideo\fP is considered invalid if not an instance of \fI\%video_types\fP or if the \fI\%required_hash\fP is
not present in \fBhashes\fP attribute of the \fIvideo\fP\&.
.INDENT 7.0
.TP
.B Parameters
\fBvideo\fP (\fBVideo\fP) \-\- the video to check.
.TP
.B Returns
\fITrue\fP if the \fIvideo\fP is valid, \fIFalse\fP otherwise.
.TP
.B Return type
\fI\%bool\fP
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B query(*args, **kwargs)
Query the provider for subtitles.
.sp
Arguments should match as much as possible the actual parameters for querying the provider
.INDENT 7.0
.TP
.B Returns
found subtitles.
.TP
.B Return type
list of \fBSubtitle\fP
.TP
.B Raise
\fBProviderError\fP
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B list_subtitles(video, languages)
List subtitles for the \fIvideo\fP with the given \fIlanguages\fP\&.
.sp
This will call the \fI\%query()\fP method internally. The parameters passed to the \fI\%query()\fP method may
vary depending on the amount of information available in the \fIvideo\fP\&.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBvideo\fP (\fBVideo\fP) \-\- video to list subtitles for.
.IP \(bu 2
\fBlanguages\fP (set of \fI\%Language\fP) \-\- languages to search for.
.UNINDENT
.TP
.B Returns
found subtitles.
.TP
.B Return type
list of \fBSubtitle\fP
.TP
.B Raise
\fBProviderError\fP
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B download_subtitle(subtitle)
Download \fIsubtitle\fP\(aqs \fBcontent\fP\&.
.INDENT 7.0
.TP
.B Parameters
\fBsubtitle\fP (\fBSubtitle\fP) \-\- subtitle to download.
.TP
.B Raise
\fBProviderError\fP
.UNINDENT
.UNINDENT
.UNINDENT
.SS Addic7ed
.INDENT 0.0
.TP
.B subliminal.providers.addic7ed.series_year_re = re.compile("^(?P<series>[ \e\ew\e\e\(aq.:(),&!?\-]+?)(?: \e\e((?P<year>\e\ed{4})\e\e))?$")
Series header parsing regex
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.providers.addic7ed.Addic7edSubtitle(language, hearing_impaired, page_link, series, season, episode, title, year, version, download_link)
Addic7ed Subtitle.
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.providers.addic7ed.Addic7edProvider(username=None, password=None)
Addic7ed Provider.
.INDENT 7.0
.TP
.B _get_show_ids()
Get the \fBdict\fP of show ids per series by querying the \fIshows.php\fP page.
.INDENT 7.0
.TP
.B Returns
show id per series, lower case and without quotes.
.TP
.B Return type
\fI\%dict\fP
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B _search_show_id(series, year=None)
Search the show id from the \fIseries\fP and \fIyear\fP\&.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBseries\fP (\fI\%str\fP) \-\- series of the episode.
.IP \(bu 2
\fByear\fP (\fI\%int\fP) \-\- year of the series, if any.
.UNINDENT
.TP
.B Returns
the show id, if found.
.TP
.B Return type
\fI\%int\fP
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B get_show_id(series, year=None, country_code=None)
Get the best matching show id for \fIseries\fP, \fIyear\fP and \fIcountry_code\fP\&.
.sp
First search in the result of \fI\%_get_show_ids()\fP and fallback on a search with \fI\%_search_show_id()\fP\&.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBseries\fP (\fI\%str\fP) \-\- series of the episode.
.IP \(bu 2
\fByear\fP (\fI\%int\fP) \-\- year of the series, if any.
.IP \(bu 2
\fBcountry_code\fP (\fI\%str\fP) \-\- country code of the series, if any.
.UNINDENT
.TP
.B Returns
the show id, if found.
.TP
.B Return type
\fI\%int\fP
.UNINDENT
.UNINDENT
.UNINDENT
.SS LegendasTv
.INDENT 0.0
.TP
.B subliminal.providers.legendastv.type_map = {\(aqM\(aq: \(aqmovie\(aq, \(aqC\(aq: \(aqepisode\(aq, \(aqS\(aq: \(aqepisode\(aq}
Conversion map for types
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.providers.legendastv.season_re = re.compile(\(aq \- (?P<season>\e\ed+)(\e\exaa|a|st|nd|rd|th) (temporada|season)\(aq, re.IGNORECASE)
BR title season parsing regex
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.providers.legendastv.downloads_re = re.compile(\(aq(?P<downloads>\e\ed+) downloads\(aq)
Downloads parsing regex
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.providers.legendastv.rating_re = re.compile(\(aqnota (?P<rating>\e\ed+)\(aq)
Rating parsing regex
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.providers.legendastv.timestamp_re = re.compile(\(aq(?P<day>\e\ed+)/(?P<month>\e\ed+)/(?P<year>\e\ed+) \- (?P<hour>\e\ed+):(?P<minute>\e\ed+)\(aq)
Timestamp parsing regex
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.providers.legendastv.releases_key = \(aqsubliminal.providers.legendastv:releases|{archive_id}\(aq
Cache key for releases
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.providers.legendastv.LegendasTVArchive(id, name, pack, featured, link, downloads=0, rating=0, timestamp=None)
LegendasTV Archive.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBid\fP (\fI\%str\fP) \-\- identifier.
.IP \(bu 2
\fBname\fP (\fI\%str\fP) \-\- name.
.IP \(bu 2
\fBpack\fP (\fI\%bool\fP) \-\- contains subtitles for multiple episodes.
.IP \(bu 2
\fBpack\fP \-\- featured.
.IP \(bu 2
\fBlink\fP (\fI\%str\fP) \-\- link.
.IP \(bu 2
\fBdownloads\fP (\fI\%int\fP) \-\- download count.
.IP \(bu 2
\fBrating\fP (\fI\%int\fP) \-\- rating (0\-10).
.IP \(bu 2
\fBtimestamp\fP (\fI\%datetime.datetime\fP) \-\- timestamp.
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B id = None
Identifier
.UNINDENT
.INDENT 7.0
.TP
.B name = None
Name
.UNINDENT
.INDENT 7.0
.TP
.B pack = None
Pack
.UNINDENT
.INDENT 7.0
.TP
.B featured = None
Featured
.UNINDENT
.INDENT 7.0
.TP
.B link = None
Link
.UNINDENT
.INDENT 7.0
.TP
.B downloads = None
Download count
.UNINDENT
.INDENT 7.0
.TP
.B rating = None
Rating (0\-10)
.UNINDENT
.INDENT 7.0
.TP
.B timestamp = None
Timestamp
.UNINDENT
.INDENT 7.0
.TP
.B content = None
Compressed content as \fI\%rarfile.RarFile\fP or \fI\%zipfile.ZipFile\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.providers.legendastv.LegendasTVSubtitle(language, type, title, year, imdb_id, season, archive, name)
LegendasTV Subtitle.
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.providers.legendastv.LegendasTVProvider(username=None, password=None)
LegendasTV Provider.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBusername\fP (\fI\%str\fP) \-\- username.
.IP \(bu 2
\fBpassword\fP (\fI\%str\fP) \-\- password.
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B search_titles(title)
Search for titles matching the \fItitle\fP\&.
.INDENT 7.0
.TP
.B Parameters
\fBtitle\fP (\fI\%str\fP) \-\- the title to search for.
.TP
.B Returns
found titles.
.TP
.B Return type
\fI\%dict\fP
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B get_archives(title_id, language_code)
Get the archive list from a given \fItitle_id\fP and \fIlanguage_code\fP\&.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBtitle_id\fP (\fI\%int\fP) \-\- title id.
.IP \(bu 2
\fBlanguage_code\fP (\fI\%int\fP) \-\- language code.
.UNINDENT
.TP
.B Returns
the archives.
.TP
.B Return type
list of \fI\%LegendasTVArchive\fP
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B download_archive(archive)
Download an archive\(aqs \fI\%content\fP\&.
.INDENT 7.0
.TP
.B Parameters
\fBarchive\fP (\fI\%LegendasTVArchive\fP) \-\- the archive to download \fI\%content\fP of.
.UNINDENT
.UNINDENT
.UNINDENT
.SS NapiProjekt
.INDENT 0.0
.TP
.B subliminal.providers.napiprojekt.get_subhash(hash)
Get a second hash based on napiprojekt\(aqs hash.
.INDENT 7.0
.TP
.B Parameters
\fBhash\fP (\fI\%str\fP) \-\- napiprojekt\(aqs hash.
.TP
.B Returns
the subhash.
.TP
.B Return type
\fI\%str\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.providers.napiprojekt.NapiProjektSubtitle(language, hash)
NapiProjekt Subtitle.
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.providers.napiprojekt.NapiProjektProvider
NapiProjekt Provider.
.UNINDENT
.SS OpenSubtitles
.INDENT 0.0
.TP
.B class subliminal.providers.opensubtitles.OpenSubtitlesSubtitle(language, hearing_impaired, page_link, subtitle_id, matched_by, movie_kind, hash, movie_name, movie_release_name, movie_year, movie_imdb_id, series_season, series_episode, filename, encoding)
OpenSubtitles Subtitle.
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.providers.opensubtitles.OpenSubtitlesProvider(username=None, password=None)
OpenSubtitles Provider.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBusername\fP (\fI\%str\fP) \-\- username.
.IP \(bu 2
\fBpassword\fP (\fI\%str\fP) \-\- password.
.UNINDENT
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B exception subliminal.providers.opensubtitles.OpenSubtitlesError
Base class for non\-generic \fI\%OpenSubtitlesProvider\fP exceptions.
.UNINDENT
.INDENT 0.0
.TP
.B exception subliminal.providers.opensubtitles.Unauthorized
Exception raised when status is \(aq401 Unauthorized\(aq.
.UNINDENT
.INDENT 0.0
.TP
.B exception subliminal.providers.opensubtitles.NoSession
Exception raised when status is \(aq406 No session\(aq.
.UNINDENT
.INDENT 0.0
.TP
.B exception subliminal.providers.opensubtitles.DownloadLimitReached
Exception raised when status is \(aq407 Download limit reached\(aq.
.UNINDENT
.INDENT 0.0
.TP
.B exception subliminal.providers.opensubtitles.InvalidImdbid
Exception raised when status is \(aq413 Invalid ImdbID\(aq.
.UNINDENT
.INDENT 0.0
.TP
.B exception subliminal.providers.opensubtitles.UnknownUserAgent
Exception raised when status is \(aq414 Unknown User Agent\(aq.
.UNINDENT
.INDENT 0.0
.TP
.B exception subliminal.providers.opensubtitles.DisabledUserAgent
Exception raised when status is \(aq415 Disabled user agent\(aq.
.UNINDENT
.INDENT 0.0
.TP
.B exception subliminal.providers.opensubtitles.ServiceUnavailable
Exception raised when status is \(aq503 Service Unavailable\(aq.
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.providers.opensubtitles.checked(response)
Check a response status before returning it.
.INDENT 7.0
.TP
.B Parameters
\fBresponse\fP \-\- a response from a XMLRPC call to OpenSubtitles.
.TP
.B Returns
the response.
.TP
.B Raise
\fI\%OpenSubtitlesError\fP
.UNINDENT
.UNINDENT
.SS Podnapisi
.INDENT 0.0
.TP
.B class subliminal.providers.podnapisi.PodnapisiSubtitle(language, hearing_impaired, page_link, pid, releases, title, season=None, episode=None, year=None)
Podnapisi Subtitle.
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.providers.podnapisi.PodnapisiProvider
Podnapisi Provider.
.UNINDENT
.SS Shooter
.INDENT 0.0
.TP
.B class subliminal.providers.shooter.ShooterSubtitle(language, hash, download_link)
Shooter Subtitle.
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.providers.shooter.ShooterProvider
Shooter Provider.
.UNINDENT
.SS SubsCenter
.INDENT 0.0
.TP
.B class subliminal.providers.subscenter.SubsCenterSubtitle(language, hearing_impaired, page_link, series, season, episode, title, subtitle_id, subtitle_key, downloaded, releases)
SubsCenter Subtitle.
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.providers.subscenter.SubsCenterProvider(username=None, password=None)
SubsCenter Provider.
.INDENT 7.0
.TP
.B _search_url_titles(title)
Search the URL titles by kind for the given \fItitle\fP\&.
.INDENT 7.0
.TP
.B Parameters
\fBtitle\fP (\fI\%str\fP) \-\- title to search for.
.TP
.B Returns
the URL titles by kind.
.TP
.B Return type
\fI\%collections.defaultdict\fP
.UNINDENT
.UNINDENT
.UNINDENT
.SS TheSubDB
.INDENT 0.0
.TP
.B class subliminal.providers.thesubdb.TheSubDBSubtitle(language, hash)
TheSubDB Subtitle.
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.providers.thesubdb.TheSubDBProvider
TheSubDB Provider.
.UNINDENT
.SS TVsubtitles
.INDENT 0.0
.TP
.B class subliminal.providers.tvsubtitles.TVsubtitlesSubtitle(language, page_link, subtitle_id, series, season, episode, year, rip, release)
TVsubtitles Subtitle.
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.providers.tvsubtitles.TVsubtitlesProvider
TVsubtitles Provider.
.INDENT 7.0
.TP
.B search_show_id(series, year=None)
Search the show id from the \fIseries\fP and \fIyear\fP\&.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBseries\fP (\fI\%str\fP) \-\- series of the episode.
.IP \(bu 2
\fByear\fP (\fI\%int\fP) \-\- year of the series, if any.
.UNINDENT
.TP
.B Returns
the show id, if any.
.TP
.B Return type
\fI\%int\fP
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B get_episode_ids(show_id, season)
Get episode ids from the show id and the season.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBshow_id\fP (\fI\%int\fP) \-\- show id.
.IP \(bu 2
\fBseason\fP (\fI\%int\fP) \-\- season of the episode.
.UNINDENT
.TP
.B Returns
episode ids per episode number.
.TP
.B Return type
\fI\%dict\fP
.UNINDENT
.UNINDENT
.UNINDENT
.SS Refiners
.sp
Refiners enrich a \fBVideo\fP object by adding information to it.
.sp
A refiner is a simple function:
.INDENT 0.0
.TP
.B subliminal.refiners.refine(video, **kwargs)
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBvideo\fP (\fBVideo\fP) \-\- the video to refine.
.IP \(bu 2
\fB**kwargs\fP \-\- additional parameters for refiners.
.UNINDENT
.UNINDENT
.UNINDENT
.SS Metadata
.INDENT 0.0
.TP
.B subliminal.refiners.metadata.refine(video, embedded_subtitles=True, **kwargs)
Refine a video by searching its metadata.
.sp
Several \fBVideo\fP attributes can be found:
.INDENT 7.0
.INDENT 3.5
.INDENT 0.0
.IP \(bu 2
\fBresolution\fP
.IP \(bu 2
\fBvideo_codec\fP
.IP \(bu 2
\fBaudio_codec\fP
.IP \(bu 2
\fBsubtitle_languages\fP
.UNINDENT
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B Parameters
\fBembedded_subtitles\fP (\fI\%bool\fP) \-\- search for embedded subtitles.
.UNINDENT
.UNINDENT
.SS TVDB
.INDENT 0.0
.TP
.B subliminal.refiners.tvdb.refine(video, **kwargs)
Refine a video by searching \fI\%TheTVDB\fP\&.
.sp
\fBNOTE:\fP
.INDENT 7.0
.INDENT 3.5
This refiner only work for instances of \fBEpisode\fP\&.
.UNINDENT
.UNINDENT
.sp
Several attributes can be found:
.INDENT 7.0
.INDENT 3.5
.INDENT 0.0
.IP \(bu 2
\fBseries\fP
.IP \(bu 2
\fByear\fP
.IP \(bu 2
\fBseries_imdb_id\fP
.IP \(bu 2
\fBseries_tvdb_id\fP
.IP \(bu 2
\fBtitle\fP
.IP \(bu 2
\fBimdb_id\fP
.IP \(bu 2
\fBtvdb_id\fP
.UNINDENT
.UNINDENT
.UNINDENT
.UNINDENT
.SS OMDb
.INDENT 0.0
.TP
.B subliminal.refiners.omdb.refine(video, **kwargs)
Refine a video by searching \fI\%OMDb API\fP\&.
.sp
Several \fBEpisode\fP attributes can be found:
.INDENT 7.0
.INDENT 3.5
.INDENT 0.0
.IP \(bu 2
\fBseries\fP
.IP \(bu 2
\fByear\fP
.IP \(bu 2
\fBseries_imdb_id\fP
.UNINDENT
.UNINDENT
.UNINDENT
.sp
Similarly, for a \fBMovie\fP:
.INDENT 7.0
.INDENT 3.5
.INDENT 0.0
.IP \(bu 2
\fBtitle\fP
.IP \(bu 2
\fByear\fP
.IP \(bu 2
\fBimdb_id\fP
.UNINDENT
.UNINDENT
.UNINDENT
.UNINDENT
.SS Extensions
.INDENT 0.0
.TP
.B class subliminal.extensions.RegistrableExtensionManager(namespace, internal_extensions, **kwargs)
:class:~stevedore.extensions.ExtensionManager\(ga with support for registration.
.sp
It allows loading of internal extensions without setup and registering/unregistering additional extensions.
.sp
Loading is done in this order:
.INDENT 7.0
.IP \(bu 2
Entry point extensions
.IP \(bu 2
Internal extensions
.IP \(bu 2
Registered extensions
.UNINDENT
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBnamespace\fP (\fI\%str\fP) \-\- namespace argument for :class:~stevedore.extensions.ExtensionManager\(ga.
.IP \(bu 2
\fBinternal_extensions\fP (\fI\%list\fP) \-\- internal extensions to use with entry point syntax.
.IP \(bu 2
\fB**kwargs\fP \-\- additional parameters for the :class:~stevedore.extensions.ExtensionManager\(ga constructor.
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B registered_extensions = None
Registered extensions with entry point syntax
.UNINDENT
.INDENT 7.0
.TP
.B internal_extensions = None
Internal extensions with entry point syntax
.UNINDENT
.INDENT 7.0
.TP
.B register(entry_point)
Register an extension
.INDENT 7.0
.TP
.B Parameters
\fBentry_point\fP (\fI\%str\fP) \-\- extension to register (entry point syntax).
.TP
.B Raise
ValueError if already registered.
.UNINDENT
.UNINDENT
.INDENT 7.0
.TP
.B unregister(entry_point)
Unregister a provider
.INDENT 7.0
.TP
.B Parameters
\fBentry_point\fP (\fI\%str\fP) \-\- provider to unregister (entry point syntax).
.UNINDENT
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.extensions.provider_manager = <subliminal.extensions.RegistrableExtensionManager object>
Provider manager
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.extensions.refiner_manager = <subliminal.extensions.RegistrableExtensionManager object>
Refiner manager
.UNINDENT
.SS Score
.sp
This module provides the default implementation of the \fIcompute_score\fP parameter in
\fBdownload_best_subtitles()\fP and \fBdownload_best_subtitles()\fP\&.
.sp
\fBNOTE:\fP
.INDENT 0.0
.INDENT 3.5
To avoid unnecessary dependency on \fI\%sympy\fP and boost subliminal\(aqs import time, the
resulting scores are hardcoded here and manually updated when the set of equations change.
.UNINDENT
.UNINDENT
.sp
Available matches:
.INDENT 0.0
.INDENT 3.5
.INDENT 0.0
.IP \(bu 2
hash
.IP \(bu 2
title
.IP \(bu 2
year
.IP \(bu 2
series
.IP \(bu 2
season
.IP \(bu 2
episode
.IP \(bu 2
release_group
.IP \(bu 2
format
.IP \(bu 2
audio_codec
.IP \(bu 2
resolution
.IP \(bu 2
hearing_impaired
.IP \(bu 2
video_codec
.IP \(bu 2
series_imdb_id
.IP \(bu 2
imdb_id
.IP \(bu 2
tvdb_id
.UNINDENT
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.score.episode_scores = {\(aqresolution\(aq: 2, \(aqseries\(aq: 180, \(aqvideo_codec\(aq: 2, \(aqrelease_group\(aq: 15, \(aqformat\(aq: 7, \(aqhearing_impaired\(aq: 1, \(aqseason\(aq: 30, \(aqhash\(aq: 359, \(aqyear\(aq: 90, \(aqepisode\(aq: 30, \(aqaudio_codec\(aq: 3}
Scores for episodes
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.score.movie_scores = {\(aqresolution\(aq: 2, \(aqvideo_codec\(aq: 2, \(aqrelease_group\(aq: 15, \(aqformat\(aq: 7, \(aqhearing_impaired\(aq: 1, \(aqhash\(aq: 119, \(aqyear\(aq: 30, \(aqtitle\(aq: 60, \(aqaudio_codec\(aq: 3}
Scores for movies
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.score.equivalent_release_groups = ({\(aqDIMENSION\(aq, \(aqLOL\(aq}, {\(aqASAP\(aq, \(aqFLEET\(aq, \(aqIMMERSE\(aq})
Equivalent release groups
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.score.get_equivalent_release_groups(release_group)
Get all the equivalents of the given release group.
.INDENT 7.0
.TP
.B Parameters
\fBrelease_group\fP (\fI\%str\fP) \-\- the release group to get the equivalents of.
.TP
.B Returns
the equivalent release groups.
.TP
.B Return type
\fI\%set\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.score.get_scores(video)
Get the scores dict for the given \fIvideo\fP\&.
.sp
This will return either \fI\%episode_scores\fP or \fI\%movie_scores\fP based on the type of the \fIvideo\fP\&.
.INDENT 7.0
.TP
.B Parameters
\fBvideo\fP (\fBVideo\fP) \-\- the video to compute the score against.
.TP
.B Returns
the scores dict.
.TP
.B Return type
\fI\%dict\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.score.compute_score(subtitle, video, hearing_impaired=None)
Compute the score of the \fIsubtitle\fP against the \fIvideo\fP with \fIhearing_impaired\fP preference.
.sp
\fI\%compute_score()\fP uses the \fBSubtitle.get_matches\fP method and
applies the scores (either from \fI\%episode_scores\fP or \fI\%movie_scores\fP) after some processing.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBsubtitle\fP (\fBSubtitle\fP) \-\- the subtitle to compute the score of.
.IP \(bu 2
\fBvideo\fP (\fBVideo\fP) \-\- the video to compute the score against.
.IP \(bu 2
\fBhearing_impaired\fP (\fI\%bool\fP) \-\- hearing impaired preference.
.UNINDENT
.TP
.B Returns
score of the subtitle.
.TP
.B Return type
\fI\%int\fP
.UNINDENT
.UNINDENT
.SS Utils
.INDENT 0.0
.TP
.B subliminal.utils.hash_opensubtitles(video_path)
Compute a hash using OpenSubtitles\(aq algorithm.
.INDENT 7.0
.TP
.B Parameters
\fBvideo_path\fP (\fI\%str\fP) \-\- path of the video.
.TP
.B Returns
the hash.
.TP
.B Return type
\fI\%str\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.utils.hash_thesubdb(video_path)
Compute a hash using TheSubDB\(aqs algorithm.
.INDENT 7.0
.TP
.B Parameters
\fBvideo_path\fP (\fI\%str\fP) \-\- path of the video.
.TP
.B Returns
the hash.
.TP
.B Return type
\fI\%str\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.utils.hash_napiprojekt(video_path)
Compute a hash using NapiProjekt\(aqs algorithm.
.INDENT 7.0
.TP
.B Parameters
\fBvideo_path\fP (\fI\%str\fP) \-\- path of the video.
.TP
.B Returns
the hash.
.TP
.B Return type
\fI\%str\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.utils.hash_shooter(video_path)
Compute a hash using Shooter\(aqs algorithm
.INDENT 7.0
.TP
.B Parameters
\fBvideo_path\fP (\fI\%string\fP) \-\- path of the video
.TP
.B Returns
the hash
.TP
.B Return type
\fI\%string\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.utils.sanitize(string, ignore_characters=None)
Sanitize a string to strip special characters.
.INDENT 7.0
.TP
.B Parameters
.INDENT 7.0
.IP \(bu 2
\fBstring\fP (\fI\%str\fP) \-\- the string to sanitize.
.IP \(bu 2
\fBignore_characters\fP (\fI\%set\fP) \-\- characters to ignore.
.UNINDENT
.TP
.B Returns
the sanitized string.
.TP
.B Return type
\fI\%str\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.utils.sanitize_release_group(string)
Sanitize a \fIrelease_group\fP string to remove content in square brackets.
.INDENT 7.0
.TP
.B Parameters
\fBstring\fP (\fI\%str\fP) \-\- the release group to sanitize.
.TP
.B Returns
the sanitized release group.
.TP
.B Return type
\fI\%str\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.utils.timestamp(date)
Get the timestamp of the \fIdate\fP, python2/3 compatible
.INDENT 7.0
.TP
.B Parameters
\fBdate\fP (\fI\%datetime.datetime\fP) \-\- the utc date.
.TP
.B Returns
the timestamp of the date.
.TP
.B Return type
\fI\%float\fP
.UNINDENT
.UNINDENT
.SS Cache
.INDENT 0.0
.TP
.B subliminal.cache.SHOW_EXPIRATION_TIME
Expiration time for show caching
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.cache.EPISODE_EXPIRATION_TIME
Expiration time for episode caching
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.cache.REFINER_EXPIRATION_TIME
Expiration time for scraper searches
.UNINDENT
.INDENT 0.0
.TP
.B subliminal.cache.region
The \fI\%CacheRegion\fP
.UNINDENT
.sp
Refer to dogpile.cache\(aqs \fI\%region configuration documentation\fP to see how to configure the region
.SS CLI
.sp
Subliminal uses \fI\%click\fP to provide a powerful CLI\&.
.INDENT 0.0
.TP
.B class subliminal.cli.MutexLock(filename)
\fI\%MutexLock\fP is a thread\-based rw lock based on \fI\%dogpile.core.ReadWriteMutex\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.cli.Config(path)
A \fI\%ConfigParser\fP wrapper to store configuration.
.sp
Interaction with the configuration is done with the properties.
.INDENT 7.0
.TP
.B Parameters
\fBpath\fP (\fI\%str\fP) \-\- path to the configuration file.
.UNINDENT
.INDENT 7.0
.TP
.B path = None
Path to the configuration file
.UNINDENT
.INDENT 7.0
.TP
.B config = None
The underlying configuration object
.UNINDENT
.INDENT 7.0
.TP
.B read()
Read the configuration from \fI\%path\fP
.UNINDENT
.INDENT 7.0
.TP
.B write()
Write the configuration to \fI\%path\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.cli.LanguageParamType
\fI\%ParamType\fP for languages that returns a \fI\%Language\fP
.UNINDENT
.INDENT 0.0
.TP
.B class subliminal.cli.AgeParamType
\fI\%ParamType\fP for age strings that returns a \fI\%timedelta\fP
.sp
An age string is in the form \fInumber + identifier\fP with possible identifiers:
.INDENT 7.0
.INDENT 3.5
.INDENT 0.0
.IP \(bu 2
\fBw\fP for weeks
.IP \(bu 2
\fBd\fP for days
.IP \(bu 2
\fBh\fP for hours
.UNINDENT
.UNINDENT
.UNINDENT
.sp
The form can be specified multiple times but only with that idenfier ordering. For example:
.INDENT 7.0
.INDENT 3.5
.INDENT 0.0
.IP \(bu 2
\fB1w2d4h\fP for 1 week, 2 days and 4 hours
.IP \(bu 2
\fB2w\fP for 2 weeks
.IP \(bu 2
\fB3w6h\fP for 3 weeks and 6 hours
.UNINDENT
.UNINDENT
.UNINDENT
.UNINDENT
.SS Exceptions
.INDENT 0.0
.TP
.B exception subliminal.exceptions.Error
Base class for exceptions in subliminal.
.UNINDENT
.INDENT 0.0
.TP
.B exception subliminal.exceptions.ProviderError
Exception raised by providers.
.UNINDENT
.INDENT 0.0
.TP
.B exception subliminal.exceptions.ConfigurationError
Exception raised by providers when badly configured.
.UNINDENT
.INDENT 0.0
.TP
.B exception subliminal.exceptions.AuthenticationError
Exception raised by providers when authentication failed.
.UNINDENT
.INDENT 0.0
.TP
.B exception subliminal.exceptions.TooManyRequests
Exception raised by providers when too many requests are made.
.UNINDENT
.INDENT 0.0
.TP
.B exception subliminal.exceptions.DownloadLimitExceeded
Exception raised by providers when download limit is exceeded.
.UNINDENT
.SH LICENSE
.sp
MIT
.INDENT 0.0
.IP \(bu 2
genindex
.IP \(bu 2
modindex
.IP \(bu 2
search
.UNINDENT
.SH AUTHOR
Antoine Bertin
.SH COPYRIGHT
2016, Antoine Bertin
.\" Generated by docutils manpage writer.
.
openSUSE Build Service is sponsored by