Skip to content
This repository has been archived by the owner on Sep 20, 2024. It is now read-only.

WebserverModule: Removed interface of webserver module #2028

Merged
merged 4 commits into from
Sep 20, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 9 additions & 12 deletions openpype/modules/default_modules/avalon_apps/avalon_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,10 @@
import openpype
from openpype import resources
from openpype.modules import OpenPypeModule
from openpype_interfaces import (
ITrayModule,
IWebServerRoutes
)
from openpype_interfaces import ITrayModule


class AvalonModule(OpenPypeModule, ITrayModule, IWebServerRoutes):
class AvalonModule(OpenPypeModule, ITrayModule):
name = "avalon"

def initialize(self, modules_settings):
Expand Down Expand Up @@ -71,13 +68,6 @@ def tray_init(self):
exc_info=True
)

def webserver_initialization(self, server_manager):
"""Implementation of IWebServerRoutes interface."""

if self.tray_initialized:
from .rest_api import AvalonRestApiResource
self.rest_api_obj = AvalonRestApiResource(self, server_manager)

# Definition of Tray menu
def tray_menu(self, tray_menu):
from Qt import QtWidgets
Expand Down Expand Up @@ -105,3 +95,10 @@ def show_library_loader(self):
# for Windows
self.libraryloader.activateWindow()
self.libraryloader.refresh()

# Webserver module implementation
def webserver_initialization(self, server_manager):
"""Add routes for webserver."""
if self.tray_initialized:
from .rest_api import AvalonRestApiResource
self.rest_api_obj = AvalonRestApiResource(self, server_manager)
22 changes: 10 additions & 12 deletions openpype/modules/default_modules/muster/muster.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,10 @@
import appdirs
import requests
from openpype.modules import OpenPypeModule
from openpype_interfaces import (
ITrayModule,
IWebServerRoutes
)
from openpype_interfaces import ITrayModule


class MusterModule(OpenPypeModule, ITrayModule, IWebServerRoutes):
class MusterModule(OpenPypeModule, ITrayModule):
"""
Module handling Muster Render credentials. This will display dialog
asking for user credentials for Muster if not already specified.
Expand Down Expand Up @@ -73,13 +70,6 @@ def tray_menu(self, parent):

parent.addMenu(menu)

def webserver_initialization(self, server_manager):
"""Implementation of IWebServerRoutes interface."""
if self.tray_initialized:
from .rest_api import MusterModuleRestApi

self.rest_api_obj = MusterModuleRestApi(self, server_manager)

def load_credentials(self):
"""
Get credentials from JSON file
Expand Down Expand Up @@ -139,6 +129,14 @@ def show_login(self):
if self.widget_login:
self.widget_login.show()

# Webserver module implementation
def webserver_initialization(self, server_manager):
"""Add routes for Muster login."""
if self.tray_initialized:
from .rest_api import MusterModuleRestApi

self.rest_api_obj = MusterModuleRestApi(self, server_manager)

def _requests_post(self, *args, **kwargs):
""" Wrapper for requests, disabling SSL certificate validation if
DONT_VERIFY_SSL environment variable is found. This is useful when
Expand Down
23 changes: 11 additions & 12 deletions openpype/modules/default_modules/timers_manager/timers_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,12 @@
from openpype_interfaces import (
ITimersManager,
ITrayService,
IIdleManager,
IWebServerRoutes
IIdleManager
)
from avalon.api import AvalonMongoDB


class TimersManager(
OpenPypeModule, ITrayService, IIdleManager, IWebServerRoutes
):
class TimersManager(OpenPypeModule, ITrayService, IIdleManager):
""" Handles about Timers.

Should be able to start/stop all timers at once.
Expand Down Expand Up @@ -58,13 +55,6 @@ def tray_exit(self):
"""Nothing special for TimersManager."""
return

def webserver_initialization(self, server_manager):
"""Implementation of IWebServerRoutes interface."""
if self.tray_initialized:
from .rest_api import TimersManagerModuleRestApi
self.rest_api_obj = TimersManagerModuleRestApi(self,
server_manager)

def start_timer(self, project_name, asset_name, task_name, hierarchy):
"""
Start timer for 'project_name', 'asset_name' and 'task_name'
Expand Down Expand Up @@ -205,6 +195,15 @@ def show_message(self):
if self.widget_user_idle.bool_is_showed is False:
self.widget_user_idle.show()

# Webserver module implementation
def webserver_initialization(self, server_manager):
"""Add routes for timers to be able start/stop with rest api."""
if self.tray_initialized:
from .rest_api import TimersManagerModuleRestApi
self.rest_api_obj = TimersManagerModuleRestApi(
self, server_manager
)

def change_timer_from_host(self, project_name, asset_name, task_name):
"""Prepared method for calling change timers on REST api"""
webserver_url = os.environ.get("OPENPYPE_WEBSERVER_URL")
Expand Down
9 changes: 0 additions & 9 deletions openpype/modules/default_modules/webserver/interfaces.py

This file was deleted.

36 changes: 31 additions & 5 deletions openpype/modules/default_modules/webserver/webserver_module.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,31 @@
"""WebServerModule spawns aiohttp server in asyncio loop.

Main usage of the module is in OpenPype tray where make sense to add ability
of other modules to add theirs routes. Module which would want use that
option must have implemented method `webserver_initialization` which must
expect `WebServerManager` object where is possible to add routes or paths
with handlers.

WebServerManager is by default created only in tray.

It is possible to create server manager without using module logic at all
using `create_new_server_manager`. That can be handy for standalone scripts
with predefined host and port and separated routes and logic.

Running multiple servers in one process is not recommended and probably won't
work as expected. It is because of few limitations connected to asyncio module.

When module's `create_server_manager` is called it is also set environment
variable "OPENPYPE_WEBSERVER_URL". Which should lead to root access point
of server.
"""

import os
import socket

from openpype import resources
from openpype.modules import OpenPypeModule
from openpype_interfaces import (
ITrayService,
IWebServerRoutes
)
from openpype_interfaces import ITrayService


class WebServerModule(OpenPypeModule, ITrayService):
Expand All @@ -28,8 +47,15 @@ def connect_with_modules(self, enabled_modules):
return

for module in enabled_modules:
if isinstance(module, IWebServerRoutes):
if not hasattr(module, "webserver_initialization"):
continue

try:
module.webserver_initialization(self.server_manager)
except Exception:
self.log.warning((
"Failed to connect module \"{}\" to webserver."
).format(module.name))

def tray_init(self):
self.create_server_manager()
Expand Down