def get_plugin_configuration(plugin_ref) -> Response: """ Endpoint for getting a plugin's configuration profiles """ project = Project.find() settings = PluginSettingsService(project, show_hidden=False) plugin = ConfigService(project).get_plugin(plugin_ref) discovery_service = PluginDiscoveryService(project) try: plugin_def = discovery_service.find_plugin(plugin.type, plugin.name) settings_group_validation = plugin_def.settings_group_validation except PluginNotFoundError: settings_group_validation = [] profiles = settings.profiles_with_config(db.session, plugin, redacted=True) for profile in profiles: freeze_profile_config_keys(profile) return jsonify({ "profiles": profiles, "settings": Canonical.as_canonical(settings.definitions(plugin)), "settings_group_validation": settings_group_validation, })
def get_plugin_configuration(plugin_ref) -> Response: """ Endpoint for getting a plugin's configuration """ project = Project.find() plugins_service = ProjectPluginsService(project) plugin = plugins_service.get_plugin(plugin_ref) settings = PluginSettingsService(project, plugin, plugins_service=plugins_service, show_hidden=False) try: settings_group_validation = plugin.settings_group_validation except PluginNotFoundError: settings_group_validation = [] return jsonify({ **get_config_with_metadata(settings), "settings": Canonical.as_canonical(settings.definitions(extras=False)), "settings_group_validation": settings_group_validation, })
def test_fallbacks(self, subject): # Calling an unknown attribute is not supported with pytest.raises(AttributeError): subject.unknown fallback = Canonical(unknown="value", known="value") # This would typically be set from a Canonical subclass subject._fallback_to = fallback # Unknown attributes fall back assert subject.unknown == "value" assert "unknown" not in subject.canonical() # Known attributes don't fall back subject.known = None assert subject.known is None # Unless we make them subject._fallbacks.add("known") assert subject.known == "value" assert "known" not in subject.canonical() # Unless there is nothing to fallback to subject._fallback_to = None assert subject.known is None # Defaults are still applied subject._defaults["known"] = lambda _: "default" assert subject.known == "default" assert "known" not in subject.canonical() # Until a value is set subject.known = "value" assert subject.known == "value" assert subject.canonical()["known"] == "value"
def load_plugins(self, plugins) -> Canonical: """Parse the meltano.yml file and return it as `PluginInstall` instances.""" plugin_type_plugins = Canonical() # this will parse the meltano.yml file and create an instance of the # corresponding `plugin_class` for all the plugins. for plugin_type, plugin_defs in plugins.items(): plugin_type_plugins[plugin_type] = [] for plugin_def in plugin_defs: plugin = plugin_factory(plugin_type, plugin_def) plugin_type_plugins[plugin_type].append(plugin) return plugin_type_plugins
def load_plugins(self, plugins) -> Canonical: """Parse the meltano.yml file and return it as `ProjectPlugin` instances.""" plugin_type_plugins = Canonical() for plugin_type in PluginType: plugin_type_plugins[plugin_type] = [] # this will parse the meltano.yml file and create an instance of the # corresponding `plugin_class` for all the plugins. for plugin_type, raw_plugins in plugins.items(): for raw_plugin in raw_plugins: plugin = ProjectPlugin(PluginType(plugin_type), **raw_plugin) plugin_type_plugins[plugin.type].append(plugin) return plugin_type_plugins
def project(test_dir, project_init_service): project = project_init_service.init(create_system_database=False) logging.debug(f"Created new project at {project.root}") # empty out the `plugins` with project.meltano_update() as meltano: meltano.plugins = Canonical() # cd into the new project root os.chdir(project.root) yield project # clean-up Project._default = None os.chdir(test_dir) shutil.rmtree(project.root) logging.debug(f"Cleaned project at {project.root}")
def project(test_dir, project_init_service): project = project_init_service.init(add_discovery=True) logging.debug(f"Created new project at {project.root}") # empty out the `plugins` with project.meltano_update() as meltano: meltano.plugins = Canonical() # cd into the new project root os.chdir(project.root) yield project # clean-up Project.deactivate() os.chdir(test_dir) shutil.rmtree(project.root) logging.debug(f"Cleaned project at {project.root}")
def test_update_canonical(self, subject): subject.update(Canonical(test="value")) assert subject.test == "value"
def test_nested_empty(self, subject): nested = Canonical(test="") subject.nested = nested assert "nested" not in Canonical.as_canonical(subject)
def test_nested(self, subject): nested = Canonical(test="value") subject.nested = nested assert Canonical.as_canonical( subject)["nested"] == Canonical.as_canonical(nested)
def subject(self): return Canonical(**definition)