Browse Source

Implement solver check

oscarleiva 5 years ago
parent
commit
391f8f8f32
3 changed files with 45 additions and 9 deletions
  1. 13 0
      common/exceptions.py
  2. 21 9
      main.py
  3. 11 0
      simsdt/utils/solver_checker.py

+ 13 - 0
common/exceptions.py

@@ -12,3 +12,16 @@ class ExcelFileError(Exception):
 
 
     def __str__(self):
     def __str__(self):
         return f'{self.file} -> {self.message}'
         return f'{self.file} -> {self.message}'
+
+
+class SolverNotFoundError(Exception):
+    """Exception raised if solver not found.
+
+    """
+
+    def __init__(self, message="No se encontró el solver en el PATH"):
+        self.message = message
+        super().__init__(self.message)
+
+    def __str__(self):
+        return self.message

+ 21 - 9
main.py

@@ -15,6 +15,7 @@ from common import log
 from qhandler import QueueHandler
 from qhandler import QueueHandler
 from simsdt import runsdt
 from simsdt import runsdt
 from simsdt.utils.excel_checker import check_excel_file
 from simsdt.utils.excel_checker import check_excel_file
+from simsdt.utils.solver_checker import check_solver
 
 
 main_logger = logging.getLogger("simsdt.gui")
 main_logger = logging.getLogger("simsdt.gui")
 
 
@@ -147,17 +148,26 @@ class FormUi:
             self.file_path.set(file)
             self.file_path.set(file)
 
 
     def run(self):
     def run(self):
-        if not self.file_path.get():
-            main_logger.error('Debe seleccionar un archivo para ejecutarlo')
-            return
+        try:
+
+            if not self.file_path.get():
+                main_logger.error(
+                    'Debe seleccionar un archivo para ejecutarlo')
+                return
+
+            check_solver()
 
 
-        self.button_run.configure(state='disabled')
-        main_logger.info('Ejecutando')
+            self.button_run.configure(state='disabled')
+            main_logger.info('Ejecutando')
 
 
-        self.runsdt_thread = RunsdtThread(args=(self.file_path.get()))
-        self.runsdt_thread.start()
+            self.runsdt_thread = RunsdtThread(args=(self.file_path.get()))
+            self.runsdt_thread.start()
 
 
-        self.check_thread()
+            self.check_thread()
+
+        except Exception as e:
+            main_logger.error(e)
+            return
 
 
     def check_thread(self):
     def check_thread(self):
 
 
@@ -222,7 +232,9 @@ class App:
         vertical_pane.grid(row=0, column=0, sticky="nsew", padx=10, pady=10)
         vertical_pane.grid(row=0, column=0, sticky="nsew", padx=10, pady=10)
 
 
         main_title = ttk.Label(
         main_title = ttk.Label(
-            vertical_pane, text='Simulación de Subastas de Derechos de Transmisión', font=('', '20', 'bold'))
+            vertical_pane,
+            text='Simulación de Subastas de Derechos de Transmisión',
+            font=('', '20', 'bold'), padding=(0, 5))
         vertical_pane.add(main_title, weight=0)
         vertical_pane.add(main_title, weight=0)
 
 
         horizontal_pane = ttk.PanedWindow(vertical_pane, orient=HORIZONTAL)
         horizontal_pane = ttk.PanedWindow(vertical_pane, orient=HORIZONTAL)

+ 11 - 0
simsdt/utils/solver_checker.py

@@ -0,0 +1,11 @@
+import shutil
+
+from common.exceptions import SolverNotFoundError
+
+
+def check_solver():
+    # Check if solver 'ipopt' is on path
+    solver_path = shutil.which('ipopt')
+
+    if not solver_path:
+        raise SolverNotFoundError