From 900fd375651f4e9255546dcafbeb3baf71b7c607 Mon Sep 17 00:00:00 2001 From: ask-pyth Date: Thu, 28 Mar 2019 17:48:11 +0000 Subject: [PATCH] Release 1.9.0. For changelog, check CHANGELOG.rst --- ask-sdk-model/CHANGELOG.rst | 14 ++- ask-sdk-model/ask_sdk_model/__version__.py | 2 +- .../ask_sdk_model/dialog/__init__.py | 1 + .../dialog/dynamic_entities_directive.py | 119 ++++++++++++++++++ ask-sdk-model/ask_sdk_model/directive.py | 3 + ask-sdk-model/ask_sdk_model/er/__init__.py | 16 +++ .../ask_sdk_model/er/dynamic/__init__.py | 20 +++ .../ask_sdk_model/er/dynamic/entity.py | 115 +++++++++++++++++ .../er/dynamic/entity_list_item.py | 115 +++++++++++++++++ .../er/dynamic/entity_value_and_synonyms.py | 114 +++++++++++++++++ .../er/dynamic/update_behavior.py | 66 ++++++++++ .../services/monetization/__init__.py | 1 + .../monetization/entitlement_reason.py | 67 ++++++++++ .../services/monetization/in_skill_product.py | 12 +- 14 files changed, 659 insertions(+), 6 deletions(-) create mode 100644 ask-sdk-model/ask_sdk_model/dialog/dynamic_entities_directive.py create mode 100644 ask-sdk-model/ask_sdk_model/er/__init__.py create mode 100644 ask-sdk-model/ask_sdk_model/er/dynamic/__init__.py create mode 100644 ask-sdk-model/ask_sdk_model/er/dynamic/entity.py create mode 100644 ask-sdk-model/ask_sdk_model/er/dynamic/entity_list_item.py create mode 100644 ask-sdk-model/ask_sdk_model/er/dynamic/entity_value_and_synonyms.py create mode 100644 ask-sdk-model/ask_sdk_model/er/dynamic/update_behavior.py create mode 100644 ask-sdk-model/ask_sdk_model/services/monetization/entitlement_reason.py diff --git a/ask-sdk-model/CHANGELOG.rst b/ask-sdk-model/CHANGELOG.rst index cbaa88d..0abd393 100644 --- a/ask-sdk-model/CHANGELOG.rst +++ b/ask-sdk-model/CHANGELOG.rst @@ -121,7 +121,15 @@ This release contains the following changes : 1.8.0 ~~~~~~~ -This release contains the following changes : +This release contains the following : +Introduces support for customizing your skill’s experience for Echo Auto, which is now shipping to select customers via our invite program, and vehicles and other aftermarket devices that support Alexa Auto. +The automotive experience introduces another way for customers to interact with skills, while they are on-the-go and their attention is on the road. Now you can adapt your skill experience to be succinct, location-aware, and adaptive to your customer’s needs while they’re outside the home. -- Introduces support for customizing your skill’s experience for Echo Auto, which is now shipping to select customers via our invite program, and vehicles and other aftermarket devices that support Alexa Auto. -- The automotive experience introduces another way for customers to interact with skills, while they are on-the-go and their attention is on the road. Now you can adapt your skill experience to be succinct, location-aware, and adaptive to your customer’s needs while they’re outside the home. + +1.9.0 +~~~~~~~ + +This release contains the following changes : + +- Dynamic entities for customized interactions +- Add additional 'entitlementReason' field in In-Skill products diff --git a/ask-sdk-model/ask_sdk_model/__version__.py b/ask-sdk-model/ask_sdk_model/__version__.py index e04a8ae..dc95ebe 100644 --- a/ask-sdk-model/ask_sdk_model/__version__.py +++ b/ask-sdk-model/ask_sdk_model/__version__.py @@ -14,7 +14,7 @@ __pip_package_name__ = 'ask-sdk-model' __description__ = 'The ASK SDK Model package provides model definitions, for building Alexa Skills.' __url__ = 'https://github.com/alexa/alexa-apis-for-python' -__version__ = '1.8.0' +__version__ = '1.9.0' __author__ = 'Alexa Skills Kit' __author_email__ = 'ask-sdk-dynamic@amazon.com' __license__ = 'Apache 2.0' diff --git a/ask-sdk-model/ask_sdk_model/dialog/__init__.py b/ask-sdk-model/ask_sdk_model/dialog/__init__.py index c1850df..7e1bd3a 100644 --- a/ask-sdk-model/ask_sdk_model/dialog/__init__.py +++ b/ask-sdk-model/ask_sdk_model/dialog/__init__.py @@ -18,3 +18,4 @@ from .confirm_slot_directive import ConfirmSlotDirective from .elicit_slot_directive import ElicitSlotDirective from .confirm_intent_directive import ConfirmIntentDirective +from .dynamic_entities_directive import DynamicEntitiesDirective diff --git a/ask-sdk-model/ask_sdk_model/dialog/dynamic_entities_directive.py b/ask-sdk-model/ask_sdk_model/dialog/dynamic_entities_directive.py new file mode 100644 index 0000000..9b3a32a --- /dev/null +++ b/ask-sdk-model/ask_sdk_model/dialog/dynamic_entities_directive.py @@ -0,0 +1,119 @@ +# coding: utf-8 + +# +# Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file +# except in compliance with the License. A copy of the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for +# the specific language governing permissions and limitations under the License. +# + +import pprint +import re # noqa: F401 +import six +import typing +from enum import Enum +from ask_sdk_model.directive import Directive + + +if typing.TYPE_CHECKING: + from typing import Dict, List, Optional + from datetime import datetime + from ask_sdk_model.er.dynamic.update_behavior import UpdateBehavior + from ask_sdk_model.er.dynamic.entity_list_item import EntityListItem + + +class DynamicEntitiesDirective(Directive): + """ + + :param update_behavior: + :type update_behavior: (optional) ask_sdk_model.er.dynamic.update_behavior.UpdateBehavior + :param types: + :type types: (optional) list[ask_sdk_model.er.dynamic.entity_list_item.EntityListItem] + + """ + deserialized_types = { + 'object_type': 'str', + 'update_behavior': 'ask_sdk_model.er.dynamic.update_behavior.UpdateBehavior', + 'types': 'list[ask_sdk_model.er.dynamic.entity_list_item.EntityListItem]' + } + + attribute_map = { + 'object_type': 'type', + 'update_behavior': 'updateBehavior', + 'types': 'types' + } + + def __init__(self, update_behavior=None, types=None): + # type: (Optional[UpdateBehavior], Optional[List[EntityListItem]]) -> None + """ + + :param update_behavior: + :type update_behavior: (optional) ask_sdk_model.er.dynamic.update_behavior.UpdateBehavior + :param types: + :type types: (optional) list[ask_sdk_model.er.dynamic.entity_list_item.EntityListItem] + """ + self.__discriminator_value = "Dialog.UpdateDynamicEntities" + + self.object_type = self.__discriminator_value + super(DynamicEntitiesDirective, self).__init__(object_type=self.__discriminator_value) + self.update_behavior = update_behavior + self.types = types + + def to_dict(self): + # type: () -> Dict[str, object] + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.deserialized_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else + x.value if isinstance(x, Enum) else x, + value + )) + elif isinstance(value, Enum): + result[attr] = value.value + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else + (item[0], item[1].value) + if isinstance(item[1], Enum) else item, + value.items() + )) + else: + result[attr] = value + + return result + + def to_str(self): + # type: () -> str + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + # type: () -> str + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + # type: (object) -> bool + """Returns true if both objects are equal""" + if not isinstance(other, DynamicEntitiesDirective): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + # type: (object) -> bool + """Returns true if both objects are not equal""" + return not self == other diff --git a/ask-sdk-model/ask_sdk_model/directive.py b/ask-sdk-model/ask_sdk_model/directive.py index 5b55f82..b5d41d3 100644 --- a/ask-sdk-model/ask_sdk_model/directive.py +++ b/ask-sdk-model/ask_sdk_model/directive.py @@ -47,6 +47,8 @@ class Directive(object): | | Connections.SendRequest: :py:class:`ask_sdk_model.interfaces.connections.send_request_directive.SendRequestDirective`, | + | Dialog.UpdateDynamicEntities: :py:class:`ask_sdk_model.dialog.dynamic_entities_directive.DynamicEntitiesDirective`, + | | Display.RenderTemplate: :py:class:`ask_sdk_model.interfaces.display.render_template_directive.RenderTemplateDirective`, | | GadgetController.SetLight: :py:class:`ask_sdk_model.interfaces.gadget_controller.set_light_directive.SetLightDirective`, @@ -86,6 +88,7 @@ class Directive(object): 'AudioPlayer.Play': 'ask_sdk_model.interfaces.audioplayer.play_directive.PlayDirective', 'Alexa.Presentation.APL.ExecuteCommands': 'ask_sdk_model.interfaces.alexa.presentation.apl.execute_commands_directive.ExecuteCommandsDirective', 'Connections.SendRequest': 'ask_sdk_model.interfaces.connections.send_request_directive.SendRequestDirective', + 'Dialog.UpdateDynamicEntities': 'ask_sdk_model.dialog.dynamic_entities_directive.DynamicEntitiesDirective', 'Display.RenderTemplate': 'ask_sdk_model.interfaces.display.render_template_directive.RenderTemplateDirective', 'GadgetController.SetLight': 'ask_sdk_model.interfaces.gadget_controller.set_light_directive.SetLightDirective', 'Dialog.Delegate': 'ask_sdk_model.dialog.delegate_directive.DelegateDirective', diff --git a/ask-sdk-model/ask_sdk_model/er/__init__.py b/ask-sdk-model/ask_sdk_model/er/__init__.py new file mode 100644 index 0000000..57220ec --- /dev/null +++ b/ask-sdk-model/ask_sdk_model/er/__init__.py @@ -0,0 +1,16 @@ +# coding: utf-8 + +# +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the 'License'). You may not use this file +# except in compliance with the License. A copy of the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for +# the specific language governing permissions and limitations under the License. +# +from __future__ import absolute_import + diff --git a/ask-sdk-model/ask_sdk_model/er/dynamic/__init__.py b/ask-sdk-model/ask_sdk_model/er/dynamic/__init__.py new file mode 100644 index 0000000..dda0d19 --- /dev/null +++ b/ask-sdk-model/ask_sdk_model/er/dynamic/__init__.py @@ -0,0 +1,20 @@ +# coding: utf-8 + +# +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the 'License'). You may not use this file +# except in compliance with the License. A copy of the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for +# the specific language governing permissions and limitations under the License. +# +from __future__ import absolute_import + +from .entity_value_and_synonyms import EntityValueAndSynonyms +from .update_behavior import UpdateBehavior +from .entity_list_item import EntityListItem +from .entity import Entity diff --git a/ask-sdk-model/ask_sdk_model/er/dynamic/entity.py b/ask-sdk-model/ask_sdk_model/er/dynamic/entity.py new file mode 100644 index 0000000..e42fa65 --- /dev/null +++ b/ask-sdk-model/ask_sdk_model/er/dynamic/entity.py @@ -0,0 +1,115 @@ +# coding: utf-8 + +# +# Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file +# except in compliance with the License. A copy of the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for +# the specific language governing permissions and limitations under the License. +# + +import pprint +import re # noqa: F401 +import six +import typing +from enum import Enum + + +if typing.TYPE_CHECKING: + from typing import Dict, List, Optional + from datetime import datetime + from ask_sdk_model.er.dynamic.entity_value_and_synonyms import EntityValueAndSynonyms + + +class Entity(object): + """ + Represents an entity that the skill wants to store. An entity has an optional Id and the value and the synonyms for the entity + + + :param id: An unique id associated with the entity + :type id: (optional) str + :param name: + :type name: (optional) ask_sdk_model.er.dynamic.entity_value_and_synonyms.EntityValueAndSynonyms + + """ + deserialized_types = { + 'id': 'str', + 'name': 'ask_sdk_model.er.dynamic.entity_value_and_synonyms.EntityValueAndSynonyms' + } + + attribute_map = { + 'id': 'id', + 'name': 'name' + } + + def __init__(self, id=None, name=None): + # type: (Optional[str], Optional[EntityValueAndSynonyms]) -> None + """Represents an entity that the skill wants to store. An entity has an optional Id and the value and the synonyms for the entity + + :param id: An unique id associated with the entity + :type id: (optional) str + :param name: + :type name: (optional) ask_sdk_model.er.dynamic.entity_value_and_synonyms.EntityValueAndSynonyms + """ + self.__discriminator_value = None + + self.id = id + self.name = name + + def to_dict(self): + # type: () -> Dict[str, object] + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.deserialized_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else + x.value if isinstance(x, Enum) else x, + value + )) + elif isinstance(value, Enum): + result[attr] = value.value + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else + (item[0], item[1].value) + if isinstance(item[1], Enum) else item, + value.items() + )) + else: + result[attr] = value + + return result + + def to_str(self): + # type: () -> str + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + # type: () -> str + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + # type: (object) -> bool + """Returns true if both objects are equal""" + if not isinstance(other, Entity): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + # type: (object) -> bool + """Returns true if both objects are not equal""" + return not self == other diff --git a/ask-sdk-model/ask_sdk_model/er/dynamic/entity_list_item.py b/ask-sdk-model/ask_sdk_model/er/dynamic/entity_list_item.py new file mode 100644 index 0000000..d1dee53 --- /dev/null +++ b/ask-sdk-model/ask_sdk_model/er/dynamic/entity_list_item.py @@ -0,0 +1,115 @@ +# coding: utf-8 + +# +# Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file +# except in compliance with the License. A copy of the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for +# the specific language governing permissions and limitations under the License. +# + +import pprint +import re # noqa: F401 +import six +import typing +from enum import Enum + + +if typing.TYPE_CHECKING: + from typing import Dict, List, Optional + from datetime import datetime + from ask_sdk_model.er.dynamic.entity import Entity + + +class EntityListItem(object): + """ + Represents an array of entities of a particular type. + + + :param name: The entity type. Must match the slot type as defined in the interaction model. + :type name: (optional) str + :param values: A list of dynamic entities which are of the same type + :type values: (optional) list[ask_sdk_model.er.dynamic.entity.Entity] + + """ + deserialized_types = { + 'name': 'str', + 'values': 'list[ask_sdk_model.er.dynamic.entity.Entity]' + } + + attribute_map = { + 'name': 'name', + 'values': 'values' + } + + def __init__(self, name=None, values=None): + # type: (Optional[str], Optional[List[Entity]]) -> None + """Represents an array of entities of a particular type. + + :param name: The entity type. Must match the slot type as defined in the interaction model. + :type name: (optional) str + :param values: A list of dynamic entities which are of the same type + :type values: (optional) list[ask_sdk_model.er.dynamic.entity.Entity] + """ + self.__discriminator_value = None + + self.name = name + self.values = values + + def to_dict(self): + # type: () -> Dict[str, object] + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.deserialized_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else + x.value if isinstance(x, Enum) else x, + value + )) + elif isinstance(value, Enum): + result[attr] = value.value + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else + (item[0], item[1].value) + if isinstance(item[1], Enum) else item, + value.items() + )) + else: + result[attr] = value + + return result + + def to_str(self): + # type: () -> str + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + # type: () -> str + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + # type: (object) -> bool + """Returns true if both objects are equal""" + if not isinstance(other, EntityListItem): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + # type: (object) -> bool + """Returns true if both objects are not equal""" + return not self == other diff --git a/ask-sdk-model/ask_sdk_model/er/dynamic/entity_value_and_synonyms.py b/ask-sdk-model/ask_sdk_model/er/dynamic/entity_value_and_synonyms.py new file mode 100644 index 0000000..1f29404 --- /dev/null +++ b/ask-sdk-model/ask_sdk_model/er/dynamic/entity_value_and_synonyms.py @@ -0,0 +1,114 @@ +# coding: utf-8 + +# +# Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file +# except in compliance with the License. A copy of the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for +# the specific language governing permissions and limitations under the License. +# + +import pprint +import re # noqa: F401 +import six +import typing +from enum import Enum + + +if typing.TYPE_CHECKING: + from typing import Dict, List, Optional + from datetime import datetime + + +class EntityValueAndSynonyms(object): + """ + A container object with value and synomyms for the entity + + + :param value: The entity value + :type value: (optional) str + :param synonyms: An array of synonyms for the entity + :type synonyms: (optional) list[str] + + """ + deserialized_types = { + 'value': 'str', + 'synonyms': 'list[str]' + } + + attribute_map = { + 'value': 'value', + 'synonyms': 'synonyms' + } + + def __init__(self, value=None, synonyms=None): + # type: (Optional[str], Optional[List[object]]) -> None + """A container object with value and synomyms for the entity + + :param value: The entity value + :type value: (optional) str + :param synonyms: An array of synonyms for the entity + :type synonyms: (optional) list[str] + """ + self.__discriminator_value = None + + self.value = value + self.synonyms = synonyms + + def to_dict(self): + # type: () -> Dict[str, object] + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.deserialized_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else + x.value if isinstance(x, Enum) else x, + value + )) + elif isinstance(value, Enum): + result[attr] = value.value + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else + (item[0], item[1].value) + if isinstance(item[1], Enum) else item, + value.items() + )) + else: + result[attr] = value + + return result + + def to_str(self): + # type: () -> str + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + # type: () -> str + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + # type: (object) -> bool + """Returns true if both objects are equal""" + if not isinstance(other, EntityValueAndSynonyms): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + # type: (object) -> bool + """Returns true if both objects are not equal""" + return not self == other diff --git a/ask-sdk-model/ask_sdk_model/er/dynamic/update_behavior.py b/ask-sdk-model/ask_sdk_model/er/dynamic/update_behavior.py new file mode 100644 index 0000000..28b17cf --- /dev/null +++ b/ask-sdk-model/ask_sdk_model/er/dynamic/update_behavior.py @@ -0,0 +1,66 @@ +# coding: utf-8 + +# +# Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file +# except in compliance with the License. A copy of the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for +# the specific language governing permissions and limitations under the License. +# + +import pprint +import re # noqa: F401 +import six +import typing +from enum import Enum + + +if typing.TYPE_CHECKING: + from typing import Dict, List, Optional + from datetime import datetime + + +class UpdateBehavior(Enum): + """ + Replace the existing dynamic entities or clear them from the catalog + + + + Allowed enum values: [REPLACE, CLEAR] + """ + REPLACE = "REPLACE" + CLEAR = "CLEAR" + + def to_dict(self): + # type: () -> Dict[str, object] + """Returns the model properties as a dict""" + result = {self.name: self.value} + return result + + def to_str(self): + # type: () -> str + """Returns the string representation of the model""" + return pprint.pformat(self.value) + + def __repr__(self): + # type: () -> str + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + # type: (object) -> bool + """Returns true if both objects are equal""" + if not isinstance(other, UpdateBehavior): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + # type: (object) -> bool + """Returns true if both objects are not equal""" + return not self == other diff --git a/ask-sdk-model/ask_sdk_model/services/monetization/__init__.py b/ask-sdk-model/ask_sdk_model/services/monetization/__init__.py index e74a8ce..ced1ef1 100644 --- a/ask-sdk-model/ask_sdk_model/services/monetization/__init__.py +++ b/ask-sdk-model/ask_sdk_model/services/monetization/__init__.py @@ -17,6 +17,7 @@ from .error import Error from .product_type import ProductType from .in_skill_products_response import InSkillProductsResponse +from .entitlement_reason import EntitlementReason from .purchasable_state import PurchasableState from .in_skill_product import InSkillProduct from .monetization_service_client import MonetizationServiceClient diff --git a/ask-sdk-model/ask_sdk_model/services/monetization/entitlement_reason.py b/ask-sdk-model/ask_sdk_model/services/monetization/entitlement_reason.py new file mode 100644 index 0000000..8ec3399 --- /dev/null +++ b/ask-sdk-model/ask_sdk_model/services/monetization/entitlement_reason.py @@ -0,0 +1,67 @@ +# coding: utf-8 + +# +# Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file +# except in compliance with the License. A copy of the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for +# the specific language governing permissions and limitations under the License. +# + +import pprint +import re # noqa: F401 +import six +import typing +from enum import Enum + + +if typing.TYPE_CHECKING: + from typing import Dict, List, Optional + from datetime import datetime + + +class EntitlementReason(Enum): + """ + Reason for the entitlement status. * 'PURCHASED' - The user is entitled to the product because they purchased it. * 'NOT_PURCHASED' - The user is not entitled to the product because they have not purchased it. * 'AUTO_ENTITLED' - The user is auto entitled to the product because they have subscribed to a broader service. + + + + Allowed enum values: [PURCHASED, NOT_PURCHASED, AUTO_ENTITLED] + """ + PURCHASED = "PURCHASED" + NOT_PURCHASED = "NOT_PURCHASED" + AUTO_ENTITLED = "AUTO_ENTITLED" + + def to_dict(self): + # type: () -> Dict[str, object] + """Returns the model properties as a dict""" + result = {self.name: self.value} + return result + + def to_str(self): + # type: () -> str + """Returns the string representation of the model""" + return pprint.pformat(self.value) + + def __repr__(self): + # type: () -> str + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + # type: (object) -> bool + """Returns true if both objects are equal""" + if not isinstance(other, EntitlementReason): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + # type: (object) -> bool + """Returns true if both objects are not equal""" + return not self == other diff --git a/ask-sdk-model/ask_sdk_model/services/monetization/in_skill_product.py b/ask-sdk-model/ask_sdk_model/services/monetization/in_skill_product.py index ab61850..ad2a336 100644 --- a/ask-sdk-model/ask_sdk_model/services/monetization/in_skill_product.py +++ b/ask-sdk-model/ask_sdk_model/services/monetization/in_skill_product.py @@ -27,6 +27,7 @@ from ask_sdk_model.services.monetization.purchase_mode import PurchaseMode from ask_sdk_model.services.monetization.entitled_state import EntitledState from ask_sdk_model.services.monetization.product_type import ProductType + from ask_sdk_model.services.monetization.entitlement_reason import EntitlementReason class InSkillProduct(object): @@ -46,6 +47,8 @@ class InSkillProduct(object): :type purchasable: (optional) ask_sdk_model.services.monetization.purchasable_state.PurchasableState :param entitled: :type entitled: (optional) ask_sdk_model.services.monetization.entitled_state.EntitledState + :param entitlement_reason: + :type entitlement_reason: (optional) ask_sdk_model.services.monetization.entitlement_reason.EntitlementReason :param active_entitlement_count: Total active purchases of the product made by the user. Note - For ENTITLEMENT and SUBSCRIPTION product types, the value is either zero(NOT_ENTITLED) or one(ENTITLED). For CONSUMABLE product type the value is zero or more, as CONSUMABLE can be re-purchased. :type active_entitlement_count: (optional) int :param purchase_mode: @@ -60,6 +63,7 @@ class InSkillProduct(object): 'summary': 'str', 'purchasable': 'ask_sdk_model.services.monetization.purchasable_state.PurchasableState', 'entitled': 'ask_sdk_model.services.monetization.entitled_state.EntitledState', + 'entitlement_reason': 'ask_sdk_model.services.monetization.entitlement_reason.EntitlementReason', 'active_entitlement_count': 'int', 'purchase_mode': 'ask_sdk_model.services.monetization.purchase_mode.PurchaseMode' } @@ -72,12 +76,13 @@ class InSkillProduct(object): 'summary': 'summary', 'purchasable': 'purchasable', 'entitled': 'entitled', + 'entitlement_reason': 'entitlementReason', 'active_entitlement_count': 'activeEntitlementCount', 'purchase_mode': 'purchaseMode' } - def __init__(self, product_id=None, reference_name=None, name=None, object_type=None, summary=None, purchasable=None, entitled=None, active_entitlement_count=None, purchase_mode=None): - # type: (Optional[str], Optional[str], Optional[str], Optional[ProductType], Optional[str], Optional[PurchasableState], Optional[EntitledState], Optional[int], Optional[PurchaseMode]) -> None + def __init__(self, product_id=None, reference_name=None, name=None, object_type=None, summary=None, purchasable=None, entitled=None, entitlement_reason=None, active_entitlement_count=None, purchase_mode=None): + # type: (Optional[str], Optional[str], Optional[str], Optional[ProductType], Optional[str], Optional[PurchasableState], Optional[EntitledState], Optional[EntitlementReason], Optional[int], Optional[PurchaseMode]) -> None """ :param product_id: Product Id @@ -94,6 +99,8 @@ def __init__(self, product_id=None, reference_name=None, name=None, object_type= :type purchasable: (optional) ask_sdk_model.services.monetization.purchasable_state.PurchasableState :param entitled: :type entitled: (optional) ask_sdk_model.services.monetization.entitled_state.EntitledState + :param entitlement_reason: + :type entitlement_reason: (optional) ask_sdk_model.services.monetization.entitlement_reason.EntitlementReason :param active_entitlement_count: Total active purchases of the product made by the user. Note - For ENTITLEMENT and SUBSCRIPTION product types, the value is either zero(NOT_ENTITLED) or one(ENTITLED). For CONSUMABLE product type the value is zero or more, as CONSUMABLE can be re-purchased. :type active_entitlement_count: (optional) int :param purchase_mode: @@ -108,6 +115,7 @@ def __init__(self, product_id=None, reference_name=None, name=None, object_type= self.summary = summary self.purchasable = purchasable self.entitled = entitled + self.entitlement_reason = entitlement_reason self.active_entitlement_count = active_entitlement_count self.purchase_mode = purchase_mode