def _populateMetaData(self, plugin_id: str) -> bool: plugin = self._findPlugin(plugin_id) if not plugin: Logger.log("e", "Could not find plugin %s", plugin_id) return False meta_data = None try: meta_data = plugin.getMetaData() except AttributeError as e: Logger.log( "e", "An error occurred getting metadata from plugin %s: %s", plugin_id, str(e)) raise InvalidMetaDataError(plugin_id) if not meta_data: raise InvalidMetaDataError(plugin_id) meta_data["id"] = plugin_id # Application-specific overrides appname = self._application.getApplicationName() if appname in meta_data: meta_data.update(meta_data[appname]) del meta_data[appname] self._meta_data[plugin_id] = meta_data return True
def _populateMetaData(self, plugin_id: str) -> bool: """Populate the list of metadata""" plugin = self._findPlugin(plugin_id) if not plugin: Logger.log("w", "Could not find plugin %s", plugin_id) return False location = None for folder in self._plugin_locations: location = self._locatePlugin(plugin_id, folder) if location: break if not location: Logger.log("w", "Could not find plugin %s", plugin_id) return False location = os.path.join(location, plugin_id) try: meta_data = plugin.getMetaData( ) #type: ignore #We catch the AttributeError that this would raise if the module has no getMetaData function. metadata_file = os.path.join(location, "plugin.json") try: with open(metadata_file, "r", encoding="utf-8") as file_stream: self._parsePluginInfo(plugin_id, file_stream.read(), meta_data) except FileNotFoundError: Logger.logException( "e", "Unable to find the required plugin.json file for plugin %s", plugin_id) raise InvalidMetaDataError(plugin_id) except UnicodeDecodeError: Logger.logException( "e", "The plug-in metadata file for plug-in {plugin_id} is corrupt." .format(plugin_id=plugin_id)) raise InvalidMetaDataError(plugin_id) except AttributeError as e: Logger.log( "e", "An error occurred getting metadata from plugin %s: %s", plugin_id, str(e)) raise InvalidMetaDataError(plugin_id) if not meta_data: raise InvalidMetaDataError(plugin_id) meta_data["id"] = plugin_id meta_data["location"] = location # Application-specific overrides appname = self._application.getApplicationName() if appname in meta_data: meta_data.update(meta_data[appname]) del meta_data[appname] self._metadata[plugin_id] = meta_data return True
def _parsePluginInfo(self, plugin_id, file_data, meta_data): try: meta_data["plugin"] = json.loads(file_data) except json.decoder.JSONDecodeError: Logger.logException("e", "Failed to parse plugin.json for plugin %s", plugin_id) raise InvalidMetaDataError(plugin_id) # Check if metadata is valid; if "version" not in meta_data["plugin"]: Logger.log("e", "Version must be set!") raise InvalidMetaDataError(plugin_id) # Check if the plugin states what API version it needs. if "api" not in meta_data["plugin"] and "supported_sdk_versions" not in meta_data["plugin"]: Logger.log("e", "The API or the supported_sdk_versions must be set!") raise InvalidMetaDataError(plugin_id) else: # Store the api_version as a Version object. all_supported_sdk_versions = [] # type: List[Version] if "supported_sdk_versions" in meta_data["plugin"]: all_supported_sdk_versions += [Version(supported_version) for supported_version in meta_data["plugin"]["supported_sdk_versions"]] if "api" in meta_data["plugin"]: all_supported_sdk_versions += [Version(meta_data["plugin"]["api"])] meta_data["plugin"]["supported_sdk_versions"] = all_supported_sdk_versions if "i18n-catalog" in meta_data["plugin"]: # A catalog was set, try to translate a few strings i18n_catalog = i18nCatalog(meta_data["plugin"]["i18n-catalog"]) if "name" in meta_data["plugin"]: meta_data["plugin"]["name"] = i18n_catalog.i18n(meta_data["plugin"]["name"]) if "description" in meta_data["plugin"]: meta_data["plugin"]["description"] = i18n_catalog.i18n(meta_data["plugin"]["description"])
def _populateMetaData(self, plugin_id: str) -> bool: plugin = self._findPlugin(plugin_id) if not plugin: Logger.log("w", "Could not find plugin %s", plugin_id) return False location = None for folder in self._plugin_locations: location = self._locatePlugin(plugin_id, folder) if location: break if not location: Logger.log("w", "Could not find plugin %s", plugin_id) return False location = os.path.join(location, plugin_id) try: meta_data = plugin.getMetaData( ) #type: ignore #We catch the AttributeError that this would raise if the module has no getMetaData function. metadata_file = os.path.join(location, "plugin.json") try: with open(metadata_file, "r") as f: try: meta_data["plugin"] = json.loads(f.read()) except json.decoder.JSONDecodeError: Logger.logException( "e", "Failed to parse plugin.json for plugin %s", plugin_id) raise InvalidMetaDataError(plugin_id) # Check if metadata is valid; if "version" not in meta_data["plugin"]: Logger.log("e", "Version must be set!") raise InvalidMetaDataError(plugin_id) if "i18n-catalog" in meta_data["plugin"]: # A catalog was set, try to translate a few strings i18n_catalog = i18nCatalog( meta_data["plugin"]["i18n-catalog"]) if "name" in meta_data["plugin"]: meta_data["plugin"]["name"] = i18n_catalog.i18n( meta_data["plugin"]["name"]) if "description" in meta_data["plugin"]: meta_data["plugin"][ "description"] = i18n_catalog.i18n( meta_data["plugin"]["description"]) except FileNotFoundError: Logger.logException( "e", "Unable to find the required plugin.json file for plugin %s", plugin_id) raise InvalidMetaDataError(plugin_id) except AttributeError as e: Logger.log( "e", "An error occurred getting metadata from plugin %s: %s", plugin_id, str(e)) raise InvalidMetaDataError(plugin_id) if not meta_data: raise InvalidMetaDataError(plugin_id) meta_data["id"] = plugin_id meta_data["location"] = location # Application-specific overrides appname = self._application.getApplicationName() if appname in meta_data: meta_data.update(meta_data[appname]) del meta_data[appname] self._metadata[plugin_id] = meta_data return True