2
# Terminator by Chris Jones <cmsj@tenshu.net>
4
"""factory.py - Maker of objects
7
>>> window = maker.make_window()
8
>>> maker.isinstance(window, 'Window')
10
>>> terminal = maker.make_terminal()
11
>>> maker.isinstance(terminal, 'Terminal')
13
>>> hpaned = maker.make_hpaned()
14
>>> maker.isinstance(hpaned, 'HPaned')
16
>>> vpaned = maker.make_vpaned()
17
>>> maker.isinstance(vpaned, 'VPaned')
23
from util import dbg, err
25
# pylint: disable-msg=R0201
26
# pylint: disable-msg=W0613
28
"""Definition of a class that makes other classes"""
29
types = {'Terminal': 'terminal',
33
'Notebook': 'notebook',
34
'Container': 'container',
38
"""Class initialiser"""
39
Borg.__init__(self, self.__class__.__name__)
40
self.prepare_attributes()
42
def prepare_attributes(self):
43
"""Required by the borg, but a no-op here"""
46
def isinstance(self, product, classtype):
47
"""Check if a given product is a particular type of object"""
48
if classtype in self.types.keys():
49
# This is quite ugly, but we're importing from the current
50
# directory if that makes sense, otherwise falling back to
51
# terminatorlib. Someone with real Python skills should fix
52
# this to be less insane.
54
module = __import__(self.types[classtype], None, None, [''])
56
module = __import__('terminatorlib.%s' % self.types[classtype],
58
return(isinstance(product, getattr(module, classtype)))
60
err('Factory::isinstance: unknown class type: %s' % classtype)
63
def type(self, product):
64
"""Determine the type of an object we've previously created"""
65
for atype in self.types:
66
# Skip over generic types
67
if atype in ['Container', 'Paned']:
69
if self.isinstance(product, atype):
73
def make(self, product, **kwargs):
74
"""Make the requested product"""
76
func = getattr(self, 'make_%s' % product.lower())
77
except AttributeError:
78
err('Factory::make: requested object does not exist: %s' % product)
81
dbg('Factory::make: created a %s' % product)
82
return(func(**kwargs))
84
def make_window(self, **kwargs):
87
return(window.Window(**kwargs))
89
def make_terminal(self, **kwargs):
92
return(terminal.Terminal())
94
def make_hpaned(self, **kwargs):
97
return(paned.HPaned())
99
def make_vpaned(self, **kwargs):
102
return(paned.VPaned())
104
def make_notebook(self, **kwargs):
105
"""Make a Notebook"""
107
return(notebook.Notebook(kwargs['window']))