converted user module

This commit is contained in:
iLLiCiTiT 2020-12-10 10:29:10 +01:00
parent cf0cb2a8ca
commit 1b2e8029c8
3 changed files with 69 additions and 31 deletions

View file

@ -4,6 +4,10 @@ from .rest_api import (
RestApiModule, RestApiModule,
IRestApi IRestApi
) )
from .user import (
UserModule,
IUserModule
)
from .idle_manager import ( from .idle_manager import (
IdleManager, IdleManager,
IIdleManager IIdleManager
@ -19,6 +23,9 @@ from .websocket_server import WebsocketModule
__all__ = ( __all__ = (
"PypeModule", "PypeModule",
"UserModule",
"IUserModule",
"IdleManager", "IdleManager",
"IIdleManager", "IIdleManager",

View file

@ -1,5 +1,10 @@
from .user_module import UserModule from .user_module import (
UserModule,
IUserModule
)
def tray_init(tray_widget, main_widget): __all__ = (
return UserModule(main_widget, tray_widget) "UserModule",
"IUserModule"
)

View file

@ -2,29 +2,46 @@ import os
import json import json
import getpass import getpass
from abc import ABCMeta, abstractmethod
import six
import appdirs import appdirs
from pype.api import Logger from .. import PypeModule, ITrayModule, IRestApi
class UserModule: @six.add_metaclass(ABCMeta)
class IUserModule:
"""Interface for other modules to use user change callbacks."""
@abstractmethod
def on_pype_user_change(self, username):
"""What should happen on Pype user change."""
pass
class UserModule(PypeModule, ITrayModule, IRestApi):
cred_folder_path = os.path.normpath( cred_folder_path = os.path.normpath(
appdirs.user_data_dir('pype-app', 'pype') appdirs.user_data_dir('pype-app', 'pype')
) )
cred_filename = 'user_info.json' cred_filename = 'user_info.json'
env_name = "PYPE_USERNAME" env_name = "PYPE_USERNAME"
log = Logger().get_logger("UserModule", "user") name = "User setting"
def __init__(self, main_parent=None, parent=None): def initialize(self, modules_settings):
self._callbacks_on_user_change = [] user_settings = modules_settings[self.name]
self.enabled = user_settings["enabled"]
self.callbacks_on_user_change = []
self.cred = {} self.cred = {}
self.cred_path = os.path.normpath(os.path.join( self.cred_path = os.path.normpath(os.path.join(
self.cred_folder_path, self.cred_filename self.cred_folder_path, self.cred_filename
)) ))
self.widget_login = None
self.tray_init(main_parent, parent) # Tray attributes
self.widget_login = None
self.action_show_widget = None
def tray_init(self, main_parent=None, parent=None): def tray_init(self, main_parent=None, parent=None):
from .widget_user import UserWidget from .widget_user import UserWidget
@ -33,7 +50,7 @@ class UserModule:
self.load_credentials() self.load_credentials()
def register_callback_on_user_change(self, callback): def register_callback_on_user_change(self, callback):
self._callbacks_on_user_change.append(callback) self.callbacks_on_user_change.append(callback)
def tray_start(self): def tray_start(self):
"""Store credentials to env and preset them to widget""" """Store credentials to env and preset them to widget"""
@ -44,29 +61,34 @@ class UserModule:
os.environ[self.env_name] = username os.environ[self.env_name] = username
self.widget_login.set_user(username) self.widget_login.set_user(username)
def tray_exit(self):
"""Nothing special for User."""
return
def get_user(self): def get_user(self):
return self.cred.get("username") or getpass.getuser() return self.cred.get("username") or getpass.getuser()
def process_modules(self, modules): def rest_api_initialization(self, rest_api_module):
""" Gives ability to connect with imported modules from TrayManager. def api_get_username():
return self.cred
:param modules: All imported modules from TrayManager rest_api_module.register_callback(
:type modules: dict "user/username", api_get_username, "get"
""" )
if "RestApiServer" in modules: def api_show_widget():
def api_get_username(): self.action_show_widget.trigger()
return self.cred
def api_show_widget(): rest_api_module.register_callback(
self.action_show_widget.trigger() "user/show_widget", api_show_widget, "post"
)
modules["RestApiServer"].register_callback( def connect_with_modules(self, enabled_modules):
"user/username", api_get_username, "get" for module in enabled_modules:
) if isinstance(module, IUserModule):
modules["RestApiServer"].register_callback( self.callbacks_on_user_change.append(
"user/show_widget", api_show_widget, "post" module.on_pype_user_change
) )
# Definition of Tray menu # Definition of Tray menu
def tray_menu(self, parent_menu): def tray_menu(self, parent_menu):
@ -108,12 +130,14 @@ class UserModule:
def change_credentials(self, username): def change_credentials(self, username):
self.save_credentials(username) self.save_credentials(username)
for callback in self._callbacks_on_user_change: for callback in self.callbacks_on_user_change:
try: try:
callback() callback(username)
except Exception: except Exception:
self.log.warning( self.log.warning(
"Failed to execute callback \"{}\".".format(str(callback)), "Failed to execute callback \"{}\".".format(
str(callback)
),
exc_info=True exc_info=True
) )
@ -135,7 +159,9 @@ class UserModule:
self.log.debug("Username \"{}\" stored".format(username)) self.log.debug("Username \"{}\" stored".format(username))
except Exception: except Exception:
self.log.error( self.log.error(
"Could not store username to file \"{}\"".format(self.cred_path), "Could not store username to file \"{}\"".format(
self.cred_path
),
exc_info=True exc_info=True
) )