コード例 #1
0
ファイル: pluginscli.py プロジェクト: Unmanic/unmanic
    def reload_plugin_from_disk(self):
        # Fetch list of installed plugins
        plugins = PluginsHandler()
        order = [{
            "column": 'name',
            "dir": 'asc',
        }]
        plugin_results = plugins.get_plugin_list_filtered_and_sorted(
            order=order, start=0, length=None)

        # Build choice selection list from installed plugins
        for plugin in plugin_results:
            plugin_path = os.path.join(self.plugins_directory,
                                       plugin.get('plugin_id'))
            # Read plugin info.json
            info_file = os.path.join(plugin_path, 'info.json')
            with open(info_file) as json_file:
                plugin_info = json.load(json_file)

            # Insert plugin details to DB
            try:
                PluginsHandler.write_plugin_data_to_db(plugin_info,
                                                       plugin_path)
            except Exception as e:
                print("Exception while saving plugin info to DB. - {}".format(
                    str(e)))
                return

            install_plugin_requirements(plugin_path)
        print()
        print()
コード例 #2
0
ファイル: pluginscli.py プロジェクト: luis4ndre/unmanic
 def list_installed_plugins():
     plugins = PluginsHandler()
     order = {
         "column": 'position',
         "dir":    'desc',
     }
     plugin_results = plugins.get_plugin_list_filtered_and_sorted(order=order, start=0, length=None)
     print_table(plugin_results)
     print()
コード例 #3
0
ファイル: executor.py プロジェクト: luis4ndre/unmanic
    def __get_enabled_plugins(self):
        """
        Returns a list of enabled plugins

        :return:
        """
        from unmanic.libs.plugins import PluginsHandler
        plugin_handler = PluginsHandler()
        return plugin_handler.get_plugin_list_filtered_and_sorted(
            order=self.plugin_sort_order, enabled=True)
コード例 #4
0
    def __get_plugin_info_and_settings(self, plugin_id):
        plugins = PluginsHandler()

        plugin_installed = True
        plugin_results = plugins.get_plugin_list_filtered_and_sorted(
            plugin_id=plugin_id)
        if not plugin_results:
            # This plugin is not installed
            plugin_installed = False

            # Try to fetch it from the repository
            plugin_list = plugins.get_installable_plugins_list()
            for plugin in plugin_list:
                if plugin.get('id') == plugin_id:
                    # Create changelog text from remote changelog text file
                    plugin['changelog'] = plugins.read_remote_changelog_file(
                        plugin.get('changelog_url'))
                    # Create list as the 'plugin_results' var above will also have returned a list if any results were found.
                    plugin_results = [plugin]
                    break

        # Iterate over plugins and append them to the plugin data
        plugin_data = {}
        for plugin_result in plugin_results:
            # Set params as required in template
            plugin_data = {
                'id': plugin_result.get('id'),
                'plugin_id': plugin_result.get('plugin_id'),
                'icon': plugin_result.get('icon'),
                'name': plugin_result.get('name'),
                'description': plugin_result.get('description'),
                'tags': plugin_result.get('tags'),
                'author': plugin_result.get('author'),
                'version': plugin_result.get('version'),
                'changelog': plugin_result.get('changelog', ''),
                'settings': [],
            }
            if plugin_installed:
                plugin_data['settings'] = self.__get_plugin_settings(
                    plugin_result.get('plugin_id'))
                plugin_data['changelog'] = "".join(
                    self.__get_plugin_changelog(
                        plugin_result.get('plugin_id')))
                plugin_data['description'] += "\n" + "".join(
                    self.__get_plugin_long_description(
                        plugin_result.get('plugin_id')))
            break

        return plugin_data
コード例 #5
0
ファイル: pluginscli.py プロジェクト: luis4ndre/unmanic
    def test_installed_plugins():
        """
        Test all plugin runners for correct return data

        :return:
        """
        plugin_executor = PluginExecutor()

        plugins = PluginsHandler()
        order = {
            "column": 'position',
            "dir":    'desc',
        }
        plugin_results = plugins.get_plugin_list_filtered_and_sorted(order=order, start=0, length=None)
        for plugin_result in plugin_results:
            # plugin_runners = plugin_executor.get_plugin_runners('worker.process_item')
            print("{1}Testing plugin: '{0}'{2}".format(plugin_result.get("name"), BColours.HEADER, BColours.ENDC))
            plugin_id = plugin_result.get("plugin_id")

            # Test Plugin runners
            print("  {0}Testing runners{1}".format(BColours.SUBHEADER, BColours.ENDC))
            plugin_types_in_plugin = plugin_executor.get_all_plugin_types_in_plugin(plugin_id)
            if not plugin_types_in_plugin:
                error = "No runners found in plugin"
                print("    - {1}FAILED: {0}{2}".format(error, BColours.FAIL, BColours.ENDC))
            else:
                for plugin_type_in_plugin in plugin_types_in_plugin:
                    errors = plugin_executor.test_plugin_runner(plugin_id, plugin_type_in_plugin)
                    if errors:
                        for error in errors:
                            print("    - {1}FAILED: {0}{2}".format(error, BColours.FAIL, BColours.ENDC))
                    else:
                        print("    - {}PASSED{}".format(BColours.OKGREEN, BColours.ENDC))

            # Test Plugin settings
            print("  {0}Testing settings{1}".format(BColours.SUBHEADER, BColours.ENDC))
            errors, plugin_settings = plugin_executor.test_plugin_settings(plugin_id)
            if errors:
                for error in errors:
                    print("    - {1}FAILED: {0}{2}".format(error, BColours.FAIL, BColours.ENDC))
            else:
                formatted_plugin_settings = json.dumps(plugin_settings, indent=1)
                formatted_plugin_settings = formatted_plugin_settings.replace('\n', '\n' + '                    ')
                print("        - {1}Settings: {0}{2}".format(formatted_plugin_settings, BColours.RESULTS, BColours.ENDC))
                print("    - {}PASSED{}".format(BColours.OKGREEN, BColours.ENDC))
            print()
コード例 #6
0
ファイル: plugins.py プロジェクト: pianomanx/unmanic
def check_if_plugin_is_installed(plugin_id):
    """
    Returns true if the given plugin is installed

    :param plugin_id:
    :return:
    """
    plugins_handler = PluginsHandler()

    plugin_installed = True
    plugin_results = plugins_handler.get_plugin_list_filtered_and_sorted(
        plugin_id=plugin_id)

    if not plugin_results:
        # This plugin is not installed
        plugin_installed = False

    return plugin_installed
コード例 #7
0
ファイル: plugins_api.py プロジェクト: luis4ndre/unmanic
    def __get_plugin_info_and_settings(self, plugin_id):
        plugins = PluginsHandler()

        plugin_installed = True
        plugin_results = plugins.get_plugin_list_filtered_and_sorted(
            plugin_id=plugin_id)
        if not plugin_results:
            # This plugin is not installed
            plugin_installed = False

            # Try to fetch it from the repository
            plugin_list = plugins.get_installable_plugins_list()
            for plugin in plugin_list:
                if plugin.get('id') == plugin_id:
                    plugin_results = [plugin]
                    break

        # Iterate over plugins and append them to the plugin data
        plugin_data = {}
        for plugin_result in plugin_results:
            # Set params as required in template
            plugin_data = {
                'id': plugin_result.get('id'),
                'plugin_id': plugin_result.get('plugin_id'),
                'icon': plugin_result.get('icon'),
                'name': plugin_result.get('name'),
                'description': plugin_result.get('description'),
                'tags': plugin_result.get('tags'),
                'author': plugin_result.get('author'),
                'version': plugin_result.get('version'),
                'settings': [],
            }
            if plugin_installed:
                plugin_data['settings'] = self.__get_plugin_settings(
                    plugin_result.get('plugin_id'))
                plugin_data['changelog'] = "".join(
                    self.__get_plugin_changelog(
                        plugin_result.get('plugin_id')))
            break

        return plugin_data
コード例 #8
0
ファイル: executor.py プロジェクト: Unmanic/unmanic
    def __get_enabled_plugins(self, plugin_type=None):
        """
        Returns a list of enabled plugins

        :return:
        """
        from unmanic.libs.plugins import PluginsHandler
        plugin_handler = PluginsHandler()
        order = [
            {
                "model": PluginFlow,
                "column": 'position',
                "dir": 'asc',
            },
            {
                "column": 'name',
                "dir": 'asc',
            },
        ]
        return plugin_handler.get_plugin_list_filtered_and_sorted(
            order=order, enabled=True, plugin_type=plugin_type)
コード例 #9
0
ファイル: pluginscli.py プロジェクト: Unmanic/unmanic
    def remove_plugin():
        # Fetch list of installed plugins
        plugins = PluginsHandler()
        order = [{
            "column": 'name',
            "dir": 'asc',
        }]
        plugin_results = plugins.get_plugin_list_filtered_and_sorted(
            order=order, start=0, length=None)

        # Build choice selection list from installed plugins
        table_ids = {}
        choices = []
        for plugin in plugin_results:
            choices.append(plugin.get('plugin_id'))
            table_ids[plugin.get('plugin_id')] = plugin.get('id')
        # Append a "return" option
        choices.append('Return')

        # Generate menu menu
        remove_plugin_inquirer = inquirer.List(
            'cli_action',
            message="Which Plugin would you like to remove?",
            choices=choices,
        )

        # Prompt for selection of Plugin by ID
        selection = inquirer.prompt([remove_plugin_inquirer])

        # If the 'Return' option was given, just return to previous menu
        if selection.get('cli_action') == "Return":
            return

        # Remove the selected Plugin by ID
        plugin_table_id = table_ids[selection.get('cli_action')]
        plugins.uninstall_plugins_by_db_table_id([plugin_table_id])
        print()
コード例 #10
0
ファイル: plugins_api.py プロジェクト: pianomanx/unmanic
    def prepare_filtered_plugins(self, request_dict):
        """
        Returns a object of records filtered and sorted
        according to the provided request.

        :param request_dict:
        :return:
        """

        # Generate filters for query
        start = request_dict.get('start')
        length = request_dict.get('length')

        search = request_dict.get('search')
        search_value = search.get("value")

        # Force sort order always by ID desc
        order = [{
            "column": 'name',
            "dir": 'asc',
        }]

        # Fetch Plugins
        plugins = PluginsHandler()
        # Get total count
        records_total_count = plugins.get_total_plugin_list_count()
        # Get quantity after filters (without pagination)
        records_filtered_count = plugins.get_plugin_list_filtered_and_sorted(
            order=order, start=0, length=0, search_value=search_value).count()
        # Get filtered/sorted results
        plugin_results = plugins.get_plugin_list_filtered_and_sorted(
            order=order, start=start, length=length, search_value=search_value)

        # Build return data
        return_data = {
            "draw": request_dict.get('draw'),
            "recordsTotal": records_total_count,
            "recordsFiltered": records_filtered_count,
            "successCount": 0,
            "failedCount": 0,
            "data": []
        }

        # Iterate over plugins and append them to the plugin data
        for plugin_result in plugin_results:
            # Set plugin status
            plugin_status = {
                "enabled": plugin_result.get('enabled'),
                "update_available": plugin_result.get('update_available'),
            }
            # Set params as required in template
            item = {
                'id': plugin_result.get('id'),
                'plugin_id': plugin_result.get('plugin_id'),
                'icon': plugin_result.get('icon'),
                'name': plugin_result.get('name'),
                'description': plugin_result.get('description'),
                'tags': plugin_result.get('tags'),
                'author': plugin_result.get('author'),
                'version': plugin_result.get('version'),
                'status': plugin_status,
                'selected': False,
            }
            return_data["data"].append(item)

        # Return results
        return return_data
コード例 #11
0
ファイル: plugins.py プロジェクト: pianomanx/unmanic
def prepare_filtered_plugins(params):
    """
    Returns a object of records filtered and sorted
    according to the provided request.

    :param params:
    :return:
    """
    start = params.get('start', 0)
    length = params.get('length', 0)

    search_value = params.get('search_value', '')

    # Note that plugins can be ordered in multiple ways. So this must be a list
    order = [params.get('order', {
        "column": 'name',
        "dir": 'desc',
    })]

    # Fetch Plugins
    plugins = PluginsHandler()
    plugin_executor = PluginExecutor()
    # Get total count
    records_total_count = plugins.get_total_plugin_list_count()
    # Get quantity after filters (without pagination)
    records_filtered_count = plugins.get_plugin_list_filtered_and_sorted(
        order=order, start=0, length=0, search_value=search_value).count()
    # Get filtered/sorted results
    plugin_results = plugins.get_plugin_list_filtered_and_sorted(
        order=order, start=start, length=length, search_value=search_value)

    # Build return data
    return_data = {
        "recordsTotal": records_total_count,
        "recordsFiltered": records_filtered_count,
        "results": []
    }

    # Iterate over plugins and append them to the plugin data
    for plugin_result in plugin_results:
        # Set plugin status
        plugin_status = {
            "update_available": plugin_result.get('update_available'),
        }
        # Check if plugin is able to be configured
        has_config = False
        plugin_settings, plugin_settings_meta = plugin_executor.get_plugin_settings(
            plugin_result.get('plugin_id'))
        if plugin_settings:
            has_config = True
        # Set params as required in template
        item = {
            'id': plugin_result.get('id'),
            'plugin_id': plugin_result.get('plugin_id'),
            'icon': plugin_result.get('icon'),
            'name': plugin_result.get('name'),
            'description': plugin_result.get('description'),
            'tags': plugin_result.get('tags'),
            'author': plugin_result.get('author'),
            'version': plugin_result.get('version'),
            'status': plugin_status,
            'has_config': has_config,
        }
        return_data["results"].append(item)

    # Return results
    return return_data
コード例 #12
0
ファイル: plugins.py プロジェクト: pianomanx/unmanic
def prepare_plugin_info_and_settings(plugin_id,
                                     prefer_local=True,
                                     library_id=None):
    """
    Returns a object of plugin metadata and current settings for the requested plugin_id

    :param prefer_local:
    :param plugin_id:
    :param library_id:
    :return:
    """
    plugins_handler = PluginsHandler()

    plugin_installed = True
    plugin_results = plugins_handler.get_plugin_list_filtered_and_sorted(
        plugin_id=plugin_id)

    if not plugin_results:
        # This plugin is not installed
        plugin_installed = False

    if not plugin_results or not prefer_local:
        # Try to fetch it from the repository
        plugin_list = plugins_handler.get_installable_plugins_list()
        for plugin in plugin_list:
            if plugin.get('plugin_id') == plugin_id:
                # Create changelog text from remote changelog text file
                plugin[
                    'changelog'] = plugins_handler.read_remote_changelog_file(
                        plugin.get('changelog_url'))
                # Create list as the 'plugin_results' var above will also have returned a list if any results were found.
                plugin_results = [plugin]
                break

    # Iterate over plugins and append them to the plugin data
    plugin_data = {}
    for plugin_result in plugin_results:
        # Set plugin status
        plugin_status = {
            "installed": plugin_result.get('installed', False),
            "update_available": plugin_result.get('update_available', False),
        }
        # Set params as required in template
        plugin_data = {
            'id': plugin_result.get('id'),
            'plugin_id': plugin_result.get('plugin_id'),
            'icon': plugin_result.get('icon'),
            'name': plugin_result.get('name'),
            'description': plugin_result.get('description'),
            'tags': plugin_result.get('tags'),
            'author': plugin_result.get('author'),
            'version': plugin_result.get('version'),
            'changelog': plugin_result.get('changelog', ''),
            'status': plugin_status,
            'settings': [],
        }
        if plugin_installed:
            plugin_data['settings'] = get_plugin_settings(
                plugin_result.get('plugin_id'), library_id=library_id)
            plugin_data['changelog'] = "".join(
                get_plugin_changelog(plugin_result.get('plugin_id')))
            plugin_data['description'] += "\n" + "".join(
                get_plugin_long_description(plugin_result.get('plugin_id')))
        break

    return plugin_data