Source code for rdiosock.user

# rdio-sock - Rdio WebSocket Library
# Copyright (C) 2013  fzza- <fzzzzzzzza@gmail.com>

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.


import requests
from rdiosock.exceptions import RdioApiError, RdioNetworkError
from rdiosock.logr import Logr
from rdiosock.utils import web_url, update_attrs


[docs]class RdioUser: def __init__(self, sock): self._sock = sock # Environment Information self.env_loaded = False self.session_cookie = None # HTTP session cookie # - Internal Data self.id = None self.key = None self.authorization_key = None # - User Details self.first_name = None self.last_name = None self.vanity_name = None # - State details self.is_anonymous = None self.new_user = None
[docs] def login(self, username, password, remember=True): """Login as an Rdio user :param username: Username in plaintext :type username: str :param password: Password in plaintext :type password: str :param remember: Should we remember this login authorization? :type remember: bool """ if not self.env_loaded or self.authorization_key is None: self._sock._update_env(url=web_url('account/signin')) Logr.debug("login()") # API 'signIn' request (get the redirect_url) signin_result = self._sock._api_post('signIn', { 'username': username, 'password': password, 'remember': int(remember), 'nextUrl': '' }) if signin_result.get('status') != 'ok': raise RdioApiError(signin_result) if not 'result' in signin_result or \ not signin_result['result'].get('success', False): raise RdioApiError() redirect_url = signin_result['result'].get('redirect_url') if redirect_url is None or redirect_url == '': raise RdioApiError() Logr.debug('redirect_url : %s', redirect_url) # Web redirect request (get the session_cookie) redirect_result = requests.get(redirect_url) if redirect_result.status_code != 200: raise RdioNetworkError("HTTP request returned an unexpected status_code", redirect_result.status_code) if len(redirect_result.history) != 1 or \ redirect_result.history[0].status_code != 302 or \ 'r' not in redirect_result.history[0].cookies: raise RdioNetworkError("Missing session cookie") # TODO: Store the cookie for later use self.session_cookie = redirect_result.history[0].cookies['r'] Logr.debug('session_cookie : %s', self.session_cookie) self._sock._update_env(data=redirect_result.text)
def _load_env(self, currentUser): Logr.debug('------------- User ------------') update_attrs(self, currentUser, trace=True)