Fixed bug #825809 where SQLAlchemy 0.7 throws a 'ArgumentError: SQL expression object or string expected' when passed something other than an SQL expression object or a string.

Fixes: https://launchpad.net/bugs/825809
This commit is contained in:
Raoul Snyman 2011-08-16 21:53:52 +02:00
parent d46eecd96d
commit 301993a3ea
5 changed files with 65 additions and 45 deletions

View File

@ -223,7 +223,9 @@ class Manager(object):
query = self.session.query(object_class) query = self.session.query(object_class)
if filter_clause is not None: if filter_clause is not None:
query = query.filter(filter_clause) query = query.filter(filter_clause)
if order_by_ref is not None: if isinstance(order_by_ref, list):
return query.order_by(*order_by_ref).all()
elif order_by_ref is not None:
return query.order_by(order_by_ref).all() return query.order_by(order_by_ref).all()
return query.all() return query.all()

View File

@ -34,26 +34,33 @@ class Ui_SongUsageDeleteDialog(object):
def setupUi(self, songUsageDeleteDialog): def setupUi(self, songUsageDeleteDialog):
songUsageDeleteDialog.setObjectName(u'songUsageDeleteDialog') songUsageDeleteDialog.setObjectName(u'songUsageDeleteDialog')
songUsageDeleteDialog.resize(291, 243) songUsageDeleteDialog.resize(291, 243)
self.layoutWidget = QtGui.QWidget(songUsageDeleteDialog) self.verticalLayout = QtGui.QVBoxLayout(songUsageDeleteDialog)
self.layoutWidget.setGeometry(QtCore.QRect(20, 10, 247, 181)) self.verticalLayout.setSpacing(8)
self.layoutWidget.setObjectName(u'layoutWidget') self.verticalLayout.setContentsMargins(8, 8, 8, 8)
self.verticalLayout = QtGui.QVBoxLayout(self.layoutWidget)
self.verticalLayout.setObjectName(u'verticalLayout') self.verticalLayout.setObjectName(u'verticalLayout')
self.deleteCalendar = QtGui.QCalendarWidget(self.layoutWidget) self.deleteLabel = QtGui.QLabel(songUsageDeleteDialog)
self.deleteLabel.setObjectName(u'deleteLabel')
self.verticalLayout.addWidget(self.deleteLabel)
self.deleteCalendar = QtGui.QCalendarWidget(songUsageDeleteDialog)
self.deleteCalendar.setFirstDayOfWeek(QtCore.Qt.Sunday) self.deleteCalendar.setFirstDayOfWeek(QtCore.Qt.Sunday)
self.deleteCalendar.setGridVisible(True) self.deleteCalendar.setGridVisible(True)
self.deleteCalendar.setVerticalHeaderFormat( self.deleteCalendar.setVerticalHeaderFormat(
QtGui.QCalendarWidget.NoVerticalHeader) QtGui.QCalendarWidget.NoVerticalHeader)
self.deleteCalendar.setObjectName(u'deleteCalendar') self.deleteCalendar.setObjectName(u'deleteCalendar')
self.verticalLayout.addWidget(self.deleteCalendar) self.verticalLayout.addWidget(self.deleteCalendar)
self.buttonBox = create_accept_reject_button_box( self.buttonBox = QtGui.QDialogButtonBox(songUsageDeleteDialog)
songUsageDeleteDialog, True) self.buttonBox.setStandardButtons(
self.buttonBox.setGeometry(QtCore.QRect(30, 210, 245, 25)) QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel)
self.buttonBox.setObjectName(u'buttonBox') self.buttonBox.setObjectName(u'buttonBox')
self.verticalLayout.addWidget(self.buttonBox)
self.retranslateUi(songUsageDeleteDialog) self.retranslateUi(songUsageDeleteDialog)
QtCore.QMetaObject.connectSlotsByName(songUsageDeleteDialog)
def retranslateUi(self, songUsageDeleteDialog): def retranslateUi(self, songUsageDeleteDialog):
songUsageDeleteDialog.setWindowTitle( songUsageDeleteDialog.setWindowTitle(
translate('SongUsagePlugin.SongUsageDeleteForm', translate('SongUsagePlugin.SongUsageDeleteForm',
'Delete Song Usage Data')) 'Delete Song Usage Data'))
self.deleteLabel.setText(
translate('SongUsagePlugin.SongUsageDeleteForm',
'Select the date up to which the song usage data should be '
'deleted. All data recorded before this date will be '
'permanently deleted.'))

View File

@ -25,7 +25,7 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Temple Place, Suite 330, Boston, MA 02111-1307 USA #
############################################################################### ###############################################################################
from PyQt4 import QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import translate, Receiver from openlp.core.lib import translate, Receiver
from openlp.plugins.songusage.lib.db import SongUsageItem from openlp.plugins.songusage.lib.db import SongUsageItem
@ -42,23 +42,32 @@ class SongUsageDeleteForm(QtGui.QDialog, Ui_SongUsageDeleteDialog):
self.manager = manager self.manager = manager
QtGui.QDialog.__init__(self, parent) QtGui.QDialog.__init__(self, parent)
self.setupUi(self) self.setupUi(self)
QtCore.QObject.connect(
self.buttonBox, QtCore.SIGNAL(u'clicked(QAbstractButton*)'),
self.onButtonBoxClicked)
def accept(self): def onButtonBoxClicked(self, button):
ret = QtGui.QMessageBox.question(self, if self.buttonBox.standardButton(button) == QtGui.QDialogButtonBox.Ok:
translate('SongUsagePlugin.SongUsageDeleteForm', ret = QtGui.QMessageBox.question(self,
'Delete Selected Song Usage Events?'), translate('SongUsagePlugin.SongUsageDeleteForm',
translate('SongUsagePlugin.SongUsageDeleteForm', 'Delete Selected Song Usage Events?'),
'Are you sure you want to delete selected Song Usage data?'), translate('SongUsagePlugin.SongUsageDeleteForm',
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok | 'Are you sure you want to delete selected Song Usage '
QtGui.QMessageBox.Cancel), 'data?'),
QtGui.QMessageBox.Cancel) QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes |
if ret == QtGui.QMessageBox.Ok: QtGui.QMessageBox.No),
deleteDate = self.deleteCalendar.selectedDate().toPyDate() QtGui.QMessageBox.No)
self.manager.delete_all_objects(SongUsageItem, if ret == QtGui.QMessageBox.Yes:
SongUsageItem.usagedate <= deleteDate) deleteDate = self.deleteCalendar.selectedDate().toPyDate()
Receiver.send_message(u'openlp_information_message', { self.manager.delete_all_objects(SongUsageItem,
u'title': translate('SongUsagePlugin.SongUsageDeleteForm', SongUsageItem.usagedate <= deleteDate)
'Deletion Successful'), Receiver.send_message(u'openlp_information_message', {
u'message': translate('SongUsagePlugin.SongUsageDeleteForm', u'title': translate('SongUsagePlugin.SongUsageDeleteForm',
'All requested data has been deleted successfully. ')}) 'Deletion Successful'),
self.close() u'message': translate(
'SongUsagePlugin.SongUsageDeleteForm',
'All requested data has been deleted successfully. ')}
)
self.accept()
else:
self.reject()

View File

@ -35,12 +35,14 @@ class Ui_SongUsageDetailDialog(object):
songUsageDetailDialog.setObjectName(u'songUsageDetailDialog') songUsageDetailDialog.setObjectName(u'songUsageDetailDialog')
songUsageDetailDialog.resize(609, 413) songUsageDetailDialog.resize(609, 413)
self.verticalLayout = QtGui.QVBoxLayout(songUsageDetailDialog) self.verticalLayout = QtGui.QVBoxLayout(songUsageDetailDialog)
self.verticalLayout.setSpacing(8)
self.verticalLayout.setContentsMargins(8, 8, 8, 8)
self.verticalLayout.setObjectName(u'verticalLayout') self.verticalLayout.setObjectName(u'verticalLayout')
self.dateRangeGroupBox = QtGui.QGroupBox(songUsageDetailDialog) self.dateRangeGroupBox = QtGui.QGroupBox(songUsageDetailDialog)
self.dateRangeGroupBox.setObjectName(u'dateRangeGroupBox') self.dateRangeGroupBox.setObjectName(u'dateRangeGroupBox')
self.verticalLayout2 = QtGui.QVBoxLayout(self.dateRangeGroupBox) self.dateHorizontalLayout = QtGui.QHBoxLayout(self.dateRangeGroupBox)
self.verticalLayout2.setObjectName(u'verticalLayout2') self.dateHorizontalLayout.setSpacing(8)
self.dateHorizontalLayout = QtGui.QHBoxLayout() self.dateHorizontalLayout.setContentsMargins(8, 8, 8, 8)
self.dateHorizontalLayout.setObjectName(u'dateHorizontalLayout') self.dateHorizontalLayout.setObjectName(u'dateHorizontalLayout')
self.fromDate = QtGui.QCalendarWidget(self.dateRangeGroupBox) self.fromDate = QtGui.QCalendarWidget(self.dateRangeGroupBox)
self.fromDate.setObjectName(u'fromDate') self.fromDate.setObjectName(u'fromDate')
@ -53,26 +55,25 @@ class Ui_SongUsageDetailDialog(object):
self.toDate = QtGui.QCalendarWidget(self.dateRangeGroupBox) self.toDate = QtGui.QCalendarWidget(self.dateRangeGroupBox)
self.toDate.setObjectName(u'toDate') self.toDate.setObjectName(u'toDate')
self.dateHorizontalLayout.addWidget(self.toDate) self.dateHorizontalLayout.addWidget(self.toDate)
self.verticalLayout2.addLayout(self.dateHorizontalLayout) self.verticalLayout.addWidget(self.dateRangeGroupBox)
self.fileGroupBox = QtGui.QGroupBox(self.dateRangeGroupBox) self.fileGroupBox = QtGui.QGroupBox(self.dateRangeGroupBox)
self.fileGroupBox.setObjectName(u'fileGroupBox') self.fileGroupBox.setObjectName(u'fileGroupBox')
self.verticalLayout4 = QtGui.QVBoxLayout(self.fileGroupBox) self.fileHorizontalLayout = QtGui.QHBoxLayout(self.fileGroupBox)
self.verticalLayout4.setObjectName(u'verticalLayout4') self.fileHorizontalLayout.setSpacing(8)
self.horizontalLayout = QtGui.QHBoxLayout() self.fileHorizontalLayout.setContentsMargins(8, 8, 8, 8)
self.horizontalLayout.setObjectName(u'horizontalLayout') self.fileHorizontalLayout.setObjectName(u'fileHorizontalLayout')
self.fileLineEdit = QtGui.QLineEdit(self.fileGroupBox) self.fileLineEdit = QtGui.QLineEdit(self.fileGroupBox)
self.fileLineEdit.setObjectName(u'fileLineEdit') self.fileLineEdit.setObjectName(u'fileLineEdit')
self.fileLineEdit.setReadOnly(True) self.fileLineEdit.setReadOnly(True)
self.fileLineEdit.setEnabled(False) self.fileHorizontalLayout.addWidget(self.fileLineEdit)
self.horizontalLayout.addWidget(self.fileLineEdit)
self.saveFilePushButton = QtGui.QPushButton(self.fileGroupBox) self.saveFilePushButton = QtGui.QPushButton(self.fileGroupBox)
self.saveFilePushButton.setMaximumWidth(
self.saveFilePushButton.size().height())
self.saveFilePushButton.setIcon( self.saveFilePushButton.setIcon(
build_icon(u':/general/general_open.png')) build_icon(u':/general/general_open.png'))
self.saveFilePushButton.setObjectName(u'saveFilePushButton') self.saveFilePushButton.setObjectName(u'saveFilePushButton')
self.horizontalLayout.addWidget(self.saveFilePushButton) self.fileHorizontalLayout.addWidget(self.saveFilePushButton)
self.verticalLayout4.addLayout(self.horizontalLayout) self.verticalLayout.addWidget(self.fileGroupBox)
self.verticalLayout2.addWidget(self.fileGroupBox)
self.verticalLayout.addWidget(self.dateRangeGroupBox)
self.buttonBox = create_accept_reject_button_box( self.buttonBox = create_accept_reject_button_box(
songUsageDetailDialog, True) songUsageDetailDialog, True)
self.verticalLayout.addWidget(self.buttonBox) self.verticalLayout.addWidget(self.buttonBox)

View File

@ -96,6 +96,7 @@ class SongUsagePlugin(Plugin):
self.songUsageActiveButton = QtGui.QToolButton( self.songUsageActiveButton = QtGui.QToolButton(
self.formparent.statusBar) self.formparent.statusBar)
self.songUsageActiveButton.setCheckable(True) self.songUsageActiveButton.setCheckable(True)
self.songUsageActiveButton.setAutoRaise(True)
self.songUsageActiveButton.setStatusTip(translate('SongUsagePlugin', self.songUsageActiveButton.setStatusTip(translate('SongUsagePlugin',
'Toggle the tracking of song usage.')) 'Toggle the tracking of song usage.'))
self.songUsageActiveButton.setObjectName(u'songUsageActiveButton') self.songUsageActiveButton.setObjectName(u'songUsageActiveButton')