Jump to >

djblets.features

Feature switch support for applications.

This module contains convenience imports for:

class Feature(register=True)[source]

Bases: object

A feature in a product that can dynamically be turned on/off.

Feature subclasses are used to provide dynamic access to a given feature in a product. The feature may appear off for most users but on for a select few, or only on in a development server, for instance.

Whether a feature is enabled is controlled by the stability level of the feature and by the feature checker. It will be enabled if level is STABLE or if the feature checker returns that the feature is enabled.

Consuming applications are expected to subclass this and define the information on the feature, and choose a feature checker to use.

feature_id = None[source]

The unique ID/slug of the feature.

name = None[source]

The name of the feature.

summary = None[source]

A summary of the feature.

level = 10[source]

Stability level of the feature.

__init__(register=True)[source]

Initialize the feature.

Subclasses that wish to provide special initialization should instead override initialize().

Parameters:register (bool, optional) – Whether to register this feature instance. This should generally be True for all callers, except in special cases (like unit tests).
Raises:djblets.features.errors.FeatureConflictError – The feature ID on this class conflicts with another feature.
initialize()[source]

Initialize the feature.

Subclasses that wish to initialize feature logic within the class (such as connecting to signals) should do so by overriding this method.

This will always be called when instantiating the subclass, or when re-registering an unregistered feature class using the features registry.

shutdown()[source]

Shut down the feature.

Subclasses that wish to provide special shutdown logic within the class (such as disconnecting from signals) should do so by overriding this method.

This is called when unregistering the feature through the features registry.

is_enabled(**kwargs)[source]

Return whether the feature is enabled for the given requirements.

This will return a boolean indicating if the feature is enabled.

If level is STABLE, it will always be enabled. Otherwise, if level is not UNAVAILABLE, the configured feature checker will be used instead.

Callers can pass additional keyword arguments to this method, which the feature checker can use when determining if the feature is enabled. For example, a HttpRequest instance, or a User.

Parameters:**kwargs (dict) – Additional keyword arguments to pass to the feature checker.
Returns:A boolean value indicating if the feature is enabled for the given conditions.
Return type:bool
class FeatureLevel[source]

Bases: object

Possible stability levels for features.

UNAVAILABLE = 0[source]

The feature is completely unavailable.

Feature checkers will not be consulted in this case.

EXPERIMENTAL = 10[source]

The feature is experimental.

A feature checker must enable this feature.

BETA = 50[source]

The feature is in beta.

A feature checker must enable this feature.

STABLE = 100[source]

The feature is stable and will always be enabled.

get_features_registry()[source]

Return the global features registry.

The first time this is called, a FeaturesRegistry will be instantiated and cached for future calls.

Returns:The features registry.
Return type:FeaturesRegistry