From 969952cccc1369a3502344d0022f827a8a24f893 Mon Sep 17 00:00:00 2001 From: blitzmann Date: Sun, 14 Feb 2016 18:51:18 -0500 Subject: [PATCH] Add support for user-defined server timeout setting (#492) --- .../pyfaCrestPreferences.py | 19 ++++++++++++++++++- service/server.py | 8 ++++++-- service/settings.py | 2 +- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/gui/builtinPreferenceViews/pyfaCrestPreferences.py b/gui/builtinPreferenceViews/pyfaCrestPreferences.py index 7905745dd..081ccf871 100644 --- a/gui/builtinPreferenceViews/pyfaCrestPreferences.py +++ b/gui/builtinPreferenceViews/pyfaCrestPreferences.py @@ -7,6 +7,8 @@ import gui.mainFrame import service from service.crest import CrestModes +from wx.lib.intctrl import IntCtrl + class PFCrestPref ( PreferenceView): title = "CREST" @@ -46,6 +48,19 @@ class PFCrestPref ( PreferenceView): mainSizer.Add(rbSizer, 1, wx.ALL|wx.EXPAND, 0) + timeoutSizer = wx.BoxSizer(wx.HORIZONTAL) + + self.stTimout = wx.StaticText( panel, wx.ID_ANY, u"Timeout (seconds):", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stTimout.Wrap( -1 ) + + timeoutSizer.Add( self.stTimout, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5 ) + + self.intTimeout = IntCtrl(panel, max=300000, limited=True, value=self.settings.get('timeout')) + timeoutSizer.Add(self.intTimeout, 0, wx.ALL, 5 ) + self.intTimeout.Bind(wx.lib.intctrl.EVT_INT, self.OnTimeoutChange) + + mainSizer.Add(timeoutSizer, 0, wx.ALL|wx.EXPAND, 0) + detailsTitle = wx.StaticText( panel, wx.ID_ANY, "CREST client details", wx.DefaultPosition, wx.DefaultSize, 0 ) detailsTitle.Wrap( -1 ) detailsTitle.SetFont( wx.Font( 12, 70, 90, 90, False, wx.EmptyString ) ) @@ -53,7 +68,6 @@ class PFCrestPref ( PreferenceView): mainSizer.Add( detailsTitle, 0, wx.ALL, 5 ) mainSizer.Add( wx.StaticLine( panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ), 0, wx.EXPAND, 5 ) - fgAddrSizer = wx.FlexGridSizer( 2, 2, 0, 0 ) fgAddrSizer.AddGrowableCol( 1 ) fgAddrSizer.SetFlexibleDirection( wx.BOTH ) @@ -87,6 +101,9 @@ class PFCrestPref ( PreferenceView): panel.SetSizer( mainSizer ) panel.Layout() + def OnTimeoutChange(self, event): + self.settings.set('timeout', event.GetEventObject().GetValue()) + def OnModeChange(self, event): self.settings.set('mode', event.GetInt()) self.ToggleProxySettings(self.settings.get('mode')) diff --git a/service/server.py b/service/server.py index 714e93d1f..9f48534e1 100644 --- a/service/server.py +++ b/service/server.py @@ -3,6 +3,7 @@ import urlparse import socket import thread import wx +from service.settings import CRESTSettings import logging @@ -55,8 +56,11 @@ class StoppableHTTPServer(BaseHTTPServer.HTTPServer): def server_bind(self): BaseHTTPServer.HTTPServer.server_bind(self) - # Allow listening for 60 seconds - sec = 60 + self.settings = CRESTSettings.getInstance() + + # Allow listening for x seconds + sec = self.settings.get('timeout') + logger.debug("Running server for %d seconds", sec) self.socket.settimeout(0.5) self.max_tries = sec / self.socket.gettimeout() diff --git a/service/settings.py b/service/settings.py index 10e7389b5..5b4bd003b 100644 --- a/service/settings.py +++ b/service/settings.py @@ -278,7 +278,7 @@ class CRESTSettings(): # mode # 0 - Implicit authentication # 1 - User-supplied client details - serviceCRESTDefaultSettings = {"mode": 0, "server": 0, "clientID": "", "clientSecret": ""} + serviceCRESTDefaultSettings = {"mode": 0, "server": 0, "clientID": "", "clientSecret": "", "timeout": 60} self.serviceCRESTSettings = SettingsProvider.getInstance().getSettings("pyfaServiceCRESTSettings", serviceCRESTDefaultSettings)