Compare commits

...

1 Commits
0.64 ... 0.65

Author SHA1 Message Date
Mateusz Silaczewski
ad758b0da9 subscription settings 2020-03-23 10:15:24 +01:00
4 changed files with 34 additions and 7 deletions

View File

@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
setup( setup(
name="galaxy.plugin.api", name="galaxy.plugin.api",
version="0.64", version="0.65",
description="GOG Galaxy Integrations Python API", description="GOG Galaxy Integrations Python API",
author='Galaxy team', author='Galaxy team',
author_email='galaxy@gog.com', author_email='galaxy@gog.com',

View File

@@ -152,3 +152,13 @@ class PresenceState(Enum):
Online = "online" Online = "online"
Offline = "offline" Offline = "offline"
Away = "away" Away = "away"
class SubscriptionDiscovery(Flag):
"""Possible capabilities which inform what methods of subscriptions ownership detection are supported.
:param AUTOMATIC: integration can retrieve the proper status of subscription ownership.
:param USER_ENABLED: integration can handle override of ~class::`Subscription.owned` value to True
"""
AUTOMATIC = 1
USER_ENABLED = 2

View File

@@ -1,7 +1,7 @@
from dataclasses import dataclass from dataclasses import dataclass
from typing import Dict, List, Optional from typing import Dict, List, Optional
from galaxy.api.consts import LicenseType, LocalGameState, PresenceState from galaxy.api.consts import LicenseType, LocalGameState, PresenceState, SubscriptionDiscovery
@dataclass @dataclass
@@ -217,6 +217,7 @@ class UserPresence:
in_game_status: Optional[str] = None in_game_status: Optional[str] = None
full_status: Optional[str] = None full_status: Optional[str] = None
@dataclass @dataclass
class Subscription: class Subscription:
"""Information about a subscription. """Information about a subscription.
@@ -224,10 +225,21 @@ class Subscription:
:param subscription_name: name of the subscription, will also be used as its identifier. :param subscription_name: name of the subscription, will also be used as its identifier.
:param owned: whether the subscription is owned or not, None if unknown. :param owned: whether the subscription is owned or not, None if unknown.
:param end_time: unix timestamp of when the subscription ends, None if unknown. :param end_time: unix timestamp of when the subscription ends, None if unknown.
:param subscription_discovery: combination of settings that can be manually
chosen by user to determine subscription handling behaviour. For example, if the integration cannot retrieve games
for subscription when user doesn't own it, then USER_ENABLED should not be used.
If the integration cannot determine subscription ownership for a user then AUTOMATIC should not be used.
""" """
subscription_name: str subscription_name: str
owned: Optional[bool] = None owned: Optional[bool] = None
end_time: Optional[int] = None end_time: Optional[int] = None
subscription_discovery: SubscriptionDiscovery = SubscriptionDiscovery.AUTOMATIC | \
SubscriptionDiscovery.USER_ENABLED
def __post_init__(self):
assert self.subscription_discovery in [SubscriptionDiscovery.AUTOMATIC, SubscriptionDiscovery.USER_ENABLED,
SubscriptionDiscovery.AUTOMATIC | SubscriptionDiscovery.USER_ENABLED]
@dataclass @dataclass

View File

@@ -1,6 +1,7 @@
import pytest import pytest
from galaxy.api.types import Subscription, SubscriptionGame from galaxy.api.types import Subscription, SubscriptionGame
from galaxy.api.consts import SubscriptionDiscovery
from galaxy.api.errors import FailedParsingManifest, BackendError, UnknownError from galaxy.api.errors import FailedParsingManifest, BackendError, UnknownError
from galaxy.unittest.mock import async_return_value from galaxy.unittest.mock import async_return_value
@@ -17,8 +18,8 @@ async def test_get_subscriptions_success(plugin, read, write):
plugin.get_subscriptions.return_value = async_return_value([ plugin.get_subscriptions.return_value = async_return_value([
Subscription("1"), Subscription("1"),
Subscription("2", False), Subscription("2", False, subscription_discovery=SubscriptionDiscovery.AUTOMATIC),
Subscription("3", True, 1580899100) Subscription("3", True, 1580899100, SubscriptionDiscovery.USER_ENABLED)
]) ])
await plugin.run() await plugin.run()
plugin.get_subscriptions.assert_called_with() plugin.get_subscriptions.assert_called_with()
@@ -30,16 +31,19 @@ async def test_get_subscriptions_success(plugin, read, write):
"result": { "result": {
"subscriptions": [ "subscriptions": [
{ {
"subscription_name": "1" "subscription_name": "1",
'subscription_discovery': 3
}, },
{ {
"subscription_name": "2", "subscription_name": "2",
"owned": False "owned": False,
'subscription_discovery': 1
}, },
{ {
"subscription_name": "3", "subscription_name": "3",
"owned": True, "owned": True,
"end_time": 1580899100 "end_time": 1580899100,
'subscription_discovery': 2
} }
] ]
} }
@@ -77,6 +81,7 @@ async def test_get_subscriptions_failure_generic(plugin, read, write, error, cod
} }
] ]
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_get_subscription_games_success(plugin, read, write): async def test_get_subscription_games_success(plugin, read, write):
plugin.prepare_subscription_games_context.return_value = async_return_value(5) plugin.prepare_subscription_games_context.return_value = async_return_value(5)