Skip to content

Commit beae328

Browse files
authored
feat: prepare for iso deprecated field removal (#320)
Continuation of #318
1 parent 184bbe6 commit beae328

4 files changed

Lines changed: 41 additions & 9 deletions

File tree

hcloud/isos/domain.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import annotations
22

3-
from dateutil.parser import isoparse
3+
from datetime import datetime
4+
from warnings import warn
45

56
from ..core import BaseDomain, DomainIdentityMixin
67
from ..deprecation import DeprecationInfo
@@ -32,7 +33,6 @@ class Iso(BaseDomain, DomainIdentityMixin):
3233
"type",
3334
"architecture",
3435
"description",
35-
"deprecated",
3636
"deprecation",
3737
)
3838

@@ -43,15 +43,27 @@ def __init__(
4343
type: str | None = None,
4444
architecture: str | None = None,
4545
description: str | None = None,
46-
deprecated: str | None = None,
46+
deprecated: str | None = None, # pylint: disable=unused-argument
4747
deprecation: dict | None = None,
4848
):
4949
self.id = id
5050
self.name = name
5151
self.type = type
5252
self.architecture = architecture
5353
self.description = description
54-
self.deprecated = isoparse(deprecated) if deprecated else None
5554
self.deprecation = (
5655
DeprecationInfo.from_dict(deprecation) if deprecation is not None else None
5756
)
57+
58+
@property
59+
def deprecated(self) -> datetime | None:
60+
"""
61+
ISO 8601 timestamp of deprecation, None if ISO is still available.
62+
"""
63+
warn(
64+
"The `deprecated` field is deprecated, please use the `deprecation` field instead.",
65+
DeprecationWarning,
66+
)
67+
if self.deprecation is None:
68+
return None
69+
return self.deprecation.unavailable_after

tests/unit/isos/conftest.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ def iso_response():
1313
"type": "public",
1414
"architecture": "x86",
1515
"deprecated": "2018-02-28T00:00:00+00:00",
16+
"deprecation": {
17+
"announced": "2018-01-28T00:00:00+00:00",
18+
"unavailable_after": "2018-02-28T00:00:00+00:00",
19+
},
1620
}
1721
}
1822

@@ -28,14 +32,18 @@ def two_isos_response():
2832
"type": "public",
2933
"architecture": "x86",
3034
"deprecated": "2018-02-28T00:00:00+00:00",
35+
"deprecation": {
36+
"announced": "2018-01-28T00:00:00+00:00",
37+
"unavailable_after": "2018-02-28T00:00:00+00:00",
38+
},
3139
},
3240
{
3341
"id": 4712,
3442
"name": "FreeBSD-11.0-RELEASE-amd64-dvd1",
3543
"description": "FreeBSD 11.0 x64",
3644
"type": "public",
3745
"architecture": "x86",
38-
"deprecated": "2018-02-28T00:00:00+00:00",
46+
"deprecated": None,
3947
},
4048
]
4149
}
@@ -52,6 +60,10 @@ def one_isos_response():
5260
"type": "public",
5361
"architecture": "x86",
5462
"deprecated": "2018-02-28T00:00:00+00:00",
63+
"deprecation": {
64+
"announced": "2018-01-28T00:00:00+00:00",
65+
"unavailable_after": "2018-02-28T00:00:00+00:00",
66+
},
5567
}
5668
]
5769
}

tests/unit/isos/test_client.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,14 @@ def test_bound_iso_init(self, iso_response):
2222
assert bound_iso.description == "FreeBSD 11.0 x64"
2323
assert bound_iso.type == "public"
2424
assert bound_iso.architecture == "x86"
25-
assert bound_iso.deprecated == datetime.datetime(
25+
with pytest.deprecated_call():
26+
assert bound_iso.deprecated == datetime.datetime(
27+
2018, 2, 28, 0, 0, tzinfo=timezone.utc
28+
)
29+
assert bound_iso.deprecation.announced == datetime.datetime(
30+
2018, 1, 28, 0, 0, tzinfo=timezone.utc
31+
)
32+
assert bound_iso.deprecation.unavailable_after == datetime.datetime(
2633
2018, 2, 28, 0, 0, tzinfo=timezone.utc
2734
)
2835

tests/unit/isos/test_domain.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,10 @@ def deprecated_iso(self):
2626
)
2727

2828
def test_deprecation(self, deprecated_iso: Iso):
29-
assert deprecated_iso.deprecated == datetime(
30-
2023, 11, 5, 8, 27, 1, tzinfo=timezone.utc
31-
)
29+
with pytest.deprecated_call():
30+
assert deprecated_iso.deprecated == datetime(
31+
2023, 11, 5, 8, 27, 1, tzinfo=timezone.utc
32+
)
3233
assert deprecated_iso.deprecation is not None
3334
assert deprecated_iso.deprecation.announced == datetime(
3435
2023, 10, 5, 8, 27, 1, tzinfo=timezone.utc

0 commit comments

Comments
 (0)