diracx-client 0.0.1a11__py3-none-any.whl → 0.0.1a13__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- diracx/client/__init__.py +1 -1
 - diracx/client/_client.py +29 -5
 - diracx/client/_configuration.py +4 -5
 - diracx/client/_serialization.py +67 -71
 - diracx/client/_vendor.py +37 -15
 - diracx/client/aio/__init__.py +1 -1
 - diracx/client/aio/_client.py +27 -5
 - diracx/client/aio/_configuration.py +6 -7
 - diracx/client/aio/_vendor.py +39 -1
 - diracx/client/aio/operations/__init__.py +1 -1
 - diracx/client/aio/operations/_operations.py +702 -316
 - diracx/client/aio/operations/_patch.py +1 -2
 - diracx/client/models/__init__.py +5 -3
 - diracx/client/models/_enums.py +24 -17
 - diracx/client/models/_models.py +20 -62
 - diracx/client/operations/__init__.py +1 -1
 - diracx/client/operations/_operations.py +849 -350
 - diracx/client/operations/_patch.py +0 -2
 - {diracx_client-0.0.1a11.dist-info → diracx_client-0.0.1a13.dist-info}/METADATA +1 -1
 - diracx_client-0.0.1a13.dist-info/RECORD +26 -0
 - {diracx_client-0.0.1a11.dist-info → diracx_client-0.0.1a13.dist-info}/WHEEL +1 -1
 - diracx_client-0.0.1a11.dist-info/RECORD +0 -26
 - {diracx_client-0.0.1a11.dist-info → diracx_client-0.0.1a13.dist-info}/top_level.txt +0 -0
 
    
        diracx/client/__init__.py
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # coding=utf-8
         
     | 
| 
       2 
2 
     | 
    
         
             
            # --------------------------------------------------------------------------
         
     | 
| 
       3 
     | 
    
         
            -
            # Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.10. 
     | 
| 
      
 3 
     | 
    
         
            +
            # Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.10.2, generator: @autorest/python@6.13.9)
         
     | 
| 
       4 
4 
     | 
    
         
             
            # Changes may cause incorrect behavior and will be lost if the code is regenerated.
         
     | 
| 
       5 
5 
     | 
    
         
             
            # --------------------------------------------------------------------------
         
     | 
| 
       6 
6 
     | 
    
         | 
    
        diracx/client/_client.py
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # coding=utf-8
         
     | 
| 
       2 
2 
     | 
    
         
             
            # --------------------------------------------------------------------------
         
     | 
| 
       3 
     | 
    
         
            -
            # Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.10. 
     | 
| 
      
 3 
     | 
    
         
            +
            # Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.10.2, generator: @autorest/python@6.13.9)
         
     | 
| 
       4 
4 
     | 
    
         
             
            # Changes may cause incorrect behavior and will be lost if the code is regenerated.
         
     | 
| 
       5 
5 
     | 
    
         
             
            # --------------------------------------------------------------------------
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
         @@ -8,6 +8,7 @@ from copy import deepcopy 
     | 
|
| 
       8 
8 
     | 
    
         
             
            from typing import Any
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
            from azure.core import PipelineClient
         
     | 
| 
      
 11 
     | 
    
         
            +
            from azure.core.pipeline import policies
         
     | 
| 
       11 
12 
     | 
    
         
             
            from azure.core.rest import HttpRequest, HttpResponse
         
     | 
| 
       12 
13 
     | 
    
         | 
| 
       13 
14 
     | 
    
         
             
            from . import models as _models
         
     | 
| 
         @@ -40,8 +41,29 @@ class Dirac:  # pylint: disable=client-accepts-api-version-keyword 
     | 
|
| 
       40 
41 
     | 
    
         
             
                    self, *, endpoint: str = "", **kwargs: Any
         
     | 
| 
       41 
42 
     | 
    
         
             
                ) -> None:
         
     | 
| 
       42 
43 
     | 
    
         
             
                    self._config = DiracConfiguration(**kwargs)
         
     | 
| 
      
 44 
     | 
    
         
            +
                    _policies = kwargs.pop("policies", None)
         
     | 
| 
      
 45 
     | 
    
         
            +
                    if _policies is None:
         
     | 
| 
      
 46 
     | 
    
         
            +
                        _policies = [
         
     | 
| 
      
 47 
     | 
    
         
            +
                            policies.RequestIdPolicy(**kwargs),
         
     | 
| 
      
 48 
     | 
    
         
            +
                            self._config.headers_policy,
         
     | 
| 
      
 49 
     | 
    
         
            +
                            self._config.user_agent_policy,
         
     | 
| 
      
 50 
     | 
    
         
            +
                            self._config.proxy_policy,
         
     | 
| 
      
 51 
     | 
    
         
            +
                            policies.ContentDecodePolicy(**kwargs),
         
     | 
| 
      
 52 
     | 
    
         
            +
                            self._config.redirect_policy,
         
     | 
| 
      
 53 
     | 
    
         
            +
                            self._config.retry_policy,
         
     | 
| 
      
 54 
     | 
    
         
            +
                            self._config.authentication_policy,
         
     | 
| 
      
 55 
     | 
    
         
            +
                            self._config.custom_hook_policy,
         
     | 
| 
      
 56 
     | 
    
         
            +
                            self._config.logging_policy,
         
     | 
| 
      
 57 
     | 
    
         
            +
                            policies.DistributedTracingPolicy(**kwargs),
         
     | 
| 
      
 58 
     | 
    
         
            +
                            (
         
     | 
| 
      
 59 
     | 
    
         
            +
                                policies.SensitiveHeaderCleanupPolicy(**kwargs)
         
     | 
| 
      
 60 
     | 
    
         
            +
                                if self._config.redirect_policy
         
     | 
| 
      
 61 
     | 
    
         
            +
                                else None
         
     | 
| 
      
 62 
     | 
    
         
            +
                            ),
         
     | 
| 
      
 63 
     | 
    
         
            +
                            self._config.http_logging_policy,
         
     | 
| 
      
 64 
     | 
    
         
            +
                        ]
         
     | 
| 
       43 
65 
     | 
    
         
             
                    self._client: PipelineClient = PipelineClient(
         
     | 
| 
       44 
     | 
    
         
            -
                        base_url=endpoint,  
     | 
| 
      
 66 
     | 
    
         
            +
                        base_url=endpoint, policies=_policies, **kwargs
         
     | 
| 
       45 
67 
     | 
    
         
             
                    )
         
     | 
| 
       46 
68 
     | 
    
         | 
| 
       47 
69 
     | 
    
         
             
                    client_models = {
         
     | 
| 
         @@ -53,7 +75,7 @@ class Dirac:  # pylint: disable=client-accepts-api-version-keyword 
     | 
|
| 
       53 
75 
     | 
    
         
             
                    self.well_known = WellKnownOperations(
         
     | 
| 
       54 
76 
     | 
    
         
             
                        self._client, self._config, self._serialize, self._deserialize
         
     | 
| 
       55 
77 
     | 
    
         
             
                    )
         
     | 
| 
       56 
     | 
    
         
            -
                    self.auth = AuthOperations( 
     | 
| 
      
 78 
     | 
    
         
            +
                    self.auth = AuthOperations(
         
     | 
| 
       57 
79 
     | 
    
         
             
                        self._client, self._config, self._serialize, self._deserialize
         
     | 
| 
       58 
80 
     | 
    
         
             
                    )
         
     | 
| 
       59 
81 
     | 
    
         
             
                    self.config = ConfigOperations(
         
     | 
| 
         @@ -63,7 +85,9 @@ class Dirac:  # pylint: disable=client-accepts-api-version-keyword 
     | 
|
| 
       63 
85 
     | 
    
         
             
                        self._client, self._config, self._serialize, self._deserialize
         
     | 
| 
       64 
86 
     | 
    
         
             
                    )
         
     | 
| 
       65 
87 
     | 
    
         | 
| 
       66 
     | 
    
         
            -
                def send_request( 
     | 
| 
      
 88 
     | 
    
         
            +
                def send_request(
         
     | 
| 
      
 89 
     | 
    
         
            +
                    self, request: HttpRequest, *, stream: bool = False, **kwargs: Any
         
     | 
| 
      
 90 
     | 
    
         
            +
                ) -> HttpResponse:
         
     | 
| 
       67 
91 
     | 
    
         
             
                    """Runs the network request through the client's chained policies.
         
     | 
| 
       68 
92 
     | 
    
         | 
| 
       69 
93 
     | 
    
         
             
                    >>> from azure.core.rest import HttpRequest
         
     | 
| 
         @@ -83,7 +107,7 @@ class Dirac:  # pylint: disable=client-accepts-api-version-keyword 
     | 
|
| 
       83 
107 
     | 
    
         | 
| 
       84 
108 
     | 
    
         
             
                    request_copy = deepcopy(request)
         
     | 
| 
       85 
109 
     | 
    
         
             
                    request_copy.url = self._client.format_url(request_copy.url)
         
     | 
| 
       86 
     | 
    
         
            -
                    return self._client.send_request(request_copy, **kwargs)
         
     | 
| 
      
 110 
     | 
    
         
            +
                    return self._client.send_request(request_copy, stream=stream, **kwargs)  # type: ignore
         
     | 
| 
       87 
111 
     | 
    
         | 
| 
       88 
112 
     | 
    
         
             
                def close(self) -> None:
         
     | 
| 
       89 
113 
     | 
    
         
             
                    self._client.close()
         
     | 
    
        diracx/client/_configuration.py
    CHANGED
    
    | 
         @@ -1,18 +1,17 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # coding=utf-8
         
     | 
| 
       2 
2 
     | 
    
         
             
            # --------------------------------------------------------------------------
         
     | 
| 
       3 
     | 
    
         
            -
            # Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.10. 
     | 
| 
      
 3 
     | 
    
         
            +
            # Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.10.2, generator: @autorest/python@6.13.9)
         
     | 
| 
       4 
4 
     | 
    
         
             
            # Changes may cause incorrect behavior and will be lost if the code is regenerated.
         
     | 
| 
       5 
5 
     | 
    
         
             
            # --------------------------------------------------------------------------
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            from typing import Any
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
            from azure.core.configuration import Configuration
         
     | 
| 
       10 
9 
     | 
    
         
             
            from azure.core.pipeline import policies
         
     | 
| 
       11 
10 
     | 
    
         | 
| 
       12 
11 
     | 
    
         
             
            VERSION = "unknown"
         
     | 
| 
       13 
12 
     | 
    
         | 
| 
       14 
13 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
            class DiracConfiguration 
     | 
| 
      
 14 
     | 
    
         
            +
            class DiracConfiguration:  # pylint: disable=too-many-instance-attributes
         
     | 
| 
       16 
15 
     | 
    
         
             
                """Configuration for Dirac.
         
     | 
| 
       17 
16 
     | 
    
         | 
| 
       18 
17 
     | 
    
         
             
                Note that all parameters used to create this instance are saved as instance
         
     | 
| 
         @@ -20,9 +19,9 @@ class DiracConfiguration(Configuration):  # pylint: disable=too-many-instance-at 
     | 
|
| 
       20 
19 
     | 
    
         
             
                """
         
     | 
| 
       21 
20 
     | 
    
         | 
| 
       22 
21 
     | 
    
         
             
                def __init__(self, **kwargs: Any) -> None:
         
     | 
| 
       23 
     | 
    
         
            -
                    super(DiracConfiguration, self).__init__(**kwargs)
         
     | 
| 
       24 
22 
     | 
    
         | 
| 
       25 
23 
     | 
    
         
             
                    kwargs.setdefault("sdk_moniker", "dirac/{}".format(VERSION))
         
     | 
| 
      
 24 
     | 
    
         
            +
                    self.polling_interval = kwargs.get("polling_interval", 30)
         
     | 
| 
       26 
25 
     | 
    
         
             
                    self._configure(**kwargs)
         
     | 
| 
       27 
26 
     | 
    
         | 
| 
       28 
27 
     | 
    
         
             
                def _configure(self, **kwargs: Any) -> None:
         
     | 
| 
         @@ -39,11 +38,11 @@ class DiracConfiguration(Configuration):  # pylint: disable=too-many-instance-at 
     | 
|
| 
       39 
38 
     | 
    
         
             
                    self.http_logging_policy = kwargs.get(
         
     | 
| 
       40 
39 
     | 
    
         
             
                        "http_logging_policy"
         
     | 
| 
       41 
40 
     | 
    
         
             
                    ) or policies.HttpLoggingPolicy(**kwargs)
         
     | 
| 
       42 
     | 
    
         
            -
                    self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs)
         
     | 
| 
       43 
41 
     | 
    
         
             
                    self.custom_hook_policy = kwargs.get(
         
     | 
| 
       44 
42 
     | 
    
         
             
                        "custom_hook_policy"
         
     | 
| 
       45 
43 
     | 
    
         
             
                    ) or policies.CustomHookPolicy(**kwargs)
         
     | 
| 
       46 
44 
     | 
    
         
             
                    self.redirect_policy = kwargs.get("redirect_policy") or policies.RedirectPolicy(
         
     | 
| 
       47 
45 
     | 
    
         
             
                        **kwargs
         
     | 
| 
       48 
46 
     | 
    
         
             
                    )
         
     | 
| 
      
 47 
     | 
    
         
            +
                    self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs)
         
     | 
| 
       49 
48 
     | 
    
         
             
                    self.authentication_policy = kwargs.get("authentication_policy")
         
     | 
    
        diracx/client/_serialization.py
    CHANGED
    
    | 
         @@ -63,12 +63,8 @@ import xml.etree.ElementTree as ET 
     | 
|
| 
       63 
63 
     | 
    
         | 
| 
       64 
64 
     | 
    
         
             
            import isodate  # type: ignore
         
     | 
| 
       65 
65 
     | 
    
         | 
| 
       66 
     | 
    
         
            -
            from azure.core.exceptions import  
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
                SerializationError,
         
     | 
| 
       69 
     | 
    
         
            -
                raise_with_traceback,
         
     | 
| 
       70 
     | 
    
         
            -
            )
         
     | 
| 
       71 
     | 
    
         
            -
            from azure.core.serialization import NULL as AzureCoreNull
         
     | 
| 
      
 66 
     | 
    
         
            +
            from azure.core.exceptions import DeserializationError, SerializationError
         
     | 
| 
      
 67 
     | 
    
         
            +
            from azure.core.serialization import NULL as CoreNull
         
     | 
| 
       72 
68 
     | 
    
         | 
| 
       73 
69 
     | 
    
         
             
            _BOM = codecs.BOM_UTF8.decode(encoding="utf-8")
         
     | 
| 
       74 
70 
     | 
    
         | 
| 
         @@ -77,6 +73,7 @@ JSON = MutableMapping[str, Any] 
     | 
|
| 
       77 
73 
     | 
    
         | 
| 
       78 
74 
     | 
    
         | 
| 
       79 
75 
     | 
    
         
             
            class RawDeserializer:
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
       80 
77 
     | 
    
         
             
                # Accept "text" because we're open minded people...
         
     | 
| 
       81 
78 
     | 
    
         
             
                JSON_REGEXP = re.compile(r"^(application|text)/([a-z+.]+\+)?json$")
         
     | 
| 
       82 
79 
     | 
    
         | 
| 
         @@ -120,6 +117,7 @@ class RawDeserializer: 
     | 
|
| 
       120 
117 
     | 
    
         
             
                            raise DeserializationError("JSON is invalid: {}".format(err), err)
         
     | 
| 
       121 
118 
     | 
    
         
             
                    elif "xml" in (content_type or []):
         
     | 
| 
       122 
119 
     | 
    
         
             
                        try:
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
       123 
121 
     | 
    
         
             
                            try:
         
     | 
| 
       124 
122 
     | 
    
         
             
                                if isinstance(data, unicode):  # type: ignore
         
     | 
| 
       125 
123 
     | 
    
         
             
                                    # If I'm Python 2.7 and unicode XML will scream if I try a "fromstring" on unicode string
         
     | 
| 
         @@ -128,7 +126,7 @@ class RawDeserializer: 
     | 
|
| 
       128 
126 
     | 
    
         
             
                                pass
         
     | 
| 
       129 
127 
     | 
    
         | 
| 
       130 
128 
     | 
    
         
             
                            return ET.fromstring(data_as_str)  # nosec
         
     | 
| 
       131 
     | 
    
         
            -
                        except ET.ParseError:
         
     | 
| 
      
 129 
     | 
    
         
            +
                        except ET.ParseError as err:
         
     | 
| 
       132 
130 
     | 
    
         
             
                            # It might be because the server has an issue, and returned JSON with
         
     | 
| 
       133 
131 
     | 
    
         
             
                            # content-type XML....
         
     | 
| 
       134 
132 
     | 
    
         
             
                            # So let's try a JSON load, and if it's still broken
         
     | 
| 
         @@ -147,7 +145,7 @@ class RawDeserializer: 
     | 
|
| 
       147 
145 
     | 
    
         
             
                            # The function hack is because Py2.7 messes up with exception
         
     | 
| 
       148 
146 
     | 
    
         
             
                            # context otherwise.
         
     | 
| 
       149 
147 
     | 
    
         
             
                            _LOGGER.critical("Wasn't XML not JSON, failing")
         
     | 
| 
       150 
     | 
    
         
            -
                             
     | 
| 
      
 148 
     | 
    
         
            +
                            raise DeserializationError("XML is invalid") from err
         
     | 
| 
       151 
149 
     | 
    
         
             
                    raise DeserializationError(
         
     | 
| 
       152 
150 
     | 
    
         
             
                        "Cannot deserialize content-type: {}".format(content_type)
         
     | 
| 
       153 
151 
     | 
    
         
             
                    )
         
     | 
| 
         @@ -178,13 +176,6 @@ class RawDeserializer: 
     | 
|
| 
       178 
176 
     | 
    
         
             
                    return None
         
     | 
| 
       179 
177 
     | 
    
         | 
| 
       180 
178 
     | 
    
         | 
| 
       181 
     | 
    
         
            -
            try:
         
     | 
| 
       182 
     | 
    
         
            -
                basestring  # type: ignore
         
     | 
| 
       183 
     | 
    
         
            -
                unicode_str = unicode  # type: ignore
         
     | 
| 
       184 
     | 
    
         
            -
            except NameError:
         
     | 
| 
       185 
     | 
    
         
            -
                basestring = str
         
     | 
| 
       186 
     | 
    
         
            -
                unicode_str = str
         
     | 
| 
       187 
     | 
    
         
            -
             
     | 
| 
       188 
179 
     | 
    
         
             
            _LOGGER = logging.getLogger(__name__)
         
     | 
| 
       189 
180 
     | 
    
         | 
| 
       190 
181 
     | 
    
         
             
            try:
         
     | 
| 
         @@ -303,7 +294,7 @@ class Model(object): 
     | 
|
| 
       303 
294 
     | 
    
         
             
                _validation: Dict[str, Dict[str, Any]] = {}
         
     | 
| 
       304 
295 
     | 
    
         | 
| 
       305 
296 
     | 
    
         
             
                def __init__(self, **kwargs: Any) -> None:
         
     | 
| 
       306 
     | 
    
         
            -
                    self.additional_properties: Dict[str, Any] = {}
         
     | 
| 
      
 297 
     | 
    
         
            +
                    self.additional_properties: Optional[Dict[str, Any]] = {}
         
     | 
| 
       307 
298 
     | 
    
         
             
                    for k in kwargs:
         
     | 
| 
       308 
299 
     | 
    
         
             
                        if k not in self._attribute_map:
         
     | 
| 
       309 
300 
     | 
    
         
             
                            _LOGGER.warning(
         
     | 
| 
         @@ -360,7 +351,7 @@ class Model(object): 
     | 
|
| 
       360 
351 
     | 
    
         
             
                    )
         
     | 
| 
       361 
352 
     | 
    
         | 
| 
       362 
353 
     | 
    
         
             
                def serialize(self, keep_readonly: bool = False, **kwargs: Any) -> JSON:
         
     | 
| 
       363 
     | 
    
         
            -
                    """Return the JSON that would be sent to  
     | 
| 
      
 354 
     | 
    
         
            +
                    """Return the JSON that would be sent to server from this model.
         
     | 
| 
       364 
355 
     | 
    
         | 
| 
       365 
356 
     | 
    
         
             
                    This is an alias to `as_dict(full_restapi_key_transformer, keep_readonly=False)`.
         
     | 
| 
       366 
357 
     | 
    
         | 
| 
         @@ -371,7 +362,7 @@ class Model(object): 
     | 
|
| 
       371 
362 
     | 
    
         
             
                    :rtype: dict
         
     | 
| 
       372 
363 
     | 
    
         
             
                    """
         
     | 
| 
       373 
364 
     | 
    
         
             
                    serializer = Serializer(self._infer_class_models())
         
     | 
| 
       374 
     | 
    
         
            -
                    return serializer._serialize(self, keep_readonly=keep_readonly, **kwargs)
         
     | 
| 
      
 365 
     | 
    
         
            +
                    return serializer._serialize(self, keep_readonly=keep_readonly, **kwargs)  # type: ignore
         
     | 
| 
       375 
366 
     | 
    
         | 
| 
       376 
367 
     | 
    
         
             
                def as_dict(
         
     | 
| 
       377 
368 
     | 
    
         
             
                    self,
         
     | 
| 
         @@ -412,9 +403,7 @@ class Model(object): 
     | 
|
| 
       412 
403 
     | 
    
         
             
                    :rtype: dict
         
     | 
| 
       413 
404 
     | 
    
         
             
                    """
         
     | 
| 
       414 
405 
     | 
    
         
             
                    serializer = Serializer(self._infer_class_models())
         
     | 
| 
       415 
     | 
    
         
            -
                    return serializer._serialize(
         
     | 
| 
       416 
     | 
    
         
            -
                        self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs
         
     | 
| 
       417 
     | 
    
         
            -
                    )
         
     | 
| 
      
 406 
     | 
    
         
            +
                    return serializer._serialize(self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs)  # type: ignore
         
     | 
| 
       418 
407 
     | 
    
         | 
| 
       419 
408 
     | 
    
         
             
                @classmethod
         
     | 
| 
       420 
409 
     | 
    
         
             
                def _infer_class_models(cls):
         
     | 
| 
         @@ -443,7 +432,7 @@ class Model(object): 
     | 
|
| 
       443 
432 
     | 
    
         
             
                    :raises: DeserializationError if something went wrong
         
     | 
| 
       444 
433 
     | 
    
         
             
                    """
         
     | 
| 
       445 
434 
     | 
    
         
             
                    deserializer = Deserializer(cls._infer_class_models())
         
     | 
| 
       446 
     | 
    
         
            -
                    return deserializer(cls.__name__, data, content_type=content_type)
         
     | 
| 
      
 435 
     | 
    
         
            +
                    return deserializer(cls.__name__, data, content_type=content_type)  # type: ignore
         
     | 
| 
       447 
436 
     | 
    
         | 
| 
       448 
437 
     | 
    
         
             
                @classmethod
         
     | 
| 
       449 
438 
     | 
    
         
             
                def from_dict(
         
     | 
| 
         @@ -473,7 +462,7 @@ class Model(object): 
     | 
|
| 
       473 
462 
     | 
    
         
             
                        if key_extractors is None
         
     | 
| 
       474 
463 
     | 
    
         
             
                        else key_extractors
         
     | 
| 
       475 
464 
     | 
    
         
             
                    )
         
     | 
| 
       476 
     | 
    
         
            -
                    return deserializer(cls.__name__, data, content_type=content_type)
         
     | 
| 
      
 465 
     | 
    
         
            +
                    return deserializer(cls.__name__, data, content_type=content_type)  # type: ignore
         
     | 
| 
       477 
466 
     | 
    
         | 
| 
       478 
467 
     | 
    
         
             
                @classmethod
         
     | 
| 
       479 
468 
     | 
    
         
             
                def _flatten_subtype(cls, key, objects):
         
     | 
| 
         @@ -581,7 +570,7 @@ class Serializer(object): 
     | 
|
| 
       581 
570 
     | 
    
         
             
                    "multiple": lambda x, y: x % y != 0,
         
     | 
| 
       582 
571 
     | 
    
         
             
                }
         
     | 
| 
       583 
572 
     | 
    
         | 
| 
       584 
     | 
    
         
            -
                def __init__(self, classes: Optional[Mapping[str,  
     | 
| 
      
 573 
     | 
    
         
            +
                def __init__(self, classes: Optional[Mapping[str, type]] = None):
         
     | 
| 
       585 
574 
     | 
    
         
             
                    self.serialize_type = {
         
     | 
| 
       586 
575 
     | 
    
         
             
                        "iso-8601": Serializer.serialize_iso,
         
     | 
| 
       587 
576 
     | 
    
         
             
                        "rfc-1123": Serializer.serialize_rfc,
         
     | 
| 
         @@ -597,7 +586,7 @@ class Serializer(object): 
     | 
|
| 
       597 
586 
     | 
    
         
             
                        "[]": self.serialize_iter,
         
     | 
| 
       598 
587 
     | 
    
         
             
                        "{}": self.serialize_dict,
         
     | 
| 
       599 
588 
     | 
    
         
             
                    }
         
     | 
| 
       600 
     | 
    
         
            -
                    self.dependencies: Dict[str,  
     | 
| 
      
 589 
     | 
    
         
            +
                    self.dependencies: Dict[str, type] = dict(classes) if classes else {}
         
     | 
| 
       601 
590 
     | 
    
         
             
                    self.key_transformer = full_restapi_key_transformer
         
     | 
| 
       602 
591 
     | 
    
         
             
                    self.client_side_validation = True
         
     | 
| 
       603 
592 
     | 
    
         | 
| 
         @@ -650,6 +639,7 @@ class Serializer(object): 
     | 
|
| 
       650 
639 
     | 
    
         
             
                                    serialized.update(target_obj.additional_properties)
         
     | 
| 
       651 
640 
     | 
    
         
             
                                continue
         
     | 
| 
       652 
641 
     | 
    
         
             
                            try:
         
     | 
| 
      
 642 
     | 
    
         
            +
             
     | 
| 
       653 
643 
     | 
    
         
             
                                orig_attr = getattr(target_obj, attr)
         
     | 
| 
       654 
644 
     | 
    
         
             
                                if is_xml_model_serialization:
         
     | 
| 
       655 
645 
     | 
    
         
             
                                    pass  # Don't provide "transformer" for XML for now. Keep "orig_attr"
         
     | 
| 
         @@ -692,7 +682,7 @@ class Serializer(object): 
     | 
|
| 
       692 
682 
     | 
    
         
             
                                    else:  # That's a basic type
         
     | 
| 
       693 
683 
     | 
    
         
             
                                        # Integrate namespace if necessary
         
     | 
| 
       694 
684 
     | 
    
         
             
                                        local_node = _create_xml_node(xml_name, xml_prefix, xml_ns)
         
     | 
| 
       695 
     | 
    
         
            -
                                        local_node.text =  
     | 
| 
      
 685 
     | 
    
         
            +
                                        local_node.text = str(new_attr)
         
     | 
| 
       696 
686 
     | 
    
         
             
                                        serialized.append(local_node)  # type: ignore
         
     | 
| 
       697 
687 
     | 
    
         
             
                                else:  # JSON
         
     | 
| 
       698 
688 
     | 
    
         
             
                                    for k in reversed(keys):  # type: ignore
         
     | 
| 
         @@ -705,14 +695,15 @@ class Serializer(object): 
     | 
|
| 
       705 
695 
     | 
    
         
             
                                            _serialized.update(_new_attr)  # type: ignore
         
     | 
| 
       706 
696 
     | 
    
         
             
                                        _new_attr = _new_attr[k]  # type: ignore
         
     | 
| 
       707 
697 
     | 
    
         
             
                                        _serialized = _serialized[k]
         
     | 
| 
       708 
     | 
    
         
            -
                            except ValueError:
         
     | 
| 
       709 
     | 
    
         
            -
                                 
     | 
| 
      
 698 
     | 
    
         
            +
                            except ValueError as err:
         
     | 
| 
      
 699 
     | 
    
         
            +
                                if isinstance(err, SerializationError):
         
     | 
| 
      
 700 
     | 
    
         
            +
                                    raise
         
     | 
| 
       710 
701 
     | 
    
         | 
| 
       711 
702 
     | 
    
         
             
                    except (AttributeError, KeyError, TypeError) as err:
         
     | 
| 
       712 
703 
     | 
    
         
             
                        msg = "Attribute {} in object {} cannot be serialized.\n{}".format(
         
     | 
| 
       713 
704 
     | 
    
         
             
                            attr_name, class_name, str(target_obj)
         
     | 
| 
       714 
705 
     | 
    
         
             
                        )
         
     | 
| 
       715 
     | 
    
         
            -
                         
     | 
| 
      
 706 
     | 
    
         
            +
                        raise SerializationError(msg) from err
         
     | 
| 
       716 
707 
     | 
    
         
             
                    else:
         
     | 
| 
       717 
708 
     | 
    
         
             
                        return serialized
         
     | 
| 
       718 
709 
     | 
    
         | 
| 
         @@ -756,9 +747,9 @@ class Serializer(object): 
     | 
|
| 
       756 
747 
     | 
    
         
             
                                ]
         
     | 
| 
       757 
748 
     | 
    
         
             
                            data = deserializer._deserialize(data_type, data)
         
     | 
| 
       758 
749 
     | 
    
         
             
                        except DeserializationError as err:
         
     | 
| 
       759 
     | 
    
         
            -
                             
     | 
| 
       760 
     | 
    
         
            -
                                 
     | 
| 
       761 
     | 
    
         
            -
                            )
         
     | 
| 
      
 750 
     | 
    
         
            +
                            raise SerializationError(
         
     | 
| 
      
 751 
     | 
    
         
            +
                                "Unable to build a model: " + str(err)
         
     | 
| 
      
 752 
     | 
    
         
            +
                            ) from err
         
     | 
| 
       762 
753 
     | 
    
         | 
| 
       763 
754 
     | 
    
         
             
                    return self._serialize(data, data_type, **kwargs)
         
     | 
| 
       764 
755 
     | 
    
         | 
| 
         @@ -778,6 +769,7 @@ class Serializer(object): 
     | 
|
| 
       778 
769 
     | 
    
         | 
| 
       779 
770 
     | 
    
         
             
                        if kwargs.get("skip_quote") is True:
         
     | 
| 
       780 
771 
     | 
    
         
             
                            output = str(output)
         
     | 
| 
      
 772 
     | 
    
         
            +
                            output = output.replace("{", quote("{")).replace("}", quote("}"))
         
     | 
| 
       781 
773 
     | 
    
         
             
                        else:
         
     | 
| 
       782 
774 
     | 
    
         
             
                            output = quote(str(output), safe="")
         
     | 
| 
       783 
775 
     | 
    
         
             
                    except SerializationError:
         
     | 
| 
         @@ -790,7 +782,9 @@ class Serializer(object): 
     | 
|
| 
       790 
782 
     | 
    
         | 
| 
       791 
783 
     | 
    
         
             
                    :param data: The data to be serialized.
         
     | 
| 
       792 
784 
     | 
    
         
             
                    :param str data_type: The type to be serialized from.
         
     | 
| 
       793 
     | 
    
         
            -
                    : 
     | 
| 
      
 785 
     | 
    
         
            +
                    :keyword bool skip_quote: Whether to skip quote the serialized result.
         
     | 
| 
      
 786 
     | 
    
         
            +
                    Defaults to False.
         
     | 
| 
      
 787 
     | 
    
         
            +
                    :rtype: str, list
         
     | 
| 
       794 
788 
     | 
    
         
             
                    :raises: TypeError if serialization fails.
         
     | 
| 
       795 
789 
     | 
    
         
             
                    :raises: ValueError if data is None
         
     | 
| 
       796 
790 
     | 
    
         
             
                    """
         
     | 
| 
         @@ -798,17 +792,10 @@ class Serializer(object): 
     | 
|
| 
       798 
792 
     | 
    
         
             
                        # Treat the list aside, since we don't want to encode the div separator
         
     | 
| 
       799 
793 
     | 
    
         
             
                        if data_type.startswith("["):
         
     | 
| 
       800 
794 
     | 
    
         
             
                            internal_data_type = data_type[1:-1]
         
     | 
| 
       801 
     | 
    
         
            -
                             
     | 
| 
       802 
     | 
    
         
            -
             
     | 
| 
       803 
     | 
    
         
            -
             
     | 
| 
       804 
     | 
    
         
            -
             
     | 
| 
       805 
     | 
    
         
            -
                                    else ""
         
     | 
| 
       806 
     | 
    
         
            -
                                )
         
     | 
| 
       807 
     | 
    
         
            -
                                for d in data
         
     | 
| 
       808 
     | 
    
         
            -
                            ]
         
     | 
| 
       809 
     | 
    
         
            -
                            if not kwargs.get("skip_quote", False):
         
     | 
| 
       810 
     | 
    
         
            -
                                data = [quote(str(d), safe="") for d in data]
         
     | 
| 
       811 
     | 
    
         
            -
                            return str(self.serialize_iter(data, internal_data_type, **kwargs))
         
     | 
| 
      
 795 
     | 
    
         
            +
                            do_quote = not kwargs.get("skip_quote", False)
         
     | 
| 
      
 796 
     | 
    
         
            +
                            return self.serialize_iter(
         
     | 
| 
      
 797 
     | 
    
         
            +
                                data, internal_data_type, do_quote=do_quote, **kwargs
         
     | 
| 
      
 798 
     | 
    
         
            +
                            )
         
     | 
| 
       812 
799 
     | 
    
         | 
| 
       813 
800 
     | 
    
         
             
                        # Not a list, regular serialization
         
     | 
| 
       814 
801 
     | 
    
         
             
                        output = self.serialize_data(data, data_type, **kwargs)
         
     | 
| 
         @@ -859,7 +846,7 @@ class Serializer(object): 
     | 
|
| 
       859 
846 
     | 
    
         
             
                        raise ValueError("No value for given attribute")
         
     | 
| 
       860 
847 
     | 
    
         | 
| 
       861 
848 
     | 
    
         
             
                    try:
         
     | 
| 
       862 
     | 
    
         
            -
                        if data is  
     | 
| 
      
 849 
     | 
    
         
            +
                        if data is CoreNull:
         
     | 
| 
       863 
850 
     | 
    
         
             
                            return None
         
     | 
| 
       864 
851 
     | 
    
         
             
                        if data_type in self.basic_types.values():
         
     | 
| 
       865 
852 
     | 
    
         
             
                            return self.serialize_basic(data, data_type, **kwargs)
         
     | 
| 
         @@ -879,7 +866,7 @@ class Serializer(object): 
     | 
|
| 
       879 
866 
     | 
    
         | 
| 
       880 
867 
     | 
    
         
             
                    except (ValueError, TypeError) as err:
         
     | 
| 
       881 
868 
     | 
    
         
             
                        msg = "Unable to serialize value: {!r} as type: {!r}."
         
     | 
| 
       882 
     | 
    
         
            -
                         
     | 
| 
      
 869 
     | 
    
         
            +
                        raise SerializationError(msg.format(data, data_type)) from err
         
     | 
| 
       883 
870 
     | 
    
         
             
                    else:
         
     | 
| 
       884 
871 
     | 
    
         
             
                        return self._serialize(data, **kwargs)
         
     | 
| 
       885 
872 
     | 
    
         | 
| 
         @@ -947,6 +934,8 @@ class Serializer(object): 
     | 
|
| 
       947 
934 
     | 
    
         
             
                     not be None or empty.
         
     | 
| 
       948 
935 
     | 
    
         
             
                    :param str div: If set, this str will be used to combine the elements
         
     | 
| 
       949 
936 
     | 
    
         
             
                     in the iterable into a combined string. Default is 'None'.
         
     | 
| 
      
 937 
     | 
    
         
            +
                    :keyword bool do_quote: Whether to quote the serialized result of each iterable element.
         
     | 
| 
      
 938 
     | 
    
         
            +
                    Defaults to False.
         
     | 
| 
       950 
939 
     | 
    
         
             
                    :rtype: list, str
         
     | 
| 
       951 
940 
     | 
    
         
             
                    """
         
     | 
| 
       952 
941 
     | 
    
         
             
                    if isinstance(data, str):
         
     | 
| 
         @@ -959,9 +948,16 @@ class Serializer(object): 
     | 
|
| 
       959 
948 
     | 
    
         
             
                    for d in data:
         
     | 
| 
       960 
949 
     | 
    
         
             
                        try:
         
     | 
| 
       961 
950 
     | 
    
         
             
                            serialized.append(self.serialize_data(d, iter_type, **kwargs))
         
     | 
| 
       962 
     | 
    
         
            -
                        except ValueError:
         
     | 
| 
      
 951 
     | 
    
         
            +
                        except ValueError as err:
         
     | 
| 
      
 952 
     | 
    
         
            +
                            if isinstance(err, SerializationError):
         
     | 
| 
      
 953 
     | 
    
         
            +
                                raise
         
     | 
| 
       963 
954 
     | 
    
         
             
                            serialized.append(None)
         
     | 
| 
       964 
955 
     | 
    
         | 
| 
      
 956 
     | 
    
         
            +
                    if kwargs.get("do_quote", False):
         
     | 
| 
      
 957 
     | 
    
         
            +
                        serialized = [
         
     | 
| 
      
 958 
     | 
    
         
            +
                            "" if s is None else quote(str(s), safe="") for s in serialized
         
     | 
| 
      
 959 
     | 
    
         
            +
                        ]
         
     | 
| 
      
 960 
     | 
    
         
            +
             
     | 
| 
       965 
961 
     | 
    
         
             
                    if div:
         
     | 
| 
       966 
962 
     | 
    
         
             
                        serialized = ["" if s is None else str(s) for s in serialized]
         
     | 
| 
       967 
963 
     | 
    
         
             
                        serialized = div.join(serialized)
         
     | 
| 
         @@ -1014,7 +1010,9 @@ class Serializer(object): 
     | 
|
| 
       1014 
1010 
     | 
    
         
             
                            serialized[self.serialize_unicode(key)] = self.serialize_data(
         
     | 
| 
       1015 
1011 
     | 
    
         
             
                                value, dict_type, **kwargs
         
     | 
| 
       1016 
1012 
     | 
    
         
             
                            )
         
     | 
| 
       1017 
     | 
    
         
            -
                        except ValueError:
         
     | 
| 
      
 1013 
     | 
    
         
            +
                        except ValueError as err:
         
     | 
| 
      
 1014 
     | 
    
         
            +
                            if isinstance(err, SerializationError):
         
     | 
| 
      
 1015 
     | 
    
         
            +
                                raise
         
     | 
| 
       1018 
1016 
     | 
    
         
             
                            serialized[self.serialize_unicode(key)] = None
         
     | 
| 
       1019 
1017 
     | 
    
         | 
| 
       1020 
1018 
     | 
    
         
             
                    if "xml" in serialization_ctxt:
         
     | 
| 
         @@ -1049,7 +1047,7 @@ class Serializer(object): 
     | 
|
| 
       1049 
1047 
     | 
    
         
             
                        return self.serialize_basic(attr, self.basic_types[obj_type], **kwargs)
         
     | 
| 
       1050 
1048 
     | 
    
         
             
                    if obj_type is _long_type:
         
     | 
| 
       1051 
1049 
     | 
    
         
             
                        return self.serialize_long(attr)
         
     | 
| 
       1052 
     | 
    
         
            -
                    if obj_type is  
     | 
| 
      
 1050 
     | 
    
         
            +
                    if obj_type is str:
         
     | 
| 
       1053 
1051 
     | 
    
         
             
                        return self.serialize_unicode(attr)
         
     | 
| 
       1054 
1052 
     | 
    
         
             
                    if obj_type is datetime.datetime:
         
     | 
| 
       1055 
1053 
     | 
    
         
             
                        return self.serialize_iso(attr)
         
     | 
| 
         @@ -1233,10 +1231,10 @@ class Serializer(object): 
     | 
|
| 
       1233 
1231 
     | 
    
         
             
                        return date + microseconds + "Z"
         
     | 
| 
       1234 
1232 
     | 
    
         
             
                    except (ValueError, OverflowError) as err:
         
     | 
| 
       1235 
1233 
     | 
    
         
             
                        msg = "Unable to serialize datetime object."
         
     | 
| 
       1236 
     | 
    
         
            -
                         
     | 
| 
      
 1234 
     | 
    
         
            +
                        raise SerializationError(msg) from err
         
     | 
| 
       1237 
1235 
     | 
    
         
             
                    except AttributeError as err:
         
     | 
| 
       1238 
1236 
     | 
    
         
             
                        msg = "ISO-8601 object must be valid Datetime object."
         
     | 
| 
       1239 
     | 
    
         
            -
                         
     | 
| 
      
 1237 
     | 
    
         
            +
                        raise TypeError(msg) from err
         
     | 
| 
       1240 
1238 
     | 
    
         | 
| 
       1241 
1239 
     | 
    
         
             
                @staticmethod
         
     | 
| 
       1242 
1240 
     | 
    
         
             
                def serialize_unix(attr, **kwargs):
         
     | 
| 
         @@ -1272,7 +1270,6 @@ def rest_key_extractor(attr, attr_desc, data): 
     | 
|
| 
       1272 
1270 
     | 
    
         
             
                    if working_data is None:
         
     | 
| 
       1273 
1271 
     | 
    
         
             
                        # If at any point while following flatten JSON path see None, it means
         
     | 
| 
       1274 
1272 
     | 
    
         
             
                        # that all properties under are None as well
         
     | 
| 
       1275 
     | 
    
         
            -
                        # https://github.com/Azure/msrest-for-python/issues/197
         
     | 
| 
       1276 
1273 
     | 
    
         
             
                        return None
         
     | 
| 
       1277 
1274 
     | 
    
         
             
                    key = ".".join(dict_keys[1:])
         
     | 
| 
       1278 
1275 
     | 
    
         | 
| 
         @@ -1295,7 +1292,6 @@ def rest_key_case_insensitive_extractor(attr, attr_desc, data): 
     | 
|
| 
       1295 
1292 
     | 
    
         
             
                    if working_data is None:
         
     | 
| 
       1296 
1293 
     | 
    
         
             
                        # If at any point while following flatten JSON path see None, it means
         
     | 
| 
       1297 
1294 
     | 
    
         
             
                        # that all properties under are None as well
         
     | 
| 
       1298 
     | 
    
         
            -
                        # https://github.com/Azure/msrest-for-python/issues/197
         
     | 
| 
       1299 
1295 
     | 
    
         
             
                        return None
         
     | 
| 
       1300 
1296 
     | 
    
         
             
                    key = ".".join(dict_keys[1:])
         
     | 
| 
       1301 
1297 
     | 
    
         | 
| 
         @@ -1445,7 +1441,7 @@ class Deserializer(object): 
     | 
|
| 
       1445 
1441 
     | 
    
         
             
                    r"\d{4}[-]\d{2}[-]\d{2}T\d{2}:\d{2}:\d{2}" r"\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?"
         
     | 
| 
       1446 
1442 
     | 
    
         
             
                )
         
     | 
| 
       1447 
1443 
     | 
    
         | 
| 
       1448 
     | 
    
         
            -
                def __init__(self, classes: Optional[Mapping[str,  
     | 
| 
      
 1444 
     | 
    
         
            +
                def __init__(self, classes: Optional[Mapping[str, type]] = None):
         
     | 
| 
       1449 
1445 
     | 
    
         
             
                    self.deserialize_type = {
         
     | 
| 
       1450 
1446 
     | 
    
         
             
                        "iso-8601": Deserializer.deserialize_iso,
         
     | 
| 
       1451 
1447 
     | 
    
         
             
                        "rfc-1123": Deserializer.deserialize_rfc,
         
     | 
| 
         @@ -1465,7 +1461,7 @@ class Deserializer(object): 
     | 
|
| 
       1465 
1461 
     | 
    
         
             
                        "duration": (isodate.Duration, datetime.timedelta),
         
     | 
| 
       1466 
1462 
     | 
    
         
             
                        "iso-8601": (datetime.datetime),
         
     | 
| 
       1467 
1463 
     | 
    
         
             
                    }
         
     | 
| 
       1468 
     | 
    
         
            -
                    self.dependencies: Dict[str,  
     | 
| 
      
 1464 
     | 
    
         
            +
                    self.dependencies: Dict[str, type] = dict(classes) if classes else {}
         
     | 
| 
       1469 
1465 
     | 
    
         
             
                    self.key_extractors = [rest_key_extractor, xml_key_extractor]
         
     | 
| 
       1470 
1466 
     | 
    
         
             
                    # Additional properties only works if the "rest_key_extractor" is used to
         
     | 
| 
       1471 
1467 
     | 
    
         
             
                    # extract the keys. Making it to work whatever the key extractor is too much
         
     | 
| 
         @@ -1524,7 +1520,7 @@ class Deserializer(object): 
     | 
|
| 
       1524 
1520 
     | 
    
         | 
| 
       1525 
1521 
     | 
    
         
             
                    response, class_name = self._classify_target(target_obj, data)
         
     | 
| 
       1526 
1522 
     | 
    
         | 
| 
       1527 
     | 
    
         
            -
                    if isinstance(response,  
     | 
| 
      
 1523 
     | 
    
         
            +
                    if isinstance(response, str):
         
     | 
| 
       1528 
1524 
     | 
    
         
             
                        return self.deserialize_data(data, response)
         
     | 
| 
       1529 
1525 
     | 
    
         
             
                    elif isinstance(response, type) and issubclass(response, Enum):
         
     | 
| 
       1530 
1526 
     | 
    
         
             
                        return self.deserialize_enum(data, response)
         
     | 
| 
         @@ -1561,7 +1557,7 @@ class Deserializer(object): 
     | 
|
| 
       1561 
1557 
     | 
    
         
             
                            d_attrs[attr] = value
         
     | 
| 
       1562 
1558 
     | 
    
         
             
                    except (AttributeError, TypeError, KeyError) as err:
         
     | 
| 
       1563 
1559 
     | 
    
         
             
                        msg = "Unable to deserialize to object: " + class_name  # type: ignore
         
     | 
| 
       1564 
     | 
    
         
            -
                         
     | 
| 
      
 1560 
     | 
    
         
            +
                        raise DeserializationError(msg) from err
         
     | 
| 
       1565 
1561 
     | 
    
         
             
                    else:
         
     | 
| 
       1566 
1562 
     | 
    
         
             
                        additional_properties = self._build_additional_properties(attributes, data)
         
     | 
| 
       1567 
1563 
     | 
    
         
             
                        return self._instantiate_model(response, d_attrs, additional_properties)
         
     | 
| 
         @@ -1598,14 +1594,14 @@ class Deserializer(object): 
     | 
|
| 
       1598 
1594 
     | 
    
         
             
                    if target is None:
         
     | 
| 
       1599 
1595 
     | 
    
         
             
                        return None, None
         
     | 
| 
       1600 
1596 
     | 
    
         | 
| 
       1601 
     | 
    
         
            -
                    if isinstance(target,  
     | 
| 
      
 1597 
     | 
    
         
            +
                    if isinstance(target, str):
         
     | 
| 
       1602 
1598 
     | 
    
         
             
                        try:
         
     | 
| 
       1603 
1599 
     | 
    
         
             
                            target = self.dependencies[target]
         
     | 
| 
       1604 
1600 
     | 
    
         
             
                        except KeyError:
         
     | 
| 
       1605 
1601 
     | 
    
         
             
                            return target, target
         
     | 
| 
       1606 
1602 
     | 
    
         | 
| 
       1607 
1603 
     | 
    
         
             
                    try:
         
     | 
| 
       1608 
     | 
    
         
            -
                        target = target._classify(data, self.dependencies)
         
     | 
| 
      
 1604 
     | 
    
         
            +
                        target = target._classify(data, self.dependencies)  # type: ignore
         
     | 
| 
       1609 
1605 
     | 
    
         
             
                    except AttributeError:
         
     | 
| 
       1610 
1606 
     | 
    
         
             
                        pass  # Target is not a Model, no classify
         
     | 
| 
       1611 
1607 
     | 
    
         
             
                    return target, target.__class__.__name__  # type: ignore
         
     | 
| 
         @@ -1668,7 +1664,7 @@ class Deserializer(object): 
     | 
|
| 
       1668 
1664 
     | 
    
         
             
                            raw_data.text, raw_data.headers
         
     | 
| 
       1669 
1665 
     | 
    
         
             
                        )
         
     | 
| 
       1670 
1666 
     | 
    
         | 
| 
       1671 
     | 
    
         
            -
                    if isinstance(raw_data, ( 
     | 
| 
      
 1667 
     | 
    
         
            +
                    if isinstance(raw_data, (str, bytes)) or hasattr(raw_data, "read"):
         
     | 
| 
       1672 
1668 
     | 
    
         
             
                        return RawDeserializer.deserialize_from_text(raw_data, content_type)  # type: ignore
         
     | 
| 
       1673 
1669 
     | 
    
         
             
                    return raw_data
         
     | 
| 
       1674 
1670 
     | 
    
         | 
| 
         @@ -1756,7 +1752,7 @@ class Deserializer(object): 
     | 
|
| 
       1756 
1752 
     | 
    
         
             
                    except (ValueError, TypeError, AttributeError) as err:
         
     | 
| 
       1757 
1753 
     | 
    
         
             
                        msg = "Unable to deserialize response data."
         
     | 
| 
       1758 
1754 
     | 
    
         
             
                        msg += " Data: {}, {}".format(data, data_type)
         
     | 
| 
       1759 
     | 
    
         
            -
                         
     | 
| 
      
 1755 
     | 
    
         
            +
                        raise DeserializationError(msg) from err
         
     | 
| 
       1760 
1756 
     | 
    
         
             
                    else:
         
     | 
| 
       1761 
1757 
     | 
    
         
             
                        return self._deserialize(obj_type, data)
         
     | 
| 
       1762 
1758 
     | 
    
         | 
| 
         @@ -1812,7 +1808,7 @@ class Deserializer(object): 
     | 
|
| 
       1812 
1808 
     | 
    
         
             
                    if isinstance(attr, ET.Element):
         
     | 
| 
       1813 
1809 
     | 
    
         
             
                        # Do no recurse on XML, just return the tree as-is
         
     | 
| 
       1814 
1810 
     | 
    
         
             
                        return attr
         
     | 
| 
       1815 
     | 
    
         
            -
                    if isinstance(attr,  
     | 
| 
      
 1811 
     | 
    
         
            +
                    if isinstance(attr, str):
         
     | 
| 
       1816 
1812 
     | 
    
         
             
                        return self.deserialize_basic(attr, "str")
         
     | 
| 
       1817 
1813 
     | 
    
         
             
                    obj_type = type(attr)
         
     | 
| 
       1818 
1814 
     | 
    
         
             
                    if obj_type in self.basic_types:
         
     | 
| 
         @@ -1869,7 +1865,7 @@ class Deserializer(object): 
     | 
|
| 
       1869 
1865 
     | 
    
         
             
                    if data_type == "bool":
         
     | 
| 
       1870 
1866 
     | 
    
         
             
                        if attr in [True, False, 1, 0]:
         
     | 
| 
       1871 
1867 
     | 
    
         
             
                            return bool(attr)
         
     | 
| 
       1872 
     | 
    
         
            -
                        elif isinstance(attr,  
     | 
| 
      
 1868 
     | 
    
         
            +
                        elif isinstance(attr, str):
         
     | 
| 
       1873 
1869 
     | 
    
         
             
                            if attr.lower() in ["true", "1"]:
         
     | 
| 
       1874 
1870 
     | 
    
         
             
                                return True
         
     | 
| 
       1875 
1871 
     | 
    
         
             
                            elif attr.lower() in ["false", "0"]:
         
     | 
| 
         @@ -1920,7 +1916,6 @@ class Deserializer(object): 
     | 
|
| 
       1920 
1916 
     | 
    
         
             
                        data = data.value
         
     | 
| 
       1921 
1917 
     | 
    
         
             
                    if isinstance(data, int):
         
     | 
| 
       1922 
1918 
     | 
    
         
             
                        # Workaround. We might consider remove it in the future.
         
     | 
| 
       1923 
     | 
    
         
            -
                        # https://github.com/Azure/azure-rest-api-specs/issues/141
         
     | 
| 
       1924 
1919 
     | 
    
         
             
                        try:
         
     | 
| 
       1925 
1920 
     | 
    
         
             
                            return list(enum_obj.__members__.values())[data]
         
     | 
| 
       1926 
1921 
     | 
    
         
             
                        except IndexError:
         
     | 
| 
         @@ -1978,10 +1973,10 @@ class Deserializer(object): 
     | 
|
| 
       1978 
1973 
     | 
    
         
             
                    if isinstance(attr, ET.Element):
         
     | 
| 
       1979 
1974 
     | 
    
         
             
                        attr = attr.text
         
     | 
| 
       1980 
1975 
     | 
    
         
             
                    try:
         
     | 
| 
       1981 
     | 
    
         
            -
                        return decimal.Decimal(attr)  # type: ignore
         
     | 
| 
      
 1976 
     | 
    
         
            +
                        return decimal.Decimal(str(attr))  # type: ignore
         
     | 
| 
       1982 
1977 
     | 
    
         
             
                    except decimal.DecimalException as err:
         
     | 
| 
       1983 
1978 
     | 
    
         
             
                        msg = "Invalid decimal {}".format(attr)
         
     | 
| 
       1984 
     | 
    
         
            -
                         
     | 
| 
      
 1979 
     | 
    
         
            +
                        raise DeserializationError(msg) from err
         
     | 
| 
       1985 
1980 
     | 
    
         | 
| 
       1986 
1981 
     | 
    
         
             
                @staticmethod
         
     | 
| 
       1987 
1982 
     | 
    
         
             
                def deserialize_long(attr):
         
     | 
| 
         @@ -2009,7 +2004,7 @@ class Deserializer(object): 
     | 
|
| 
       2009 
2004 
     | 
    
         
             
                        duration = isodate.parse_duration(attr)
         
     | 
| 
       2010 
2005 
     | 
    
         
             
                    except (ValueError, OverflowError, AttributeError) as err:
         
     | 
| 
       2011 
2006 
     | 
    
         
             
                        msg = "Cannot deserialize duration object."
         
     | 
| 
       2012 
     | 
    
         
            -
                         
     | 
| 
      
 2007 
     | 
    
         
            +
                        raise DeserializationError(msg) from err
         
     | 
| 
       2013 
2008 
     | 
    
         
             
                    else:
         
     | 
| 
       2014 
2009 
     | 
    
         
             
                        return duration
         
     | 
| 
       2015 
2010 
     | 
    
         | 
| 
         @@ -2028,7 +2023,7 @@ class Deserializer(object): 
     | 
|
| 
       2028 
2023 
     | 
    
         
             
                            "Date must have only digits and -. Received: %s" % attr
         
     | 
| 
       2029 
2024 
     | 
    
         
             
                        )
         
     | 
| 
       2030 
2025 
     | 
    
         
             
                    # This must NOT use defaultmonth/defaultday. Using None ensure this raises an exception.
         
     | 
| 
       2031 
     | 
    
         
            -
                    return isodate.parse_date(attr, defaultmonth= 
     | 
| 
      
 2026 
     | 
    
         
            +
                    return isodate.parse_date(attr, defaultmonth=0, defaultday=0)
         
     | 
| 
       2032 
2027 
     | 
    
         | 
| 
       2033 
2028 
     | 
    
         
             
                @staticmethod
         
     | 
| 
       2034 
2029 
     | 
    
         
             
                def deserialize_time(attr):
         
     | 
| 
         @@ -2068,7 +2063,7 @@ class Deserializer(object): 
     | 
|
| 
       2068 
2063 
     | 
    
         
             
                            date_obj = date_obj.astimezone(tz=TZ_UTC)
         
     | 
| 
       2069 
2064 
     | 
    
         
             
                    except ValueError as err:
         
     | 
| 
       2070 
2065 
     | 
    
         
             
                        msg = "Cannot deserialize to rfc datetime object."
         
     | 
| 
       2071 
     | 
    
         
            -
                         
     | 
| 
      
 2066 
     | 
    
         
            +
                        raise DeserializationError(msg) from err
         
     | 
| 
       2072 
2067 
     | 
    
         
             
                    else:
         
     | 
| 
       2073 
2068 
     | 
    
         
             
                        return date_obj
         
     | 
| 
       2074 
2069 
     | 
    
         | 
| 
         @@ -2105,7 +2100,7 @@ class Deserializer(object): 
     | 
|
| 
       2105 
2100 
     | 
    
         
             
                            raise OverflowError("Hit max or min date")
         
     | 
| 
       2106 
2101 
     | 
    
         
             
                    except (ValueError, OverflowError, AttributeError) as err:
         
     | 
| 
       2107 
2102 
     | 
    
         
             
                        msg = "Cannot deserialize datetime object."
         
     | 
| 
       2108 
     | 
    
         
            -
                         
     | 
| 
      
 2103 
     | 
    
         
            +
                        raise DeserializationError(msg) from err
         
     | 
| 
       2109 
2104 
     | 
    
         
             
                    else:
         
     | 
| 
       2110 
2105 
     | 
    
         
             
                        return date_obj
         
     | 
| 
       2111 
2106 
     | 
    
         | 
| 
         @@ -2121,9 +2116,10 @@ class Deserializer(object): 
     | 
|
| 
       2121 
2116 
     | 
    
         
             
                    if isinstance(attr, ET.Element):
         
     | 
| 
       2122 
2117 
     | 
    
         
             
                        attr = int(attr.text)  # type: ignore
         
     | 
| 
       2123 
2118 
     | 
    
         
             
                    try:
         
     | 
| 
      
 2119 
     | 
    
         
            +
                        attr = int(attr)
         
     | 
| 
       2124 
2120 
     | 
    
         
             
                        date_obj = datetime.datetime.fromtimestamp(attr, TZ_UTC)
         
     | 
| 
       2125 
2121 
     | 
    
         
             
                    except ValueError as err:
         
     | 
| 
       2126 
2122 
     | 
    
         
             
                        msg = "Cannot deserialize to unix datetime object."
         
     | 
| 
       2127 
     | 
    
         
            -
                         
     | 
| 
      
 2123 
     | 
    
         
            +
                        raise DeserializationError(msg) from err
         
     | 
| 
       2128 
2124 
     | 
    
         
             
                    else:
         
     | 
| 
       2129 
2125 
     | 
    
         
             
                        return date_obj
         
     | 
    
        diracx/client/_vendor.py
    CHANGED
    
    | 
         @@ -1,23 +1,11 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # --------------------------------------------------------------------------
         
     | 
| 
       2 
     | 
    
         
            -
            # Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.10. 
     | 
| 
      
 2 
     | 
    
         
            +
            # Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.10.2, generator: @autorest/python@6.13.9)
         
     | 
| 
       3 
3 
     | 
    
         
             
            # Changes may cause incorrect behavior and will be lost if the code is regenerated.
         
     | 
| 
       4 
4 
     | 
    
         
             
            # --------------------------------------------------------------------------
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
            from typing import  
     | 
| 
      
 6 
     | 
    
         
            +
            from typing import Optional
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            def _format_url_section(template, **kwargs):
         
     | 
| 
       10 
     | 
    
         
            -
                components = template.split("/")
         
     | 
| 
       11 
     | 
    
         
            -
                while components:
         
     | 
| 
       12 
     | 
    
         
            -
                    try:
         
     | 
| 
       13 
     | 
    
         
            -
                        return template.format(**kwargs)
         
     | 
| 
       14 
     | 
    
         
            -
                    except KeyError as key:
         
     | 
| 
       15 
     | 
    
         
            -
                        # Need the cast, as for some reasons "split" is typed as list[str | Any]
         
     | 
| 
       16 
     | 
    
         
            -
                        formatted_components = cast(List[str], template.split("/"))
         
     | 
| 
       17 
     | 
    
         
            -
                        components = [
         
     | 
| 
       18 
     | 
    
         
            -
                            c for c in formatted_components if "{}".format(key.args[0]) not in c
         
     | 
| 
       19 
     | 
    
         
            -
                        ]
         
     | 
| 
       20 
     | 
    
         
            -
                        template = "/".join(components)
         
     | 
| 
      
 8 
     | 
    
         
            +
            from azure.core import MatchConditions
         
     | 
| 
       21 
9 
     | 
    
         | 
| 
       22 
10 
     | 
    
         | 
| 
       23 
11 
     | 
    
         
             
            def raise_if_not_implemented(cls, abstract_methods):
         
     | 
| 
         @@ -31,3 +19,37 @@ def raise_if_not_implemented(cls, abstract_methods): 
     | 
|
| 
       31 
19 
     | 
    
         
             
                            cls.__name__, "', '".join(not_implemented)
         
     | 
| 
       32 
20 
     | 
    
         
             
                        )
         
     | 
| 
       33 
21 
     | 
    
         
             
                    )
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            def quote_etag(etag: Optional[str]) -> Optional[str]:
         
     | 
| 
      
 25 
     | 
    
         
            +
                if not etag or etag == "*":
         
     | 
| 
      
 26 
     | 
    
         
            +
                    return etag
         
     | 
| 
      
 27 
     | 
    
         
            +
                if etag.startswith("W/"):
         
     | 
| 
      
 28 
     | 
    
         
            +
                    return etag
         
     | 
| 
      
 29 
     | 
    
         
            +
                if etag.startswith('"') and etag.endswith('"'):
         
     | 
| 
      
 30 
     | 
    
         
            +
                    return etag
         
     | 
| 
      
 31 
     | 
    
         
            +
                if etag.startswith("'") and etag.endswith("'"):
         
     | 
| 
      
 32 
     | 
    
         
            +
                    return etag
         
     | 
| 
      
 33 
     | 
    
         
            +
                return '"' + etag + '"'
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            def prep_if_match(
         
     | 
| 
      
 37 
     | 
    
         
            +
                etag: Optional[str], match_condition: Optional[MatchConditions]
         
     | 
| 
      
 38 
     | 
    
         
            +
            ) -> Optional[str]:
         
     | 
| 
      
 39 
     | 
    
         
            +
                if match_condition == MatchConditions.IfNotModified:
         
     | 
| 
      
 40 
     | 
    
         
            +
                    if_match = quote_etag(etag) if etag else None
         
     | 
| 
      
 41 
     | 
    
         
            +
                    return if_match
         
     | 
| 
      
 42 
     | 
    
         
            +
                if match_condition == MatchConditions.IfPresent:
         
     | 
| 
      
 43 
     | 
    
         
            +
                    return "*"
         
     | 
| 
      
 44 
     | 
    
         
            +
                return None
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            def prep_if_none_match(
         
     | 
| 
      
 48 
     | 
    
         
            +
                etag: Optional[str], match_condition: Optional[MatchConditions]
         
     | 
| 
      
 49 
     | 
    
         
            +
            ) -> Optional[str]:
         
     | 
| 
      
 50 
     | 
    
         
            +
                if match_condition == MatchConditions.IfModified:
         
     | 
| 
      
 51 
     | 
    
         
            +
                    if_none_match = quote_etag(etag) if etag else None
         
     | 
| 
      
 52 
     | 
    
         
            +
                    return if_none_match
         
     | 
| 
      
 53 
     | 
    
         
            +
                if match_condition == MatchConditions.IfMissing:
         
     | 
| 
      
 54 
     | 
    
         
            +
                    return "*"
         
     | 
| 
      
 55 
     | 
    
         
            +
                return None
         
     | 
    
        diracx/client/aio/__init__.py
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # coding=utf-8
         
     | 
| 
       2 
2 
     | 
    
         
             
            # --------------------------------------------------------------------------
         
     | 
| 
       3 
     | 
    
         
            -
            # Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.10. 
     | 
| 
      
 3 
     | 
    
         
            +
            # Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.10.2, generator: @autorest/python@6.13.9)
         
     | 
| 
       4 
4 
     | 
    
         
             
            # Changes may cause incorrect behavior and will be lost if the code is regenerated.
         
     | 
| 
       5 
5 
     | 
    
         
             
            # --------------------------------------------------------------------------
         
     | 
| 
       6 
6 
     | 
    
         |