mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Did some initial work for Context plugins
This commit is contained in:
@@ -27,6 +27,7 @@ http://docs.python.org/ref/sequence-types.html
|
||||
|
||||
import re
|
||||
import inspect
|
||||
import threading
|
||||
import errors
|
||||
from errors import check_type, check_isinstance
|
||||
from config import Environment, Env
|
||||
@@ -705,6 +706,25 @@ class Registrar(DictProxy):
|
||||
self.__registered.add(klass)
|
||||
|
||||
|
||||
class LazyContext(object):
|
||||
"""
|
||||
On-demand creation of thread-local context attributes.
|
||||
"""
|
||||
|
||||
def __init__(self, api):
|
||||
self.__api = api
|
||||
self.__context = threading.local()
|
||||
|
||||
def __getattr__(self, name):
|
||||
if name not in self.__context.__dict__:
|
||||
if name not in self.__api.Context:
|
||||
raise AttributeError('no Context plugin for %r' % name)
|
||||
value = self.__api.Context[name].get_value()
|
||||
self.__context.__dict__[name] = value
|
||||
return self.__context.__dict__[name]
|
||||
|
||||
|
||||
|
||||
class API(DictProxy):
|
||||
"""
|
||||
Dynamic API object through which `Plugin` instances are accessed.
|
||||
@@ -715,6 +735,7 @@ class API(DictProxy):
|
||||
self.__done = set()
|
||||
self.register = Registrar(*allowed)
|
||||
self.env = Env()
|
||||
self.context = LazyContext(self)
|
||||
super(API, self).__init__(self.__d)
|
||||
|
||||
def __doing(self, name):
|
||||
|
Reference in New Issue
Block a user