configobjfactory.py
78 lines
| 2.4 KiB
| text/x-python
|
PythonLexer
Brian Granger
|
r2288 | #!/usr/bin/env python | |
# encoding: utf-8 | |||
""" | |||
A class for creating a Twisted service that is configured using IPython's | |||
configuration system. | |||
""" | |||
#----------------------------------------------------------------------------- | |||
# Copyright (C) 2008-2009 The IPython Development Team | |||
# | |||
# Distributed under the terms of the BSD License. The full license is in | |||
# the file COPYING, distributed as part of this software. | |||
#----------------------------------------------------------------------------- | |||
#----------------------------------------------------------------------------- | |||
# Imports | |||
#----------------------------------------------------------------------------- | |||
import zope.interface as zi | |||
from IPython.core.component import Component | |||
#----------------------------------------------------------------------------- | |||
# Code | |||
#----------------------------------------------------------------------------- | |||
class IConfiguredObjectFactory(zi.Interface): | |||
"""I am a component that creates a configured object. | |||
This class is useful if you want to configure a class that is not a | |||
subclass of :class:`IPython.core.component.Component`. | |||
""" | |||
def __init__(config): | |||
"""Get ready to configure the object using config.""" | |||
def create(): | |||
"""Return an instance of the configured object.""" | |||
class ConfiguredObjectFactory(Component): | |||
zi.implements(IConfiguredObjectFactory) | |||
def __init__(self, config): | |||
super(ConfiguredObjectFactory, self).__init__(None, config=config) | |||
def create(self): | |||
raise NotImplementedError('create must be implemented in a subclass') | |||
class IAdaptedConfiguredObjectFactory(zi.Interface): | |||
"""I am a component that adapts and configures an object. | |||
Brian Granger
|
r2301 | This class is useful if you have the adapt an instance and configure it. | |
Brian Granger
|
r2288 | """ | |
def __init__(config, adaptee=None): | |||
"""Get ready to adapt adaptee and then configure it using config.""" | |||
def create(): | |||
"""Return an instance of the adapted and configured object.""" | |||
class AdaptedConfiguredObjectFactory(Component): | |||
# zi.implements(IAdaptedConfiguredObjectFactory) | |||
def __init__(self, config, adaptee): | |||
Brian Granger
|
r2297 | ||
# print "config pre:", config | |||
Brian Granger
|
r2288 | super(AdaptedConfiguredObjectFactory, self).__init__(None, config=config) | |
Brian Granger
|
r2297 | ||
# print "config post:", config | |||
Brian Granger
|
r2288 | self.adaptee = adaptee | |
def create(self): | |||
raise NotImplementedError('create must be implemented in a subclass') |