88from xml .etree import ElementTree
99import requests
1010import paramiko
11- import ftplib as ftp
1211
1312import psycopg2 as pg
1413from psycopg2 .extras import DictCursor
@@ -85,26 +84,21 @@ def __init__(self, host, database, user, password):
8584 self .connection = pg .connect (host = host , database = database ,
8685 user = user , password = password , cursor_factory = DictCursor )
8786
88- techs = self .query ("SELECT * FROM lab_techs ORDER BY name" )
87+ techs = self .query ("SELECT name FROM lab_techs ORDER BY name" )
8988 labs = self .query ("SELECT id FROM labs ORDER BY id" )
9089 plots = self .query ("SELECT DISTINCT plot FROM plots ORDER BY plot" )
9190 self .fields ['Technician' ]['values' ] = [x ['name' ] for x in techs ]
9291 self .fields ['Lab' ]['values' ] = [x ['id' ] for x in labs ]
9392 self .fields ['Plot' ]['values' ] = [str (x ['plot' ]) for x in plots ]
9493
9594 def query (self , query , parameters = None ):
96- cursor = self .connection .cursor ()
97- try :
98- cursor .execute (query , parameters )
99- except (pg .Error ) as e :
100- self .connection .rollback ()
101- raise e
102- else :
103- self .connection .commit ()
95+ with self .connection :
96+ with self .connection .cursor () as cursor :
97+ cursor .execute (query , parameters )
10498 # cursor.description is None when
10599 # no rows are returned
106- if cursor .description is not None :
107- return cursor .fetchall ()
100+ if cursor .description is not None :
101+ return cursor .fetchall ()
108102
109103 def get_all_records (self , all_dates = False ):
110104 """Return all records.
@@ -131,7 +125,7 @@ def get_record(self, rowkey):
131125 query ,
132126 {"date" : date , "time" : time , "lab" : lab , "plot" : plot }
133127 )
134- return result [0 ] if result else {}
128+ return result [0 ] if result else dict ()
135129
136130 def save_record (self , record , rowkey ):
137131 """Save a record to the database
@@ -172,7 +166,7 @@ def get_lab_check(self, date, time, lab):
172166 'lab_id = %(lab)s AND date = %(date)s AND time = %(time)s' )
173167 results = self .query (
174168 query , {'date' : date , 'time' : time , 'lab' : lab })
175- return results [0 ] if results else {}
169+ return results [0 ] if results else dict ()
176170
177171 def get_current_seed_sample (self , lab , plot ):
178172 """Get the seed sample currently planted in the given lab and plot"""
@@ -274,7 +268,7 @@ def get_all_records(self):
274268
275269 with open (self .file , 'r' , encoding = 'utf-8' ) as fh :
276270 # Casting to list is necessary for unit tests to work
277- csvreader = csv .DictReader (list ( fh . readlines ()) )
271+ csvreader = csv .DictReader (fh )
278272 missing_fields = set (self .fields .keys ()) - set (csvreader .fieldnames )
279273 if len (missing_fields ) > 0 :
280274 fields_string = ', ' .join (missing_fields )
0 commit comments