Skip to content

Commit e467e8e

Browse files
Updates post testing
1 parent 77ae5e3 commit e467e8e

File tree

1 file changed

+26
-21
lines changed

1 file changed

+26
-21
lines changed

zfslib/zfslib.py

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import pathlib
1616
import inspect
1717
from collections import OrderedDict
18-
from datetime import datetime, timedelta
18+
from datetime import datetime, timedelta, date as dt_date
1919

2020

2121
# ZFS connection classes
@@ -389,24 +389,25 @@ def get_snapshot(self, name):
389389
# (dt_from --> dt_to) | (dt_from --> dt_from + tdelta) | (dt_to - tdelta --> dt_to) | (dt_from --> now)
390390
def find_snapshots(self, find_opts:dict) -> list:
391391

392-
def __assert(k, types):
392+
def __assert(k, types, default=None, to_datetime=False):
393393
if k == 'find_opts':
394394
v=find_opts
395395
else:
396-
if not k in find_opts: return None
396+
if not k in find_opts: return default
397397
v = find_opts[k]
398-
bOk=False
399-
for t in types:
400-
if isinstance(v, t): bOk=True
401-
assert bOk, 'Invalid type for param {}. Expecting {} but got: {}'.format(k, types, type(v))
398+
assert isinstance(v, types), 'Invalid type for param {}. Expecting {} but got: {}'.format(k, types, type(v))
399+
400+
if to_datetime and not isinstance(v, datetime):
401+
return datetime(v.year, v.month, v.day)
402402
return v
403-
find_opts = __assert('find_opts', [dict])
404-
name = __assert('name', [str])
405-
dt_from = __assert('dt_from', [datetime])
406-
dt_to = __assert('dt_to', [datetime])
407-
tdelta = __assert('tdelta', [str, timedelta])
408-
index = __assert('index', [bool])
409-
contains = __assert('contains', [str])
403+
404+
find_opts = {} if find_opts is None else __assert('find_opts', (dict))
405+
name = __assert('name', (str))
406+
dt_from = __assert('dt_from', (datetime, dt_date), None, True)
407+
dt_to = __assert('dt_to', (datetime, dt_date), None, True)
408+
tdelta = __assert('tdelta', (str, timedelta))
409+
index = __assert('index', (bool), False)
410+
contains = __assert('contains', (str))
410411

411412
if not contains is None:
412413
if not os.path.exists(contains):
@@ -436,7 +437,16 @@ def __fil_dt(snap):
436437
f=__fil_dt
437438

438439
elif not tdelta is None and dt_from is None and dt_to is None:
439-
(dt_f, dt_t) = (datetime.now() - buildTimedelta(tdelta), datetime.now())
440+
tdelta = tdelta if isinstance(tdelta, timedelta) else buildTimedelta(tdelta)
441+
(dt_f, dt_t) = (datetime.now() - tdelta, datetime.now())
442+
f=__fil_dt
443+
444+
elif not dt_from is None and not dt_to is None:
445+
if not tdelta is None:
446+
raise KeyError("tdelta cannot be specified when both dt_from and dt_to are specified")
447+
if dt_from >= dt_to:
448+
raise KeyError("dt_from ({}) must be < dt_to ({})".format(dt_from, dt_to))
449+
(dt_f, dt_t) = (dt_from, dt_to)
440450
f=__fil_dt
441451

442452
else:
@@ -836,12 +846,7 @@ def calcDateRange(tdelta:str, dt_from:datetime=None, dt_to:datetime=None) -> tup
836846
elif dt_to and not isinstance(dt_to, datetime):
837847
raise KeyError('dt_to must be a datetime')
838848

839-
840-
if isinstance(tdelta, timedelta):
841-
td = tdelta
842-
843-
else:
844-
td = buildTimedelta(tdelta)
849+
td = tdelta if isinstance(tdelta, timedelta) else buildTimedelta(tdelta)
845850

846851
if dt_from:
847852
return (dt_from, (dt_from + td))

0 commit comments

Comments
 (0)