-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathPyWizard.py
More file actions
172 lines (145 loc) · 6.23 KB
/
PyWizard.py
File metadata and controls
172 lines (145 loc) · 6.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# coding: utf-8
# Author: Leo BRUNEL
# Contact: contact@leobrunel.com
# This file is part of Wizard
# MIT License
# Copyright (c) 2021 Leo brunel
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
"""
PyWizard Application Module
This module defines the main application logic for PyWizard, a software tool designed to manage
projects, users, and tasks in a collaborative environment. It includes the initialization of
various components such as servers, user settings, project settings, and an interactive console.
Classes:
app: Represents the main application logic for PyWizard, managing initialization,
server setup, and graceful shutdown.
Usage:
Run this module as the main script to start the PyWizard application.
"""
# Python modules
import OpenEXR
import sys
import os
import traceback
import code
from PyQt6 import QtWidgets
import logging
# Wizard modules
from wizard.core import application
from wizard.core import user
from wizard.core import project
from wizard.core import repository
from wizard.core import tools
from wizard.core import create_project
from wizard.core import communicate
from wizard.core import environment
from wizard.core import launch
from wizard.core import launch_batch
from wizard.core import db_core
from wizard.core import subtasks_library
from wizard.core import subtask
from wizard.core import hooks
from wizard.core import custom_logger
# Wizard gui modules
from wizard.gui import app_utils
from wizard.gui import gui_server
custom_logger.get_root_logger()
logger = logging.getLogger(__name__)
# Append current dir to sys.path
sys.path.append(os.path.abspath(''))
class app():
"""
A class representing the main application logic for PyWizard.
This class initializes and manages various components of the application,
including servers, user settings, project settings, and interactive console.
It also handles the proper shutdown of all components when the application quits.
Attributes:
stats_schedule: An object for managing application statistics scheduling.
softwares_server: A server object for managing software-related tasks.
communicate_server: A server object for handling communication tasks.
tasks_server: A server object for managing subtasks.
Methods:
__init__():
Initializes the application, sets up servers, and starts an interactive console.
quit():
Stops all running servers and gracefully exits the application.
"""
def __init__(self):
"""
Initializes the PyWizard application.
This constructor sets up the necessary components and servers required for the application to function.
It performs the following tasks:
- Logs application information.
- Retrieves the application instance.
- Configures the PyWizard environment.
- Initializes PostgreSQL DNS, repository, user, project, and OCIO settings.
- Sets up the statistics scheduler.
- Starts the communication server for inter-process communication.
- Launches the software server for managing software-related tasks.
- Starts the tasks server for handling subtasks.
- Opens an interactive Python console for debugging or interaction.
- Ensures proper cleanup and exit when the console is closed.
"""
self.stats_schedule = None
self.softwares_server = None
self.communicate_server = None
self.tasks_server = None
application.log_app_infos()
self.app = app_utils.get_app()
app_utils.set_pywizard()
app_utils.init_psql_dns(self)
app_utils.init_repository(self)
app_utils.init_user(self)
app_utils.init_project(self)
app_utils.init_OCIO()
self.stats_schedule = app_utils.init_stats()
self.communicate_server = communicate.communicate_server()
self.communicate_server.start()
self.softwares_server = launch.softwares_server()
self.softwares_server.start()
self.tasks_server = subtask.tasks_server()
self.tasks_server.start()
console = code.InteractiveConsole()
console.interact(banner=None, exitmsg=None)
self.quit()
def quit(self):
"""
Gracefully shuts down the application by stopping all active servers and schedules,
and then exits the application.
This method performs the following steps:
1. Stops the `stats_schedule` if it is running.
2. Stops the `softwares_server` if it is running.
3. Stops the `communicate_server` if it is running.
4. Stops the `tasks_server` if it is running.
5. Quits the Qt application.
6. Exits the Python interpreter.
Note:
Ensure that all servers and schedules are properly initialized before calling
this method to avoid potential errors during shutdown.
"""
if self.stats_schedule:
self.stats_schedule.stop()
if self.softwares_server:
self.softwares_server.stop()
if self.communicate_server:
self.communicate_server.stop()
if self.tasks_server:
self.tasks_server.stop()
QtWidgets.QApplication.quit()
sys.exit()
if __name__ == '__main__':
_app = app()