6
0
Эх сурвалжийг харах

Merge branch '4-test-environment' into 'master'

Resolve "test environment"

Closes #4

See merge request troebs/pycs!6
Eric Tröbs 4 жил өмнө
parent
commit
7cc6e03b06
3 өөрчлөгдсөн 53 нэмэгдсэн , 33 устгасан
  1. 3 0
      main.py
  2. 12 11
      pycs/project/project.py
  3. 38 22
      pycs/ui/MainWindow.py

+ 3 - 0
main.py

@@ -12,6 +12,9 @@ def main(args):
     window = MainWindow()
     window.show()
 
+    if len(args) > 1:
+        window.project_open(args[1])
+
     retval = app.exec_()
     return retval
 

+ 12 - 11
pycs/project/project.py

@@ -11,23 +11,24 @@ from ..utils import Video
 
 
 class Project(Errorable):
-    def __init__(self, project_root, config=None):
+    def __init__(self, project_file, config=None):
         Errorable.__init__(self)
         self._update_ui_fn = lambda: None
 
         new = config is not None
 
         # (1) Check if directory exists
-        self.root = project_root
+        self.__project_file = project_file
+        self.__project_path, self.__project_filename = os.path.split(project_file)
 
-        if not os.path.exists(self.root) and not new:
-            self._report_error("Cannot open directory: %s" % self.root)
+        if not os.path.exists(self.__project_path) and not new:
+            self._report_error("Cannot open directory: %s" % self.__project_path)
             return
-        elif not os.path.exists(self.root) and new:
+        elif not os.path.exists(self.__project_path) and new:
             try:
-                os.mkdir(self.root)
+                os.mkdir(self.__project_path)
             except:
-                self._report_error("Cannot create directory: %s" % self.root)
+                self._report_error("Cannot create directory: %s" % self.__project_path)
                 return
 
         # (2) Load project json
@@ -35,10 +36,10 @@ class Project(Errorable):
             self._config = config
         else:
             try:
-                with open(os.path.join(self.root, 'project.json'), 'r') as c:
+                with open(self.__project_file, 'r') as c:
                     self._config = json.load(c)
             except:
-                self._report_error("Cannot open configuration for project: %s" % self.root)
+                self._report_error("Cannot open configuration for project: %s" % self.__project_path)
                 return
 
         # (3) Load detection/extraction pipeline
@@ -49,10 +50,10 @@ class Project(Errorable):
 
     def save(self):
         try:
-            with open(os.path.join(self.root, 'project.json'), 'w') as c:
+            with open(self.__project_file, 'w') as c:
                 json.dump(self._config, c, indent=2)
         except:
-            self._report_error("Cannot save configuration for project: %s" % self.root)
+            self._report_error("Cannot save configuration for project: %s" % self.__project_path)
 
     def execute(self, jobs, callback=lambda progress: True):
         all_subjobs = []

+ 38 - 22
pycs/ui/MainWindow.py

@@ -1,5 +1,3 @@
-#!/usr/bin/env python
-
 import copy
 import json
 import os
@@ -46,16 +44,18 @@ class MainWindow:
 
     # Constructor
     def __init__(self, **kwargs):
+        # initialize window
         self.ui = QtWidgets.QMainWindow(**kwargs)
 
-        # Properties
+        # set object properties
         self.__project = None
         self.__predictions = []
 
-        # UI
+        # load ui from corresponding file
         spath = os.path.dirname(__file__)
         uic.loadUi(os.path.join(spath, 'MainWindow.ui'), self.ui)
 
+        # prepare some more ui stuff
         self.ui.statusLabel = QtWidgets.QLabel(self.ui)
         self.ui.statusBar.addPermanentWidget(self.ui.statusLabel)
 
@@ -65,10 +65,10 @@ class MainWindow:
         self.ui.timer.setInterval(2000)
         self.ui.timer.moveToThread(self.ui.timerThread)
 
-        # Actions
+        # connect actions
         # File
         self.ui.actionNew.triggered.connect(self._project_new)
-        self.ui.actionOpen.triggered.connect(self._project_open)
+        self.ui.actionOpen.triggered.connect(self.project_open)
         self.ui.actionClose.triggered.connect(self._project_try_closing)
         self.ui.actionSave.triggered.connect(self._project_save)
         self.ui.actionQuit.triggered.connect(self._file_quit)
@@ -159,23 +159,39 @@ class MainWindow:
             if w_retval:
                 self._project = Project(w.project_root, w.project_config)
 
-    def _project_open(self):
+    def project_open(self, path=None):
+        """
+        opens a project by either using the optional parameter path or
+        or the value the user enters using the ui file dialog
+
+        :param path: path to project.json
+        """
+
+        # check if there is an open project with unsaved changes
         retval = self._project_try_closing()
-        if retval:
-            selection = QtWidgets.QFileDialog.getExistingDirectory(self.ui, 'Select Project Folder')
-            if len(selection) > 0 and os.path.exists(os.path.join(selection, 'project.json')):
-                self._project = Project(selection)
-                if self._project.last_error is not None:
-                    error_string = self._project.last_error
-                    try:
-                        QtWidgets.QMessageBox.warning(self.ui, 'Error', 'Error while opening (see log for details): %s'
-                                                      % error_string)
-                        self._project.close()
-                    except:
-                        pass
-                    self._project = None
-            elif len(selection) > 0:  # Project file does not exist
-                QtWidgets.QMessageBox.warning(self.ui, 'Error', 'Could not find project file: %s' % os.path.join(selection, 'project.json'))
+        if not retval:
+            return
+
+        # copy path to selection or question user if not given
+        if path is not None and path != False:
+            selection = path
+        else:
+            selection, _ = QtWidgets.QFileDialog.getOpenFileName(self.ui, 'Select Project Folder', filter='project.json')
+
+        # check if path exists and open project
+        if len(selection) > 0 and os.path.exists(selection):
+            self._project = Project(selection)
+            if self._project.last_error is not None:
+                error_string = self._project.last_error
+                try:
+                    QtWidgets.QMessageBox.warning(self.ui, 'Error', 'Error while opening (see log for details): %s'
+                                                  % error_string)
+                    self._project.close()
+                except:
+                    pass
+                self._project = None
+        elif len(selection) > 0:  # Project file does not exist
+            QtWidgets.QMessageBox.warning(self.ui, 'Error', 'Could not find project file: %s' % selection)
 
     def _project_save(self):
         self._project.save()