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

Commit

Permalink
Merge pull request #2028 from pypeclub/feature/webserver_without_inte…
Browse files Browse the repository at this point in the history
…rface

WebserverModule: Removed interface of webserver module
  • Loading branch information
iLLiCiTiT authored Sep 20, 2021
2 parents 7f84cb3 + dc8cd3e commit e308227
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 50 deletions.
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

0 comments on commit e308227

Please sign in to comment.