New supported objects: Experiments, PermissionAlerts, Settings
Added optional fields to Product object The following methods are wrapped: settings, permission-alerts, account/experiments Fixed receiving optional parameters during deserialization
このコミットが含まれているのは:
コミット
b4d173faf9
|
@ -6,9 +6,12 @@ from .permissions import Permissions
|
|||
from .plus import Plus
|
||||
from .subscription import Subscription
|
||||
from .status import Status
|
||||
from .settings import Settings
|
||||
from .permission_alerts import PermissionAlerts
|
||||
from .experiments import Experiments
|
||||
from .price import Price
|
||||
from .product import Product
|
||||
from .auto_renewable import AutoRenewable
|
||||
|
||||
__all__ = ['YandexMusicObject', 'Account', 'PassportPhone', 'InvocationInfo', 'Permissions', 'Plus', 'Subscription',
|
||||
'Status', 'Price', 'Product', 'AutoRenewable']
|
||||
'Status', 'Price', 'Product', 'AutoRenewable', 'Settings', 'PermissionAlerts', 'Experiments']
|
||||
|
|
|
@ -45,6 +45,6 @@ class Account(YandexMusicObject):
|
|||
return None
|
||||
|
||||
data = super(Account, cls).de_json(data, client)
|
||||
data['passport_phones'] = PassportPhone.de_list(data['passport_phones'], client=client)
|
||||
data['passport_phones'] = PassportPhone.de_list(data.get('passport_phones'), client)
|
||||
|
||||
return cls(client=client, **data)
|
||||
|
|
|
@ -31,7 +31,7 @@ class AutoRenewable(YandexMusicObject):
|
|||
return None
|
||||
|
||||
data = super(AutoRenewable, cls).de_json(data, client)
|
||||
data['product'] = Product.de_json(data['product'], client=client)
|
||||
data['product'] = Product.de_json(data.get('product'), client)
|
||||
|
||||
return cls(client=client, **data)
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import logging
|
||||
|
||||
from yandex_music import YandexMusicObject, Status
|
||||
from yandex_music import YandexMusicObject, Status, Settings, PermissionAlerts, Experiments
|
||||
from yandex_music.utils.request import Request
|
||||
from yandex_music.error import InvalidToken
|
||||
|
||||
|
@ -38,3 +38,30 @@ class Client(YandexMusicObject):
|
|||
status = Status.de_json(result, self)
|
||||
|
||||
return status
|
||||
|
||||
def settings(self, timeout=None, **kwargs):
|
||||
url = f'{self.base_url}/settings'
|
||||
|
||||
result = self._request.get(url, timeout=timeout)
|
||||
|
||||
settings = Settings.de_json(result, self)
|
||||
|
||||
return settings
|
||||
|
||||
def permission_alerts(self, timeout=None, **kwargs):
|
||||
url = f'{self.base_url}/permission-alerts'
|
||||
|
||||
result = self._request.get(url, timeout=timeout)
|
||||
|
||||
permission_alerts = PermissionAlerts.de_json(result, self)
|
||||
|
||||
return permission_alerts
|
||||
|
||||
def experiments(self, timeout=None, **kwargs):
|
||||
url = f'{self.base_url}/account/experiments'
|
||||
|
||||
result = self._request.get(url, timeout=timeout)
|
||||
|
||||
experiments = Experiments.de_json(result, self)
|
||||
|
||||
return experiments
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
from yandex_music import YandexMusicObject
|
||||
|
||||
|
||||
class Experiments(YandexMusicObject):
|
||||
def __init__(self,
|
||||
client=None,
|
||||
**kwargs):
|
||||
self.__dict__.update(kwargs)
|
||||
|
||||
self.client = client
|
||||
|
||||
@classmethod
|
||||
def de_json(cls, data, client):
|
||||
if not data:
|
||||
return None
|
||||
|
||||
data = super(Experiments, cls).de_json(data, client)
|
||||
|
||||
return cls(client=client, **data)
|
|
@ -0,0 +1,20 @@
|
|||
from yandex_music import YandexMusicObject
|
||||
|
||||
|
||||
class PermissionAlerts(YandexMusicObject):
|
||||
def __init__(self,
|
||||
alerts,
|
||||
client=None,
|
||||
**kwargs):
|
||||
self.alerts = alerts
|
||||
|
||||
self.client = client
|
||||
|
||||
@classmethod
|
||||
def de_json(cls, data, client):
|
||||
if not data:
|
||||
return None
|
||||
|
||||
data = super(PermissionAlerts, cls).de_json(data, client)
|
||||
|
||||
return cls(client=client, **data)
|
|
@ -11,6 +11,14 @@ class Product(YandexMusicObject):
|
|||
price,
|
||||
feature,
|
||||
debug,
|
||||
features=None,
|
||||
description=None,
|
||||
available=None,
|
||||
trial_available=None,
|
||||
vendor_trial_available=None,
|
||||
button_text=None,
|
||||
button_additional_text=None,
|
||||
payment_method_types=None,
|
||||
client=None,
|
||||
**kwargs):
|
||||
self.product_id = product_id
|
||||
|
@ -22,6 +30,15 @@ class Product(YandexMusicObject):
|
|||
self.feature = feature
|
||||
self.debug = bool(debug)
|
||||
|
||||
self.features = features
|
||||
self.description = description
|
||||
self.available = available
|
||||
self.trial_available = trial_available
|
||||
self.vendor_trial_available = vendor_trial_available
|
||||
self.button_text = button_text
|
||||
self.button_additional_text = button_additional_text
|
||||
self.payment_method_types = payment_method_types
|
||||
|
||||
self.client = client
|
||||
self._id_attrs = (self.product_id,)
|
||||
|
||||
|
@ -31,6 +48,17 @@ class Product(YandexMusicObject):
|
|||
return None
|
||||
|
||||
data = super(Product, cls).de_json(data, client)
|
||||
data['price'] = Price.de_json(data['price'], client=client)
|
||||
data['price'] = Price.de_json(data.get('price'), client)
|
||||
|
||||
return cls(client=client, **data)
|
||||
|
||||
@classmethod
|
||||
def de_list(cls, data, client):
|
||||
if not data:
|
||||
return []
|
||||
|
||||
products = list()
|
||||
for product in data:
|
||||
products.append(cls.de_json(product, client))
|
||||
|
||||
return products
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
from yandex_music import YandexMusicObject
|
||||
|
||||
|
||||
class Settings(YandexMusicObject):
|
||||
def __init__(self,
|
||||
in_app_products,
|
||||
native_products,
|
||||
web_payment_url,
|
||||
promo_codes_enabled,
|
||||
web_payment_month_product_price=None,
|
||||
client=None,
|
||||
**kwargs):
|
||||
self.in_app_products = in_app_products
|
||||
self.native_products = native_products
|
||||
self.web_payment_url = web_payment_url
|
||||
self.web_payment_month_product_price = web_payment_month_product_price
|
||||
self.promo_codes_enabled = bool(promo_codes_enabled)
|
||||
|
||||
self.client = client
|
||||
|
||||
@classmethod
|
||||
def de_json(cls, data, client):
|
||||
if not data:
|
||||
return None
|
||||
|
||||
data = super(Settings, cls).de_json(data, client)
|
||||
from yandex_music import Product, Price
|
||||
data['in_app_products'] = Product.de_list(data.get('in_app_products'), client)
|
||||
data['native_products'] = Product.de_list(data.get('native_products'), client)
|
||||
data['web_payment_month_product_price'] = \
|
||||
Price.de_json(data.get('web_payment_month_product_price'), client)
|
||||
|
||||
return cls(client=client, **data)
|
|
@ -31,9 +31,9 @@ class Status(YandexMusicObject):
|
|||
return None
|
||||
|
||||
data = super(Status, cls).de_json(data, client)
|
||||
data['account'] = Account.de_json(data['account'], client=client)
|
||||
data['permissions'] = Permissions.de_json(data['permissions'], client=client)
|
||||
data['subscription'] = Subscription.de_json(data['subscription'], client=client)
|
||||
data['plus'] = Plus.de_json(data['plus'], client=client)
|
||||
data['account'] = Account.de_json(data.get('account'), client)
|
||||
data['permissions'] = Permissions.de_json(data.get('permissions'), client)
|
||||
data['subscription'] = Subscription.de_json(data.get('subscription'), client)
|
||||
data['plus'] = Plus.de_json(data.get('plus'), client)
|
||||
|
||||
return cls(client=client, **data)
|
||||
|
|
|
@ -21,6 +21,6 @@ class Subscription(YandexMusicObject):
|
|||
|
||||
data = super(Subscription, cls).de_json(data, client)
|
||||
from yandex_music import AutoRenewable
|
||||
data['auto_renewable'] = AutoRenewable.de_list(data['auto_renewable'], client=client)
|
||||
data['auto_renewable'] = AutoRenewable.de_list(data.get('auto_renewable'), client)
|
||||
|
||||
return cls(client=client, **data)
|
||||
|
|
|
@ -8,8 +8,10 @@ from yandex_music.error import Unauthorized, BadRequest, NetworkError, YandexMus
|
|||
|
||||
USER_AGENT = 'Yandex-Music-API'
|
||||
HEADERS = {
|
||||
'X-Yandex-Music-Client': 'Yandex-Music-API',
|
||||
'User-Agent': 'Yandex-Music-API',
|
||||
'X-Yandex-Music-Client': 'WindowsPhone/3.17',
|
||||
'User-Agent': 'Windows 10',
|
||||
# 'X-Yandex-Music-Client': 'Yandex-Music-API',
|
||||
# 'User-Agent': 'Yandex-Music-API',
|
||||
'Connection': 'Keep-Alive'
|
||||
}
|
||||
|
||||
|
@ -51,7 +53,7 @@ class Request(object):
|
|||
except ValueError:
|
||||
raise Exception('Invalid server response')
|
||||
|
||||
return data['result']
|
||||
return data.get('result')
|
||||
|
||||
def _request_wrapper(self, *args, **kwargs):
|
||||
if 'headers' not in kwargs:
|
||||
|
|
読み込み中…
新しいイシューから参照