From 9b6d80a6ed853823bb0eaf9712bf43ae8bd552d1 Mon Sep 17 00:00:00 2001
From: Daniel Brown <ddb@star.sr.bham.ac.uk>
Date: Sat, 1 Nov 2014 11:24:16 +0000
Subject: [PATCH] adding in gui swtich to stop pyqt4 imports

---
 pykat/__init__.py   | 13 ++++++++++++-
 pykat/components.py | 40 +++++++++++++++++++++++++++++++++++++---
 pykat/detectors.py  | 13 ++++++++++---
 pykat/finesse.py    | 14 ++++++++------
 4 files changed, 67 insertions(+), 13 deletions(-)

diff --git a/pykat/__init__.py b/pykat/__init__.py
index 7d2920b..01a75cd 100644
--- a/pykat/__init__.py
+++ b/pykat/__init__.py
@@ -1,4 +1,11 @@
-__version__ = "0.5"
+__version__ = "0.6.1"
+
+# This flag is used to switch on the gui features in pkat at import time
+USE_GUI = False
+
+import pykat.exceptions as pkex
+
+NoGUIException = pkex.BasePyKatException("No PyQt4 module was found so cannot open a GUI")
 
 import finesse
 import components
@@ -6,3 +13,7 @@ import detectors
 import commands
 
 from pykat.utilities.optics.gaussian_beams import beam_param
+
+
+
+
diff --git a/pykat/components.py b/pykat/components.py
index 5684525..37ff73b 100644
--- a/pykat/components.py
+++ b/pykat/components.py
@@ -11,9 +11,6 @@ from pykat.node_network import *
 from pykat.exceptions import *
 import abc
 
-import pykat.gui.resources
-import pykat.gui.graphics
-from pykat.gui.graphics import *
 from pykat.SIfloat import *
 from pykat.param import Param, AttrParam
 import weakref
@@ -21,6 +18,13 @@ import pykat.exceptions as pkex
 
 next_component_id = 1
 
+from pykat import USE_GUI, NoGUIException
+
+if USE_GUI:
+    import pykat.gui.resources
+    import pykat.gui.graphics
+    from pykat.gui.graphics import *
+
 class NodeGaussSetter(object):
     def __init__(self, component, node):                
         self.__comp = weakref.ref(component)
@@ -149,6 +153,9 @@ class Component(object):
 
     @abc.abstractmethod
     def getQGraphicsItem(self):    
+        if not USE_GUI:
+            raise NoGUIException
+            
         return None      
     
     @property
@@ -403,6 +410,9 @@ class mirror(AbstractMirrorComponent):
         return rtn
         
     def getQGraphicsItem(self):
+        if not USE_GUI:
+            raise NoGUIException
+            
         if self._svgItem == None:
             self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/mirror_flat.svg", self ,[(-4,15,self.nodes[0]), (14,15,self.nodes[1])])
             
@@ -473,6 +483,9 @@ class beamSplitter(AbstractMirrorComponent):
         return rtn
         
     def getQGraphicsItem(self):
+        if not USE_GUI:
+            raise NoGUIException
+            
         if self._svgItem == None:
             # FIXME: make proper SVG component for beam splitter
             self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/mirror_flat.svg", self ,[(-4,24,self.nodes[0]), (-4,6,self.nodes[1]), (14,6,self.nodes[2]), (14,24,self.nodes[3])])
@@ -566,6 +579,9 @@ class space(Component):
         return rtn
         
     def getQGraphicsItem(self):
+        if not USE_GUI:
+            raise NoGUIException
+            
         if self._QItem == None:
             self._QItem = pykat.gui.graphics.SpaceQGraphicsItem(self)
         
@@ -696,6 +712,9 @@ class grating(Component):
         return rtn
        
     def getQGraphicsItem(self):
+        if not USE_GUI:
+            raise NoGUIException
+            
         if self._svgItem == None:
             self._svgItem = pykat.gui.graphics.SpaceQGraphicsItem(self) # TODO: make SVG graphic for grating
         
@@ -742,6 +761,9 @@ class isolator(Component):
         return rtn
 
     def getQGraphicsItem(self):
+        if not USE_GUI:
+            raise NoGUIException
+            
         if self._svgItem == None:
             self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/isolator.svg", self ,[(-4,15,self.nodes[0]), (14,15,self.nodes[1]), (14,24,self.nodes[2])])
         
@@ -784,6 +806,9 @@ class lens(Component):
         return rtn
         
     def getQGraphicsItem(self):
+        if not USE_GUI:
+            raise NoGUIException
+            
         if self._svgItem == None:
             self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/lens.svg", self ,[(-4,15,self.nodes[0]), (14,15,self.nodes[1])])
         
@@ -861,6 +886,9 @@ class modulator(Component):
         return rtn
         
     def getQGraphicsItem(self):
+        if not USE_GUI:
+            raise NoGUIException
+            
         if self._svgItem == None:
             self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/modulator.svg", self ,[(-4,15,self.nodes[0]), (14,15,self.nodes[1])])
         
@@ -926,6 +954,9 @@ class laser(Component):
         return rtn
          
     def getQGraphicsItem(self):
+        if not USE_GUI:
+            raise NoGUIException
+            
         if self._svgItem == None:
             self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/laser.svg", self, [(65,25,self.nodes[0])])
             
@@ -989,6 +1020,9 @@ class squeezer(Component):
         return rtn
          
     def getQGraphicsItem(self):
+        if not USE_GUI:
+            raise NoGUIException
+            
         if self._svgItem == None:
             self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/laser.svg", self, [(65,25,self.nodes[0])])
             
diff --git a/pykat/detectors.py b/pykat/detectors.py
index df246f0..9ceb2e4 100644
--- a/pykat/detectors.py
+++ b/pykat/detectors.py
@@ -5,17 +5,21 @@ Created on Fri Feb 01 0split()9:09:10 2013
 @author: Daniel
 """
 import exceptions
-import pykat.gui.resources
-
 from pykat.utils import *
-from pykat.gui.graphics import *
 from pykat.node_network import *
 from pykat.param import Param
+
 import collections
 import pykat.exceptions as pkex
 import warnings
 import copy
 
+from pykat import USE_GUI, NoGUIException
+
+if USE_GUI:
+    import pykat.gui.resources
+    from pykat.gui.graphics import *
+    
 class BaseDetector(object) :
     """
     This is a base class for all detectors. Classes Detector1 and Detector2 should be used directly.
@@ -94,6 +98,9 @@ class BaseDetector(object) :
         raise NotImplementedError("This function is not implemented")
         
     def getQGraphicsItem(self):    
+        if not USE_GUI:
+            raise NoGUIException
+            
         return None
 
     @property
diff --git a/pykat/finesse.py b/pykat/finesse.py
index 96d7af9..b8c1aee 100644
--- a/pykat/finesse.py
+++ b/pykat/finesse.py
@@ -46,18 +46,20 @@ from pykat.node_network import NodeNetwork
 from pykat.detectors import BaseDetector as Detector
 from pykat.components import Component
 from pykat.commands import Command, xaxis
-from pykat.gui.gui import pyKatGUI
 from pykat.SIfloat import *
 from pykat.param import Param, AttrParam
 
 import pykat.exceptions as pkex
 
-from PyQt4.QtCore import QCoreApplication
-from PyQt4.QtGui import QApplication
+from pykat import USE_GUI, NoGUIException
+
+if USE_GUI:
+    from pykat.gui.gui import pyKatGUI
+    from PyQt4.QtCore import QCoreApplication
+    from PyQt4.QtGui import QApplication
 
 from multiprocessing import Process, Manager
 
-NO_GUI = False
 NO_BLOCK = "NO_BLOCK"
 pykat_web = "www.gwoptics.org/pykat"
 
@@ -1323,8 +1325,8 @@ class kat(object):
         return out
         
     def openGUI(self):
-        if NO_GUI:
-            print  "No PyQt4 module was installed so cannot open a GUI"
+        if not USE_GUI:
+            raise NoGUIException
         else:
             self.app = QCoreApplication.instance() 
             created = False
-- 
GitLab