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)
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
# 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, ), ), ])