From 4db1800244709a99d8d4f24924592e022f469b05 Mon Sep 17 00:00:00 2001 From: danielballan Date: Mon, 8 Jul 2013 18:52:47 -0400 Subject: [PATCH 1/2] TST: Create a MySQL database and run MySQL tests on Travis. --- .travis.yml | 3 +++ ci/requirements-2.7.txt | 1 + pandas/io/tests/test_sql.py | 34 ++++++++++++++++++++++++---------- 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3d3d90eb47129..96dba262ebfb6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,6 +40,9 @@ install: - echo "Waldo2" - ci/install.sh +before_script: + - mysql -e 'create database pandas_nosetest;' + script: - echo "Waldo3" - ci/script.sh diff --git a/ci/requirements-2.7.txt b/ci/requirements-2.7.txt index 57acc459adc13..a65a2991c673c 100644 --- a/ci/requirements-2.7.txt +++ b/ci/requirements-2.7.txt @@ -13,3 +13,4 @@ patsy==0.1.0 html5lib==1.0b2 lxml==3.2.1 scikits.timeseries==0.91.3 +MySQL-python==1.2.4 diff --git a/pandas/io/tests/test_sql.py b/pandas/io/tests/test_sql.py index 8bbd03268f2de..5bfb6c235576a 100644 --- a/pandas/io/tests/test_sql.py +++ b/pandas/io/tests/test_sql.py @@ -160,7 +160,7 @@ def _check_roundtrip(self, frame): sql.write_frame(frame, name='test_table', con=self.db) result = sql.read_frame("select * from test_table", self.db) - # HACK! + # HACK! Change this once indexes are handled properly. result.index = frame.index expected = frame @@ -175,6 +175,8 @@ def _check_roundtrip(self, frame): expected = frame.copy() expected.index = Index(range(len(frame2))) + 10 expected.index.name = 'Idx' + print expected.index.names + print result.index.names tm.assert_frame_equal(expected, result) def test_tquery(self): @@ -239,20 +241,27 @@ def test_onecolumn_of_integer(self): class TestMySQL(unittest.TestCase): def setUp(self): + _skip_if_no_MySQLdb() + import MySQLdb try: - import MySQLdb - except ImportError: - raise nose.SkipTest + # Try Travis defaults. + # No real user should allow root access with a blank password. + self.db = MySQLdb.connect(host='localhost', user='root', passwd='', + db='pandas_nosetest') + except: + pass + else: + return try: self.db = MySQLdb.connect(read_default_group='pandas') - except MySQLdb.Error, e: + except MySQLdb.ProgrammingError, e: raise nose.SkipTest( - "Cannot connect to database. " "Create a group of connection parameters under the heading " "[pandas] in your system's mysql default file, " "typically located at ~/.my.cnf or /etc/.my.cnf. ") - except MySQLdb.ProgrammingError, e: + except MySQLdb.Error, e: raise nose.SkipTest( + "Cannot connect to database. " "Create a group of connection parameters under the heading " "[pandas] in your system's mysql default file, " "typically located at ~/.my.cnf or /etc/.my.cnf. ") @@ -383,15 +392,17 @@ def _check_roundtrip(self, frame): sql.write_frame(frame, name='test_table', con=self.db, flavor='mysql') result = sql.read_frame("select * from test_table", self.db) - # HACK! + # HACK! Change this once indexes are handled properly. result.index = frame.index + result.index.name = frame.index.name expected = frame tm.assert_frame_equal(result, expected) frame['txt'] = ['a'] * len(frame) frame2 = frame.copy() - frame2['Idx'] = Index(range(len(frame2))) + 10 + index = Index(range(len(frame2))) + 10 + frame2['Idx'] = index drop_sql = "DROP TABLE IF EXISTS test_table2" cur = self.db.cursor() cur.execute(drop_sql) @@ -399,7 +410,10 @@ def _check_roundtrip(self, frame): result = sql.read_frame("select * from test_table2", self.db, index_col='Idx') expected = frame.copy() - expected.index = Index(range(len(frame2))) + 10 + + # HACK! Change this once indexes are handled properly. + expected.index = index + expected.index.names = result.index.names tm.assert_frame_equal(expected, result) def test_tquery(self): From f26b21078743a575641e5e2a5ac5ee9ea10404db Mon Sep 17 00:00:00 2001 From: Dan Allan Date: Wed, 10 Jul 2013 09:19:12 -0400 Subject: [PATCH 2/2] CLN: Ignore warnings generated by 'DROP TABLE IF EXISTS' when table does not exist. --- pandas/io/tests/test_sql.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/pandas/io/tests/test_sql.py b/pandas/io/tests/test_sql.py index 5bfb6c235576a..5b23bf173ec4e 100644 --- a/pandas/io/tests/test_sql.py +++ b/pandas/io/tests/test_sql.py @@ -1,8 +1,11 @@ +from __future__ import with_statement from pandas.util.py3compat import StringIO import unittest import sqlite3 import sys +import warnings + import nose import numpy as np @@ -297,7 +300,9 @@ def test_execute(self): drop_sql = "DROP TABLE IF EXISTS test" create_sql = sql.get_schema(frame, 'test', 'mysql') cur = self.db.cursor() - cur.execute(drop_sql) + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", "Unknown table.*") + cur.execute(drop_sql) cur.execute(create_sql) ins = "INSERT INTO test VALUES (%s, %s, %s, %s)" @@ -388,7 +393,9 @@ def _check_roundtrip(self, frame): _skip_if_no_MySQLdb() drop_sql = "DROP TABLE IF EXISTS test_table" cur = self.db.cursor() - cur.execute(drop_sql) + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", "Unknown table.*") + cur.execute(drop_sql) sql.write_frame(frame, name='test_table', con=self.db, flavor='mysql') result = sql.read_frame("select * from test_table", self.db) @@ -405,7 +412,9 @@ def _check_roundtrip(self, frame): frame2['Idx'] = index drop_sql = "DROP TABLE IF EXISTS test_table2" cur = self.db.cursor() - cur.execute(drop_sql) + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", "Unknown table.*") + cur.execute(drop_sql) sql.write_frame(frame2, name='test_table2', con=self.db, flavor='mysql') result = sql.read_frame("select * from test_table2", self.db, index_col='Idx')