Skip to content

Commit 8ea4aa0

Browse files
authored
feat: remove python-dateutil dependency (#221)
* refactor: replace pytz tzoffset with timezone utc * refactor: replace isoparse with datetime.fromisoformat * feat: remove python-dateutil dependency
1 parent 981b540 commit 8ea4aa0

File tree

33 files changed

+83
-90
lines changed

33 files changed

+83
-90
lines changed

hcloud/actions/domain.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dateutil.parser import isoparse
1+
from datetime import datetime
22

33
from hcloud.core.domain import BaseDomain
44

@@ -52,8 +52,8 @@ def __init__(
5252

5353
self.status = status
5454
self.progress = progress
55-
self.started = isoparse(started) if started else None
56-
self.finished = isoparse(finished) if finished else None
55+
self.started = datetime.fromisoformat(started) if started else None
56+
self.finished = datetime.fromisoformat(finished) if finished else None
5757
self.resources = resources
5858
self.error = error
5959

hcloud/certificates/domain.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dateutil.parser import isoparse
1+
from datetime import datetime
22

33
from hcloud.core.domain import BaseDomain, DomainIdentityMixin
44

@@ -59,9 +59,13 @@ def __init__(
5959
self.certificate = certificate
6060
self.domain_names = domain_names
6161
self.fingerprint = fingerprint
62-
self.not_valid_before = isoparse(not_valid_before) if not_valid_before else None
63-
self.not_valid_after = isoparse(not_valid_after) if not_valid_after else None
64-
self.created = isoparse(created) if created else None
62+
self.not_valid_before = (
63+
datetime.fromisoformat(not_valid_before) if not_valid_before else None
64+
)
65+
self.not_valid_after = (
66+
datetime.fromisoformat(not_valid_after) if not_valid_after else None
67+
)
68+
self.created = datetime.fromisoformat(created) if created else None
6569
self.labels = labels
6670
self.status = status
6771

hcloud/deprecation/domain.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dateutil.parser import isoparse
1+
from datetime import datetime
22

33
from hcloud.core.domain import BaseDomain
44

@@ -25,7 +25,7 @@ def __init__(
2525
announced=None,
2626
unavailable_after=None,
2727
):
28-
self.announced = isoparse(announced) if announced else None
28+
self.announced = datetime.fromisoformat(announced) if announced else None
2929
self.unavailable_after = (
30-
isoparse(unavailable_after) if unavailable_after else None
30+
datetime.fromisoformat(unavailable_after) if unavailable_after else None
3131
)

hcloud/firewalls/domain.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dateutil.parser import isoparse
1+
from datetime import datetime
22

33
from hcloud.core.domain import BaseDomain
44

@@ -30,7 +30,7 @@ def __init__(
3030
self.rules = rules
3131
self.applied_to = applied_to
3232
self.labels = labels
33-
self.created = isoparse(created) if created else None
33+
self.created = datetime.fromisoformat(created) if created else None
3434

3535

3636
class FirewallRule:

hcloud/floating_ips/domain.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dateutil.parser import isoparse
1+
from datetime import datetime
22

33
from hcloud.core.domain import BaseDomain
44

@@ -72,7 +72,7 @@ def __init__(
7272
self.blocked = blocked
7373
self.protection = protection
7474
self.labels = labels
75-
self.created = isoparse(created) if created else None
75+
self.created = datetime.fromisoformat(created) if created else None
7676
self.name = name
7777

7878

hcloud/images/domain.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dateutil.parser import isoparse
1+
from datetime import datetime
22

33
from hcloud.core.domain import BaseDomain, DomainIdentityMixin
44

@@ -85,11 +85,11 @@ def __init__(
8585
self.id = id
8686
self.name = name
8787
self.type = type
88-
self.created = isoparse(created) if created else None
88+
self.created = datetime.fromisoformat(created) if created else None
8989
self.description = description
9090
self.image_size = image_size
9191
self.disk_size = disk_size
92-
self.deprecated = isoparse(deprecated) if deprecated else None
92+
self.deprecated = datetime.fromisoformat(deprecated) if deprecated else None
9393
self.bound_to = bound_to
9494
self.os_flavor = os_flavor
9595
self.os_version = os_version

hcloud/isos/domain.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dateutil.parser import isoparse
1+
from datetime import datetime
22

33
from hcloud.core.domain import BaseDomain, DomainIdentityMixin
44

@@ -36,4 +36,4 @@ def __init__(
3636
self.type = type
3737
self.architecture = architecture
3838
self.description = description
39-
self.deprecated = isoparse(deprecated) if deprecated else None
39+
self.deprecated = datetime.fromisoformat(deprecated) if deprecated else None

hcloud/load_balancers/domain.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dateutil.parser import isoparse
1+
from datetime import datetime
22

33
from hcloud.core.domain import BaseDomain
44

@@ -76,7 +76,7 @@ def __init__(
7676
):
7777
self.id = id
7878
self.name = name
79-
self.created = isoparse(created) if created else None
79+
self.created = datetime.fromisoformat(created) if created else None
8080
self.public_net = public_net
8181
self.private_net = private_net
8282
self.location = location

hcloud/networks/domain.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dateutil.parser import isoparse
1+
from datetime import datetime
22

33
from hcloud.core.domain import BaseDomain
44

@@ -54,7 +54,7 @@ def __init__(
5454
):
5555
self.id = id
5656
self.name = name
57-
self.created = isoparse(created) if created else None
57+
self.created = datetime.fromisoformat(created) if created else None
5858
self.ip_range = ip_range
5959
self.subnets = subnets
6060
self.routes = routes

hcloud/placement_groups/domain.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dateutil.parser import isoparse
1+
from datetime import datetime
22

33
from hcloud.core.domain import BaseDomain
44

@@ -35,7 +35,7 @@ def __init__(
3535
self.labels = labels
3636
self.servers = servers
3737
self.type = type
38-
self.created = isoparse(created) if created else None
38+
self.created = datetime.fromisoformat(created) if created else None
3939

4040

4141
class CreatePlacementGroupResponse(BaseDomain):

hcloud/primary_ips/domain.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dateutil.parser import isoparse
1+
from datetime import datetime
22

33
from hcloud.core.domain import BaseDomain
44

@@ -74,7 +74,7 @@ def __init__(
7474
self.blocked = blocked
7575
self.protection = protection
7676
self.labels = labels
77-
self.created = isoparse(created) if created else None
77+
self.created = datetime.fromisoformat(created) if created else None
7878
self.name = name
7979
self.assignee_id = assignee_id
8080
self.assignee_type = assignee_type

hcloud/servers/domain.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dateutil.parser import isoparse
1+
from datetime import datetime
22

33
from hcloud.core.domain import BaseDomain
44

@@ -113,7 +113,7 @@ def __init__(
113113
self.id = id
114114
self.name = name
115115
self.status = status
116-
self.created = isoparse(created) if created else None
116+
self.created = datetime.fromisoformat(created) if created else None
117117
self.public_net = public_net
118118
self.server_type = server_type
119119
self.datacenter = datacenter

hcloud/ssh_keys/domain.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dateutil.parser import isoparse
1+
from datetime import datetime
22

33
from hcloud.core.domain import BaseDomain, DomainIdentityMixin
44

@@ -36,4 +36,4 @@ def __init__(
3636
self.fingerprint = fingerprint
3737
self.public_key = public_key
3838
self.labels = labels
39-
self.created = isoparse(created) if created else None
39+
self.created = datetime.fromisoformat(created) if created else None

hcloud/volumes/domain.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dateutil.parser import isoparse
1+
from datetime import datetime
22

33
from hcloud.core.domain import BaseDomain, DomainIdentityMixin
44

@@ -66,7 +66,7 @@ def __init__(
6666
self.id = id
6767
self.name = name
6868
self.server = server
69-
self.created = isoparse(created) if created else None
69+
self.created = datetime.fromisoformat(created) if created else None
7070
self.location = location
7171
self.size = size
7272
self.linux_device = linux_device

setup.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
],
3838
python_requires=">=3.7",
3939
install_requires=[
40-
"python-dateutil>=2.7.5",
4140
"requests>=2.20",
4241
],
4342
extras_require={

tests/unit/actions/test_domain.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import datetime
2-
3-
from dateutil.tz import tzoffset
2+
from datetime import timezone
43

54
from hcloud.actions.domain import Action
65

@@ -11,8 +10,8 @@ def test_started_finished_is_datetime(self):
1110
id=1, started="2016-01-30T23:50+00:00", finished="2016-03-30T23:50+00:00"
1211
)
1312
assert action.started == datetime.datetime(
14-
2016, 1, 30, 23, 50, tzinfo=tzoffset(None, 0)
13+
2016, 1, 30, 23, 50, tzinfo=timezone.utc
1514
)
1615
assert action.finished == datetime.datetime(
17-
2016, 3, 30, 23, 50, tzinfo=tzoffset(None, 0)
16+
2016, 3, 30, 23, 50, tzinfo=timezone.utc
1817
)

tests/unit/certificates/test_domain.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import datetime
2-
3-
from dateutil.tz import tzoffset
2+
from datetime import timezone
43

54
from hcloud.certificates.domain import Certificate
65

@@ -14,11 +13,11 @@ def test_created_is_datetime(self):
1413
not_valid_before="2016-01-30T23:50+00:00",
1514
)
1615
assert certificate.created == datetime.datetime(
17-
2016, 1, 30, 23, 50, tzinfo=tzoffset(None, 0)
16+
2016, 1, 30, 23, 50, tzinfo=timezone.utc
1817
)
1918
assert certificate.not_valid_after == datetime.datetime(
20-
2016, 1, 30, 23, 50, tzinfo=tzoffset(None, 0)
19+
2016, 1, 30, 23, 50, tzinfo=timezone.utc
2120
)
2221
assert certificate.not_valid_before == datetime.datetime(
23-
2016, 1, 30, 23, 50, tzinfo=tzoffset(None, 0)
22+
2016, 1, 30, 23, 50, tzinfo=timezone.utc
2423
)

tests/unit/core/test_domain.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
from datetime import datetime
2+
13
import pytest
2-
from dateutil.parser import isoparse
34

45
from hcloud.core.domain import (
56
BaseDomain,
@@ -101,7 +102,7 @@ class ActionDomain(BaseDomain, DomainIdentityMixin):
101102
def __init__(self, id, name="name1", started=None):
102103
self.id = id
103104
self.name = name
104-
self.started = isoparse(started) if started else None
105+
self.started = datetime.fromisoformat(started) if started else None
105106

106107

107108
class TestBaseDomain:
@@ -125,7 +126,7 @@ class TestBaseDomain:
125126
{
126127
"id": 4,
127128
"name": "name-name3",
128-
"started": isoparse("2016-01-30T23:50+00:00"),
129+
"started": datetime.fromisoformat("2016-01-30T23:50+00:00"),
129130
},
130131
),
131132
],

tests/unit/firewalls/test_domain.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import datetime
2-
3-
from dateutil.tz import tzoffset
2+
from datetime import timezone
43

54
from hcloud.firewalls.domain import Firewall
65

@@ -9,5 +8,5 @@ class TestFirewall:
98
def test_created_is_datetime(self):
109
firewall = Firewall(id=1, created="2016-01-30T23:50+00:00")
1110
assert firewall.created == datetime.datetime(
12-
2016, 1, 30, 23, 50, tzinfo=tzoffset(None, 0)
11+
2016, 1, 30, 23, 50, tzinfo=timezone.utc
1312
)
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import datetime
2-
3-
from dateutil.tz import tzoffset
2+
from datetime import timezone
43

54
from hcloud.floating_ips.domain import FloatingIP
65

@@ -9,5 +8,5 @@ class TestFloatingIP:
98
def test_created_is_datetime(self):
109
floatingIP = FloatingIP(id=1, created="2016-01-30T23:50+00:00")
1110
assert floatingIP.created == datetime.datetime(
12-
2016, 1, 30, 23, 50, tzinfo=tzoffset(None, 0)
11+
2016, 1, 30, 23, 50, tzinfo=timezone.utc
1312
)

tests/unit/images/test_client.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import datetime
2+
from datetime import timezone
23
from unittest import mock
34

45
import pytest
5-
from dateutil.tz import tzoffset
66

77
from hcloud.actions.client import BoundAction
88
from hcloud.images.client import BoundImage, ImagesClient
@@ -26,14 +26,14 @@ def test_bound_image_init(self, image_response):
2626
assert bound_image.image_size == 2.3
2727
assert bound_image.disk_size == 10
2828
assert bound_image.created == datetime.datetime(
29-
2016, 1, 30, 23, 50, tzinfo=tzoffset(None, 0)
29+
2016, 1, 30, 23, 50, tzinfo=timezone.utc
3030
)
3131
assert bound_image.os_flavor == "ubuntu"
3232
assert bound_image.os_version == "16.04"
3333
assert bound_image.architecture == "x86"
3434
assert bound_image.rapid_deploy is False
3535
assert bound_image.deprecated == datetime.datetime(
36-
2018, 2, 28, 0, 0, tzinfo=tzoffset(None, 0)
36+
2018, 2, 28, 0, 0, tzinfo=timezone.utc
3737
)
3838

3939
assert isinstance(bound_image.created_from, BoundServer)

tests/unit/images/test_domain.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import datetime
2-
3-
from dateutil.tz import tzoffset
2+
from datetime import timezone
43

54
from hcloud.images.domain import Image
65

@@ -9,5 +8,5 @@ class TestImage:
98
def test_created_is_datetime(self):
109
image = Image(id=1, created="2016-01-30T23:50+00:00")
1110
assert image.created == datetime.datetime(
12-
2016, 1, 30, 23, 50, tzinfo=tzoffset(None, 0)
11+
2016, 1, 30, 23, 50, tzinfo=timezone.utc
1312
)

tests/unit/isos/test_client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import datetime
2+
from datetime import timezone
23
from unittest import mock
34

45
import pytest
5-
from dateutil.tz import tzoffset
66

77
from hcloud.isos.client import BoundIso, IsosClient
88

@@ -21,7 +21,7 @@ def test_bound_iso_init(self, iso_response):
2121
assert bound_iso.type == "public"
2222
assert bound_iso.architecture == "x86"
2323
assert bound_iso.deprecated == datetime.datetime(
24-
2018, 2, 28, 0, 0, tzinfo=tzoffset(None, 0)
24+
2018, 2, 28, 0, 0, tzinfo=timezone.utc
2525
)
2626

2727

0 commit comments

Comments
 (0)