Utils.py

#

Jade Application Kit

  • https://codesardine.github.io/Jade-Application-Kit
  • Vitor Lopes Copyright (c) 2016 - 2019
  • https://vitorlopes.me
import os
register = {}
#

:Imports: from JAK.Utils import Instance

Add object instances in a dictionary, it can be used to point to references we don,t want to be garbage collected, for usage later

class Instance:
#
#
  • :Usage: Instance.get_instances()
    @staticmethod
    def get_instances() -> dict:
#
        return register
#
  • :Usage: Instance.record(“name”, object)
  • Should only be used once per instance
    @staticmethod
    def record(name: str, _type: object) -> None:
#
        register[name] = _type
        print(f"Registering ['{name}'] Instance")
#
  • :Usage: Instance.retrieve(“name”)
    @staticmethod
    def retrieve(name: str) -> object or str:
#
        try:
            return register[name]
        except KeyError:
            print(f"Instance: ['{name}'] Not Present, to add it use -> Instance.record(['{name}', object])")
            return ""
#
  • :Usage: Instance.auto(“name”, object)
  • Automatically detects if an instance is active with that name and retrieves it. If not present, creates it creates a new one and retrieves it.
  • Should only be used once per instance
    @staticmethod
    def auto(name: str, _type: object) -> object:
#
        try:
            return register[name]
        except KeyError:
            register[name] = _type
        finally:
            print(f"Registering and Retrieving ['{name}'] Instance")
            return register[name]
#
  • Run javascript in the webview after load is complete Injects will be logged in the inspector
  • :Imports: from Jak.Utils import JavaScript
  • :Usage: JavaScript.log(webview:instance, msg)
class JavaScript:
#
#
  • Outputs console.log() messages in the inspector
  • :param webview: QWebengineView instance
  • :param message: Log message
    @staticmethod
    def log(webview, message: str) -> None:
#
        JavaScript.send(webview, f"console.log('JAK log:{message}');")
#
  • Insert custom styles
  • :param webview: QWebengineView instance
  • :param styles: CSS -> a { color: red; }
    @staticmethod
    def css(webview, styles: str) -> None:
#
        javascript = f"""
             var style = document.createElement('style');
             style.type = 'text/css';
             style.classList.add('jak-custom-style');
             style.innerHTML = "{JavaScript.detect_type(styles)}";
             document.getElementsByTagName('head')[0].appendChild(style);
        """
        JavaScript.send(webview, javascript)
        JavaScript.log(webview, f"JAK Custom Styles Applied:[{styles}]")
#
  • Triggers an alert message
  • :param webview: QWebengineView instance
  • :param message: your popcorn is ready enjoy
    @staticmethod
    def alert(webview, message: str) -> None:
#
        JavaScript.send(webview, f"alert('{message}');")
        JavaScript.log(webview, f"JAK Alert:[{message}]")
#
  • Send custom JavaScript
  • :param self: QWebengineView instance
    def send(self, javascript: str) -> None:
#
        self.page().runJavaScript(f"{JavaScript.detect_type(javascript)}")
#
  • Detect if is file or string, convert to string
  • :param inbound: file or string
    @staticmethod
    def detect_type(inbound) -> str:
#
        if os.path.exists(inbound) and os.path.isfile(inbound):
            try:
                with open(inbound, "r") as file:
                    string = file.read()
                    return string
            except IOError:
                return False
            return True
        elif isinstance(inbound, str):
            return inbound

        else:
            print("JavaScript.send() error, file path or string.")