Skip to content

Commit d487608

Browse files
committed
fix(conversation): Adding two step process that supports special naming for nested models
related to issue: #359
1 parent 885f680 commit d487608

3 files changed

Lines changed: 64 additions & 27 deletions

File tree

examples/conversation_v1.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,31 @@
134134
values=values)
135135
print(json.dumps(response, indent=2))
136136

137+
entities = [{
138+
'entity': 'pattern_entity',
139+
'values': [{
140+
'value': 'value0', 'patterns': ['\\d{6}\\w{1}\\d{7}'], 'value_type': 'patterns'
141+
},
142+
{'value': 'value1',
143+
'patterns': ['[-9][0-9][0-9][0-9][0-9]~! [1-9][1-9][1-9][1-9][1-9][1-9]'],
144+
'value_type': 'patterns'},
145+
{'value': 'value2',
146+
'patterns': ['[a-z-9]{17}'],
147+
'value_type': 'patterns'},
148+
{'value': 'value3',
149+
'patterns': [
150+
'\\d{3}(\\ |-)\\d{3}(\\ |-)\\d{4}',
151+
'\\(\\d{3}\\)(\\ |-)\\d{3}(\\ |-)\\d{4}'],
152+
'value_type': 'patterns'},
153+
{'value': 'value4',
154+
'patterns': ['\\b\\d{5}\\b'],
155+
'value_type': 'patterns'}]
156+
}]
157+
response = conversation.create_entity(workspace_id,
158+
entity=entities[0]['entity'],
159+
values=entities[0]['values'])
160+
print(json.dumps(response, indent=2))
161+
137162
response = conversation.get_entity(workspace_id=workspace_id,
138163
entity='test_entity',
139164
export=True)

watson_developer_cloud/conversation_v1.py

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,6 @@ class ConversationV1(WatsonService):
3434
"""The Conversation V1 service."""
3535

3636
default_url = 'https://gateway.watsonplatform.net/conversation/api'
37-
VERSION_DATE_2017_05_26 = '2017-05-26'
38-
VERSION_DATE_2017_04_21 = '2017-04-21'
39-
VERSION_DATE_2017_02_03 = '2017-02-03'
40-
VERSION_DATE_2016_09_20 = '2016-09-20'
41-
VERSION_DATE_2016_07_11 = '2016-07-11'
4237

4338
def __init__(self, version, url=default_url, username=None, password=None):
4439
"""
@@ -115,13 +110,18 @@ def create_workspace(self,
115110
:rtype: dict
116111
"""
117112
if intents is not None:
118-
intents = [self._convert_model(x) for x in intents]
113+
intents = [self._convert_model(x, CreateIntent) for x in intents]
119114
if entities is not None:
120-
entities = [self._convert_model(x) for x in entities]
115+
entities = [self._convert_model(x, CreateEntity) for x in entities]
121116
if dialog_nodes is not None:
122-
dialog_nodes = [self._convert_model(x) for x in dialog_nodes]
117+
dialog_nodes = [
118+
self._convert_model(x, CreateDialogNode) for x in dialog_nodes
119+
]
123120
if counterexamples is not None:
124-
counterexamples = [self._convert_model(x) for x in counterexamples]
121+
counterexamples = [
122+
self._convert_model(x, CreateCounterexample)
123+
for x in counterexamples
124+
]
125125
params = {'version': self.version}
126126
data = {
127127
'name': name,
@@ -238,13 +238,18 @@ def update_workspace(self,
238238
if workspace_id is None:
239239
raise ValueError('workspace_id must be provided')
240240
if intents is not None:
241-
intents = [self._convert_model(x) for x in intents]
241+
intents = [self._convert_model(x, CreateIntent) for x in intents]
242242
if entities is not None:
243-
entities = [self._convert_model(x) for x in entities]
243+
entities = [self._convert_model(x, CreateEntity) for x in entities]
244244
if dialog_nodes is not None:
245-
dialog_nodes = [self._convert_model(x) for x in dialog_nodes]
245+
dialog_nodes = [
246+
self._convert_model(x, CreateDialogNode) for x in dialog_nodes
247+
]
246248
if counterexamples is not None:
247-
counterexamples = [self._convert_model(x) for x in counterexamples]
249+
counterexamples = [
250+
self._convert_model(x, CreateCounterexample)
251+
for x in counterexamples
252+
]
248253
params = {'version': self.version, 'append': append}
249254
data = {
250255
'name': name,
@@ -266,7 +271,6 @@ def update_workspace(self,
266271
# message
267272
#########################
268273

269-
270274
def message(self,
271275
workspace_id,
272276
input=None,
@@ -293,15 +297,15 @@ def message(self,
293297
if workspace_id is None:
294298
raise ValueError('workspace_id must be provided')
295299
if input is not None:
296-
input = self._convert_model(input)
300+
input = self._convert_model(input, InputData)
297301
if context is not None:
298-
context = self._convert_model(context)
302+
context = self._convert_model(context, Context)
299303
if entities is not None:
300-
entities = [self._convert_model(x) for x in entities]
304+
entities = [self._convert_model(x, RuntimeEntity) for x in entities]
301305
if intents is not None:
302-
intents = [self._convert_model(x) for x in intents]
306+
intents = [self._convert_model(x, RuntimeIntent) for x in intents]
303307
if output is not None:
304-
output = self._convert_model(output)
308+
output = self._convert_model(output, OutputData)
305309
params = {
306310
'version': self.version,
307311
'nodes_visited_details': nodes_visited_details
@@ -346,7 +350,7 @@ def create_intent(self,
346350
if intent is None:
347351
raise ValueError('intent must be provided')
348352
if examples is not None:
349-
examples = [self._convert_model(x) for x in examples]
353+
examples = [self._convert_model(x, CreateExample) for x in examples]
350354
params = {'version': self.version}
351355
data = {
352356
'intent': intent,
@@ -464,7 +468,7 @@ def update_intent(self,
464468
if intent is None:
465469
raise ValueError('intent must be provided')
466470
if new_examples is not None:
467-
new_examples = [self._convert_model(x) for x in new_examples]
471+
new_examples = [self._convert_model(x, CreateExample) for x in new_examples]
468472
params = {'version': self.version}
469473
data = {
470474
'intent': new_intent,
@@ -650,7 +654,7 @@ def create_entity(self,
650654
if entity is None:
651655
raise ValueError('entity must be provided')
652656
if values is not None:
653-
values = [self._convert_model(x) for x in values]
657+
values = [self._convert_model(x, CreateValue) for x in values]
654658
params = {'version': self.version}
655659
data = {
656660
'entity': entity,
@@ -773,7 +777,7 @@ def update_entity(self,
773777
if entity is None:
774778
raise ValueError('entity must be provided')
775779
if new_values is not None:
776-
new_values = [self._convert_model(x) for x in new_values]
780+
new_values = [self._convert_model(x, CreateValue) for x in new_values]
777781
params = {'version': self.version}
778782
data = {
779783
'entity': new_entity,
@@ -1182,9 +1186,9 @@ def create_dialog_node(self,
11821186
if dialog_node is None:
11831187
raise ValueError('dialog_node must be provided')
11841188
if next_step is not None:
1185-
next_step = self._convert_model(next_step)
1189+
next_step = self._convert_model(next_step, DialogNodeNextStep)
11861190
if actions is not None:
1187-
actions = [self._convert_model(x) for x in actions]
1191+
actions = [self._convert_model(x, DialogNodeAction) for x in actions]
11881192
params = {'version': self.version}
11891193
data = {
11901194
'dialog_node': dialog_node,
@@ -1332,9 +1336,9 @@ def update_dialog_node(self,
13321336
if new_dialog_node is None:
13331337
raise ValueError('new_dialog_node must be provided')
13341338
if new_next_step is not None:
1335-
new_next_step = self._convert_model(new_next_step)
1339+
new_next_step = self._convert_model(new_next_step, DialogNodeNextStep)
13361340
if new_actions is not None:
1337-
new_actions = [self._convert_model(x) for x in new_actions]
1341+
new_actions = [self._convert_model(x, DialogNodeAction) for x in new_actions]
13381342
params = {'version': self.version}
13391343
data = {
13401344
'dialog_node': new_dialog_node,

watson_developer_cloud/watson_service.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,14 @@ def _convert_model(val):
250250
return val._to_dict()
251251
return val
252252

253+
@staticmethod
254+
def _convert_model(val, classname=None):
255+
if classname is not None:
256+
val = classname(**val)
257+
if hasattr(val, "_to_dict"):
258+
return val._to_dict()
259+
return val
260+
253261
@staticmethod
254262
def _convert_list(val):
255263
if isinstance(val, list):

0 commit comments

Comments
 (0)