2
2
import tempfile
3
3
from unittest .mock import Mock
4
4
5
- import dateutil
5
+ import dateutil .tz
6
+ import dateutil .rrule
6
7
import numpy as np
7
8
import pytest
8
- import pytz
9
9
10
10
from matplotlib .testing .decorators import image_comparison
11
11
import matplotlib .pyplot as plt
12
12
from matplotlib .cbook import MatplotlibDeprecationWarning
13
13
import matplotlib .dates as mdates
14
14
15
15
16
+ def __has_pytz ():
17
+ try :
18
+ import pytz
19
+ return True
20
+ except ImportError :
21
+ return False
22
+
23
+
16
24
def test_date_numpyx ():
17
25
# test that numpy dates work properly...
18
26
base = datetime .datetime (2017 , 1 , 1 )
@@ -180,8 +188,8 @@ def test_RRuleLocator():
180
188
181
189
def test_RRuleLocator_dayrange ():
182
190
loc = mdates .DayLocator ()
183
- x1 = datetime .datetime (year = 1 , month = 1 , day = 1 , tzinfo = pytz .UTC )
184
- y1 = datetime .datetime (year = 1 , month = 1 , day = 16 , tzinfo = pytz .UTC )
191
+ x1 = datetime .datetime (year = 1 , month = 1 , day = 1 , tzinfo = mdates .UTC )
192
+ y1 = datetime .datetime (year = 1 , month = 1 , day = 16 , tzinfo = mdates .UTC )
185
193
loc .tick_values (x1 , y1 )
186
194
# On success, no overflow error shall be thrown
187
195
@@ -482,8 +490,8 @@ def test_date_inverted_limit():
482
490
483
491
def _test_date2num_dst (date_range , tz_convert ):
484
492
# Timezones
485
- BRUSSELS = pytz . timezone ('Europe/Brussels' )
486
- UTC = pytz .UTC
493
+ BRUSSELS = dateutil . tz . gettz ('Europe/Brussels' )
494
+ UTC = mdates .UTC
487
495
488
496
# Create a list of timezone-aware datetime objects in UTC
489
497
# Interval is 0b0.0000011 days, to prevent float rounding issues
@@ -575,10 +583,7 @@ def tz_convert(*args):
575
583
_test_date2num_dst (pd .date_range , tz_convert )
576
584
577
585
578
- @pytest .mark .parametrize ("attach_tz, get_tz" , [
579
- (lambda dt , zi : zi .localize (dt ), lambda n : pytz .timezone (n )),
580
- (lambda dt , zi : dt .replace (tzinfo = zi ), lambda n : dateutil .tz .gettz (n ))])
581
- def test_rrulewrapper (attach_tz , get_tz ):
586
+ def _test_rrulewrapper (attach_tz , get_tz ):
582
587
SYD = get_tz ('Australia/Sydney' )
583
588
584
589
dtstart = attach_tz (datetime .datetime (2017 , 4 , 1 , 0 ), SYD )
@@ -593,6 +598,25 @@ def test_rrulewrapper(attach_tz, get_tz):
593
598
assert act == exp
594
599
595
600
601
+ def test_rrulewrapper ():
602
+ def attach_tz (dt , zi ):
603
+ return dt .replace (tzinfo = zi )
604
+
605
+ _test_rrulewrapper (attach_tz , dateutil .tz .gettz )
606
+
607
+
608
+ @pytest .mark .pytz
609
+ @pytest .mark .skipif (not __has_pytz (), reason = "Requires pytz" )
610
+ def test_rrulewrapper_pytz ():
611
+ # Test to make sure pytz zones are supported in rrules
612
+ import pytz
613
+
614
+ def attach_tz (dt , zi ):
615
+ return zi .localize (dt )
616
+
617
+ _test_rrulewrapper (attach_tz , pytz .timezone )
618
+
619
+
596
620
def test_DayLocator ():
597
621
with pytest .raises (ValueError ):
598
622
mdates .DayLocator (interval = - 1 )
0 commit comments