3
3
4
4
import nose
5
5
import pandas as pd
6
- from pandas import DataFrame
6
+ from pandas import compat
7
7
from pandas .util .testing import network , assert_frame_equal , with_connectivity_check
8
8
from numpy .testing .decorators import slow
9
9
import pandas .util .testing as tm
10
10
11
+ if compat .PY3 :
12
+ raise nose .SkipTest ("python-gflags does not support Python 3 yet" )
13
+
11
14
try :
12
15
import httplib2
13
16
import pandas .io .ga as ga
17
20
except ImportError :
18
21
raise nose .SkipTest ("need httplib2 and auth libs" )
19
22
23
+
20
24
class TestGoogle (tm .TestCase ):
21
25
22
26
_multiprocess_can_split_ = True
@@ -29,8 +33,7 @@ def test_remove_token_store(self):
29
33
reset_default_token_store ()
30
34
self .assertFalse (os .path .exists (auth .DEFAULT_TOKEN_FILE ))
31
35
32
- @slow
33
- @network
36
+ @with_connectivity_check ("http://www.google.com" )
34
37
def test_getdata (self ):
35
38
try :
36
39
end_date = datetime .now ()
@@ -45,33 +48,34 @@ def test_getdata(self):
45
48
start_date = start_date ,
46
49
end_date = end_date ,
47
50
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 )
60
64
61
65
df2 = read_ga (
62
66
metrics = ['avgTimeOnSite' , 'visitors' , 'newVisits' ,
63
67
'pageviewsPerVisit' ],
64
68
start_date = start_date ,
65
69
end_date = end_date ,
66
70
dimensions = ['date' , 'hour' ],
67
- parse_dates = {'ts' : ['date' , 'hour' ]})
71
+ parse_dates = {'ts' : ['date' , 'hour' ]},
72
+ index_col = 0 )
68
73
69
74
assert_frame_equal (df , df2 )
70
75
71
76
except AuthenticationConfigError :
72
77
raise nose .SkipTest ("authentication error" )
73
78
74
- @slow
75
79
@with_connectivity_check ("http://www.google.com" )
76
80
def test_iterator (self ):
77
81
try :
@@ -81,51 +85,50 @@ def test_iterator(self):
81
85
metrics = 'visitors' ,
82
86
start_date = '2005-1-1' ,
83
87
dimensions = 'date' ,
84
- max_results = 10 , chunksize = 5 )
88
+ max_results = 10 , chunksize = 5 ,
89
+ index_col = 0 )
85
90
86
91
df1 = next (it )
87
92
df2 = next (it )
88
93
89
94
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 )
96
101
97
- assert ( df2 .index > df1 .index ).all ()
102
+ self . assertTrue (( df2 .index > df1 .index ).all () )
98
103
99
104
except AuthenticationConfigError :
100
105
raise nose .SkipTest ("authentication error" )
101
106
102
107
def test_v2_advanced_segment_format (self ):
103
108
advanced_segment_id = 1234567
104
109
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." )
106
111
107
112
def test_v2_dynamic_segment_format (self ):
108
113
dynamic_segment_id = 'medium==referral'
109
114
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." )
111
116
112
117
def test_v3_advanced_segment_common_format (self ):
113
118
advanced_segment_id = 'aZwqR234'
114
119
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." )
116
121
117
122
def test_v3_advanced_segment_weird_format (self ):
118
123
advanced_segment_id = '_aZwqR234-s1'
119
124
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." )
121
126
122
127
def test_v3_advanced_segment_with_underscore_format (self ):
123
128
advanced_segment_id = 'aZwqR234_s1'
124
129
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." )
127
131
128
- @slow
129
132
@with_connectivity_check ("http://www.google.com" )
130
133
def test_segment (self ):
131
134
try :
@@ -142,39 +145,41 @@ def test_segment(self):
142
145
end_date = end_date ,
143
146
segment = - 2 ,
144
147
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
159
163
df = read_ga (
160
164
metrics = ['avgTimeOnSite' , 'visitors' , 'newVisits' ,
161
165
'pageviewsPerVisit' ],
162
166
start_date = start_date ,
163
167
end_date = end_date ,
164
168
segment = "source=~twitter" ,
165
169
dimensions = ['date' , 'hour' ],
166
- parse_dates = {'ts' : ['date' , 'hour' ]})
170
+ parse_dates = {'ts' : ['date' , 'hour' ]},
171
+ index_col = 0 )
167
172
168
- assert isinstance (df , DataFrame )
173
+ assert isinstance (df , pd . DataFrame )
169
174
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 )
178
183
179
184
except AuthenticationConfigError :
180
185
raise nose .SkipTest ("authentication error" )
0 commit comments