Исходный код cinemate.person

# coding=utf-8
"""
    Модуль реализует класс персоны Person,
    а также класс фотографии персоны Photo
"""
from .utils import require, BaseCinemate, BaseImage, CompareMixin


[документация]class Photo(BaseImage): """ Фотография персоны. Включает в себя 3 тега со ссылками на фотографии разных размеров. :param small: фотография в маленьком разрешении :type small: :py:class:`str` :param medium: фотография в среднем разрешении :type medium: :py:class:`str` :param big: фотография в большом разрешении :type: big: :py:class:`str` """
[документация]class Person(CompareMixin, BaseCinemate): """ Класс персоны. :param person_id: идентификатор персоны на cinemate.cc :type person_id: :py:class:`int` :param name: русскоязычное имя персоны :type name: :py:class:`str` :param name_original: имя персоны в оригинале :type name_original: :py:class:`str` :param photo: фотграфия персоны :type photo: :class:`.Photo` :param url: ссылка на страницу персоны :type url: :py:class:`str` """ cinemate = None def __init__(self, person_id, **kwargs): self.id = int(person_id) self.name = kwargs.get('name') self.name_original = kwargs.get('name_original') self.photo = kwargs.get('photo') self.url = kwargs.get('url') @classmethod
[документация] def from_dict(cls, dct): """ Информация о персоне из словаря, возвращаемого API. :param dct: словарь, возвращаемый API :type dct: :py:class:`dict` :return: персона :rtype: :class:`.Person` """ return cls( person_id=dct.get('id') or dct.get('attrib').get('id'), name=dct.get('name') or dct.get('value'), name_original=dct.get('name_original'), photo=Photo.from_dict(dct.get('photo')), url=dct.get('url') )
@require('apikey') def fetch(self): """ Метод API `person <http://cinemate.cc/help/api/person/>`_ получает полную информацию о персоне :return: персона :rtype: :class:`.Person` """ url = 'person' params = {'id': self.id} req = self.cinemate.api_get(url, apikey=True, params=params) person = req.json().get('person', {}) return self.from_dict(person) @classmethod @require('apikey')
[документация] def get(cls, person_id): """ Короткий аналог person(123).fetch() :param person_id: идентификатор персоны :type person_id: :py:class:`int` :return: персона :rtype: :class:`.Person` """ return cls(person_id).fetch()
@require('apikey')
[документация] def movies(self): """ Метод API `person.movies <http://cinemate.cc/help/api/person.movies/>`_ возвращает фильмы, в съемке которых персона принимала участие в качестве актера или режиссера. :return: словарь с ключами actor, director :rtype: :py:class:`dict` """ url = 'person.movies' params = {'id': self.id} req = self.cinemate.api_get(url, apikey=True, params=params) movies = req.json().get('person').get('movies', {}) actor = movies.get('actor', {}).get('movie', []) director = movies.get('director', {}).get('movie', []) return { 'actor': list(map(self.cinemate.movie.from_dict, actor)), 'director': list(map(self.cinemate.movie.from_dict, director)), }
@classmethod @require('apikey')
[документация] def search(cls, term): """ Метод API `movie.search <http://cinemate.cc/help/api/movie.search/>`_ возвращает первые 10 результатов поиска по базе персон. :param term: искомая строка; поддерживает коррекцию ошибок при печати :type term: :py:class:`str` :return: список персон :rtype: :py:class:`list` """ url = 'person.search' params = {'term': term} req = cls.cinemate.api_get(url, apikey=True, params=params) persons = req.json().get('person', []) return list(map(cls.from_dict, persons))
def __unicode__(self): fields = str(self.id), self.name_original or self.name fields = ' '.join(fields) return '<Person {fields}>'.format(fields=fields)