Skip to content

Commit 3fdade7

Browse files
azure-sdkmsyycCopilotChenxiJiang333
authored
Refresh azure-mgmt-sql after migrate to Typespec (#47631)
* Configurations: 'specification/sql/resource-manager/Microsoft.Sql/SQL/tspconfig.yaml', API Version: 2025-01-01, SDK Release Type: stable, and CommitSHA: '1523f9e8e89437d84d69a6651f09d74a7ae65ed3' in SpecRepo: 'https://github.com/Azure/azure-rest-api-specs' Pipeline run: https://dev.azure.com/azure-sdk/internal/_build/results?buildId=6474493 Refer to https://eng.ms/docs/products/azure-developer-experience/develop/sdk-release/sdk-release-prerequisites to prepare for SDK release. * Add live tests for azure-mgmt-sql * Remove unexpected recordings folder for azure-mgmt-sql Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * changelog * Optimize changelog for azure-mgmt-sql * update changelog * update * Update CHANGELOG.md --------- Co-authored-by: Yuchao Yan <yuchaoyan@microsoft.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: ChenxiJiang333 <119990644+ChenxiJiang333@users.noreply.github.com>
1 parent 8b331ee commit 3fdade7

18 files changed

Lines changed: 31503 additions & 14 deletions

File tree

eng/tools/azure-sdk-tools/packaging_tools/package_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def get_version_info(package_name: str, tag_is_stable: bool = False) -> Tuple[st
7272
# temporary logic to always get latest version from pypi for specific packages whose latest stable version
7373
# is not updated for a long time and has some issue in changelog generation.
7474
# This is a workaround before we have a better solution to determine the version for changelog generation.
75-
sdks_with_changelog_issue = {"azure-mgmt-sql": "3.0.1"}
75+
sdks_with_changelog_issue = {}
7676
if package_name in sdks_with_changelog_issue and (
7777
last_version == sdks_with_changelog_issue[package_name]
7878
or last_stable_version == sdks_with_changelog_issue[package_name]

sdk/sql/azure-mgmt-sql/CHANGELOG.md

Lines changed: 762 additions & 0 deletions
Large diffs are not rendered by default.

sdk/sql/azure-mgmt-sql/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pip install azure-identity
2424

2525
### Authentication
2626

27-
By default, [Azure Active Directory](https://aka.ms/awps/aad) token authentication depends on correct configuration of the following environment variables.
27+
By default, [Microsoft Entra](https://learn.microsoft.com/entra/fundamentals/what-is-entra) token authentication depends on correct configuration of the following environment variables.
2828

2929
- `AZURE_CLIENT_ID` for Azure client ID.
3030
- `AZURE_TENANT_ID` for Azure tenant ID.

sdk/sql/azure-mgmt-sql/_metadata.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
"apiVersions": {
44
"Microsoft.Sql": "2025-01-01"
55
},
6-
"commit": "465402d314b9a9ce96f122c5b10fdf416e7ef727",
6+
"commit": "1523f9e8e89437d84d69a6651f09d74a7ae65ed3",
77
"repository_url": "https://github.com/Azure/azure-rest-api-specs",
88
"typespec_src": "specification/sql/resource-manager/Microsoft.Sql/SQL",
9-
"emitterVersion": "0.62.1"
9+
"emitterVersion": "0.63.2",
10+
"httpClientPythonVersion": "^0.33.0"
1011
}

sdk/sql/azure-mgmt-sql/api.md

Lines changed: 30575 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
apiMdSha256: a3cb72e2ea024e5628ffb52782f08c99d93e4b2a10e0d74cb0823089d29acc53
2+
parserVersion: 0.3.28
3+
pythonVersion: 3.13.13

sdk/sql/azure-mgmt-sql/apiview-properties.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1702,5 +1702,5 @@
17021702
"azure.mgmt.sql.operations.CapabilitiesOperations.list_by_location": "Microsoft.Sql.CapabilitiesOperationGroup.listByLocation",
17031703
"azure.mgmt.sql.aio.operations.CapabilitiesOperations.list_by_location": "Microsoft.Sql.CapabilitiesOperationGroup.listByLocation"
17041704
},
1705-
"CrossLanguageVersion": "028db855ae66"
1705+
"CrossLanguageVersion": "b5fa88beec73"
17061706
}

sdk/sql/azure-mgmt-sql/azure/mgmt/sql/_patch.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize
99
"""
1010

11+
1112
__all__: list[str] = [] # Add all objects you want publicly available to users at this package level
1213

1314

sdk/sql/azure-mgmt-sql/azure/mgmt/sql/_utils/model_base.py

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,29 @@ def _serialize_bytes(o, format: typing.Optional[str] = None) -> str:
109109
return encoded
110110

111111

112+
def _serialize_duration(td: timedelta, format: typing.Optional[str] = None):
113+
"""Serialize a timedelta to its wire representation.
114+
115+
For the ``seconds``/``milliseconds`` encodings the value is converted to a
116+
numeric value, otherwise it falls back to an ISO 8601 duration string.
117+
118+
:param timedelta td: The timedelta to serialize.
119+
:param str format: The duration encoding format.
120+
:rtype: int or float or str
121+
:return: serialized duration
122+
"""
123+
seconds = td.total_seconds()
124+
if format == "duration-seconds-int":
125+
return int(seconds)
126+
if format == "duration-seconds-float":
127+
return seconds
128+
if format == "duration-milliseconds-int":
129+
return int(seconds * 1000)
130+
if format == "duration-milliseconds-float":
131+
return seconds * 1000
132+
return _timedelta_as_isostr(td)
133+
134+
112135
def _serialize_datetime(o, format: typing.Optional[str] = None):
113136
if hasattr(o, "year") and hasattr(o, "hour"):
114137
if format == "rfc7231":
@@ -301,6 +324,12 @@ def _deserialize_duration(attr):
301324
return isodate.parse_duration(attr)
302325

303326

327+
def _deserialize_duration_numeric(attr, unit):
328+
if isinstance(attr, timedelta):
329+
return attr
330+
return timedelta(**{unit: float(attr)})
331+
332+
304333
def _deserialize_decimal(attr):
305334
if isinstance(attr, decimal.Decimal):
306335
return attr
@@ -330,6 +359,10 @@ def _deserialize_int_as_str(attr):
330359
"unix-timestamp": _deserialize_datetime_unix_timestamp,
331360
"base64": _deserialize_bytes,
332361
"base64url": _deserialize_bytes_base64,
362+
"duration-seconds-int": functools.partial(_deserialize_duration_numeric, unit="seconds"),
363+
"duration-seconds-float": functools.partial(_deserialize_duration_numeric, unit="seconds"),
364+
"duration-milliseconds-int": functools.partial(_deserialize_duration_numeric, unit="milliseconds"),
365+
"duration-milliseconds-float": functools.partial(_deserialize_duration_numeric, unit="milliseconds"),
333366
}
334367

335368

@@ -564,7 +597,7 @@ def _serialize(o, format: typing.Optional[str] = None): # pylint: disable=too-m
564597
pass
565598
# Last, try datetime.timedelta
566599
try:
567-
return _timedelta_as_isostr(o)
600+
return _serialize_duration(o, format)
568601
except AttributeError:
569602
# This will be raised when it hits value.total_seconds in the method above
570603
pass

sdk/sql/azure-mgmt-sql/azure/mgmt/sql/_utils/serialization.py

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,10 @@ def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None:
520520
"rfc-1123": Serializer.serialize_rfc,
521521
"unix-time": Serializer.serialize_unix,
522522
"duration": Serializer.serialize_duration,
523+
"duration-seconds-int": Serializer.serialize_duration_seconds_int,
524+
"duration-seconds-float": Serializer.serialize_duration_seconds_float,
525+
"duration-milliseconds-int": Serializer.serialize_duration_milliseconds_int,
526+
"duration-milliseconds-float": Serializer.serialize_duration_milliseconds_float,
523527
"date": Serializer.serialize_date,
524528
"time": Serializer.serialize_time,
525529
"decimal": Serializer.serialize_decimal,
@@ -1109,6 +1113,61 @@ def serialize_duration(attr, **kwargs): # pylint: disable=unused-argument
11091113
attr = isodate.parse_duration(attr)
11101114
return isodate.duration_isoformat(attr)
11111115

1116+
@staticmethod
1117+
def _serialize_duration_numeric(attr, scale, as_int):
1118+
"""Serialize a TimeDelta into a numeric value scaled to the wire unit.
1119+
1120+
:param TimeDelta attr: Object to be serialized.
1121+
:param int scale: Multiplier applied to total seconds (1 for seconds, 1000 for milliseconds).
1122+
:param bool as_int: Whether to truncate the result to an int.
1123+
:rtype: int or float
1124+
:return: serialized duration
1125+
"""
1126+
if isinstance(attr, str):
1127+
attr = isodate.parse_duration(attr)
1128+
value = attr.total_seconds() * scale if isinstance(attr, datetime.timedelta) else attr
1129+
return int(value) if as_int else float(value)
1130+
1131+
@staticmethod
1132+
def serialize_duration_seconds_int(attr, **kwargs): # pylint: disable=unused-argument
1133+
"""Serialize TimeDelta object into an integer number of seconds.
1134+
1135+
:param TimeDelta attr: Object to be serialized.
1136+
:rtype: int
1137+
:return: serialized duration
1138+
"""
1139+
return Serializer._serialize_duration_numeric(attr, 1, True)
1140+
1141+
@staticmethod
1142+
def serialize_duration_seconds_float(attr, **kwargs): # pylint: disable=unused-argument
1143+
"""Serialize TimeDelta object into a floating point number of seconds.
1144+
1145+
:param TimeDelta attr: Object to be serialized.
1146+
:rtype: float
1147+
:return: serialized duration
1148+
"""
1149+
return Serializer._serialize_duration_numeric(attr, 1, False)
1150+
1151+
@staticmethod
1152+
def serialize_duration_milliseconds_int(attr, **kwargs): # pylint: disable=unused-argument
1153+
"""Serialize TimeDelta object into an integer number of milliseconds.
1154+
1155+
:param TimeDelta attr: Object to be serialized.
1156+
:rtype: int
1157+
:return: serialized duration
1158+
"""
1159+
return Serializer._serialize_duration_numeric(attr, 1000, True)
1160+
1161+
@staticmethod
1162+
def serialize_duration_milliseconds_float(attr, **kwargs): # pylint: disable=unused-argument
1163+
"""Serialize TimeDelta object into a floating point number of milliseconds.
1164+
1165+
:param TimeDelta attr: Object to be serialized.
1166+
:rtype: float
1167+
:return: serialized duration
1168+
"""
1169+
return Serializer._serialize_duration_numeric(attr, 1000, False)
1170+
11121171
@staticmethod
11131172
def serialize_rfc(attr, **kwargs): # pylint: disable=unused-argument
11141173
"""Serialize Datetime object into RFC-1123 formatted string.
@@ -1381,6 +1440,10 @@ def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None:
13811440
"rfc-1123": Deserializer.deserialize_rfc,
13821441
"unix-time": Deserializer.deserialize_unix,
13831442
"duration": Deserializer.deserialize_duration,
1443+
"duration-seconds-int": Deserializer.deserialize_duration_seconds,
1444+
"duration-seconds-float": Deserializer.deserialize_duration_seconds,
1445+
"duration-milliseconds-int": Deserializer.deserialize_duration_milliseconds,
1446+
"duration-milliseconds-float": Deserializer.deserialize_duration_milliseconds,
13841447
"date": Deserializer.deserialize_date,
13851448
"time": Deserializer.deserialize_time,
13861449
"decimal": Deserializer.deserialize_decimal,
@@ -1393,6 +1456,10 @@ def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None:
13931456
}
13941457
self.deserialize_expected_types = {
13951458
"duration": (isodate.Duration, datetime.timedelta),
1459+
"duration-seconds-int": (isodate.Duration, datetime.timedelta),
1460+
"duration-seconds-float": (isodate.Duration, datetime.timedelta),
1461+
"duration-milliseconds-int": (isodate.Duration, datetime.timedelta),
1462+
"duration-milliseconds-float": (isodate.Duration, datetime.timedelta),
13961463
"iso-8601": (datetime.datetime),
13971464
}
13981465
self.dependencies: dict[str, type] = dict(classes) if classes else {}
@@ -1954,6 +2021,48 @@ def deserialize_duration(attr):
19542021
raise DeserializationError(msg) from err
19552022
return duration
19562023

2024+
@staticmethod
2025+
def _deserialize_duration_numeric(attr, unit):
2026+
"""Deserialize a numeric duration value into a TimeDelta object.
2027+
2028+
:param float attr: response value to be deserialized.
2029+
:param str unit: The wire unit, used as the ``timedelta`` keyword
2030+
(``"seconds"`` or ``"milliseconds"``).
2031+
:return: Deserialized duration
2032+
:rtype: TimeDelta
2033+
:raises DeserializationError: if value is invalid.
2034+
"""
2035+
if isinstance(attr, ET.Element):
2036+
attr = attr.text
2037+
try:
2038+
duration = datetime.timedelta(**{unit: float(attr)}) # type: ignore
2039+
except (ValueError, OverflowError, TypeError) as err:
2040+
msg = "Cannot deserialize duration object."
2041+
raise DeserializationError(msg) from err
2042+
return duration
2043+
2044+
@staticmethod
2045+
def deserialize_duration_seconds(attr):
2046+
"""Deserialize a numeric number of seconds into a TimeDelta object.
2047+
2048+
:param float attr: response value to be deserialized.
2049+
:return: Deserialized duration
2050+
:rtype: TimeDelta
2051+
:raises DeserializationError: if value is invalid.
2052+
"""
2053+
return Deserializer._deserialize_duration_numeric(attr, "seconds")
2054+
2055+
@staticmethod
2056+
def deserialize_duration_milliseconds(attr):
2057+
"""Deserialize a numeric number of milliseconds into a TimeDelta object.
2058+
2059+
:param float attr: response value to be deserialized.
2060+
:return: Deserialized duration
2061+
:rtype: TimeDelta
2062+
:raises DeserializationError: if value is invalid.
2063+
"""
2064+
return Deserializer._deserialize_duration_numeric(attr, "milliseconds")
2065+
19572066
@staticmethod
19582067
def deserialize_date(attr):
19592068
"""Deserialize ISO-8601 formatted string into Date object.

0 commit comments

Comments
 (0)