[Workman-svn] SF.net SVN: workman:[24] trunk/src/db.py
An unobtrusive time-tracking program for self-employed people
Status: Pre-Alpha
Brought to you by:
jmsilva
From: <jm...@us...> - 2011-10-21 00:50:12
|
Revision: 24 http://workman.svn.sourceforge.net/workman/?rev=24&view=rev Author: jmsilva Date: 2011-10-21 00:50:06 +0000 (Fri, 21 Oct 2011) Log Message: ----------- Annoyingly, my python IDE was configured to replace tabs with spaces by default. Replaced the tabs. Modified Paths: -------------- trunk/src/db.py Modified: trunk/src/db.py =================================================================== --- trunk/src/db.py 2011-10-21 00:49:57 UTC (rev 23) +++ trunk/src/db.py 2011-10-21 00:50:06 UTC (rev 24) @@ -22,146 +22,146 @@ from PyQt4 import QtSql class DB: - ''' - Handles data access - ''' - - # TODO: What if the database goes down? - # TODO: Generalise SQL insert and select statement handling + ''' + Handles data access + ''' + + # TODO: What if the database goes down? + # TODO: Generalise SQL insert and select statement handling + + def __init__(self, dbType = 'QSQLITE', dbName = 'workman', + dbUsername = '', dbPassword = '', dbConnectOptions = ''): + ''' + Connects to the database + ''' + self.db = QtSql.QSqlDatabase.addDatabase(dbType) + self.db.setDatabaseName('workman') + self.db.setUsername(dbUsername) + self.db.setPassword(dbPassword) + self.db.setConnectOptions(dbConnectOptions) + if not self.db.open(): + raise RuntimeError() + self.pendingQueries = {} + self.lastQuery = 0 + + def insertEmployer(self, employer, rate): + ''' + Inserts a new employer into the Database + ''' + if employer is None or rate is None: + return False + + query = QtSql.QSqlQuery(self.db) + query.prepare('insert into employers(employer_name, ' + 'employer_hourly_rate, employer_rate_start_date) values(' + ':employer, :rate, datetime());') + query.addBindValue(employer) + query.addBindValue(rate) + return query.exec_() + + def insertSession(self, project, startDate, endDate, desc, breaks): + ''' + Inserts a new session into the Database + ''' + if project is None or startDate is None or endDate is None or desc is None: + return False + + QtSql.QSqlDatabase.transaction(); + query = QtSql.QSqlQuery(self.db) + query.prepare('Insert into sessions(project_name, ' + 'project_description, employer_id) values(' + ':project, :startDate, :endDate, :desc);') + query.addBindValue(project) + query.addBindValue(startDate) + query.addBindValue(endDate) + query.addBindValue(desc) + return query.exec_() + + # TODO: Add limits to the queries + """def newQuery(self, query, numElems = 20): + ''' + Creates a new query id, which should be passed to + subsequent requests + ''' + try: + result = self.lastQuery + self.pendingQueries[self.lastQuery] = (query, 0, numElems) + self.lastQuery += 1 + + return result + except KeyError: + return None + + + + def startQuery(self, id, args): + ''' + Sets the arguments for the query with ID. Args is a tuple + ''' + try: + queryInfo = self.pendingQueries[id] + query = QtSql.QSqlQuery(self.db) + status = query.exec_(queryInfo[0] + 'limit ' + str(queryInfo[1])) + if not status: + return False + + result = [] + + while query.next(): + record = query.record() + startTime = record.value(0) + endTime = record.value(1) + desc = record.value(2) + assert startTime.isValid() and endTime.isValid() and desc.isValid() + result.append((startTime, endTime, desc)) + except KeyError: + pass""" + + def getSessions(self, project): + ''' + Gets a list of sessions for a given project + ''' + query = QtSql.QSqlQuery(self.db) + query.prepare('select session_id, session_start_time, session_end_time, ' + 'session_description from sessions where project_id = :project;') + query.addBindValue(project) + status = query.exec_() + if not status: + return False + + result = [] + + while query.next(): + record = query.record() + sid = record.value(0) + startTime = record.value(1) + endTime = record.value(2) + desc = record.value(3) + assert (sid.isValid() and startTime.isValid() and + endTime.isValid() and desc.isValid()) + sessionBreaks = self.__getBreaks(sid) + result.append((startTime, endTime, desc, sessionBreaks)) + + return result + + def __getBreaks(self, session): + query = QtSql.QSqlQuery(self.db) + query.prepare('select break_start_time, break_end_time, ' + 'break_reason from breaks where session_id = :session;') + query.addBindValue(session) + status = query.exec_() + if not status: + return False + + result = [] + while query.next(): + record = query.record() + startTime = record.value(0) + endTime = record.value(1) + reason = record.value(2) + assert(startTime.isValid() and + endTime.isValid() and reason.isValid()) + result.append((startTime, endTime, reason)) + + return result - def __init__(self, dbType = 'QSQLITE', dbName = 'workman', - dbUsername = '', dbPassword = '', dbConnectOptions = ''): - ''' - Connects to the database - ''' - self.db = QtSql.QSqlDatabase.addDatabase(dbType) - self.db.setDatabaseName('workman') - self.db.setUsername(dbUsername) - self.db.setPassword(dbPassword) - self.db.setConnectOptions(dbConnectOptions) - if not self.db.open(): - raise RuntimeError() - self.pendingQueries = {} - self.lastQuery = 0 - - def insertEmployer(self, employer, rate): - ''' - Inserts a new employer into the Database - ''' - if employer is None or rate is None: - return False - - query = QtSql.QSqlQuery(self.db) - query.prepare('insert into employers(employer_name, ' - 'employer_hourly_rate, employer_rate_start_date) values(' - ':employer, :rate, datetime());') - query.addBindValue(employer) - query.addBindValue(rate) - return query.exec_() - - def insertSession(self, project, startDate, endDate, desc, breaks): - ''' - Inserts a new session into the Database - ''' - if project is None or startDate is None or endDate is None or desc is None: - return False - - QtSql.QSqlDatabase.transaction(); - query = QtSql.QSqlQuery(self.db) - query.prepare('Insert into sessions(project_name, ' - 'project_description, employer_id) values(' - ':project, :startDate, :endDate, :desc);') - query.addBindValue(project) - query.addBindValue(startDate) - query.addBindValue(endDate) - query.addBindValue(desc) - return query.exec_() - - # TODO: Add limits to the queries - """def newQuery(self, query, numElems = 20): - ''' - Creates a new query id, which should be passed to - subsequent requests - ''' - try: - result = self.lastQuery - self.pendingQueries[self.lastQuery] = (query, 0, numElems) - self.lastQuery += 1 - - return result - except KeyError: - return None - - - - def startQuery(self, id, args): - ''' - Sets the arguments for the query with ID. Args is a tuple - ''' - try: - queryInfo = self.pendingQueries[id] - query = QtSql.QSqlQuery(self.db) - status = query.exec_(queryInfo[0] + 'limit ' + str(queryInfo[1])) - if not status: - return False - - result = [] - - while query.next(): - record = query.record() - startTime = record.value(0) - endTime = record.value(1) - desc = record.value(2) - assert startTime.isValid() and endTime.isValid() and desc.isValid() - result.append((startTime, endTime, desc)) - except KeyError: - pass""" - - def getSessions(self, project): - ''' - Gets a list of sessions for a given project - ''' - query = QtSql.QSqlQuery(self.db) - query.prepare('select session_id, session_start_time, session_end_time, ' - 'session_description from sessions where project_id = :project;') - query.addBindValue(project) - status = query.exec_() - if not status: - return False - - result = [] - - while query.next(): - record = query.record() - sid = record.value(0) - startTime = record.value(1) - endTime = record.value(2) - desc = record.value(3) - assert (sid.isValid() and startTime.isValid() and - endTime.isValid() and desc.isValid()) - sessionBreaks = self.__getBreaks(sid) - result.append((startTime, endTime, desc, sessionBreaks)) - - return result - - def __getBreaks(self, session): - query = QtSql.QSqlQuery(self.db) - query.prepare('select break_start_time, break_end_time, ' - 'break_reason from breaks where session_id = :session;') - query.addBindValue(session) - status = query.exec_() - if not status: - return False - - result = [] - while query.next(): - record = query.record() - startTime = record.value(0) - endTime = record.value(1) - reason = record.value(2) - assert(startTime.isValid() and - endTime.isValid() and reason.isValid()) - result.append((startTime, endTime, reason)) - - return result - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |