Linker - Links Multiple Products

This user interface has been created to facilitate the Linking of two products so that they may share common data. 

The intention of this was to simplify an otherwise tedious manual procedure where there was lots of scope for user error.

 

Introduction

I started this project to simplify a workflow that "linked" several different applications together. The workflow in place was meant to be a simplification and improvement on existing practices. This tool removes much of the manual user interaction required for the users to complete the workflow. 

The Brief

  • Connect to multiple PostgreSQL databases running on the same host
  • Retrieve and Analyse existing XML structures from application suites
  • Updating XML parameters to reflect user options
  • Update database tables - providing a common GIS database between applications
  • Process control
    • Reporting process status
    • Running forked processes
    • Running processes in a thread
  • The ability to unlink the products should be available as well
  • The tool should be able to run in all appropriate environments, including cloud-hosted SaaS platform

The Input parameters

  • Orca System
    • Survey Progress XML
    • Survey Parameters
    • Preplots
  • PandA application
    • Survey Parameters
    • Preplots
  • Marlin System
    • Survey Parameters
    • Preplots

The Requirements

  • I need to be able to link an Orca survey to a PandA project and survey so that PandA generated coverage can be shared with Orca and Marlin
  • I need to be able to unlink Orca and PandA, leaving the applications in their original state
  • I need to be able to configure the process options for use in Orca Survey Progress
  • I need to be able to reconfigure the process options for use in Orca Survey Progress
  • I need to be able to start and stop the various applications involved with Standalone Orca
  • I need to be able to check the status of background processes and be able to stop and start those processes
  • I need to be able to launch Orca Web on the standalone system easily

The Implementation

This project has been implemented using Python3 and more specifically PyQt5.  

Because there are potentially multiple QT environments on the system I have created a Python virtual env and installed the modules as required into this virtual environment. I have used the lxml module to parse and update XML files when required. 

I have used a Python package (QDarkStyle) to help with the styling to give the application a dark style and I have used some opensource icons to help improve the user experience. Once the main application is loaded, the views are updated based on the system state and user selection. Each view has its own class, I would consider this as the controller for the view. this simplifies the application significantly as this class controller is then responsible for its own actions.

When the application starts up, on initialisation a dictionary stores the application settings, this includes the version, and the locations on the file system to find certain files etc. This settings object is passed to other classes that are defined so they all have access to a common set of parameters.

Once launched the application checks to see if there is a configuration file present for the current environment, if there is then it presents a view that tells the user that the system is already linked, if there is no entry in the configuration then the user is presented with an initial view where they can choose which Orca Survey and which PandA project to link with.

Once linked there are some process control buttons, the signals from these buttons have been connected to corresponding actions, I have used a QProcess instance for running these processes which are wrapped in a task controller module. The task controller can be imported by any of the other modules and provides a simple way to launch a system command to retrieve data.

In Summary

The application has been created within a short time frame and has been delivered to users after some local testing. The feedback has been very positive so far and I believe this has simplified an otherwise complex configuration process.

  • Python 3
    • PyQT5
    • Pyinstaller
  • XML Parsing, and writing
  • PostgreSQL interface
  • Debugging


 Linker Survey Progress

 Linker Survey Progress

 Linker Survey Progress

 Linker Survey Progress

 Linker Survey Progress

 Linker Survey Progress