|
6 | 6 | from abc import ABCMeta |
7 | 7 |
|
8 | 8 | from deprecation import deprecated |
| 9 | +from typing import Optional |
9 | 10 |
|
10 | 11 | from connect.exceptions import FailRequest, InquireRequest, SkipRequest |
11 | 12 | from connect.logger import logger, function_log |
12 | 13 | from connect.models import ActivationTemplateResponse, ActivationTileResponse, Param, \ |
13 | | - Fulfillment, TierConfigRequest |
| 14 | + Fulfillment, TierConfigRequest, Conversation |
14 | 15 | from .automation_engine import AutomationEngine |
15 | 16 |
|
16 | 17 |
|
@@ -76,43 +77,25 @@ def dispatch(self, request): |
76 | 77 | message = '' |
77 | 78 | approved = '' |
78 | 79 |
|
79 | | - if conversation: |
80 | | - try: |
81 | | - conversation.add_message(message) |
82 | | - except TypeError as ex: |
83 | | - logger.error('Error updating conversation for request {}: {}' |
84 | | - .format(request.id, ex)) |
| 80 | + self._update_conversation_if_exists(conversation, request.id, message) |
85 | 81 | return approved |
86 | 82 |
|
87 | 83 | except InquireRequest as inquire: |
88 | 84 | self.update_parameters(request.id, inquire.params) |
89 | 85 | inquired = self.inquire(request.id) |
90 | | - try: |
91 | | - conversation.add_message(str(inquire)) |
92 | | - except TypeError as ex: |
93 | | - logger.error('Error updating conversation for request {}: {}' |
94 | | - .format(request.id, ex)) |
| 86 | + self._update_conversation_if_exists(conversation, request.id, inquire) |
95 | 87 | return inquired |
96 | 88 |
|
97 | 89 | except FailRequest as fail: |
98 | 90 | # PyCharm incorrectly detects unreachable code here, so disable |
99 | 91 | # noinspection PyUnreachableCode |
100 | 92 | failed = self.fail(request.id, reason=str(fail)) |
101 | | - try: |
102 | | - conversation.add_message(str(fail)) |
103 | | - except TypeError as ex: |
104 | | - logger.error('Error updating conversation for request {}: {}' |
105 | | - .format(request.id, ex)) |
| 93 | + self._update_conversation_if_exists(conversation, request.id, fail) |
106 | 94 | return failed |
107 | 95 |
|
108 | 96 | except SkipRequest as skip: |
109 | | - skipped = skip.code |
110 | | - try: |
111 | | - conversation.add_message(str(skip)) |
112 | | - except TypeError as ex: |
113 | | - logger.error('Error updating conversation for request {}: {}' |
114 | | - .format(request.id, ex)) |
115 | | - return skipped |
| 97 | + self._update_conversation_if_exists(conversation, request.id, skip) |
| 98 | + return skip.code |
116 | 99 |
|
117 | 100 | @deprecated(deprecated_in='16.0', details='Use ``TierConfig.get`` instead.') |
118 | 101 | def get_tier_config(self, tier_id, product_id): |
@@ -158,3 +141,13 @@ def update_parameters(self, pk, params): |
158 | 141 | path=pk, |
159 | 142 | json={'asset': {'params': list_dict}}, |
160 | 143 | )[0] |
| 144 | + |
| 145 | + @staticmethod |
| 146 | + def _update_conversation_if_exists(conversation, request_id, obj): |
| 147 | + # type: (Optional[Conversation], str, object) -> None |
| 148 | + if conversation: |
| 149 | + try: |
| 150 | + conversation.add_message(str(obj)) |
| 151 | + except TypeError as ex: |
| 152 | + logger.error('Error updating conversation for request {}: {}' |
| 153 | + .format(request_id, ex)) |
0 commit comments