Skip to content

Commit

Permalink
Prevent for python loop on LoginQDialog
Browse files Browse the repository at this point in the history
Ref #260 raise error under windows
  • Loading branch information
algorys committed Mar 5, 2018
1 parent 50b968b commit 9a0b7d7
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 15 deletions.
9 changes: 2 additions & 7 deletions alignak_app/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,13 +174,8 @@ def start(self, username=None, password=None):
login = LoginQDialog()
login.create_widget()

if login.exec_() == login.Accepted:
username = str(login.username_line.text())
password = str(login.password_line.text())
self.start(username, password)
else:
logger.info('The application is closed.')
sys.exit(0)
while not app_backend.connected:
login.exec_()

# Launch start threads
thread_to_launch = thread_manager.get_threads_to_launch()
Expand Down
17 changes: 13 additions & 4 deletions alignak_app/qobjects/common/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
Widgets manage global QWidgets
"""

import sys

from PyQt5.Qt import QPushButton, QHBoxLayout, QApplication, QWidget, QIcon, QLabel
from PyQt5.Qt import QStyleOption, QStyle, QPainter, Qt

Expand All @@ -44,14 +46,16 @@ def __init__(self):
self.child_widget = None
self.old_state = None

def initialize(self, child_widget, title):
def initialize(self, child_widget, title, exitapp):
"""
Initialize QWidget
:param child_widget: widget child of LogoQWidget, needed for action button and layout
:type child_widget: QWidget
:param title: title of widget
:type title: str
:param exitapp: define if close button close application or just child QWidget
:type exitapp: bool
"""

self.child_widget = child_widget
Expand Down Expand Up @@ -83,7 +87,10 @@ def initialize(self, child_widget, title):
close_btn.setIcon(QIcon(settings.get_image('exit')))
close_btn.setObjectName('app_widget')
close_btn.setFixedSize(24, 24)
close_btn.clicked.connect(child_widget.close)
if exitapp:
close_btn.clicked.connect(sys.exit)
else:
close_btn.clicked.connect(child_widget.close)
logo_layout.addWidget(close_btn, 3)

def paintEvent(self, _): # pragma: no cover
Expand Down Expand Up @@ -122,20 +129,22 @@ def minimize_maximize(self): # pragma: no cover - not testable
self.child_widget.setWindowState(Qt.WindowMaximized)


def get_logo_widget(child_widget, title):
def get_logo_widget(child_widget, title, exitapp=False):
"""
Return LogoQWidget with alignak logo
:param child_widget: widget child of LogoQWidget, needed for action button and layout
:type child_widget: QWidget
:param title: title of widget
:type title: str
:param exitapp: define if close button close application or just child QWidget
:type exitapp: bool
:return: Logo QWidget with buttons and child QWidget
:rtype: QWidget
"""

logo_widget = LogoQWidget()
logo_widget.initialize(child_widget, title)
logo_widget.initialize(child_widget, title, exitapp)

return logo_widget

Expand Down
19 changes: 17 additions & 2 deletions alignak_app/qobjects/login/login.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
from PyQt5.Qt import QWidget, QDialog, QPushButton, Qt, QIcon

from alignak_app import __version__
from alignak_app.backend.backend import app_backend
from alignak_app.utils.config import settings

from alignak_app.qobjects.common.widgets import get_logo_widget, center_widget
Expand Down Expand Up @@ -68,7 +69,7 @@ def create_widget(self):
main_layout = QVBoxLayout(self)
main_layout.setContentsMargins(0, 0, 0, 0)

main_layout.addWidget(get_logo_widget(self, _('Login')))
main_layout.addWidget(get_logo_widget(self, _('Login'), exitapp=True))

# Login QWidget
login_widget = QWidget(self)
Expand Down Expand Up @@ -124,7 +125,7 @@ def create_widget(self):

# Login button
login_button = QPushButton(_('LOGIN'), self)
login_button.clicked.connect(self.accept)
login_button.clicked.connect(self.accept_login)
login_button.setObjectName('valid')
login_button.setMinimumHeight(30)
login_button.setDefault(True)
Expand All @@ -135,6 +136,20 @@ def create_widget(self):

center_widget(self)

def accept_login(self):
"""
Accept Login or not if backend is connected
"""

username = str(self.username_line.text())
password = str(self.password_line.text())

if app_backend.login(username, password):
self.accept()
else:
self.reject()

@staticmethod
def handle_server():
"""
Expand Down
3 changes: 1 addition & 2 deletions test/test_common_widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ def test_initialize_acknowledge(self):
self.assertEqual('app_widget', under_test.objectName())
self.assertIsNone(under_test.child_widget)

under_test.initialize(test_widget, '')
under_test.initialize(test_widget, '', False)

self.assertIsNotNone(under_test.layout())
self.assertEqual('app_widget', under_test.objectName())
Expand Down Expand Up @@ -85,4 +85,3 @@ def test_center_widget(self):
new_pos = under_test.pos()

self.assertNotEqual(old_pos, new_pos)

0 comments on commit 9a0b7d7

Please sign in to comment.