The horizon.base
Module¶
Contains the core classes and functionality that makes Horizon what it is. This module is considered internal, and should not be relied on directly.
Public APIs are made available through the horizon
module and
the classes contained therein.
-
class
horizon.base.
Dashboard
(*args, **kwargs)[source] Bases:
horizon.base.Registry
,horizon.base.HorizonComponent
A base class for defining Horizon dashboards.
All Horizon dashboards should extend from this base class. It provides the appropriate hooks for automatic discovery of
Panel
modules, automatically constructing URLconfs, and providing permission-based access control.-
name
¶ The name of the dashboard. This will be displayed in the auto-generated navigation and various other places. Default:
''
.
-
slug
¶ A unique “short name” for the dashboard. The slug is used as a component of the URL path for the dashboard. Default:
''
.
-
panels
¶ The
panels
attribute can be either a flat list containing the name of each panel module which should be loaded as part of this dashboard, or a list ofPanelGroup
classes which define groups of panels as in the following example:class SystemPanels(horizon.PanelGroup): slug = "syspanel" name = _("System") panels = ('overview', 'instances', ...) class Syspanel(horizon.Dashboard): panels = (SystemPanels,)
Automatically generated navigation will use the order of the modules in this attribute.
Default:
[]
.Warning
The values for this attribute should not correspond to the
name
attributes of thePanel
classes. They should be the names of the Python modules in which thepanel.py
files live. This is used for the automatic loading and registration ofPanel
classes much like Django’sModelAdmin
machinery.Panel modules must be listed in
panels
in order to be discovered by the automatic registration mechanism.
-
default_panel
¶ The name of the panel which should be treated as the default panel for the dashboard, i.e. when you visit the root URL for this dashboard, that’s the panel that is displayed. Default:
None
.
-
permissions
¶ A list of permission names, all of which a user must possess in order to access any panel registered with this dashboard. This attribute is combined cumulatively with any permissions required on individual
Panel
classes.
-
urls
¶ Optional path to a URLconf of additional views for this dashboard which are not connected to specific panels. Default:
None
.
-
nav
(context) The
nav
attribute can be either boolean value or a callable which accepts aRequestContext
object as a single argument to control whether or not this dashboard should appear in automatically-generated navigation. Default:True
.
-
public
¶ Boolean value to determine whether this dashboard can be viewed without being logged in. Defaults to
False
.
-
allowed
(context)[source] Checks for role based access for this dashboard.
Checks for access to any panels in the dashboard and of the dashboard itself.
This method should be overridden to return the result of any policy checks required for the user to access this dashboard when more complex checks are required.
-
default_panel
= None
-
get_absolute_url
()[source] Returns the default URL for this dashboard.
The default URL is defined as the URL pattern with
name="index"
in the URLconf for thePanel
specified bydefault_panel
.
-
get_panel_group
(slug)[source] Returns the specified :class:~horizon.PanelGroup or None if not registered
-
get_panel_groups
()[source]
-
get_panels
()[source] Returns the
Panel
instances registered with this dashboard in order, without any panel groupings.
-
name
= ''
-
nav
= True
-
panels
= []
-
public
= False
-
slug
= ''
-
urls
= None
-
-
class
horizon.base.
HorizonComponent
[source] Bases:
object
-
allowed
(context)[source] Checks if the user is allowed to access this component.
This method should be overridden to return the result of any policy checks required for the user to access this component when more complex checks are required.
-
can_access
(context)[source] Return whether the user has role based access to this component.
This method is not intended to be overridden. The result of the method is stored in per-session cache.
-
policy_rules
= None
-
-
class
horizon.base.
HorizonSite
[source] Bases:
horizon.base.Site
A singleton implementation of Site such that all dealings with horizon get the same instance no matter what. There can be only one.
-
class
horizon.base.
LazyURLPattern
(func)[source] Bases:
django.utils.functional.SimpleLazyObject
-
exception
horizon.base.
NotRegistered
[source] Bases:
exceptions.Exception
-
class
horizon.base.
Panel
[source] Bases:
horizon.base.HorizonComponent
A base class for defining Horizon dashboard panels.
All Horizon dashboard panels should extend from this class. It provides the appropriate hooks for automatically constructing URLconfs, and providing permission-based access control.
-
name
¶ The name of the panel. This will be displayed in the auto-generated navigation and various other places. Default:
''
.
-
slug
¶ A unique “short name” for the panel. The slug is used as a component of the URL path for the panel. Default:
''
.
-
permissions
¶ A list of permission names, all of which a user must possess in order to access any view associated with this panel. This attribute is combined cumulatively with any permissions required on the
Dashboard
class with which it is registered.
-
urls
¶ Path to a URLconf of views for this panel using dotted Python notation. If no value is specified, a file called
urls.py
living in the same package as thepanel.py
file is used. Default:None
.
-
nav
(context) The
nav
attribute can be either boolean value or a callable which accepts aRequestContext
object as a single argument to control whether or not this panel should appear in automatically-generated navigation. Default:True
.
-
index_url_name
¶ The
name
argument for the URL pattern which corresponds to the index view for thisPanel
. This is the view thatPanel.get_absolute_url()
will attempt to reverse.
-
static
can_register
()¶ This optional static method can be used to specify conditions that need to be satisfied to load this panel. Unlike
permissions
andallowed
this method is intended to handle settings based conditions rather than user based permission and policy checks. The return value is boolean. If the method returnsTrue
, then the panel will be registered and available to user (ifpermissions
andallowed
runtime checks are also satisfied). If the method returnsFalse
, then the panel will not be registered and will not be available via normal navigation or direct URL access.
-
get_absolute_url
()[source] Returns the default URL for this panel.
The default URL is defined as the URL pattern with
name="index"
in the URLconf for this panel.
-
index_url_name
= 'index'
-
name
= ''
-
nav
= True
-
slug
= ''
-
urls
= None
-
-
class
horizon.base.
PanelGroup
(dashboard, slug=None, name=None, panels=None)[source] Bases:
object
A container for a set of
Panel
classes.When iterated, it will yield each of the
Panel
instances it contains.-
slug
¶ A unique string to identify this panel group. Required.
-
name
¶ A user-friendly name which will be used as the group heading in places such as the navigation. Default:
None
.
-
panels
¶ A list of panel module names which should be contained within this grouping.
-
-
class
horizon.base.
Registry
[source] Bases:
object
-
class
horizon.base.
Site
[source] Bases:
horizon.base.Registry
,horizon.base.HorizonComponent
The overarching class which encompasses all dashboards and panels.
-
dashboards
-
default_dashboard
-
get_absolute_url
()[source] Returns the default URL for Horizon’s URLconf.
The default URL is determined by calling
get_absolute_url()
on theDashboard
instance returned byget_default_dashboard()
.
-
get_dashboards
()[source] Returns an ordered tuple of
Dashboard
modules.Orders dashboards according to the
"dashboards"
key inHORIZON_CONFIG
or else returns all registered dashboards in alphabetical order.Any remaining
Dashboard
classes registered with Horizon but not listed inHORIZON_CONFIG['dashboards']
will be appended to the end of the list alphabetically.
-
get_default_dashboard
()[source] Returns the default
Dashboard
instance.If
"default_dashboard"
is specified inHORIZON_CONFIG
then that dashboard will be returned. If not, the first dashboard returned byget_dashboards()
will be returned.
-
get_user_home
(user)[source] Returns the default URL for a particular user.
This method can be used to customize where a user is sent when they log in, etc. By default it returns the value of
get_absolute_url()
.An alternative function can be supplied to customize this behavior by specifying a either a URL or a function which returns a URL via the
"user_home"
key inHORIZON_CONFIG
. Each of these would be valid:{"user_home": "/home",} # A URL {"user_home": "my_module.get_user_home",} # Path to a function {"user_home": lambda user: "/" + user.name,} # A function {"user_home": None,} # Will always return the default dashboard
This can be useful if the default dashboard may not be accessible to all users. When user_home is missing from HORIZON_CONFIG, it will default to the settings.LOGIN_REDIRECT_URL value.
-
name
= 'Horizon'
-
namespace
= 'horizon'
-
register_panel
(dashboard, panel)[source]
-
registered
(dashboard)[source]
-
slug
= 'horizon'
-
unregister_panel
(dashboard, panel)[source]
-
urls
= 'horizon.site_urls'
-
-
class
horizon.base.
Workflow
[source] Bases:
object
-
horizon.base.
access_cached
(func)[source]