Skip to content

Commit 9904083

Browse files
[ACS JobRouter] Review feedback items (Azure#31083)
* Update with new swagger * changes for job matching modes * remove generated models - all models have been handcoded * fix lint errors #1 * fix lint errors 2 * update swagger to point to main specs repo
1 parent cf31b2f commit 9904083

File tree

110 files changed

+29809
-19321
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

110 files changed

+29809
-19321
lines changed
Lines changed: 64 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,23 @@
11
from ._version import VERSION
22
from ._router_client import JobRouterClient
33
from ._router_administration_client import JobRouterAdministrationClient
4-
from ._generated.models import (
4+
from ._enums import (
5+
ScoringRuleParameterSelector,
6+
RouterWorkerStateSelector,
7+
RouterWorkerState,
8+
RouterWorkerSelectorStatus,
9+
RouterJobStatusSelector,
10+
RouterJobStatus,
11+
LabelOperator,
12+
JobMatchModeType,
13+
ExpressionRouterRuleLanguage
14+
)
15+
16+
from ._models import (
517
ClassificationPolicy,
618
ClassificationPolicyItem,
719
RouterQueue,
820
RouterQueueItem,
9-
LabelOperator,
1021
RouterQueueSelector,
1122
StaticQueueSelectorAttachment,
1223
ConditionalQueueSelectorAttachment,
@@ -21,11 +32,11 @@
2132
PassThroughWorkerSelectorAttachment,
2233
WorkerWeightedAllocation,
2334
WeightedAllocationWorkerSelectorAttachment,
24-
StaticRule,
25-
DirectMapRule,
26-
ExpressionRule,
27-
FunctionRule,
28-
FunctionRuleCredential,
35+
StaticRouterRule,
36+
DirectMapRouterRule,
37+
ExpressionRouterRule,
38+
FunctionRouterRule,
39+
FunctionRouterRuleCredential,
2940
DistributionPolicy,
3041
DistributionPolicyItem,
3142
DistributionMode,
@@ -42,111 +53,88 @@
4253
CancelExceptionAction,
4354
RouterQueueStatistics,
4455
ChannelConfiguration,
45-
RouterWorkerStateSelector,
46-
RouterWorkerState,
47-
RouterJobStatus,
4856
RouterJobAssignment,
4957
AcceptJobOfferResult,
5058
DeclineJobOfferRequest,
5159
UnassignJobResult,
5260
RouterJobPositionDetails,
53-
RouterJobStatusSelector,
5461
RouterWorkerAssignment,
5562
RouterJobOffer,
5663
ScoringRuleOptions,
57-
ScoringRuleParameterSelector,
5864
RouterWorker,
5965
RouterWorkerItem,
60-
QueueAssignment,
61-
DeclineJobOfferResult,
62-
ReclassifyJobResult,
63-
CancelJobResult,
64-
CompleteJobResult,
65-
CloseJobResult,
6666
RouterJob,
6767
RouterJobItem,
6868
JobMatchingMode,
69-
JobMatchModeType,
7069
ScheduleAndSuspendMode,
7170
)
7271

7372

7473
__all__ = [
75-
# Clients
76-
'JobRouterClient',
77-
'JobRouterAdministrationClient',
78-
79-
# Generated models
74+
'AcceptJobOfferResult',
75+
'BestWorkerMode',
76+
'CancelExceptionAction',
77+
'ChannelConfiguration',
8078
'ClassificationPolicy',
8179
'ClassificationPolicyItem',
82-
'RouterQueue',
83-
'RouterQueueItem',
84-
'LabelOperator',
85-
'RouterQueueSelector',
86-
'StaticQueueSelectorAttachment',
8780
'ConditionalQueueSelectorAttachment',
88-
'RuleEngineQueueSelectorAttachment',
89-
'PassThroughQueueSelectorAttachment',
90-
'QueueWeightedAllocation',
91-
'WeightedAllocationQueueSelectorAttachment',
92-
'RouterWorkerSelector',
93-
'StaticWorkerSelectorAttachment',
9481
'ConditionalWorkerSelectorAttachment',
95-
'RuleEngineWorkerSelectorAttachment',
96-
'PassThroughWorkerSelectorAttachment',
97-
'WorkerWeightedAllocation',
98-
'WeightedAllocationWorkerSelectorAttachment',
99-
'StaticRule',
100-
'DirectMapRule',
101-
'ExpressionRule',
102-
'FunctionRule',
103-
'FunctionRuleCredential',
82+
'DeclineJobOfferRequest',
83+
'DirectMapRouterRule',
84+
'DistributionMode',
10485
'DistributionPolicy',
10586
'DistributionPolicyItem',
106-
'DistributionMode',
107-
'BestWorkerMode',
108-
'LongestIdleMode',
109-
'RoundRobinMode',
11087
'ExceptionPolicy',
11188
'ExceptionPolicyItem',
11289
'ExceptionRule',
90+
'ExpressionRouterRule',
91+
'ExpressionRouterRuleLanguage',
92+
'FunctionRouterRule',
93+
'FunctionRouterRuleCredential',
94+
'JobMatchModeType',
95+
'JobMatchingMode',
96+
'JobRouterAdministrationClient',
97+
'JobRouterClient',
98+
'LabelOperator',
99+
'LongestIdleMode',
100+
'ManualReclassifyExceptionAction',
101+
'PassThroughQueueSelectorAttachment',
102+
'PassThroughWorkerSelectorAttachment',
113103
'QueueLengthExceptionTrigger',
114-
'WaitTimeExceptionTrigger',
104+
'QueueWeightedAllocation',
115105
'ReclassifyExceptionAction',
116-
'ManualReclassifyExceptionAction',
117-
'CancelExceptionAction',
106+
'RoundRobinMode',
118107
'RouterJob',
119-
'RouterQueueStatistics',
120-
'ChannelConfiguration',
121-
'RouterWorkerStateSelector',
122-
'RouterWorkerState',
123-
'RouterJobStatus',
124108
'RouterJobAssignment',
125-
'AcceptJobOfferResult',
126-
'DeclineJobOfferRequest',
127-
'UnassignJobResult',
109+
'RouterJobItem',
110+
'RouterJobOffer',
128111
'RouterJobPositionDetails',
112+
'RouterJobStatus',
129113
'RouterJobStatusSelector',
130-
'RouterWorkerAssignment',
131-
'RouterJobOffer',
132-
'ScoringRuleOptions',
133-
'ScoringRuleParameterSelector',
114+
'RouterQueue',
115+
'RouterQueueItem',
116+
'RouterQueueSelector',
117+
'RouterQueueStatistics',
134118
'RouterWorker',
119+
'RouterWorkerAssignment',
135120
'RouterWorkerItem',
136-
'JobMatchingMode',
137-
'JobMatchModeType',
121+
'RouterWorkerSelector',
122+
'RouterWorkerSelectorStatus',
123+
'RouterWorkerState',
124+
'RouterWorkerStateSelector',
125+
'RuleEngineQueueSelectorAttachment',
126+
'RuleEngineWorkerSelectorAttachment',
138127
'ScheduleAndSuspendMode',
139-
140-
# Created models
141-
142-
'RouterJob',
143-
'RouterJobItem',
144-
'QueueAssignment',
145-
'DeclineJobOfferResult',
146-
'ReclassifyJobResult',
147-
'CancelJobResult',
148-
'CompleteJobResult',
149-
'CloseJobResult',
128+
'ScoringRuleOptions',
129+
'ScoringRuleParameterSelector',
130+
'StaticQueueSelectorAttachment',
131+
'StaticRouterRule',
132+
'StaticWorkerSelectorAttachment',
133+
'UnassignJobResult',
134+
'WaitTimeExceptionTrigger',
135+
'WeightedAllocationQueueSelectorAttachment',
136+
'WeightedAllocationWorkerSelectorAttachment',
137+
'WorkerWeightedAllocation'
150138
]
151139

152140
__version__ = VERSION
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# coding=utf-8
2+
# --------------------------------------------------------------------------
3+
# Copyright (c) Microsoft Corporation. All rights reserved.
4+
# Licensed under the MIT License. See License.txt in the project root for license information.
5+
# Code generated by Microsoft (R) AutoRest Code Generator.
6+
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
7+
# --------------------------------------------------------------------------
8+
9+
10+
from datetime import datetime, timezone
11+
from dateutil.parser import parse
12+
13+
# cSpell:ignore tzinfos
14+
def _convert_str_to_datetime(datetime_as_str: str) -> datetime:
15+
dt = parse(datetime_as_str, tzinfos=[timezone.utc])
16+
return dt
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from azure.core import CaseInsensitiveEnumMeta
1111

1212

13-
class ExpressionLanguage(str, Enum, metaclass=CaseInsensitiveEnumMeta):
13+
class ExpressionRouterRuleLanguage(str, Enum, metaclass=CaseInsensitiveEnumMeta):
1414
"""The expression language to compile to and execute."""
1515

1616
POWER_FX = "powerFx"

sdk/communication/azure-communication-jobrouter/azure/communication/jobrouter/_generated/_client.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
from azure.core import PipelineClient
1313
from azure.core.rest import HttpRequest, HttpResponse
1414

15-
from . import models as _models
1615
from ._configuration import AzureCommunicationJobRouterServiceConfiguration
1716
from ._serialization import Deserializer, Serializer
1817
from .operations import JobRouterAdministrationOperations, JobRouterOperations
@@ -40,10 +39,8 @@ def __init__( # pylint: disable=missing-client-constructor-parameter-credential
4039
self._config = AzureCommunicationJobRouterServiceConfiguration(endpoint=endpoint, **kwargs)
4140
self._client: PipelineClient = PipelineClient(base_url=_endpoint, config=self._config, **kwargs)
4241

43-
client_models = {k: v for k, v in _models._models.__dict__.items() if isinstance(v, type)}
44-
client_models.update({k: v for k, v in _models.__dict__.items() if isinstance(v, type)})
45-
self._serialize = Serializer(client_models)
46-
self._deserialize = Deserializer(client_models)
42+
self._serialize = Serializer()
43+
self._deserialize = Deserializer()
4744
self._serialize.client_side_validation = False
4845
self.job_router_administration = JobRouterAdministrationOperations(
4946
self._client, self._config, self._serialize, self._deserialize

sdk/communication/azure-communication-jobrouter/azure/communication/jobrouter/_generated/_patch.py

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,70 @@
77
Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize
88
"""
99
from typing import List
10+
from azure.core.exceptions import DeserializationError, SerializationError, raise_with_traceback
1011

11-
__all__: List[str] = [] # Add all objects you want publicly available to users at this package level
12+
from ._serialization import basestring, unicode_str, _FLATTEN, _decode_attribute_map_key
13+
from ._serialization import Deserializer as DeserializerGenerated
14+
15+
16+
class Deserializer(DeserializerGenerated):
17+
@staticmethod
18+
def _flatten_subtype(cls, key, objects):
19+
if "_subtype_map" not in cls.__dict__:
20+
return {}
21+
result = dict(cls._subtype_map[key])
22+
for valuetype in cls._subtype_map[key].values():
23+
result.update(Deserializer._flatten_subtype(objects[valuetype], key, objects))
24+
return result
25+
26+
@staticmethod
27+
def _get_rest_key_parts(cls, attr_key):
28+
"""Get the RestAPI key of this attr, split it and decode part
29+
:param str attr_key: Attribute key must be in attribute_map.
30+
:returns: A list of RestAPI part
31+
:rtype: list
32+
"""
33+
rest_split_key = _FLATTEN.split(cls._attribute_map[attr_key]["key"])
34+
return [_decode_attribute_map_key(key_part) for key_part in rest_split_key]
35+
36+
def _classify_target(self, target, data):
37+
"""Overload for _classify_target to accommodate for handwritten models
38+
Check to see whether the deserialization target object can
39+
be classified into a subclass.
40+
Once classification has been determined, initialize object.
41+
42+
:param str target: The target object type to deserialize to.
43+
:param str/dict data: The response data to deserialize.
44+
"""
45+
46+
if target is None:
47+
return None, None
48+
49+
if isinstance(target, basestring):
50+
try:
51+
target = self.dependencies[target]
52+
except KeyError:
53+
return target, target
54+
55+
# Target is not a Model, perform a manual search
56+
subtype_keys = target.__dict__.get("_subtype_map", {}).keys()
57+
for subtype_key in subtype_keys:
58+
rest_api_response_key = Deserializer._get_rest_key_parts(target, subtype_key)[-1]
59+
subtype_value = data.pop(rest_api_response_key, None) or data.pop(subtype_key, None)
60+
61+
if subtype_value:
62+
if target.__name__ == subtype_value:
63+
target = target
64+
flatten_mapping_type = Deserializer._flatten_subtype(target, subtype_key, self.dependencies)
65+
try:
66+
target = self.dependencies[flatten_mapping_type[subtype_value]]
67+
except KeyError:
68+
raise_with_traceback(DeserializationError, "Failed to deserialize: " + target.__class__.__name__)
69+
70+
return target, target.__class__.__name__ # type: ignore
71+
72+
73+
__all__: List[str] = ["Deserializer"] # Add all objects you want publicly available to users at this package level
1274

1375

1476
def patch_sdk():

sdk/communication/azure-communication-jobrouter/azure/communication/jobrouter/_generated/_serialization.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -662,8 +662,9 @@ def _serialize(self, target_obj, data_type=None, **kwargs):
662662
_serialized.update(_new_attr) # type: ignore
663663
_new_attr = _new_attr[k] # type: ignore
664664
_serialized = _serialized[k]
665-
except ValueError:
666-
continue
665+
except ValueError as err:
666+
if isinstance(err, SerializationError):
667+
raise
667668

668669
except (AttributeError, KeyError, TypeError) as err:
669670
msg = "Attribute {} in object {} cannot be serialized.\n{}".format(attr_name, class_name, str(target_obj))
@@ -903,7 +904,9 @@ def serialize_iter(self, data, iter_type, div=None, **kwargs):
903904
for d in data:
904905
try:
905906
serialized.append(self.serialize_data(d, iter_type, **kwargs))
906-
except ValueError:
907+
except ValueError as err:
908+
if isinstance(err, SerializationError):
909+
raise
907910
serialized.append(None)
908911

909912
if div:
@@ -950,7 +953,9 @@ def serialize_dict(self, attr, dict_type, **kwargs):
950953
for key, value in attr.items():
951954
try:
952955
serialized[self.serialize_unicode(key)] = self.serialize_data(value, dict_type, **kwargs)
953-
except ValueError:
956+
except ValueError as err:
957+
if isinstance(err, SerializationError):
958+
raise
954959
serialized[self.serialize_unicode(key)] = None
955960

956961
if "xml" in serialization_ctxt:

sdk/communication/azure-communication-jobrouter/azure/communication/jobrouter/_generated/_vendor.py

Lines changed: 0 additions & 20 deletions
This file was deleted.

sdk/communication/azure-communication-jobrouter/azure/communication/jobrouter/_generated/aio/_client.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
from azure.core import AsyncPipelineClient
1313
from azure.core.rest import AsyncHttpResponse, HttpRequest
1414

15-
from .. import models as _models
1615
from .._serialization import Deserializer, Serializer
1716
from ._configuration import AzureCommunicationJobRouterServiceConfiguration
1817
from .operations import JobRouterAdministrationOperations, JobRouterOperations
@@ -40,10 +39,8 @@ def __init__( # pylint: disable=missing-client-constructor-parameter-credential
4039
self._config = AzureCommunicationJobRouterServiceConfiguration(endpoint=endpoint, **kwargs)
4140
self._client: AsyncPipelineClient = AsyncPipelineClient(base_url=_endpoint, config=self._config, **kwargs)
4241

43-
client_models = {k: v for k, v in _models._models.__dict__.items() if isinstance(v, type)}
44-
client_models.update({k: v for k, v in _models.__dict__.items() if isinstance(v, type)})
45-
self._serialize = Serializer(client_models)
46-
self._deserialize = Deserializer(client_models)
42+
self._serialize = Serializer()
43+
self._deserialize = Deserializer()
4744
self._serialize.client_side_validation = False
4845
self.job_router_administration = JobRouterAdministrationOperations(
4946
self._client, self._config, self._serialize, self._deserialize

0 commit comments

Comments
 (0)