Skip to content

Commit 05227a4

Browse files
committed
ODMTools can now connect to mssql from *unix platform, fixed an issue where refactoring pnlDataTable didn't include an important function
1 parent 6260e89 commit 05227a4

File tree

4 files changed

+66
-11
lines changed

4 files changed

+66
-11
lines changed

odmtools/controller/frmDataTable.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,15 @@ def onChangeSelection(self, datetime_list=None):
4949
except:
5050
pass
5151

52+
def clear(self):
53+
self.memDB = None
54+
self.olvDataTable.DeleteAllItems()
55+
self.olvDataTable.dataframe = None
56+
self.dataObjects = None
57+
5258
if __name__ == "__main__":
5359
app = wx.App()
5460
frame = wx.Frame(None)
5561
panel = FrmDataTable(frame)
5662
frame.Show()
57-
app.MainLoop()
63+
app.MainLoop()

odmtools/odmdata/series.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@ class Series(Base):
9494

9595
# TODO add all to repr
9696
def __repr__(self):
97-
return "<Series('%s')>" % (self.id)
97+
return "<Series('%s', '%s', '%s', '%s')>" % (self.id, self.site_name, self.variable_code, self.variable_name)
98+
9899

99100
def get_table_columns(self):
100101
return self.__table__.columns.keys()

odmtools/odmservices/service_manager.py

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import logging
22
import os
3+
import sys
4+
5+
import urllib
36

47
from sqlalchemy.exc import SQLAlchemyError#OperationalError, DBAPIError
58

@@ -184,18 +187,24 @@ def _get_file(self, mode):
184187

185188
def _build_connection_string(self, conn_dict):
186189
driver = ""
187-
if conn_dict['engine'] == 'mssql':
190+
if conn_dict['engine'] == 'mssql' and sys.platform is not 'win32':
188191
driver = "pyodbc"
189-
elif conn_dict['engine'] == 'mysql':
190-
driver = "pymysql"
191-
elif conn_dict['engine'] == 'postgresql':
192-
driver = "psycopg2"
192+
quoted = urllib.quote_plus('DRIVER={FreeTDS};DSN=%s;UID=%s;PWD=%s;' % (conn_dict['address'], conn_dict['user'], conn_dict['password']))
193+
conn_string = 'mssql+pyodbc:///?odbc_connect={}'.format(quoted)
194+
193195
else:
194-
driver = "None"
196+
if conn_dict['engine'] == 'mssql':
197+
driver = "pyodbc"
198+
elif conn_dict['engine'] == 'mysql':
199+
driver = "pymysql"
200+
elif conn_dict['engine'] == 'postgresql':
201+
driver = "psycopg2"
202+
else:
203+
driver = "None"
195204

196-
conn_string = self._connection_format % (
197-
conn_dict['engine'], driver, conn_dict['user'], conn_dict['password'], conn_dict['address'],
198-
conn_dict['db'])
205+
conn_string = self._connection_format % (
206+
conn_dict['engine'], driver, conn_dict['user'], conn_dict['password'], conn_dict['address'],
207+
conn_dict['db'])
199208
return conn_string
200209

201210
def _save_connections(self):

tests/test_odmdata/test_FreeTDS.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# -*- coding: utf-8 -*-
2+
from odmtools.odmdata import SessionFactory, variable, series
3+
from odmtools.odmservices import SeriesService
4+
from tests import test_util
5+
import wx
6+
from tests.test_util import build_db
7+
import urllib
8+
import sqlalchemy
9+
from sqlalchemy.orm import sessionmaker
10+
11+
class TestFreeTDS:
12+
def setup(self):
13+
# connection string
14+
15+
# create engine
16+
#quoted = urllib.quote_plus('DRIVER={FreeTDS};Server=iutahqc.uwrl.usu.edu;Database=iUTAH_Logan_OD;UID=qc;PWD=iUTAH123!!;TDS_Version=8.0;Port=1433;')
17+
quoted = urllib.quote_plus('DRIVER={FreeTDS};DSN=iutahqc;UID=qc;PWD=iUTAH123!!;')
18+
engine = sqlalchemy.create_engine('mssql+pyodbc:///?odbc_connect={}'.format(quoted))
19+
# conn = engine.connect()
20+
# q = conn.execute("select * from variables")
21+
print "engine:", engine
22+
assert engine
23+
Session = sessionmaker(bind=engine)
24+
assert Session
25+
session = Session()
26+
assert session
27+
q= session.query(variable.Variable).all()
28+
print "q:", type(q), dir(q)
29+
for i in q:
30+
print i
31+
#conn.close()
32+
q= session.query(series.Series).all()
33+
for i in q[:10]:
34+
print i
35+
assert q
36+
print engine
37+
38+
def test_connection(self):
39+
pass

0 commit comments

Comments
 (0)