# coding=utf-8
"""
Модуль реализует класс Account для получения пользовательской информации.
"""
from .utils import BaseCinemate, require, parse_datetime
from .movie import Title
[документация]class Account(BaseCinemate):
""" Класс для получения пользовательских данных.
"""
cinemate = None
@require('username', 'password')
[документация] def auth(self):
""" Метод API
`account.auth <http://cinemate.cc/help/api/account.auth/>`_ возвращает
passkey.
:return: passkey
:rtype: :py:class:`str`
"""
params = {
'username': self.cinemate.username,
'password': self.cinemate.password,
}
req = self.cinemate.api_get('account.auth', params=params)
self.cinemate.passkey = req.json().get('passkey')
return self.cinemate.passkey
@require('passkey')
[документация] def profile(self):
""" Метод API
`account.profile <http://cinemate.cc/help/api/account.profile/>`_
получить поля профиля.
:return: словарь с полями профиля
:rtype: :py:class:`dict`
"""
url = 'account.profile'
req = self.cinemate.api_get(url, passkey=True)
return req.json()
@require('passkey')
[документация] def updatelist(self):
""" Метод API
`account.updatelist <http://cinemate.cc/help/api/account.updatelist/>`_
возвращает записи ленты обновлений пользователя.
:return: список персон и фильмов за которыми следит пользователь
:rtype: :py:class:`list`
"""
url = 'account.updatelist'
req = self.cinemate.api_get(url, passkey=True)
results = req.json().get('item', [])
for a in results:
item = a.get('for_object', {})
a['date'] = parse_datetime(a['date'])
if 'person' in item:
person = item['person']
person_id = person['id']
title = person['title']
person = self.cinemate.person(person_id, name=title)
a['for_object'] = person
if 'movie' in item:
movie = item['movie']
title, year = movie['title'].rsplit(' ', 1)
year = int(year.lstrip('(').rstrip(')'))
movie = self.cinemate.movie(
movie['id'],
title=title,
year=year
)
a['for_object'] = movie
return results
@require('passkey')
[документация] def watchlist(self):
""" Метод API
`account.watchlist <http://cinemate.cc/help/api/account.watchlist/>`_
возвращает список объектов слежения пользователя.
:return: словарь объектов слежения с ключами movie, person
:rtype: :py:class:`dict`
"""
url = 'account.watchlist'
req = self.cinemate.api_get(url, passkey=True)
json_movies = req.json().get('movie', [])
json_persons = req.json().get('person', [])
movies = []
persons = []
for m in json_movies:
movie_id = m.get('id', m['url'].split('/')[-2])
title, year = m['name'].rsplit(' ', 1)
year = int(year.lstrip('(').rstrip(')'))
movie = self.cinemate.movie(
movie_id,
title=Title(title),
year=year
)
movie.url = m['url']
movie.date = parse_datetime(m['date'])
movies.append(movie)
for p in json_persons:
person_id = p.get('id', p['url'].split('/')[-2])
person = self.cinemate.person(person_id, name=p['name'])
person.url = p['url']
person.date = parse_datetime(p['date'])
persons.append(person)
return {
'movie': movies,
'person': persons,
}