Exemplo n.º 1
0
    def ready(self):

        # Register model validators (if defined)
        validators = import_object(
            f"{self.__module__}.{self.custom_validators}")
        if validators is not None:
            register_custom_validators(validators)

        # Register datasource contents (if defined)
        datasource_contents = import_object(
            f"{self.__module__}.{self.datasource_contents}")
        if datasource_contents is not None:
            register_datasource_contents(datasource_contents)

        # Register GraphQL types (if defined)
        graphql_types = import_object(
            f"{self.__module__}.{self.graphql_types}")
        if graphql_types is not None:
            register_graphql_types(graphql_types)

        # Import jobs (if present)
        jobs = import_object(f"{self.__module__}.{self.jobs}")
        if jobs is not None:
            register_jobs(jobs)

        # Register navigation menu items (if defined)
        menu_items = import_object(f"{self.__module__}.{self.menu_items}")
        if menu_items is not None:
            register_menu_items(self.verbose_name, menu_items)

        # Register template content (if defined)
        template_extensions = import_object(
            f"{self.__module__}.{self.template_extensions}")
        if template_extensions is not None:
            register_template_extensions(template_extensions)
Exemplo n.º 2
0
    def ready(self):
        """Callback after plugin app is loaded."""
        # We don't call super().ready here because we don't need or use the on-ready behavior of a core Nautobot app

        # Introspect URL patterns and models to make available to the installed-plugins detail UI view.
        urlpatterns = import_object(f"{self.__module__}.urls.urlpatterns")
        api_urlpatterns = import_object(
            f"{self.__module__}.api.urls.urlpatterns")

        self.features = {
            "api_urlpatterns":
            sorted(
                (urlp for urlp in (api_urlpatterns or [])
                 if isinstance(urlp, URLPattern)),
                key=lambda urlp: (urlp.name, str(urlp.pattern)),
            ),
            "models":
            sorted(model._meta.verbose_name for model in self.get_models()),
            "urlpatterns":
            sorted(
                (urlp for urlp in (urlpatterns or [])
                 if isinstance(urlp, URLPattern)),
                key=lambda urlp: (urlp.name, str(urlp.pattern)),
            ),
        }

        # Register banner function (if defined)
        banner_function = import_object(
            f"{self.__module__}.{self.banner_function}")
        if banner_function is not None:
            register_banner_function(banner_function)
            self.features["banner"] = True

        # Register model validators (if defined)
        validators = import_object(
            f"{self.__module__}.{self.custom_validators}")
        if validators is not None:
            register_custom_validators(validators)
            self.features["custom_validators"] = sorted(
                set(validator.model for validator in validators))

        # Register datasource contents (if defined)
        datasource_contents = import_object(
            f"{self.__module__}.{self.datasource_contents}")
        if datasource_contents is not None:
            register_datasource_contents(datasource_contents)
            self.features["datasource_contents"] = datasource_contents

        # Register GraphQL types (if defined)
        graphql_types = import_object(
            f"{self.__module__}.{self.graphql_types}")
        if graphql_types is not None:
            register_graphql_types(graphql_types)

        # Import jobs (if present)
        jobs = import_object(f"{self.__module__}.{self.jobs}")
        if jobs is not None:
            register_jobs(jobs)
            self.features["jobs"] = jobs

        # Register plugin navigation menu items (if defined)
        menu_items = import_object(f"{self.__module__}.{self.menu_items}")
        if menu_items is not None:
            register_plugin_menu_items(self.verbose_name, menu_items)
            self.features["nav_menu"] = menu_items

        homepage_layout = import_object(
            f"{self.__module__}.{self.homepage_layout}")
        if homepage_layout is not None:
            register_homepage_panels(self.path, self.label, homepage_layout)
            self.features["home_page"] = homepage_layout

        # Register template content (if defined)
        template_extensions = import_object(
            f"{self.__module__}.{self.template_extensions}")
        if template_extensions is not None:
            register_template_extensions(template_extensions)
            self.features["template_extensions"] = sorted(
                set(extension.model for extension in template_extensions))

        # Register custom jinja filters
        try:
            import_module(f"{self.__module__}.{self.jinja_filters}")
            self.features["jinja_filters"] = True
        except ModuleNotFoundError:
            pass

        # Register secrets providers (if any)
        secrets_providers = import_object(
            f"{self.__module__}.{self.secrets_providers}")
        if secrets_providers is not None:
            for secrets_provider in secrets_providers:
                register_secrets_provider(secrets_provider)
            self.features["secrets_providers"] = secrets_providers
Exemplo n.º 3
0
# Register built-in callbacks for data types potentially provided by a GitRepository
register_datasource_contents([
    (
        "extras.gitrepository",
        DatasourceContent(
            name="config contexts",
            content_identifier="extras.configcontext",
            icon="mdi-code-json",
            callback=refresh_git_config_contexts,
        ),
    ),
    (
        "extras.gitrepository",
        DatasourceContent(
            name="jobs",
            content_identifier="extras.job",
            icon="mdi-script-text",
            callback=refresh_git_jobs,
        ),
    ),
    (
        "extras.gitrepository",
        DatasourceContent(
            name="export templates",
            content_identifier="extras.exporttemplate",
            icon="mdi-database-export",
            callback=refresh_git_export_templates,
        ),
    ),
])