Skip to content

Commit 0aed612

Browse files
committed
Better docstring and variable names
1 parent 023e38b commit 0aed612

File tree

2 files changed

+52
-37
lines changed

2 files changed

+52
-37
lines changed

src/senaite/core/api/dtime.py

+25-17
Original file line numberDiff line numberDiff line change
@@ -439,16 +439,24 @@ def to_localized_time(dt, long_format=None, time_only=None,
439439
return time_str
440440

441441

442-
def get_relative_delta(from_dtime, to_dtime=None):
443-
"""Returns the relative delta between two datetimes. If to_dtime is None,
444-
compares current datetime with from_dtime
442+
def get_relative_delta(dt1, dt2=None):
443+
"""Calculates the relative delta between two dates or datetimes
444+
445+
If `dt2` is None, the current datetime is used.
446+
447+
:param dt1: the first date/time to compare
448+
:type dt1: str/date/datetime/DateTime
449+
:param dt2: the second date/time to compare
450+
:type dt2: str/date/datetime/DateTime
451+
:returns: interval of time (e.g. `relativedelta(hours=+3)`)
452+
:rtype: dateutil.relativedelta
445453
"""
446-
if not to_dtime:
447-
to_dtime = datetime.now()
454+
if not dt2:
455+
dt2 = datetime.now()
448456

449-
from_dtime = to_dt(from_dtime)
450-
to_dtime = to_dt(to_dtime)
451-
if not all([from_dtime, to_dtime]):
457+
dt1 = to_dt(dt1)
458+
dt2 = to_dt(dt2)
459+
if not all([dt1, dt2]):
452460
return None
453461

454462
def get_tzinfo(dt, default=pytz.UTC):
@@ -457,19 +465,19 @@ def get_tzinfo(dt, default=pytz.UTC):
457465
except pytz.UnknownTimeZoneError:
458466
return default
459467

460-
naives = [is_timezone_naive(dt) for dt in [from_dtime, to_dtime]]
468+
naives = [is_timezone_naive(dt) for dt in [dt1, dt2]]
461469
if all(naives):
462470
# Both naive, no need to do anything special
463-
return relativedelta(to_dtime, from_dtime)
471+
return relativedelta(dt2, dt1)
464472

465-
elif is_timezone_naive(from_dtime):
473+
elif is_timezone_naive(dt1):
466474
# From date is naive, assume same TZ as the to date
467-
tzinfo = get_tzinfo(to_dtime)
468-
from_dtime = from_dtime.replace(tzinfo=tzinfo)
475+
tzinfo = get_tzinfo(dt2)
476+
dt1 = dt1.replace(tzinfo=tzinfo)
469477

470-
elif is_timezone_naive(to_dtime):
478+
elif is_timezone_naive(dt2):
471479
# To date is naive, assume same TZ as the from date
472-
tzinfo = get_tzinfo(from_dtime)
473-
to_dtime = to_dtime.replace(tzinfo=tzinfo)
480+
tzinfo = get_tzinfo(dt1)
481+
dt2 = dt2.replace(tzinfo=tzinfo)
474482

475-
return relativedelta(to_dtime, from_dtime)
483+
return relativedelta(dt2, dt1)

src/senaite/core/tests/doctests/API_datetime.rst

+27-20
Original file line numberDiff line numberDiff line change
@@ -626,50 +626,50 @@ Relative delta between two dates
626626

627627
We can extract the relative delta between two dates:
628628

629-
>>> from_dtime = dtime.ansi_to_dt("20230515104405")
630-
>>> to_dtime = dtime.ansi_to_dt("20230515114405")
631-
>>> dtime.get_relative_delta(from_dtime, to_dtime)
629+
>>> dt1 = dtime.ansi_to_dt("20230515104405")
630+
>>> dt2 = dtime.ansi_to_dt("20230515114405")
631+
>>> dtime.get_relative_delta(dt1, dt2)
632632
relativedelta(hours=+1)
633633

634634
We can even compare two dates from two different timezones:
635635

636-
>>> from_dtime_cet = dtime.to_zone(from_dtime, "CET")
637-
>>> to_dtime_utc = dtime.to_zone(to_dtime, "UTC")
638-
>>> dtime.get_relative_delta(from_dtime_cet, to_dtime_utc)
636+
>>> dt1_cet = dtime.to_zone(dt1, "CET")
637+
>>> dt2_utc = dtime.to_zone(dt2, "UTC")
638+
>>> dtime.get_relative_delta(dt1_cet, dt2_utc)
639639
relativedelta(hours=+3)
640640

641-
>>> from_dtime_cet = dtime.to_zone(from_dtime, "CET")
642-
>>> to_dtime_pcf = dtime.to_zone(to_dtime, "Pacific/Fiji")
643-
>>> dtime.get_relative_delta(from_dtime_cet, to_dtime_pcf)
641+
>>> dt1_cet = dtime.to_zone(dt1, "CET")
642+
>>> dt2_pcf = dtime.to_zone(dt2, "Pacific/Fiji")
643+
>>> dtime.get_relative_delta(dt1_cet, dt2_pcf)
644644
relativedelta(hours=-9)
645645

646646
If we compare a naive timezone, system uses the timezone of the other date:
647647

648-
>>> from_dtime_cet = dtime.to_zone(from_dtime, "CET")
649-
>>> to_dtime_naive = to_dtime.replace(tzinfo=None)
650-
>>> dtime.get_relative_delta(from_dtime_cet, to_dtime_naive)
648+
>>> dt1_cet = dtime.to_zone(dt1, "CET")
649+
>>> dt2_naive = dt2.replace(tzinfo=None)
650+
>>> dtime.get_relative_delta(dt1_cet, dt2_naive)
651651
relativedelta(hours=+3)
652652

653653
It also works when both are timezone naive:
654654

655-
>>> from_dtime_naive = from_dtime.replace(tzinfo=None)
656-
>>> to_dtime_naive = to_dtime.replace(tzinfo=None)
657-
>>> dtime.get_relative_delta(from_dtime_naive, to_dtime_naive)
655+
>>> dt1_naive = dt1.replace(tzinfo=None)
656+
>>> dt2_naive = dt2.replace(tzinfo=None)
657+
>>> dtime.get_relative_delta(dt1_naive, dt2_naive)
658658
relativedelta(hours=+1)
659659

660-
If we don't specify `to_dtime`, system simply uses current datetime:
660+
If we don't specify `dt2`, system simply uses current datetime:
661661

662-
>>> rel_now = dtime.get_relative_delta(from_dtime, datetime.now())
663-
>>> rel_wo = dtime.get_relative_delta(from_dtime)
662+
>>> rel_now = dtime.get_relative_delta(dt1, datetime.now())
663+
>>> rel_wo = dtime.get_relative_delta(dt1)
664664
>>> rel_now = (rel_now.years, rel_now.months, rel_now.days, rel_now.hours)
665665
>>> rel_wo = (rel_wo.years, rel_wo.months, rel_wo.days, rel_wo.hours)
666666
>>> rel_now == rel_wo
667667
True
668668

669669
We can even compare min and max dates:
670670

671-
>>> from_dtime = dtime.datetime.min
672-
>>> to_dtime = dtime.datetime.max
671+
>>> dt1 = dtime.datetime.min
672+
>>> dt2 = dtime.datetime.max
673673
>>> dtime.get_relative_delta(dtime.datetime.min, dtime.datetime.max)
674674
relativedelta(years=+9998, months=+11, days=+30, hours=+23, minutes=+59, seconds=+59, microseconds=+999999)
675675

@@ -698,3 +698,10 @@ Or compare two dates that are exactly the same:
698698

699699
>>> dtime.get_relative_delta("20230515114400", "20230515114400")
700700
relativedelta()
701+
702+
We can compare dates without time as well:
703+
704+
>>> from_date = dtime.date(2023, 5, 6)
705+
>>> to_date = dtime.date(2023, 5, 7)
706+
>>> dtime.get_relative_delta(from_date, to_date)
707+
relativedelta(days=+1)

0 commit comments

Comments
 (0)