Skip to content

TST: Fix skipped unit tests in test_ga. Install python-gflags using p… #11091

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 14, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions ci/requirements-2.7.pip
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
blosc
httplib2
google-api-python-client == 1.2
python-gflags == 2.0
1 change: 0 additions & 1 deletion ci/requirements-2.7.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,3 @@ patsy
pymysql=0.6.3
html5lib=1.0b2
beautiful-soup=4.2.1
python-gflags=2.0
1 change: 0 additions & 1 deletion ci/requirements-2.7_SLOW.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,3 @@ psycopg2
pymysql
html5lib
beautiful-soup
python-gflags
117 changes: 61 additions & 56 deletions pandas/io/tests/test_ga.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,14 @@

import nose
import pandas as pd
from pandas import DataFrame
from pandas import compat
from pandas.util.testing import network, assert_frame_equal, with_connectivity_check
from numpy.testing.decorators import slow
import pandas.util.testing as tm

if compat.PY3:
raise nose.SkipTest("python-gflags does not support Python 3 yet")

try:
import httplib2
import pandas.io.ga as ga
Expand All @@ -17,6 +20,7 @@
except ImportError:
raise nose.SkipTest("need httplib2 and auth libs")


class TestGoogle(tm.TestCase):

_multiprocess_can_split_ = True
Expand All @@ -29,8 +33,7 @@ def test_remove_token_store(self):
reset_default_token_store()
self.assertFalse(os.path.exists(auth.DEFAULT_TOKEN_FILE))

@slow
@network
@with_connectivity_check("http://www.google.com")
def test_getdata(self):
try:
end_date = datetime.now()
Expand All @@ -45,33 +48,34 @@ def test_getdata(self):
start_date=start_date,
end_date=end_date,
dimensions=['date', 'hour'],
parse_dates={'ts': ['date', 'hour']})

assert isinstance(df, DataFrame)
assert isinstance(df.index, pd.DatetimeIndex)
assert len(df) > 1
assert 'date' not in df
assert 'hour' not in df
assert df.index.name == 'ts'
assert 'avgTimeOnSite' in df
assert 'visitors' in df
assert 'newVisits' in df
assert 'pageviewsPerVisit' in df
parse_dates={'ts': ['date', 'hour']},
index_col=0)

self.assertIsInstance(df, pd.DataFrame)
self.assertIsInstance(df.index, pd.DatetimeIndex)
self.assertGreater(len(df), 1)
self.assertTrue('date' not in df)
self.assertTrue('hour' not in df)
self.assertEqual(df.index.name, 'ts')
self.assertTrue('avgTimeOnSite' in df)
self.assertTrue('visitors' in df)
self.assertTrue('newVisits' in df)
self.assertTrue('pageviewsPerVisit' in df)

df2 = read_ga(
metrics=['avgTimeOnSite', 'visitors', 'newVisits',
'pageviewsPerVisit'],
start_date=start_date,
end_date=end_date,
dimensions=['date', 'hour'],
parse_dates={'ts': ['date', 'hour']})
parse_dates={'ts': ['date', 'hour']},
index_col=0)

assert_frame_equal(df, df2)

except AuthenticationConfigError:
raise nose.SkipTest("authentication error")

@slow
@with_connectivity_check("http://www.google.com")
def test_iterator(self):
try:
Expand All @@ -81,51 +85,50 @@ def test_iterator(self):
metrics='visitors',
start_date='2005-1-1',
dimensions='date',
max_results=10, chunksize=5)
max_results=10, chunksize=5,
index_col=0)

df1 = next(it)
df2 = next(it)

for df in [df1, df2]:
assert isinstance(df, DataFrame)
assert isinstance(df.index, pd.DatetimeIndex)
assert len(df) == 5
assert 'date' not in df
assert df.index.name == 'date'
assert 'visitors' in df
self.assertIsInstance(df, pd.DataFrame)
self.assertIsInstance(df.index, pd.DatetimeIndex)
self.assertEqual(len(df), 5)
self.assertTrue('date' not in df)
self.assertEqual(df.index.name, 'date')
self.assertTrue('visitors' in df)

assert (df2.index > df1.index).all()
self.assertTrue((df2.index > df1.index).all())

except AuthenticationConfigError:
raise nose.SkipTest("authentication error")

def test_v2_advanced_segment_format(self):
advanced_segment_id = 1234567
query = ga.format_query('google_profile_id', ['visits'], '2013-09-01', segment=advanced_segment_id)
assert query['segment'] == 'gaid::' + str(advanced_segment_id), "An integer value should be formatted as an advanced segment."
self.assertEqual(query['segment'], 'gaid::' + str(advanced_segment_id), "An integer value should be formatted as an advanced segment.")

def test_v2_dynamic_segment_format(self):
dynamic_segment_id = 'medium==referral'
query = ga.format_query('google_profile_id', ['visits'], '2013-09-01', segment=dynamic_segment_id)
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."
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.")

def test_v3_advanced_segment_common_format(self):
advanced_segment_id = 'aZwqR234'
query = ga.format_query('google_profile_id', ['visits'], '2013-09-01', segment=advanced_segment_id)
assert query['segment'] == 'gaid::' + str(advanced_segment_id), "A string value with just letters and numbers should be formatted as an advanced segment."
self.assertEqual(query['segment'], 'gaid::' + str(advanced_segment_id), "A string value with just letters and numbers should be formatted as an advanced segment.")

def test_v3_advanced_segment_weird_format(self):
advanced_segment_id = '_aZwqR234-s1'
query = ga.format_query('google_profile_id', ['visits'], '2013-09-01', segment=advanced_segment_id)
assert query['segment'] == 'gaid::' + str(advanced_segment_id), "A string value with just letters, numbers, and hyphens should be formatted as an advanced segment."
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.")

def test_v3_advanced_segment_with_underscore_format(self):
advanced_segment_id = 'aZwqR234_s1'
query = ga.format_query('google_profile_id', ['visits'], '2013-09-01', segment=advanced_segment_id)
assert query['segment'] == 'gaid::' + str(advanced_segment_id), "A string value with just letters, numbers, and underscores should be formatted as an advanced segment."

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.")

@slow
@with_connectivity_check("http://www.google.com")
def test_segment(self):
try:
Expand All @@ -142,39 +145,41 @@ def test_segment(self):
end_date=end_date,
segment=-2,
dimensions=['date', 'hour'],
parse_dates={'ts': ['date', 'hour']})

assert isinstance(df, DataFrame)
assert isinstance(df.index, pd.DatetimeIndex)
assert len(df) > 1
assert 'date' not in df
assert 'hour' not in df
assert df.index.name == 'ts'
assert 'avgTimeOnSite' in df
assert 'visitors' in df
assert 'newVisits' in df
assert 'pageviewsPerVisit' in df

#dynamic
parse_dates={'ts': ['date', 'hour']},
index_col=0)

self.assertIsInstance(df, pd.DataFrame)
self.assertIsInstance(df.index, pd.DatetimeIndex)
self.assertGreater(len(df), 1)
self.assertTrue('date' not in df)
self.assertTrue('hour' not in df)
self.assertEqual(df.index.name, 'ts')
self.assertTrue('avgTimeOnSite' in df)
self.assertTrue('visitors' in df)
self.assertTrue('newVisits' in df)
self.assertTrue('pageviewsPerVisit' in df)

# dynamic
df = read_ga(
metrics=['avgTimeOnSite', 'visitors', 'newVisits',
'pageviewsPerVisit'],
start_date=start_date,
end_date=end_date,
segment="source=~twitter",
dimensions=['date', 'hour'],
parse_dates={'ts': ['date', 'hour']})
parse_dates={'ts': ['date', 'hour']},
index_col=0)

assert isinstance(df, DataFrame)
assert isinstance(df, pd.DataFrame)
assert isinstance(df.index, pd.DatetimeIndex)
assert len(df) > 1
assert 'date' not in df
assert 'hour' not in df
assert df.index.name == 'ts'
assert 'avgTimeOnSite' in df
assert 'visitors' in df
assert 'newVisits' in df
assert 'pageviewsPerVisit' in df
self.assertGreater(len(df), 1)
self.assertTrue('date' not in df)
self.assertTrue('hour' not in df)
self.assertEqual(df.index.name, 'ts')
self.assertTrue('avgTimeOnSite' in df)
self.assertTrue('visitors' in df)
self.assertTrue('newVisits' in df)
self.assertTrue('pageviewsPerVisit' in df)

except AuthenticationConfigError:
raise nose.SkipTest("authentication error")
Expand Down