ajenti.api

class ajenti.api.PluginInfo(**kwargs)[source]

Describes a loaded plugin package

class ajenti.api.BasePlugin[source]

A base plugin class that provides AppContext and classconfig functionality.

classconfig_editor = None

Override this in your class with an ajenti.plugins.configurator.api.ClassConfigEditor derivative

classconfig_name = None

Override this in your class if you want this plugin to be configurable through Configure > Plugins

classconfig_root = False

When True, classconfig will be stored in root’s config section disregarding current user

context = None

Automatically receives a reference to the current AppContext

create_classconfig()[source]
default_classconfig = None

Override this in your class with a default config object (must be JSON-serializable)

init()[source]

Do your initialization here. Correct bottom-to-up inheritance call order guaranteed.

load_classconfig()[source]

Loads the content of classconfig attribute from the user’s configuration section.

open_content(path, mode='r')[source]

Provides access to plugin-specific files from /content directory of the package

Parameters:
  • path (str) – path relative to package’s /content
  • mode (str) – Python file access mode
Returns:

An open file object

Return type:

file

save_classconfig()[source]

Saves the content of classconfig attribute into the user’s configuration section.

class ajenti.api.AppContext(parent, httpcontext)[source]

A session-specific context provided to everyone who inherits BasePlugin.

session

current HTTP session: ajenti.middleware.Session

user

current logged in user: reconfigure.items.ajenti.UserData

Methods injected by MainPlugin:

notify(text)
Parameters:text – Notification text to show
launch(id, *args, **kwargs)
Parameters:id – Intent ID to be launched
ajenti.api.plugin(cls)[source]

A decorator to create plugin classes:

@plugin
class SomePlugin (ISomething):
    pass

If the class has a verify method returning bool, it’s invoked. If the method returned False, plugin is rejected and removed from implementation lists.

If the class has a platforms attribute, which is a list of supported platform names, it’s compared against the current runtime OS platform. If the current platform is not in the list, plugin is also rejected.

Following class methods are injected.

.get(context=<current context>)
Returns:any existing instance or creates a new one
.new(*args, context=<current context>, **kwargs)
Returns:a new instance. Use this method instead of constructor, since it invokes the proper initialization chain and registers the instance
Return type:class, None
ajenti.api.rootcontext(cls)[source]

Enforces use of root PluginContext by default for .get() and .new() classmethods.

ajenti.api.notrack(cls)[source]

Disables instance tracking of plugin (and derivative) instances within PluginContext via get/get_all and similar methods.

Return type:class
ajenti.api.notrack_this(cls)[source]

Disables instance tracking of plugin instances within PluginContext via get/get_all and similar methods.

Return type:class
ajenti.api.track(cls)[source]

Enables previously disabled instance tracking of plugin.

Return type:class
ajenti.api.persistent(cls)[source]

Makes this plugin non-GCable

Return type:class
ajenti.api.extract_context()[source]

An utility function that extracts and returns the nearest AppContext from the current call stack.

Return type:ajenti.plugins.PluginContext, None
exception ajenti.api.NoImplementationsError[source]
ajenti.api.interface(cls)[source]

A decorator to create plugin interfaces:

@interface
class ISomething (object):
    def contract(self):
        pass

Following class methods are injected:

.get(context=<current context>)
Returns:any existing instance or creates a new one
.get_all(context=<current context>)
Returns:list of instances for each implementation
.get_class()
Returns:any implementation class
.get_classes()
Returns:list of implementation classes
.get_instances(context=<current context>)
Returns:list of all existing instances
Return type:class
comments powered by Disqus