Source code for flexget.components.imdb.api
from flask import jsonify
from flexget.api import APIResource, api
from flexget.api.app import etag
from flexget.components.imdb.utils import ImdbSearch
imdb_api = api.namespace('imdb', description='IMDB lookup endpoint')
[docs]
class ObjectsContainer:
movie_object = {
'type': 'object',
'properties': {
'imdb_id': {'type': 'string'},
'match': {'type': 'number'},
'name': {'type': 'string'},
'url': {'type': 'string'},
'year': {'type': 'number'},
'thumbnail': {'type': 'string'},
},
'required': ['imdb_id', 'match', 'name', 'url', 'year'],
'additionalProperties': False,
}
return_object = {'type': 'array', 'items': movie_object}
return_schema = api.schema_model('imdb_search_schema', ObjectsContainer.return_object)
[docs]
@imdb_api.route('/search/<string:title>/')
@api.doc(params={'title': 'Movie name or IMDB ID'})
class IMDBMovieSearch(APIResource):
# noinspection PyUnusedLocal
[docs]
@etag
@api.response(200, model=return_schema)
def get(self, title, session=None):
"""Get a list of IMDB search result by name or ID."""
raw_movies = ImdbSearch().smart_match(title, single_match=False)
if not raw_movies:
return jsonify([])
# Convert single movie to list to preserve consistent reply
if not isinstance(raw_movies, list):
raw_movies = [raw_movies]
return jsonify(raw_movies)