Skip to content

Commit

Permalink
Release 1.9.0. For changelog, check CHANGELOG.rst
Browse files Browse the repository at this point in the history
  • Loading branch information
ask-pyth committed Mar 28, 2019
1 parent 80ab62f commit 900fd37
Show file tree
Hide file tree
Showing 14 changed files with 659 additions and 6 deletions.
14 changes: 11 additions & 3 deletions ask-sdk-model/CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 1 addition & 1 deletion ask-sdk-model/ask_sdk_model/__version__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
1 change: 1 addition & 0 deletions ask-sdk-model/ask_sdk_model/dialog/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
119 changes: 119 additions & 0 deletions ask-sdk-model/ask_sdk_model/dialog/dynamic_entities_directive.py
Original file line number Diff line number Diff line change
@@ -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
3 changes: 3 additions & 0 deletions ask-sdk-model/ask_sdk_model/directive.py
Original file line number Diff line number Diff line change
Expand Up @@ -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`,
Expand Down Expand Up @@ -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',
Expand Down
16 changes: 16 additions & 0 deletions ask-sdk-model/ask_sdk_model/er/__init__.py
Original file line number Diff line number Diff line change
@@ -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

20 changes: 20 additions & 0 deletions ask-sdk-model/ask_sdk_model/er/dynamic/__init__.py
Original file line number Diff line number Diff line change
@@ -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
115 changes: 115 additions & 0 deletions ask-sdk-model/ask_sdk_model/er/dynamic/entity.py
Original file line number Diff line number Diff line change
@@ -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
Loading

0 comments on commit 900fd37

Please sign in to comment.