Skip to content

Commit 272e3ab

Browse files
committed
Fix in disable check in ExperimentWindow
* It was crashing when no Arduino was connected
1 parent 82dc75e commit 272e3ab

File tree

12 files changed

+53
-50
lines changed

12 files changed

+53
-50
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
## [0.0.4] 2017-04-25
2+
- [FIX] Changes in ArduinoUserInterface initialization
3+
- [FIX] Removed Port property from MLC Manager
4+
- [FIX] Added missing import in ArduinoStatsDialog
5+
- [FIX] Fixes in deploy dockerfiles
6+
- [FIX] Set MacOs and Windows log config files properly
7+
18
## [0.0.3] 2017-03-24
29
- [FEATURE] Added checkbox for Arduino Connector
310
- [FEATURE] Added pysub dependency to detect when a board Arduino is connected

MLC/GUI/Autogenerated/autogenerated.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1323,7 +1323,7 @@ class Ui_ExperimentWindow(object):
13231323
def setupUi(self, ExperimentWindow):
13241324
ExperimentWindow.setObjectName("ExperimentWindow")
13251325
ExperimentWindow.setWindowModality(QtCore.Qt.ApplicationModal)
1326-
ExperimentWindow.resize(965, 814)
1326+
ExperimentWindow.resize(965, 687)
13271327
self.centralWidget = QtWidgets.QWidget(ExperimentWindow)
13281328
self.centralWidget.setObjectName("centralWidget")
13291329
self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralWidget)
@@ -1587,16 +1587,10 @@ def setupUi(self, ExperimentWindow):
15871587
self.chart_layout.addWidget(self.textEdit_2)
15881588
self.verticalLayout_7.addWidget(self.frame_14)
15891589
self.db_view = QtWidgets.QTableView(self.left_menu_frame)
1590-
self.db_view.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
1591-
self.db_view.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerItem)
1592-
self.db_view.setWordWrap(False)
15931590
self.db_view.setObjectName("db_view")
1594-
self.db_view.horizontalHeader().setCascadingSectionResizes(False)
1595-
self.db_view.horizontalHeader().setDefaultSectionSize(100)
1591+
self.db_view.horizontalHeader().setCascadingSectionResizes(True)
15961592
self.db_view.horizontalHeader().setSortIndicatorShown(True)
15971593
self.db_view.horizontalHeader().setStretchLastSection(True)
1598-
self.db_view.verticalHeader().setCascadingSectionResizes(False)
1599-
self.db_view.verticalHeader().setStretchLastSection(True)
16001594
self.verticalLayout_7.addWidget(self.db_view)
16011595
self.horizontalLayout_5.addWidget(self.left_menu_frame)
16021596
self.right_menu_frame = QtWidgets.QFrame(self.tab)
@@ -1759,7 +1753,7 @@ def setupUi(self, ExperimentWindow):
17591753
ExperimentWindow.setCentralWidget(self.centralWidget)
17601754

17611755
self.retranslateUi(ExperimentWindow)
1762-
self.tabWidget.setCurrentIndex(1)
1756+
self.tabWidget.setCurrentIndex(0)
17631757
self.next_gen_button.clicked.connect(ExperimentWindow.on_next_gen_button_clicked)
17641758
self.save_config_button.clicked.connect(ExperimentWindow.on_save_config_button_clicked)
17651759
self.show_all_check.clicked.connect(ExperimentWindow.on_show_all_check_clicked)

MLC/GUI/Experiment/ExperimentWindow.py

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
from PyQt5.QtWidgets import QInputDialog
5757

5858
from MLC.arduino.protocol import ProtocolConfig, ProtocolSetupException, ProtocolIOException
59-
from MLC.arduino.protocol import ArduinoInterfaceSingleton
59+
from MLC.arduino.protocol import ArduinoUserInterface
6060
from MLC.arduino.connection.base import invalid_connection_builder
6161
from MLC.arduino.connection.serialconnection import ConnectionException, serial_connection_builder
6262
from MLC.arduino.connection.base import BaseConnection
@@ -126,7 +126,7 @@ def __init__(self, mlc_local,
126126

127127
# Arduino board configurations
128128
self._board_config, self._serial_conn = mlc_local.get_board_configuration(self._experiment_name)
129-
ArduinoInterfaceSingleton.set_connection_builder(serial_connection_builder)
129+
ArduinoUserInterface.set_connection_builder(serial_connection_builder)
130130

131131
# Update the arduino board group for the first case
132132

@@ -150,19 +150,19 @@ def on_start_button_clicked(self):
150150
.format(self._experiment_name))
151151

152152
try:
153-
ArduinoInterfaceSingleton.get_instance(protocol_config=self._board_config,
154-
conn_setup=self._serial_conn)
153+
ArduinoUserInterface.get_instance(protocol_config=self._board_config,
154+
conn_setup=self._serial_conn)
155155

156156
except (ProtocolSetupException, ConnectionException) as err:
157157
logger.debug('[EXPERIMENT {0}] [BOARD_CONFIG] - '
158158
'Serial port could not be initialized. Error Msg: {1}'
159159
.format(self._experiment_name, err))
160160
selection = QMessageBox.warning(self, "Connection failure",
161-
"The current connection arduino setup failed during initialization "
162-
"(Error: {0}), this may generate an error in your experiment.\n"
163-
"Do you want to continue?".format(err),
164-
QMessageBox.Yes | QMessageBox.No,
165-
QMessageBox.Yes)
161+
"The current connection arduino setup failed during initialization "
162+
"(Error: {0}), this may generate an error in your experiment.\n"
163+
"Do you want to continue?".format(err),
164+
QMessageBox.Yes | QMessageBox.No,
165+
QMessageBox.Yes)
166166
if selection == QMessageBox.No:
167167
logger.debug('[EXPERIMENT {0}] [START_BUTTON] - Experiment cancelled by user before start'.format(
168168
self._experiment_name))
@@ -226,7 +226,8 @@ def on_start_button_clicked(self):
226226
progress_dialog.start()
227227

228228
def on_prev_gen_button_clicked(self):
229-
logger.debug('[EXPERIMENT {0}] [PREV_GEN_BUTTON] - Executing on_prev_gen_button_clicked function'.format(self._experiment_name))
229+
logger.debug(
230+
'[EXPERIMENT {0}] [PREV_GEN_BUTTON] - Executing on_prev_gen_button_clicked function'.format(self._experiment_name))
230231
experiment_info = self._mlc_local.get_experiment_info(self._experiment_name)
231232
number_of_gens = experiment_info["generations"]
232233

@@ -237,7 +238,8 @@ def on_prev_gen_button_clicked(self):
237238
self._update_scatter_chart()
238239

239240
def on_next_gen_button_clicked(self):
240-
logger.debug('[EXPERIMENT {0}] [NEXT_GEN_BUTTON] - Executing on_next_gen_button_clicked function'.format(self._experiment_name))
241+
logger.debug(
242+
'[EXPERIMENT {0}] [NEXT_GEN_BUTTON] - Executing on_next_gen_button_clicked function'.format(self._experiment_name))
241243
experiment_info = self._mlc_local.get_experiment_info(self._experiment_name)
242244
number_of_gens = experiment_info["generations"]
243245

@@ -571,13 +573,16 @@ def on_disable_arduino_toggle(self, active):
571573
self._autogenerated_object.board_config_button.setDisabled(active)
572574

573575
if active:
574-
ArduinoInterfaceSingleton.disable_interface()
576+
ArduinoUserInterface.disable_interface()
575577
else:
576578
# FIXME In the future, some logic to get the old connection builder must be implemented
577-
ArduinoInterfaceSingleton.set_connection_builder(serial_connection_builder)
579+
ArduinoUserInterface.set_connection_builder(serial_connection_builder)
578580

579-
ArduinoInterfaceSingleton.get_instance(protocol_config=self._board_config,
580-
conn_setup=self._serial_conn)
581+
try:
582+
ArduinoUserInterface.get_instance(protocol_config=self._board_config,
583+
conn_setup=self._serial_conn)
584+
except (ProtocolSetupException, ConnectionException) as err:
585+
pass
581586

582587

583588
################################### VIEW AND MODEL METHODS #########################################
@@ -919,8 +924,8 @@ def _store_board_configuration(self, board_config, serial_conn):
919924

920925
# Init the arduino singleton
921926
try:
922-
ArduinoInterfaceSingleton.get_instance(protocol_config=self._board_config,
923-
conn_setup=self._serial_conn)
927+
ArduinoUserInterface.get_instance(protocol_config=self._board_config,
928+
conn_setup=self._serial_conn)
924929

925930
# Update board configuration in the DB
926931
self._mlc_local.save_board_configuration(self._experiment_name, self._board_config, self._serial_conn)
@@ -930,11 +935,11 @@ def _store_board_configuration(self, board_config, serial_conn):
930935
'Serial port could not be initialized. Error Msg: {1}'
931936
.format(self._experiment_name, err))
932937
selection = QMessageBox.warning(self, "Connection failure",
933-
"The current connection setup failed during initialization. "
934-
"Do you want to change this configuration? "
935-
"(Choosing \"no\" means that the board will not be usable in the experiment)",
936-
QMessageBox.Yes | QMessageBox.No,
937-
QMessageBox.Yes)
938+
"The current connection setup failed during initialization. "
939+
"Do you want to change this configuration? "
940+
"(Choosing \"no\" means that the board will not be usable in the experiment)",
941+
QMessageBox.Yes | QMessageBox.No,
942+
QMessageBox.Yes)
938943
if selection == QMessageBox.Yes:
939944
self.on_board_config_button_clicked()
940945
else:

MLC/GUI/mlc_gui.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@
6969
class MLC_GUI(QMainWindow):
7070
MLC_ICON_FILE = os.path.join(*[mlc_gui_dir, "images", "mlc_icon.png"])
7171
GUI_CONFIG_FILE = os.path.join(mlc_gui_dir, ".mlc_gui.conf")
72-
WEBSERVICE_PORT = 5000
7372
experiment_closed = pyqtSignal(['QString'])
7473

7574
def __init__(self):
@@ -500,8 +499,6 @@ def _create_gui_config_from_scratch(self, config_filepath, workspace_dir):
500499
self._gui_config = ConfigParser.ConfigParser()
501500
self._gui_config.add_section('MAIN')
502501
self._gui_config.set('MAIN', 'workspace', workspace_dir)
503-
self._gui_config.add_section('WEB_SERVICE')
504-
self._gui_config.set('WEB_SERVICE', 'port', MLC_GUI.WEBSERVICE_PORT)
505502
with open(config_filepath, 'w') as cfg:
506503
self._gui_config.write(cfg)
507504

MLC/arduino/protocol.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ def init_interface(protocol_config):
312312
return interface
313313

314314

315-
class ArduinoInterfaceSingleton:
315+
class ArduinoUserInterface:
316316
_instance = None
317317
_connection_builder = [invalid_connection_builder]
318318
_interface_builder = [init_interface]
@@ -323,30 +323,30 @@ def get_instance(protocol_config=None, conn_setup=None):
323323
serial_conn = None
324324
try:
325325
#serial_conn = SerialConnection(**conn_setup)
326-
connection = ArduinoInterfaceSingleton._connection_builder[0](conn_setup)
326+
connection = ArduinoUserInterface._connection_builder[0](conn_setup)
327327
except ConnectionException, err:
328328
lg.logger_.info("[PROTOCOL] Error while building connection. "
329329
"Err info: {0}".format(err))
330330
raise
331331

332332
protocol_config = protocol_config._replace(connection=connection)
333-
ArduinoInterfaceSingleton._instance = ArduinoInterfaceSingleton._interface_builder[0](protocol_config)
333+
ArduinoUserInterface._instance = ArduinoUserInterface._interface_builder[0](protocol_config)
334334

335-
if ArduinoInterfaceSingleton._instance is None:
335+
if ArduinoUserInterface._instance is None:
336336
raise ProtocolSetupException("The arduino interface cannot be used if it isn't configured.")
337337

338-
return ArduinoInterfaceSingleton._instance
338+
return ArduinoUserInterface._instance
339339

340340
@staticmethod
341341
def set_connection_builder(builder):
342-
ArduinoInterfaceSingleton._connection_builder[0] = builder
343-
ArduinoInterfaceSingleton._interface_builder[0] = init_interface
342+
ArduinoUserInterface._connection_builder[0] = builder
343+
ArduinoUserInterface._interface_builder[0] = init_interface
344344

345345
@staticmethod
346346
def __null_initialization(config):
347347
return ArduinoInterface(config.connection, config.board_type)
348348

349349
@staticmethod
350350
def disable_interface():
351-
ArduinoInterfaceSingleton._interface_builder[0] = ArduinoInterfaceSingleton.__null_initialization
352-
ArduinoInterfaceSingleton._connection_builder[0] = invalid_connection_builder
351+
ArduinoUserInterface._interface_builder[0] = ArduinoUserInterface.__null_initialization
352+
ArduinoUserInterface._connection_builder[0] = invalid_connection_builder

tools/installer/Dockerfiles/centos7.dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ RUN wget https://sourceforge.net/projects/pyqt/files/PyQtDataVisualization/PyQtD
127127
rm -rf /tmp/PyQtDataVisualization_gpl-5.7.1*
128128

129129
# Install mlc dependencies
130-
RUN /opt/mlc-python-2.7.11/bin/mlc_pip install ipython pyserial numpy nose matplotlib scipy pyyaml flask requests pyusb
130+
RUN /opt/mlc-python-2.7.11/bin/mlc_pip install 'ipython<6.0.0' pyserial numpy nose matplotlib scipy pyyaml flask requests pyusb
131131
RUN gem install fpm
132132

133133
ARG RELEASE

tools/installer/Dockerfiles/debian8.dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ RUN wget https://sourceforge.net/projects/pyqt/files/PyQtDataVisualization/PyQtD
155155
# Create .sh who will load the desired enviroment to run nosetests within it
156156
RUN export LD_LIBRARY_PATH=/usr/local/Qt-5.7.1/lib:$LD_LIBRARY_PATH && \
157157
export PATH=/usr/local/Qt-5.7.1/bin:$PATH && \
158-
/opt/mlc-python-2.7.11/bin/mlc_pip install ipython numpy flask requests pyserial nose pyyaml coverage matplotlib scipy pyusb
158+
/opt/mlc-python-2.7.11/bin/mlc_pip install 'ipython<6.0.0' numpy flask requests pyserial nose pyyaml coverage matplotlib scipy pyusb
159159

160160
RUN gem install fpm
161161

tools/installer/Dockerfiles/fedora20.dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ RUN wget https://sourceforge.net/projects/pyqt/files/PyQtDataVisualization/PyQtD
134134
rm -rf /tmp/PyQtDataVisualization_gpl-5.7.1*
135135

136136
# Install mlc dependencies
137-
RUN /opt/mlc-python-2.7.11/bin/mlc_pip install ipython pyserial numpy nose matplotlib scipy pyyaml flask requests pyusb
137+
RUN /opt/mlc-python-2.7.11/bin/mlc_pip install 'ipython<6.0.0' pyserial numpy nose matplotlib scipy pyyaml flask requests pyusb
138138
RUN gem install fpm
139139

140140
ARG RELEASE

tools/installer/Dockerfiles/generate_containers.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/bin/bash
2-
RELEASE=0.0.3
2+
RELEASE=0.0.4
33

44
function check_run_as_root() {
55
case `id` in

tools/installer/Dockerfiles/ubuntu1404.dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ RUN wget https://sourceforge.net/projects/pyqt/files/PyQtDataVisualization/PyQtD
154154
# Create .sh who will load the desired enviroment to run nosetests within it
155155
RUN export LD_LIBRARY_PATH=/usr/local/Qt-5.7.1/lib:$LD_LIBRARY_PATH && \
156156
export PATH=/usr/local/Qt-5.7.1/bin:$PATH && \
157-
/opt/mlc-python-2.7.11/bin/mlc_pip install ipython numpy flask requests pyserial nose pyyaml coverage matplotlib scipy pyusb
157+
/opt/mlc-python-2.7.11/bin/mlc_pip install 'ipython<6.0.0' numpy flask requests pyserial nose pyyaml coverage matplotlib scipy pyusb
158158

159159
RUN gem install fpm
160160

0 commit comments

Comments
 (0)