33
44import nose
55import pandas as pd
6- from pandas import DataFrame
6+ from pandas import compat
77from pandas .util .testing import network , assert_frame_equal , with_connectivity_check
88from numpy .testing .decorators import slow
99import pandas .util .testing as tm
1010
11+ if compat .PY3 :
12+ raise nose .SkipTest ("python-gflags does not support Python 3 yet" )
13+
1114try :
1215 import httplib2
1316 import pandas .io .ga as ga
1720except ImportError :
1821 raise nose .SkipTest ("need httplib2 and auth libs" )
1922
23+
2024class TestGoogle (tm .TestCase ):
2125
2226 _multiprocess_can_split_ = True
@@ -29,8 +33,7 @@ def test_remove_token_store(self):
2933 reset_default_token_store ()
3034 self .assertFalse (os .path .exists (auth .DEFAULT_TOKEN_FILE ))
3135
32- @slow
33- @network
36+ @with_connectivity_check ("http://www.google.com" )
3437 def test_getdata (self ):
3538 try :
3639 end_date = datetime .now ()
@@ -45,33 +48,34 @@ def test_getdata(self):
4548 start_date = start_date ,
4649 end_date = end_date ,
4750 dimensions = ['date' , 'hour' ],
48- parse_dates = {'ts' : ['date' , 'hour' ]})
49-
50- assert isinstance (df , DataFrame )
51- assert isinstance (df .index , pd .DatetimeIndex )
52- assert len (df ) > 1
53- assert 'date' not in df
54- assert 'hour' not in df
55- assert df .index .name == 'ts'
56- assert 'avgTimeOnSite' in df
57- assert 'visitors' in df
58- assert 'newVisits' in df
59- assert 'pageviewsPerVisit' in df
51+ parse_dates = {'ts' : ['date' , 'hour' ]},
52+ index_col = 0 )
53+
54+ self .assertIsInstance (df , pd .DataFrame )
55+ self .assertIsInstance (df .index , pd .DatetimeIndex )
56+ self .assertGreater (len (df ), 1 )
57+ self .assertTrue ('date' not in df )
58+ self .assertTrue ('hour' not in df )
59+ self .assertEqual (df .index .name , 'ts' )
60+ self .assertTrue ('avgTimeOnSite' in df )
61+ self .assertTrue ('visitors' in df )
62+ self .assertTrue ('newVisits' in df )
63+ self .assertTrue ('pageviewsPerVisit' in df )
6064
6165 df2 = read_ga (
6266 metrics = ['avgTimeOnSite' , 'visitors' , 'newVisits' ,
6367 'pageviewsPerVisit' ],
6468 start_date = start_date ,
6569 end_date = end_date ,
6670 dimensions = ['date' , 'hour' ],
67- parse_dates = {'ts' : ['date' , 'hour' ]})
71+ parse_dates = {'ts' : ['date' , 'hour' ]},
72+ index_col = 0 )
6873
6974 assert_frame_equal (df , df2 )
7075
7176 except AuthenticationConfigError :
7277 raise nose .SkipTest ("authentication error" )
7378
74- @slow
7579 @with_connectivity_check ("http://www.google.com" )
7680 def test_iterator (self ):
7781 try :
@@ -81,51 +85,50 @@ def test_iterator(self):
8185 metrics = 'visitors' ,
8286 start_date = '2005-1-1' ,
8387 dimensions = 'date' ,
84- max_results = 10 , chunksize = 5 )
88+ max_results = 10 , chunksize = 5 ,
89+ index_col = 0 )
8590
8691 df1 = next (it )
8792 df2 = next (it )
8893
8994 for df in [df1 , df2 ]:
90- assert isinstance (df , DataFrame )
91- assert isinstance (df .index , pd .DatetimeIndex )
92- assert len (df ) == 5
93- assert 'date' not in df
94- assert df .index .name == 'date'
95- assert 'visitors' in df
95+ self . assertIsInstance (df , pd . DataFrame )
96+ self . assertIsInstance (df .index , pd .DatetimeIndex )
97+ self . assertEqual ( len (df ), 5 )
98+ self . assertTrue ( 'date' not in df )
99+ self . assertEqual ( df .index .name , 'date' )
100+ self . assertTrue ( 'visitors' in df )
96101
97- assert ( df2 .index > df1 .index ).all ()
102+ self . assertTrue (( df2 .index > df1 .index ).all () )
98103
99104 except AuthenticationConfigError :
100105 raise nose .SkipTest ("authentication error" )
101106
102107 def test_v2_advanced_segment_format (self ):
103108 advanced_segment_id = 1234567
104109 query = ga .format_query ('google_profile_id' , ['visits' ], '2013-09-01' , segment = advanced_segment_id )
105- assert query ['segment' ] == 'gaid::' + str (advanced_segment_id ), "An integer value should be formatted as an advanced segment."
110+ self . assertEqual ( query ['segment' ], 'gaid::' + str (advanced_segment_id ), "An integer value should be formatted as an advanced segment." )
106111
107112 def test_v2_dynamic_segment_format (self ):
108113 dynamic_segment_id = 'medium==referral'
109114 query = ga .format_query ('google_profile_id' , ['visits' ], '2013-09-01' , segment = dynamic_segment_id )
110- assert query ['segment' ] == 'dynamic::ga:' + str (dynamic_segment_id ), "A string value with more than just letters and numbers should be formatted as a dynamic segment."
115+ self . assertEqual ( query ['segment' ], 'dynamic::ga:' + str (dynamic_segment_id ), "A string value with more than just letters and numbers should be formatted as a dynamic segment." )
111116
112117 def test_v3_advanced_segment_common_format (self ):
113118 advanced_segment_id = 'aZwqR234'
114119 query = ga .format_query ('google_profile_id' , ['visits' ], '2013-09-01' , segment = advanced_segment_id )
115- assert query ['segment' ] == 'gaid::' + str (advanced_segment_id ), "A string value with just letters and numbers should be formatted as an advanced segment."
120+ self . assertEqual ( query ['segment' ], 'gaid::' + str (advanced_segment_id ), "A string value with just letters and numbers should be formatted as an advanced segment." )
116121
117122 def test_v3_advanced_segment_weird_format (self ):
118123 advanced_segment_id = '_aZwqR234-s1'
119124 query = ga .format_query ('google_profile_id' , ['visits' ], '2013-09-01' , segment = advanced_segment_id )
120- assert query ['segment' ] == 'gaid::' + str (advanced_segment_id ), "A string value with just letters, numbers, and hyphens should be formatted as an advanced segment."
125+ self . assertEqual ( query ['segment' ], 'gaid::' + str (advanced_segment_id ), "A string value with just letters, numbers, and hyphens should be formatted as an advanced segment." )
121126
122127 def test_v3_advanced_segment_with_underscore_format (self ):
123128 advanced_segment_id = 'aZwqR234_s1'
124129 query = ga .format_query ('google_profile_id' , ['visits' ], '2013-09-01' , segment = advanced_segment_id )
125- assert query ['segment' ] == 'gaid::' + str (advanced_segment_id ), "A string value with just letters, numbers, and underscores should be formatted as an advanced segment."
126-
130+ self .assertEqual (query ['segment' ], 'gaid::' + str (advanced_segment_id ), "A string value with just letters, numbers, and underscores should be formatted as an advanced segment." )
127131
128- @slow
129132 @with_connectivity_check ("http://www.google.com" )
130133 def test_segment (self ):
131134 try :
@@ -142,39 +145,41 @@ def test_segment(self):
142145 end_date = end_date ,
143146 segment = - 2 ,
144147 dimensions = ['date' , 'hour' ],
145- parse_dates = {'ts' : ['date' , 'hour' ]})
146-
147- assert isinstance (df , DataFrame )
148- assert isinstance (df .index , pd .DatetimeIndex )
149- assert len (df ) > 1
150- assert 'date' not in df
151- assert 'hour' not in df
152- assert df .index .name == 'ts'
153- assert 'avgTimeOnSite' in df
154- assert 'visitors' in df
155- assert 'newVisits' in df
156- assert 'pageviewsPerVisit' in df
157-
158- #dynamic
148+ parse_dates = {'ts' : ['date' , 'hour' ]},
149+ index_col = 0 )
150+
151+ self .assertIsInstance (df , pd .DataFrame )
152+ self .assertIsInstance (df .index , pd .DatetimeIndex )
153+ self .assertGreater (len (df ), 1 )
154+ self .assertTrue ('date' not in df )
155+ self .assertTrue ('hour' not in df )
156+ self .assertEqual (df .index .name , 'ts' )
157+ self .assertTrue ('avgTimeOnSite' in df )
158+ self .assertTrue ('visitors' in df )
159+ self .assertTrue ('newVisits' in df )
160+ self .assertTrue ('pageviewsPerVisit' in df )
161+
162+ # dynamic
159163 df = read_ga (
160164 metrics = ['avgTimeOnSite' , 'visitors' , 'newVisits' ,
161165 'pageviewsPerVisit' ],
162166 start_date = start_date ,
163167 end_date = end_date ,
164168 segment = "source=~twitter" ,
165169 dimensions = ['date' , 'hour' ],
166- parse_dates = {'ts' : ['date' , 'hour' ]})
170+ parse_dates = {'ts' : ['date' , 'hour' ]},
171+ index_col = 0 )
167172
168- assert isinstance (df , DataFrame )
173+ assert isinstance (df , pd . DataFrame )
169174 assert isinstance (df .index , pd .DatetimeIndex )
170- assert len (df ) > 1
171- assert 'date' not in df
172- assert 'hour' not in df
173- assert df .index .name == 'ts'
174- assert 'avgTimeOnSite' in df
175- assert 'visitors' in df
176- assert 'newVisits' in df
177- assert 'pageviewsPerVisit' in df
175+ self . assertGreater ( len (df ), 1 )
176+ self . assertTrue ( 'date' not in df )
177+ self . assertTrue ( 'hour' not in df )
178+ self . assertEqual ( df .index .name , 'ts' )
179+ self . assertTrue ( 'avgTimeOnSite' in df )
180+ self . assertTrue ( 'visitors' in df )
181+ self . assertTrue ( 'newVisits' in df )
182+ self . assertTrue ( 'pageviewsPerVisit' in df )
178183
179184 except AuthenticationConfigError :
180185 raise nose .SkipTest ("authentication error" )
0 commit comments