Use the new class

Simplify error reporting with a new function.
This commit is contained in:
Salvo 'LtWorf' Tomaselli 2015-06-16 13:22:58 +02:00
parent 226b340969
commit 05e13bfeac

View File

@ -23,6 +23,7 @@ import os.path
from PyQt5 import QtCore, QtWidgets, QtWidgets from PyQt5 import QtCore, QtWidgets, QtWidgets
from relational import relation, parser, optimizer, rtypes from relational import relation, parser, optimizer, rtypes
from relational.maintenance import user_interface
from relational_gui import about from relational_gui import about
from relational_gui import survey from relational_gui import survey
@ -36,11 +37,11 @@ class relForm(QtWidgets.QMainWindow):
QtWidgets.QMainWindow.__init__(self) QtWidgets.QMainWindow.__init__(self)
self.About = None self.About = None
self.Survey = None self.Survey = None
self.relations = {} # Dictionary for relations
self.undo = None # UndoQueue for queries self.undo = None # UndoQueue for queries
self.selectedRelation = None self.selectedRelation = None
self.ui = ui self.ui = ui
self.qcounter = 1 # Query counter self.qcounter = 1 # Query counter
self.user_interface = user_interface()
self.settings = QtCore.QSettings() self.settings = QtCore.QSettings()
@ -83,11 +84,10 @@ class relForm(QtWidgets.QMainWindow):
query = self.ui.txtQuery.text() query = self.ui.txtQuery.text()
try: try:
result = optimizer.optimize_all(query, self.relations) result = optimizer.optimize_all(query, self.user_interface.relations)
self.ui.txtQuery.setText(result) self.ui.txtQuery.setText(result)
except Exception as e: except Exception as e:
QtWidgets.QMessageBox.information(None, QtWidgets.QApplication.translate("Form", "Error"), "%s\n%s" % self.error(e)
(QtWidgets.QApplication.translate("Form", "Check your query!"), e.__str__()))
def resumeHistory(self, item): def resumeHistory(self, item):
itm = item.text().split(' = ', 1) itm = item.text().split(' = ', 1)
@ -98,30 +98,10 @@ class relForm(QtWidgets.QMainWindow):
query = self.ui.txtMultiQuery.toPlainText() query = self.ui.txtMultiQuery.toPlainText()
self.settings.setValue('multiline/query', query) self.settings.setValue('multiline/query', query)
queries = query.split('\n') try:
result = self.user_interface.multi_execute(query)
for query in queries: except Exception as e:
if query.strip() == '': return self.error(e)
continue
parts = query.split('=', 1)
parts[0] = parts[0].strip()
if len(parts) > 1 and rtypes.is_valid_relation_name(parts[0].strip()):
relname = parts[0].strip()
query = parts[1]
else:
relname = 'last_'
try:
expr = parser.parse(query)
print ('%s <- %s' % (relname, expr))
result = eval(expr, self.relations)
self.relations[relname] = result
except Exception as e:
print(str(e))
QtWidgets.QMessageBox.information(None, QtWidgets.QApplication.translate("Form", "Error"), u"%s\n%s" %
(QtWidgets.QApplication.translate("Form", "Check your query!"), str(e)))
break
self.updateRelations() # update the list self.updateRelations() # update the list
self.selectedRelation = result self.selectedRelation = result
self.showRelation(self.selectedRelation) self.showRelation(self.selectedRelation)
@ -135,28 +115,12 @@ class relForm(QtWidgets.QMainWindow):
query = self.ui.txtQuery.text() query = self.ui.txtQuery.text()
res_rel = self.ui.txtResult.text() # result relation's name res_rel = self.ui.txtResult.text() # result relation's name
if not rtypes.is_valid_relation_name(res_rel):
QtWidgets.QMessageBox.information(self, QtWidgets.QApplication.translate(
"Form", "Error"), QtWidgets.QApplication.translate("Form", "Wrong name for destination relation."))
return
try: try:
# Converting string to utf8 and then from qstring to normal string self.selectedRelation = self.user_interface.execute(query, res_rel)
expr = parser.parse(query) # Converting expression to python code
print (query, "-->", expr) # Printing debug
result = eval(expr, self.relations) # Evaluating the expression
self.relations[
res_rel] = result # Add the relation to the dictionary
self.updateRelations() # update the list self.updateRelations() # update the list
self.selectedRelation = result
self.showRelation(self.selectedRelation) self.showRelation(self.selectedRelation)
# Show the result in the table
except Exception as e: except Exception as e:
print (str(e)) return self.error(e)
QtWidgets.QMessageBox.information(None, QtWidgets.QApplication.translate("Form", "Error"), u"%s\n%s" %
(QtWidgets.QApplication.translate("Form", "Check your query!"), str(e)))
return
# Adds to history # Adds to history
item = u'%s = %s' % ( item = u'%s = %s' % (
@ -169,7 +133,8 @@ class relForm(QtWidgets.QMainWindow):
self.ui.lstHistory.setCurrentItem(hitem) self.ui.lstHistory.setCurrentItem(hitem)
self.qcounter += 1 self.qcounter += 1
self.ui.txtResult.setText(u"_last%d" % self.qcounter) # Sets the result relation name to none # Sets the result relation name to none
self.ui.txtResult.setText(u"_last%d" % self.qcounter)
def showRelation(self, rel): def showRelation(self, rel):
'''Shows the selected relation into the table''' '''Shows the selected relation into the table'''
@ -195,19 +160,19 @@ class relForm(QtWidgets.QMainWindow):
i) # Must be done in order to avoid too small columns i) # Must be done in order to avoid too small columns
def printRelation(self, item): def printRelation(self, item):
self.selectedRelation = self.relations[item.text()] self.selectedRelation = self.user_interface.relations[item.text()]
self.showRelation(self.selectedRelation) self.showRelation(self.selectedRelation)
def showAttributes(self, item): def showAttributes(self, item):
'''Shows the attributes of the selected relation''' '''Shows the attributes of the selected relation'''
rel = item.text() rel = item.text()
self.ui.lstAttributes.clear() self.ui.lstAttributes.clear()
for j in self.relations[rel].header: for j in self.user_interface.relations[rel].header:
self.ui.lstAttributes.addItem(j) self.ui.lstAttributes.addItem(j)
def updateRelations(self): def updateRelations(self):
self.ui.lstRelations.clear() self.ui.lstRelations.clear()
for i in self.relations: for i in self.user_interface.relations:
if i != "__builtins__": if i != "__builtins__":
self.ui.lstRelations.addItem(i) self.ui.lstRelations.addItem(i)
@ -228,18 +193,26 @@ class relForm(QtWidgets.QMainWindow):
def unloadRelation(self): def unloadRelation(self):
for i in self.ui.lstRelations.selectedItems(): for i in self.ui.lstRelations.selectedItems():
del self.relations[i.text()] del self.user_interface.relations[i.text()]
self.updateRelations() self.updateRelations()
def editRelation(self): def editRelation(self):
from relational_gui import creator from relational_gui import creator
for i in self.ui.lstRelations.selectedItems(): for i in self.ui.lstRelations.selectedItems():
result = creator.edit_relation( result = creator.edit_relation(
self.relations[i.text()]) self.user_interface.get_relation(i.text())
)
if result != None: if result != None:
self.relations[i.text()] = result self.user_interface.set_relation(i.text(), result)
self.updateRelations() self.updateRelations()
def error(self,exception):
print (exception)
QtWidgets.QMessageBox.information(
None, QtWidgets.QApplication.translate("Form", "Error"),
str(exception)
)
def promptRelationName(self): def promptRelationName(self):
while True: while True:
res = QtWidgets.QInputDialog.getText( res = QtWidgets.QInputDialog.getText(
@ -271,12 +244,10 @@ class relForm(QtWidgets.QMainWindow):
name = self.promptRelationName() name = self.promptRelationName()
try: try:
self.relations[name] = result self.user_interface.relations[name] = result
self.updateRelations() self.updateRelations()
except Exception as e: except Exception as e:
print (e) self.error(e)
QtWidgets.QMessageBox.information(None, QtWidgets.QApplication.translate("Form", "Error"), "%s\n%s" %
(QtWidgets.QApplication.translate("Form", "Check your query!"), e.__str__()))
finally: finally:
return return
@ -341,11 +312,9 @@ class relForm(QtWidgets.QMainWindow):
continue continue
try: try:
self.relations[name] = relation.relation(f) self.user_interface.load(f,name)
except Exception as e: except Exception as e:
print (e) self.error(e)
QtWidgets.QMessageBox.information(None, QtWidgets.QApplication.translate("Form", "Error"), "%s\n%s" %
(QtWidgets.QApplication.translate("Form", "Check your query!"), e.__str__()))
continue continue
self.updateRelations() self.updateRelations()