freezegun icon indicating copy to clipboard operation
freezegun copied to clipboard

Incompatibility with dateutil.relativedelta

Open benzid-wael opened this issue 7 years ago • 2 comments

freeze_time does not work properly with dateutil.relativedelta

import datetime
from dateutil import relativedelta
from freezegun import freeze_time


def bug_example(dt):
    today = datetime.date.today()
    delta = relativedelta.relativedelta(dt, today)
    return delta


dt = datetime.date(2018, 10, 10)
with freeze_time('2018-10-12'):
    delta = bug_example(dt)
    assert delta.days == 2

which raises a TypeError

Traceback (most recent call last): File "freezegun_bug.py", line 14, in <module> delta = bug_example(dt) File "freezegun_bug.py", line 8, in bug_example delta = relativedelta.relativedelta(dt, today) File "/Users/wael.benzid/virtualenvs/subscribify/lib/python2.7/site-packages/dateutil/relativedelta.py", line 145, in __init__ if dt1 < dt2: TypeError: can't compare FakeDatetime to FakeDate

Environment:

  • OS: MacOS
  • Python: 2.7.13
  • freezegun: v0.3.11
  • python-dateutil: v2.2

benzid-wael avatar Jan 30 '19 14:01 benzid-wael

It looks like the issue is that the code is comparing a datetime to a date. Can you change today to datetime.datetime.today()?

spulec avatar Jul 09 '19 01:07 spulec

I can confirm that relativedelta does work with freezegun, and you have to compare the correct datatypes :) Just tested it

C0DK avatar May 12 '21 08:05 C0DK