Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-isc_dhcp_leases for
openSUSE:Factory checked in at 2023-09-04 22:53:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-isc_dhcp_leases (Old)
and /work/SRC/openSUSE:Factory/.python-isc_dhcp_leases.new.1766 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-isc_dhcp_leases"
Mon Sep 4 22:53:18 2023 rev:4 rq:1108799 version:0.10.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-isc_dhcp_leases/python-isc_dhcp_leases.changes
2022-11-07 15:55:58.126154349 +0100
+++
/work/SRC/openSUSE:Factory/.python-isc_dhcp_leases.new.1766/python-isc_dhcp_leases.changes
2023-09-04 22:53:54.952475159 +0200
@@ -1,0 +2,9 @@
+Thu Aug 31 15:41:47 UTC 2023 - Martin Hauke <[email protected]>
+
+- Update to version 0.10.0
+ * Fix timezone awareness for Python 2.7.x
+ * Support working with historical dhcpd.leases files
+ * Use timezone-aware datetime objects
+ * Refactor keyword argument passing to BaseLease
+
+-------------------------------------------------------------------
Old:
----
isc_dhcp_leases-0.9.1.tar.gz
New:
----
isc_dhcp_leases-0.10.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-isc_dhcp_leases.spec ++++++
--- /var/tmp/diff_new_pack.d7irGF/_old 2023-09-04 22:53:56.120516447 +0200
+++ /var/tmp/diff_new_pack.d7irGF/_new 2023-09-04 22:53:56.128516730 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-isc_dhcp_leases
#
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
Name: python-isc_dhcp_leases
-Version: 0.9.1
+Version: 0.10.0
Release: 0
Summary: Python module for reading dhcpd.leases from ISC DHCP server
License: MIT
++++++ isc_dhcp_leases-0.9.1.tar.gz -> isc_dhcp_leases-0.10.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-isc-dhcp-leases-0.9.1/isc_dhcp_leases/iscdhcpleases.py
new/python-isc-dhcp-leases-0.10.0/isc_dhcp_leases/iscdhcpleases.py
--- old/python-isc-dhcp-leases-0.9.1/isc_dhcp_leases/iscdhcpleases.py
2018-04-13 15:15:19.000000000 +0200
+++ new/python-isc-dhcp-leases-0.10.0/isc_dhcp_leases/iscdhcpleases.py
2023-03-19 16:37:19.000000000 +0100
@@ -8,6 +8,31 @@
from six import iteritems
+try:
+ utc = datetime.timezone.utc
+except:
+ # Support Python 2.7
+ class UTC(datetime.tzinfo):
+ def fromutc(self, dt):
+ return dt
+
+ def utcffset(self, dt):
+ return datetime.timedelta(0)
+
+ def dst(self, dt):
+ return None
+
+ def tzname(self, dt):
+ return 'UTC'
+
+
+ utc = UTC()
+
+
+def check_datetime(dt):
+ if not (dt is None or (isinstance(dt, datetime.datetime) and dt.tzinfo)):
+ raise ValueError('None or offset-aware datetime required')
+
def parse_time(s):
"""
Like datetime.datetime.strptime(s, "%w %Y/%m/%d %H:%M:%S") but 5x faster.
@@ -23,7 +48,7 @@
hour, minute, sec = time_part.split(':')
result = datetime.datetime(*map(int, (year, mon, day, hour, minute,
sec)))
- return result
+ return result.replace(tzinfo=utc)
def _extract_prop_option(line):
@@ -108,9 +133,12 @@
r"ia-(?P<type>ta|na|pd) \"(?P<id>[^\"\\]*(?:\\.[^\"\\]*)*)\"
{(?P<config>[\s\S]+?)\n}")
regex_iaaddr = re.compile(r"ia(addr|prefix) (?P<ip>[0-9a-f:]+(/[0-9]+)?)
{(?P<config>[\s\S]+?)\n\s+}")
- def __init__(self, filename, gzip=False):
+ def __init__(self, filename, gzip=False, now=None):
+ check_datetime(now)
+
self.filename = filename
self.gzip = gzip
+ self.now = now
def get(self, include_backups=False):
"""
@@ -129,7 +157,7 @@
if 'hardware' not in properties and not include_backups:
# E.g. rows like {'binding': 'state abandoned', ...}
continue
- lease = Lease(block['ip'], properties=properties,
options=options, sets=sets)
+ lease = Lease(block['ip'], properties=properties,
options=options, sets=sets, now=self.now)
leases.append(lease)
for match in self.regex_leaseblock6.finditer(lease_data):
@@ -145,7 +173,7 @@
properties, options, sets =
_extract_properties(block['config'])
lease = Lease6(block['ip'], properties,
last_client_communication, host_identifier, block_type,
- options=options, sets=sets)
+ options=options, sets=sets, now=self.now)
leases.append(lease)
return leases
@@ -177,7 +205,9 @@
sets Dict of key-value set statement values from this lease
"""
- def __init__(self, ip, properties, options=None, sets=None):
+ def __init__(self, ip, properties, options=None, sets=None, now=None):
+ check_datetime(now)
+
if options is None:
options = {}
@@ -189,6 +219,7 @@
self.options = options
self.sets = sets
_, self.binding_state = properties['binding'].split(' ', 1)
+ self._now = now
@property
def active(self):
@@ -198,6 +229,15 @@
"""
return self.binding_state == 'active'
+ @property
+ def now(self):
+ """
+ :return: datetime: real current time, unless a historical time is set
+ """
+ if self._now:
+ return self._now
+ else:
+ return datetime.datetime.utcnow().replace(tzinfo=utc)
class Lease(BaseLease):
"""
@@ -214,8 +254,8 @@
data Dict of all the info in the dhcpd.leases file for this
lease
"""
- def __init__(self, ip, properties, options=None, sets=None):
- super(Lease, self).__init__(ip, properties=properties,
options=options, sets=sets)
+ def __init__(self, ip, properties, **kwargs):
+ super(Lease, self).__init__(ip, properties=properties, **kwargs)
if 'starts' in properties:
self.start = parse_time(properties['starts'])
else:
@@ -242,14 +282,14 @@
"""
if self.end is None:
if self.start is not None:
- return self.start <= datetime.datetime.utcnow()
+ return self.start <= self.now
else:
return True
else:
if self.start is not None:
- return self.start <= datetime.datetime.utcnow() <= self.end
+ return self.start <= self.now <= self.end
else:
- return datetime.datetime.utcnow() <= self.end
+ return self.now <= self.end
def __repr__(self):
return "<Lease {} for {} ({})>".format(self.ip, self.ethernet,
self.hostname)
@@ -278,11 +318,8 @@
(TEMPORARY, NON_TEMPORARY, PREFIX_DELEGATION) = ('ta', 'na', 'pd')
- def __init__(self, ip, properties, cltt, host_identifier, address_type,
options=None, sets=None):
- options = options or {}
- sets = sets or {}
-
- super(Lease6, self).__init__(ip, properties=properties,
options=options, sets=sets)
+ def __init__(self, ip, properties, cltt, host_identifier, address_type,
**kwargs):
+ super(Lease6, self).__init__(ip, properties=properties, **kwargs)
self.type = address_type
self.last_communication = cltt
@@ -315,7 +352,7 @@
if self.end is None:
return True
else:
- return datetime.datetime.utcnow() <= self.end
+ return self.now <= self.end
def __repr__(self):
return "<Lease6 {}>".format(self.ip)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-isc-dhcp-leases-0.9.1/isc_dhcp_leases/test_iscDhcpLeases.py
new/python-isc-dhcp-leases-0.10.0/isc_dhcp_leases/test_iscDhcpLeases.py
--- old/python-isc-dhcp-leases-0.9.1/isc_dhcp_leases/test_iscDhcpLeases.py
2018-04-13 15:15:19.000000000 +0200
+++ new/python-isc-dhcp-leases-0.10.0/isc_dhcp_leases/test_iscDhcpLeases.py
2023-03-19 16:37:19.000000000 +0100
@@ -1,15 +1,16 @@
+import datetime
from unittest import TestCase
-from isc_dhcp_leases.iscdhcpleases import IscDhcpLeases, Lease, Lease6
+from isc_dhcp_leases.iscdhcpleases import IscDhcpLeases, Lease, Lease6, utc
from freezegun import freeze_time
-from datetime import datetime
__author__ = 'Martijn Braam <[email protected]>'
class TestIscDhcpLeases(TestCase):
- @freeze_time("2015-07-6 8:15:0")
- def test_get(self):
- leases = IscDhcpLeases("isc_dhcp_leases/test_files/debian7.leases")
+ def _test_get(self, now=None):
+ leases = IscDhcpLeases("isc_dhcp_leases/test_files/debian7.leases",
now=now)
+ lease_start = datetime.datetime(2013, 12, 10, 12, 57, 4, tzinfo=utc)
+ lease_end = lease_start + datetime.timedelta(minutes=10)
result = leases.get()
self.assertEqual(len(result), 5)
self.assertEqual(result[0].ip, "10.0.0.10")
@@ -19,11 +20,13 @@
self.assertEqual(result[0].hardware, "ethernet")
self.assertEqual(result[0].ethernet, "60:a4:4c:b5:6a:dd")
self.assertEqual(result[0].hostname, "")
- self.assertEqual(result[0].start, datetime(2013, 12, 10, 12, 57, 4))
- self.assertEqual(result[0].end, datetime(2013, 12, 10, 13, 7, 4))
+ self.assertEqual(result[0].start, lease_start)
+ self.assertEqual(result[0].end, lease_end)
self.assertEqual(result[0].sets, {'vendor-class-identifier': 'Some
Vendor Identifier'})
- leases = IscDhcpLeases("isc_dhcp_leases/test_files/pfsense.leases")
+ leases = IscDhcpLeases("isc_dhcp_leases/test_files/pfsense.leases",
now=now)
+ lease_start = datetime.datetime(2015, 7, 6, 7, 50, 42, tzinfo=utc)
+ lease_end = lease_start + datetime.timedelta(minutes=30)
result = leases.get()
self.assertEqual(len(result), 2)
self.assertEqual(result[0].ip, "10.0.10.72")
@@ -33,10 +36,10 @@
self.assertEqual(result[0].hardware, "ethernet")
self.assertEqual(result[0].ethernet, "64:5a:04:6a:07:a2")
self.assertEqual(result[0].hostname, "Satellite-C700")
- self.assertEqual(result[0].start, datetime(2015, 7, 6, 7, 50, 42))
- self.assertEqual(result[0].end, datetime(2015, 7, 6, 8, 20, 42))
+ self.assertEqual(result[0].start, lease_start)
+ self.assertEqual(result[0].end, lease_end)
- leases =
IscDhcpLeases("isc_dhcp_leases/test_files/dhcpd6-4.2.4.leases")
+ leases =
IscDhcpLeases("isc_dhcp_leases/test_files/dhcpd6-4.2.4.leases", now=now)
result = leases.get()
self.assertEqual(len(result), 2)
self.assertEqual(result[0].ip, "2001:610:600:891d::60")
@@ -48,7 +51,9 @@
self.assertEqual(result[0].binding_state, 'active')
self.assertEqual(result[0].preferred_life, 375)
self.assertEqual(result[0].max_life, 600)
- self.assertEqual(result[0].last_communication, datetime(2015, 8, 18,
16, 55, 37))
+ self.assertEqual(
+ result[0].last_communication,
+ datetime.datetime(2015, 8, 18, 16, 55, 37, tzinfo=utc))
self.assertEqual(result[0].type, Lease6.NON_TEMPORARY)
self.assertEqual(result[1].ip, "2001:610:500:fff::/64")
@@ -60,10 +65,12 @@
self.assertEqual(result[1].binding_state, 'active')
self.assertEqual(result[1].preferred_life, 175)
self.assertEqual(result[1].max_life, 200)
- self.assertEqual(result[1].last_communication, datetime(2015, 8, 18,
16, 55, 40))
+ self.assertEqual(
+ result[1].last_communication,
+ datetime.datetime(2015, 8, 18, 16, 55, 40, tzinfo=utc))
self.assertEqual(result[1].type, Lease6.PREFIX_DELEGATION)
- leases =
IscDhcpLeases("isc_dhcp_leases/test_files/dhcpd6-4.3.3.leases")
+ leases =
IscDhcpLeases("isc_dhcp_leases/test_files/dhcpd6-4.3.3.leases", now=now)
result = leases.get()
self.assertEqual(len(result), 4)
self.assertEqual(result[0].ip, "2001:10:10::106")
@@ -75,7 +82,9 @@
self.assertEqual(result[0].binding_state, 'active')
self.assertEqual(result[0].preferred_life, 540)
self.assertEqual(result[0].max_life, 864)
- self.assertEqual(result[0].last_communication, datetime(2016, 1, 6,
14, 50, 34))
+ self.assertEqual(
+ result[0].last_communication,
+ datetime.datetime(2016, 1, 6, 14, 50, 34, tzinfo=utc))
self.assertEqual(result[0].type, Lease6.NON_TEMPORARY)
self.assertEqual(result[0].sets, dict(iana='2001:10:10:0:0:0:0:106',
clientduid='0100011cf710a5002722332b34'))
@@ -88,13 +97,17 @@
self.assertEqual(result[1].binding_state, 'active')
self.assertEqual(result[1].preferred_life, 540)
self.assertEqual(result[1].max_life, 864)
- self.assertEqual(result[1].last_communication, datetime(2016, 1, 6,
14, 52, 37))
+ self.assertEqual(
+ result[1].last_communication,
+ datetime.datetime(2016, 1, 6, 14, 52, 37, tzinfo=utc))
self.assertEqual(result[1].type, Lease6.PREFIX_DELEGATION)
self.assertEqual(result[1].sets, dict(iapd='2001:10:30:ff00:0:0:0:0',
pdsize='56',
pdnet='2001:10:30:ff00:0:0:0:0/56',
clientduid='0100011d344c000025906ba134'))
- leases = IscDhcpLeases("isc_dhcp_leases/test_files/options.leases")
+ leases = IscDhcpLeases("isc_dhcp_leases/test_files/options.leases",
now=now)
+ lease_start = datetime.datetime(2016, 2, 27, 7, 11, 41, tzinfo=utc)
+ lease_end = lease_start + datetime.timedelta(hours=2)
result = leases.get()
self.assertEqual(len(result), 1)
self.assertEqual(result[0].ip, "10.10.10.10")
@@ -104,8 +117,8 @@
self.assertEqual(result[0].hardware, "ethernet")
self.assertEqual(result[0].ethernet, "24:65:11:d9:a6:b3")
self.assertEqual(result[0].hostname, "KRONOS")
- self.assertEqual(result[0].start, datetime(2016, 2, 27, 7, 11, 41))
- self.assertEqual(result[0].end, datetime(2016, 2, 27, 9, 11, 41))
+ self.assertEqual(result[0].start, lease_start)
+ self.assertEqual(result[0].end, lease_end)
self.assertEqual(len(result[0].options), 4)
self.assertDictEqual(result[0].options,
{'agent.DOCSIS-device-class': '2',
@@ -113,7 +126,9 @@
'agent.remote-id': 'a4:a2:4a:33:db:e5',
'agent.unknown-9': '0:0:11:8b:6:1:4:1:2:3:0'})
- leases = IscDhcpLeases("isc_dhcp_leases/test_files/static.leases")
+ leases = IscDhcpLeases("isc_dhcp_leases/test_files/static.leases",
now=now)
+ lease_start = datetime.datetime(2015, 9, 10, 0, 29, 0, tzinfo=utc)
+ lease_end = None
result = leases.get()
self.assertEqual(len(result), 1)
self.assertEqual(result[0].ip, "10.0.0.15")
@@ -121,12 +136,28 @@
self.assertEqual(result[0].active, False)
self.assertEqual(result[0].binding_state, "free")
self.assertEqual(result[0].hardware, "ethernet")
- self.assertEqual(result[0].start, datetime(2015, 9, 10, 0, 29, 0))
- self.assertIsNone(result[0].end)
+ self.assertEqual(result[0].start, lease_start)
+ self.assertEqual(result[0].end, lease_end)
+
+ @freeze_time("2015-07-6 8:15:0")
+ def test_get_frozen(self):
+ self._test_get()
+
+ def test_get_historical(self):
+ self._test_get(
+ now=datetime.datetime(2015, 7, 6, 8, 15, 0, tzinfo=utc))
@freeze_time("2015-06-6 8:15:0")
def test_backup_leases(self):
leases = IscDhcpLeases("isc_dhcp_leases/test_files/backup.leases")
+ lease_start = [
+ datetime.datetime(2017, 10, 5, 15, 22, 29, tzinfo=utc),
+ datetime.datetime(2017, 10, 10, 12, 5, 14, tzinfo=utc),
+ ]
+ lease_end = [
+ datetime.datetime(2017, 10, 16, 8, 9, 23, tzinfo=utc),
+ None,
+ ]
result = leases.get()
self.assertEqual(len(result), 1)
result = leases.get(include_backups=True)
@@ -136,19 +167,27 @@
self.assertEqual(result[0].active, False)
self.assertEqual(result[0].binding_state, "backup")
self.assertEqual(result[0].hardware, "ethernet")
- self.assertEqual(result[0].start, datetime(2017, 10, 5, 15, 22, 29))
- self.assertEqual(result[0].end, datetime(2017, 10, 16, 8, 9, 23))
+ self.assertEqual(result[0].start, lease_start[0])
+ self.assertEqual(result[0].end, lease_end[0])
self.assertEqual(result[1].ip, "10.0.0.2")
self.assertEqual(result[1].valid, False)
self.assertEqual(result[1].active, False)
self.assertEqual(result[1].binding_state, "backup")
self.assertIsNone(result[1].hardware)
- self.assertEqual(result[1].start, datetime(2017, 10, 10, 12, 5, 14))
- self.assertIsNone(result[1].end)
+ self.assertEqual(result[1].start, lease_start[1])
+ self.assertEqual(result[1].end, lease_end[1])
@freeze_time("2015-06-6 8:15:0")
def test_epoch_leases(self):
leases = IscDhcpLeases("isc_dhcp_leases/test_files/epoch.leases")
+ lease_start = [
+ datetime.datetime(2017, 10, 5, 15, 22, 29, tzinfo=utc),
+ datetime.datetime(2017, 10, 10, 12, 5, 14, tzinfo=utc),
+ ]
+ lease_end = [
+ datetime.datetime(2017, 10, 16, 8, 9, 23, tzinfo=utc),
+ None,
+ ]
result = leases.get()
self.assertEqual(len(result), 1)
result = leases.get(include_backups=True)
@@ -158,15 +197,15 @@
self.assertEqual(result[0].active, False)
self.assertEqual(result[0].binding_state, "backup")
self.assertEqual(result[0].hardware, "ethernet")
- self.assertEqual(result[0].start, datetime(2017, 10, 5, 15, 22, 29))
- self.assertEqual(result[0].end, datetime(2017, 10, 16, 8, 9, 23))
+ self.assertEqual(result[0].start, lease_start[0])
+ self.assertEqual(result[0].end, lease_end[0])
self.assertEqual(result[1].ip, "10.0.0.2")
self.assertEqual(result[1].valid, False)
self.assertEqual(result[1].active, False)
self.assertEqual(result[1].binding_state, "backup")
self.assertIsNone(result[1].hardware)
- self.assertEqual(result[1].start, datetime(2017, 10, 10, 12, 5, 14))
- self.assertIsNone(result[1].end)
+ self.assertEqual(result[1].start, lease_start[1])
+ self.assertEqual(result[1].end, lease_end[1])
@freeze_time("2015-07-6 8:15:0")
def test_get_current(self):
@@ -201,6 +240,8 @@
def test_gzip_handling(self):
leases = IscDhcpLeases("isc_dhcp_leases/test_files/debian7.leases.gz",
True)
+ lease_start = datetime.datetime(2013, 12, 10, 12, 57, 4, tzinfo=utc)
+ lease_end = lease_start + datetime.timedelta(minutes=10)
result = leases.get()
self.assertEqual(len(result), 5)
self.assertEqual(result[0].ip, "10.0.0.10")
@@ -210,6 +251,10 @@
self.assertEqual(result[0].hardware, "ethernet")
self.assertEqual(result[0].ethernet, "60:a4:4c:b5:6a:dd")
self.assertEqual(result[0].hostname, "")
- self.assertEqual(result[0].start, datetime(2013, 12, 10, 12, 57, 4))
- self.assertEqual(result[0].end, datetime(2013, 12, 10, 13, 7, 4))
+ self.assertEqual(result[0].start, lease_start)
+ self.assertEqual(result[0].end, lease_end)
self.assertEqual(result[0].sets, {'vendor-class-identifier': 'Some
Vendor Identifier'})
+
+ def test_naive_time(self):
+ with self.assertRaises(ValueError):
+ IscDhcpLeases("isc_dhcp_leases/test_files/debian7.leases",
now=datetime.datetime.now())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-isc-dhcp-leases-0.9.1/isc_dhcp_leases/test_lease.py
new/python-isc-dhcp-leases-0.10.0/isc_dhcp_leases/test_lease.py
--- old/python-isc-dhcp-leases-0.9.1/isc_dhcp_leases/test_lease.py
2018-04-13 15:15:19.000000000 +0200
+++ new/python-isc-dhcp-leases-0.10.0/isc_dhcp_leases/test_lease.py
2023-03-19 16:37:19.000000000 +0100
@@ -1,7 +1,7 @@
+import datetime
from unittest import TestCase
-from isc_dhcp_leases.iscdhcpleases import Lease
+from isc_dhcp_leases.iscdhcpleases import Lease, utc
from freezegun import freeze_time
-from datetime import datetime
__author__ = 'Martijn Braam <[email protected]>'
@@ -19,14 +19,14 @@
'client-hostname': '"Satellite-C700"'
}
- @freeze_time("2015-07-6 8:15:0")
def test_init(self):
lease = Lease("192.168.0.1", self.lease_data)
self.assertEqual(lease.ip, "192.168.0.1")
self.assertEqual(lease.hardware, "ethernet")
self.assertEqual(lease.ethernet, "60:a4:4c:b5:6a:dd")
self.assertEqual(lease.hostname, "Satellite-C700")
- self.assertEqual(lease.start, datetime(2013, 12, 10, 12, 57, 4))
+ self.assertEqual(
+ lease.start, datetime.datetime(2013, 12, 10, 12, 57, 4,
tzinfo=utc))
self.assertIsNone(lease.end)
self.assertTrue(lease.valid)
self.assertFalse(lease.active)
@@ -36,21 +36,28 @@
lease = Lease("192.168.0.1", self.lease_data)
self.assertEqual(repr(lease), '<Lease 192.168.0.1 for
60:a4:4c:b5:6a:dd (Satellite-C700)>')
- @freeze_time("2015-07-6 8:15:0")
- def test_valid(self):
- lease = Lease("192.168.0.1", self.lease_data)
+ def _test_valid(self, now=None):
+ lease = Lease("192.168.0.1", self.lease_data, now=now)
self.assertTrue(lease.valid) # Lease is forever
- lease.end = datetime(2015, 7, 6, 13, 57, 4)
+ lease.end = datetime.datetime(2015, 7, 6, 13, 57, 4, tzinfo=utc)
self.assertTrue(lease.valid) # Lease is within start and end
- lease.end = datetime(2015, 7, 6, 6, 57, 4)
+ lease.end = lease.end - datetime.timedelta(hours=7)
self.assertFalse(lease.valid) # Lease is ended
- lease.start = datetime(2015, 7, 6, 12, 57, 4)
- lease.end = datetime(2015, 7, 6, 13, 57, 4)
+ lease.start = datetime.datetime(2015, 7, 6, 12, 57, 4, tzinfo=utc)
+ lease.end = lease.start + datetime.timedelta(hours=1)
self.assertFalse(lease.valid) # Lease is in the future
+ @freeze_time("2015-07-6 8:15:0")
+ def test_valid_frozen(self):
+ self._test_valid()
+
+ def test_valid_historical(self):
+ self._test_valid(
+ now=datetime.datetime(2015, 7, 6, 8, 15, 0, tzinfo=utc))
+
def test_eq(self):
lease_a = Lease("192.168.0.1", self.lease_data)
lease_b = Lease("192.168.0.1", self.lease_data)
@@ -83,8 +90,12 @@
lease = Lease("192.168.0.1", self.lease_data)
self.assertTrue(lease.valid) # Lease is forever
- lease.end = datetime(2015, 7, 6, 6, 57, 4)
+ lease.end = datetime.datetime(2015, 7, 6, 6, 57, 4, tzinfo=utc)
self.assertFalse(lease.valid) # Lease is ended
- lease.end = datetime(2015, 7, 6, 9, 57, 4)
+ lease.end = lease.end + datetime.timedelta(hours=3)
self.assertTrue(lease.valid) # Lease is not expired
+
+ def test_naive_time(self):
+ with self.assertRaises(ValueError):
+ Lease("192.168.0.1", self.lease_data, now=datetime.datetime.now())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-isc-dhcp-leases-0.9.1/isc_dhcp_leases/test_lease6.py
new/python-isc-dhcp-leases-0.10.0/isc_dhcp_leases/test_lease6.py
--- old/python-isc-dhcp-leases-0.9.1/isc_dhcp_leases/test_lease6.py
2018-04-13 15:15:19.000000000 +0200
+++ new/python-isc-dhcp-leases-0.10.0/isc_dhcp_leases/test_lease6.py
2023-03-19 16:37:19.000000000 +0100
@@ -1,13 +1,14 @@
+import datetime
from unittest import TestCase
-from isc_dhcp_leases.iscdhcpleases import Lease6
+from isc_dhcp_leases.iscdhcpleases import Lease6, utc
from freezegun import freeze_time
-from datetime import datetime
__author__ = 'Martijn Braam <[email protected]>'
class TestLease6(TestCase):
def setUp(self):
+ self.lease_time = datetime.datetime(2015, 8, 18, 16, 55, 37,
tzinfo=utc)
self.lease_data = {
'binding': 'state active',
'ends': 'never',
@@ -15,9 +16,8 @@
'max-life': '600'
}
- @freeze_time("2015-07-6 8:15:0")
def test_init(self):
- lease = Lease6("2001:610:600:891d::60", self.lease_data,
datetime(2015, 8, 18, 16, 55, 37),
+ lease = Lease6("2001:610:600:891d::60", self.lease_data,
self.lease_time,
"4dv\\352\\000\\001\\000\\001\\035f\\037\\342\\012\\000'\\000\\000\\000", "na")
self.assertEqual(lease.ip, "2001:610:600:891d::60")
@@ -29,30 +29,38 @@
self.assertEqual(lease.binding_state, 'active')
self.assertEqual(lease.preferred_life, 375)
self.assertEqual(lease.max_life, 600)
- self.assertEqual(lease.last_communication, datetime(2015, 8, 18, 16,
55, 37))
+ self.assertEqual(lease.last_communication, self.lease_time)
self.assertEqual(lease.type, Lease6.NON_TEMPORARY)
def test_repr(self):
- lease = Lease6("2001:610:600:891d::60", self.lease_data,
datetime(2015, 8, 18, 16, 55, 37),
+ lease = Lease6("2001:610:600:891d::60", self.lease_data,
self.lease_time,
"4dv\\352\\000\\001\\000\\001\\035f\\037\\342\\012\\000'\\000\\000\\000", "na")
self.assertEqual(repr(lease), '<Lease6 2001:610:600:891d::60>')
- @freeze_time("2015-07-6 8:15:0")
- def test_valid(self):
- lease = Lease6("2001:610:600:891d::60", self.lease_data,
datetime(2015, 8, 18, 16, 55, 37),
-
"4dv\\352\\000\\001\\000\\001\\035f\\037\\342\\012\\000'\\000\\000\\000", "na")
+ def _test_valid(self, now=None):
+ lease = Lease6("2001:610:600:891d::60", self.lease_data,
self.lease_time,
+
"4dv\\352\\000\\001\\000\\001\\035f\\037\\342\\012\\000'\\000\\000\\000", "na",
+ now=now)
self.assertTrue(lease.valid) # Lease is forever
- lease.end = datetime(2015, 7, 6, 13, 57, 4)
+ lease.end = datetime.datetime(2015, 7, 6, 13, 57, 4, tzinfo=utc)
self.assertTrue(lease.valid) # Lease is before end
- lease.end = datetime(2015, 7, 6, 6, 57, 4)
+ lease.end = lease.end - datetime.timedelta(hours=7)
self.assertFalse(lease.valid) # Lease is ended
+ @freeze_time("2015-07-6 8:15:0")
+ def test_valid_frozen(self):
+ self._test_valid()
+
+ def test_valid_historical(self):
+ self._test_valid(
+ now=datetime.datetime(2015, 7, 6, 8, 15, 0, tzinfo=utc))
+
def test_eq(self):
- lease_a = Lease6("2001:610:600:891d::60", self.lease_data,
datetime(2015, 8, 18, 16, 55, 37),
+ lease_a = Lease6("2001:610:600:891d::60", self.lease_data,
self.lease_time,
"4dv\\352\\000\\001\\000\\001\\035f\\037\\342\\012\\000'\\000\\000\\000", "na")
- lease_b = Lease6("2001:610:600:891d::60", self.lease_data,
datetime(2015, 8, 18, 16, 55, 37),
+ lease_b = Lease6("2001:610:600:891d::60", self.lease_data,
self.lease_time,
"4dv\\352\\000\\001\\000\\001\\035f\\037\\342\\012\\000'\\000\\000\\000", "na")
self.assertEqual(lease_a, lease_b)
@@ -63,3 +71,9 @@
lease_b.ip = "2001:610:600:891d::60"
lease_b.host_identifier =
"gd4\352\000\001\000\001\035b\037\322\012\000'\000\000\000"
self.assertNotEqual(lease_a, lease_b)
+
+ def test_naive_time(self):
+ with self.assertRaises(ValueError):
+ Lease6("2001:610:600:891d::60", self.lease_data, self.lease_time,
+
"4dv\\352\\000\\001\\000\\001\\035f\\037\\342\\012\\000'\\000\\000\\000", "na",
+ now=datetime.datetime.now())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-isc-dhcp-leases-0.9.1/setup.py
new/python-isc-dhcp-leases-0.10.0/setup.py
--- old/python-isc-dhcp-leases-0.9.1/setup.py 2018-04-13 15:15:19.000000000
+0200
+++ new/python-isc-dhcp-leases-0.10.0/setup.py 2023-03-19 16:37:19.000000000
+0100
@@ -40,7 +40,7 @@
setup(
name='isc_dhcp_leases',
- version='0.9.1',
+ version='0.10.0',
packages=['isc_dhcp_leases'],
url='https://github.com/MartijnBraam/python-isc-dhcp-leases',
install_requires=['six'],
++++++ python-isc_dhcp_leases-remove-unused-code.patch ++++++
--- /var/tmp/diff_new_pack.d7irGF/_old 2023-09-04 22:53:56.200519275 +0200
+++ /var/tmp/diff_new_pack.d7irGF/_new 2023-09-04 22:53:56.204519417 +0200
@@ -1,7 +1,7 @@
-Index: python-isc-dhcp-leases-0.9.1/isc_dhcp_leases/iscdhcpleases.py
-===================================================================
---- python-isc-dhcp-leases-0.9.1.orig/isc_dhcp_leases/iscdhcpleases.py
-+++ python-isc-dhcp-leases-0.9.1/isc_dhcp_leases/iscdhcpleases.py
+diff --git a/isc_dhcp_leases/iscdhcpleases.py
b/isc_dhcp_leases/iscdhcpleases.py
+index e16677e..8578060 100644
+--- a/isc_dhcp_leases/iscdhcpleases.py
++++ b/isc_dhcp_leases/iscdhcpleases.py
@@ -5,8 +5,6 @@ import re
import struct
import gzip
@@ -9,6 +9,6 @@
-from six import iteritems
-
- def parse_time(s):
- """
+ try:
+ utc = datetime.timezone.utc