Commit Graph

259 Commits

Author SHA1 Message Date
Jason Gerard DeRose
7b571e3693 Enabled CRUDS in webUI using wehjit 0.2.0 2010-01-26 10:32:44 -05:00
John Dennis
dbb5721e7c If plugin fails to load log the traceback
Signed-off-by: John Dennis <jdennis@redhat.com>

If plugin fails to load log the traceback

If a plugin fails to load due to some kind of error it would be nice
if the error log contained the traceback so you can examine what went
wrong rather than being left blind as to why it failed to load.
2009-11-23 16:30:01 -05:00
Rob Crittenden
50b683dc3c Provide additional help to --help option 2009-11-19 14:38:01 -05:00
Jason Gerard DeRose
8dc21d6f30 Make plugin browser show plugin parent class 2009-10-14 15:08:30 -06:00
Jason Gerard DeRose
f58ff2921d Giant webui patch take 2 2009-10-13 11:28:00 -06:00
Jason Gerard DeRose
c0f558d98b Removed PluginProxy and all its uses 2009-08-05 12:18:51 -04:00
Pavel Zuna
c47d716e95 Modify PluginProxy to use __public__ defined in derived classes instead of base classes. 2009-06-10 11:53:07 -04:00
Pavel Zuna
7d0bd4b895 Rename errors2.py to errors.py. Modify all affected files. 2009-04-23 10:29:14 -04:00
Jason Gerard DeRose
4ab133c3cb Implemented more elegant way for entire plugin module to be conditionally skipped; updated cert.py and ra.py modules to use this 2009-02-17 16:03:10 -05:00
Jason Gerard DeRose
a8c3f054d4 Started cleanup work on ra plugin; fixed problem in api.bootstrap() when process does not have permision to open log file 2009-02-17 16:03:08 -05:00
Jason Gerard DeRose
c2b0c80140 Started work on a much simplified mod_python server 2009-02-03 15:29:05 -05:00
Jason Gerard DeRose
231f0bd65a Finished reworked cli.CLI class into cli.cli plugin 2009-02-03 15:29:04 -05:00
Jason Gerard DeRose
db0168f7af Started reworking CLI class into cli plugin 2009-02-03 15:29:03 -05:00
Jason Gerard DeRose
0cfb0e191a Removed the depreciated Context and LazyContext classes 2009-02-03 15:29:03 -05:00
Jason Gerard DeRose
6aadeb9aea Added Object.params_minus() method; various small tweaks 2009-02-03 15:29:00 -05:00
Jason Gerard DeRose
6fe78a4944 Renamed all references to 'ipa_server' to 'ipaserver' 2009-01-04 18:39:39 -07:00
Jason Gerard DeRose
912ab9e68b Removed unneeded import of errors from plugable.py 2009-01-03 18:08:39 -07:00
Jason Gerard DeRose
bb6e9cfe9f Plugin.call() now uses errors2 version of SubprocessError 2009-01-03 18:02:58 -07:00
Jason Gerard DeRose
6b6e6b1cab Ported plugin registration errors into errors2.py; plugable.Registrar now raises new errors2 exceptions 2009-01-03 17:27:53 -07:00
Jason Gerard DeRose
72340a594d Removed unneeded import of check_type, check_instance in plugable.py 2009-01-02 01:16:17 -07:00
Jason Gerard DeRose
b4dc333ee2 Removed depreciated code in ipalib.plugable that has been moving into ipalib.base 2009-01-02 00:46:45 -07:00
Jason Gerard DeRose
5b637f6a18 Removed depreciated code from config.py; removed corresponding unit tests 2008-12-22 15:41:24 -07:00
Jason Gerard DeRose
f82c48f775 Added note in Plugin.set_api() about Plugin.log attribute being depreciated 2008-12-21 19:58:48 -07:00
Jason Gerard DeRose
9d091c98f1 Plugin.__init__() now checks that subclass hasn't defined attributes that conflict with the logger methods; added corresponding unit test 2008-12-21 19:34:32 -07:00
Jason Gerard DeRose
4390523b7f Improved Plugin.call() method and added its unit test 2008-12-21 17:12:00 -07:00
Jason Gerard DeRose
4f24f0fd88 Plugin.doc instance attribute is now parsed out using inspect.getdoc(); added Plugin.summary instance attribute, created in Plugin.__init__() 2008-12-17 23:08:52 -07:00
Jason Gerard DeRose
171ed58367 Removed Plugin.doc property and replaced with instance attribute created in Plugin.__init__() 2008-12-17 21:57:58 -07:00
Jason Gerard DeRose
69041c3b1b Removed Plugin.name property and replaced with instance attribute created in Plugin.__init__() 2008-12-17 21:47:43 -07:00
Jason Gerard DeRose
2db738e899 Some changes to make reading dubugging output easier 2008-11-24 10:09:30 -07:00
Jason Gerard DeRose
c26a3c8542 Finished fist draft of plugin tutorial in ipalib/__init__.py docstring 2008-11-07 02:26:38 -07:00
Jason Gerard DeRose
5bdf860647 Added Plugin.call() method that calls an external executable via subprocess.call() 2008-11-06 11:57:21 -07:00
Jason Gerard DeRose
242a8183a7 Added custom log formatter util.LogFormatter that makes the human-readable time stamp in UTC 2008-10-31 20:25:33 -06:00
Jason Gerard DeRose
5e5a83e4e8 Renamed API.bootstrap_from_options() to bootstrap_with_global_options() 2008-10-31 19:03:07 -06:00
Jason Gerard DeRose
5269d1396c Logging formats are now env variables; added log_format_stderr_debug format used when env.debug is True 2008-10-31 18:55:32 -06:00
Jason Gerard DeRose
a23d41a57f Reoganized global option functionality to it is easy for any script to use the environment-related global options; lite-xmlrpc.py now uses same global options 2008-10-31 18:17:08 -06:00
Jason Gerard DeRose
cdfb7bfd5e Logging is now configured in API.bootstrap(); removed depreciated util.configure_logging() function 2008-10-31 13:27:42 -06:00
Jason Gerard DeRose
140458cfc6 API.finalize() now cascades call to API.load_plugins() 2008-10-31 12:29:59 -06:00
Jason Gerard DeRose
3076cb4d2f Plugin.set_api() now sets convience instance attributes from api for env, context, log, and all NameSpace 2008-10-30 14:11:24 -06:00
Jason Gerard DeRose
6879140db7 Added ipalib.plugins.f_misc with new 'context' Command; moved 'env' Command from cli to f_misc 2008-10-30 02:20:28 -06:00
Jason Gerard DeRose
ddb5449c7f Did some initial work for Context plugins 2008-10-30 01:11:33 -06:00
Jason Gerard DeRose
fbcb55bd11 lite-xmlrpc.py now uses api.bootstrap() property, logs to api.logger 2008-10-28 02:10:56 -06:00
Jason Gerard DeRose
316bd855d5 Added util.configure_logging() function; API.bootstrap() now calls util.configure_logging() 2008-10-28 01:39:02 -06:00
Jason Gerard DeRose
83d6c95e46 API.load_plugins() no longer takes dry_run=False kwarg and instead checks in env.mode == 'unit_test' to decide whether to load the plugins; it also only loads ipa_server.plugins in env.in_server is True 2008-10-27 23:39:43 -06:00
Jason Gerard DeRose
bb9691099b API.bootstrap() now calls Env._finalize_core(); updated unit tests 2008-10-27 15:36:41 -06:00
Jason Gerard DeRose
e6254026fe Implemented basic CLI.bootstrap(); added corresponding unit tests 2008-10-27 15:19:49 -06:00
Jason Gerard DeRose
d76202fea3 API.env is now an Env instance rather than an Environment instance 2008-10-27 01:35:40 -06:00
Jason Gerard DeRose
03accc5fb3 Copied plugin loading function from load_plugins.py to util.py; API.load_plugins() method now calls functions in util 2008-10-27 00:23:43 -06:00
Jason Gerard DeRose
4fe03f5e17 Added API.load_plugins() place-holder, which cascades call to API.bootstrap() 2008-10-26 23:53:44 -06:00
Jason Gerard DeRose
6b8abb0d78 Implemented placeholder API.bootstrap() method; added API __doing(), __do_if_not_done(), isdone() methods borrowed from Env; API.finalize() now cascades call to API.bootstrap() 2008-10-26 23:28:06 -06:00
Jason Gerard DeRose
5e0a0fa745 In second example in NameSpace docstring, renamed 'member' class to 'Member' to make the example clearer 2008-10-21 08:47:08 -06:00
Jason Gerard DeRose
77a378bd61 Some PEP-257 and reStructuredText cleanup in plugable.py 2008-10-18 01:02:31 -06:00
Jason Gerard DeRose
f1eb74e22c make-test now runs doctests also; fixed several broken doctests 2008-10-17 20:50:34 -06:00
Martin Nagy
3a80297b04 Reworking Environment, moved it to config.py 2008-10-17 23:11:51 +02:00
Jason Gerard DeRose
20fa90cfb6 Some small cleanup on Environment, filled in docstrings 2008-10-14 00:39:23 -06:00
Rob Crittenden
75bad44c27 Enable the verbose flag to pass thru xmlrpc 2008-10-10 05:23:00 -04:00
Martin Nagy
149429f305 Environment is now subclassed from object, rather then dict. Added tests for Environment and config.py 2008-10-02 17:22:41 -06:00
Martin Nagy
afdc721038 Add support for environment variables, change tests accordingly 2008-09-29 17:45:14 -06:00
Jason Gerard DeRose
023f612921 361: Implemented crud.Add.get_options() method; added corresponding unit tests 2008-09-25 02:13:16 +00:00
Jason Gerard DeRose
f531f7da81 354: Added NameSpace.__todict__() method that returns copy of NameSpace.__map; updated NameSpace unit test to also test __todict__() 2008-09-24 23:49:44 +00:00
Jason Gerard DeRose
3e70c3b56b 325: API.finalize() now creates instance attribtue 'plugins', which is a tuple of PluginInfo objects; renamed show_plugins cli command to namespaces; added new cli command plugins 2008-09-24 04:44:52 +00:00
Jason Gerard DeRose
19bbc48eb6 323: Added Command.run() method that dispatches to execute() or forward(); added corresponding unit tests 2008-09-24 02:52:19 +00:00
Jason Gerard DeRose
f3aaf65f1c 320: plugable.API now respects the Plugin.__proxy__ flag; added test for plugins without proxy to unit tests for API 2008-09-24 00:44:41 +00:00
Jason Gerard DeRose
b206ef6843 314: Completed some missing features in Command.__call__(); removed depreciated Command.print_call() method 2008-09-22 01:28:57 +00:00
Jason Gerard DeRose
f73d976bda 307: Split Plugin.finalize() into two steps 1) Plugin.set_api() and 2) Plugin.finalize(); updated unit tests 2008-09-21 21:50:56 +00:00
Jason Gerard DeRose
5872221bd4 306: Added Plugin.set_api() method; added corresponding unit tests 2008-09-21 21:30:19 +00:00
Jason Gerard DeRose
ef0d7a71ab 299: Cleaned up unit tests for ReadOnly class 2008-09-18 22:39:48 +00:00
Jason Gerard DeRose
81ebe078be 298: Cleaned up docstrings in ReadOnly methods 2008-09-18 22:01:04 +00:00
Jason Gerard DeRose
e524c826db 297: Added a better example in docstring for ReadOnly 2008-09-18 21:45:25 +00:00
Jason Gerard DeRose
14eb96493b 296: Added more to docstrings for NameSpace.__iter_() and NameSpace.__call__() 2008-09-18 21:23:05 +00:00
Jason Gerard DeRose
84a721d408 294: NameSpace no longer subclasses from DictProxy; NameSpace.__getitem__() now works with int and slice objects 2008-09-18 20:35:23 +00:00
Jason Gerard DeRose
0453aa465f 274: NameSpace.__init__() now takes sort=True keyword arument to allow for non-sorted NameSpaces; updated and improved NameSpace unit tests 2008-09-09 23:10:49 +00:00
Jason Gerard DeRose
13f030d91e 271: Improved __repr__ methods for better output from the show-plugins command 2008-09-08 21:51:05 +00:00
Jason Gerard DeRose
e74713a076 267: Finished builtin CLI api command 2008-09-08 21:37:02 +00:00
Jason Gerard DeRose
8b7fe7139d 228: plugable.check_name() now uses errors.check_type() 2008-09-02 17:29:01 +00:00
Jason Gerard DeRose
ab10f0843b 179: DictProxy now has __call__() method that iterates through the values; removed __call__() method from NameSpace as it subclasses from DictProxys; DictProxy unit tests now test __call__() 2008-08-15 05:19:02 +00:00
Jason Gerard DeRose
a24f2121d5 178: Registrar now subclasses from DictProxy; made Registrar.__iter__ behave same as the other container emulation in plugable.py, and made the dictorary interface return the base and the attribute interface return the MagicDict; updated API class and unit tests 2008-08-15 05:07:17 +00:00
Jason Gerard DeRose
5ed58fdb42 177: Docstring cleanup in NameSpace.__call__() 2008-08-15 03:45:07 +00:00
Jason Gerard DeRose
db8099febc 176: PluginProxy now subclasses from SetProxy 2008-08-15 03:41:17 +00:00
Jason Gerard DeRose
233293fb4a 175: Renamed Proxy to PluginProxy 2008-08-15 03:32:38 +00:00
Jason Gerard DeRose
ec0596b429 174: Fleshed out docstrings for SetProxy, DictProxy, and MagicDict 2008-08-15 03:24:37 +00:00
Jason Gerard DeRose
3e3b596f68 173: NameSpace now subclasses from DictProxy 2008-08-15 01:46:11 +00:00
Jason Gerard DeRose
1a92bdf29b 172: API now subclasses from DictProxy 2008-08-15 01:32:20 +00:00
Jason Gerard DeRose
e43a5c642e 171: MagicDict now subclasses from DictProxy; updated unit tests 2008-08-15 01:24:51 +00:00
Jason Gerard DeRose
f6c2181eeb 170: Added SetProxy and DictProxy classes to plugable so container emulation can be consolidated 2008-08-15 01:04:19 +00:00
Jason Gerard DeRose
88a5b3ae25 169: Renamed DictProxy to MagicDict 2008-08-14 23:49:36 +00:00
Jason Gerard DeRose
07cd537277 168: plugable.API now implements the all the usual container methods 2008-08-14 22:13:42 +00:00
Jason Gerard DeRose
5f38daf6de 167: In API.finalize(), lock(plugin) is used instead of plugin.__lock__(); more docstring improvements in plugable.py 2008-08-14 21:40:37 +00:00
Jason Gerard DeRose
d229a76474 165: Added unit tests for plugable.lock() function; replaced occurances of 'self.__lock__()' with 'lock(self)' in plugable.py 2008-08-14 20:32:35 +00:00
Jason Gerard DeRose
43c04f1cd3 163: Docstring improvement for ipalib/__init__.py and plugable.py 2008-08-14 19:36:54 +00:00
Jason Gerard DeRose
f423f2c9f0 162: Added link to container emulation documentation in plugable.py docstring 2008-08-14 18:59:12 +00:00
Jason Gerard DeRose
7c64c8b954 161: Registrar now takes advantage of DictProxy; updated corresponding unit tests 2008-08-14 18:50:21 +00:00
Jason Gerard DeRose
87cad5078a 160: DictProxy now checks type of d in __init__(); updated unit tests 2008-08-14 17:29:13 +00:00
Jason Gerard DeRose
b403fd822b 159: Added plugable.DictProxy class; added corresponding unit tests; added setitem(), delitem() functions to tstutil 2008-08-14 17:21:21 +00:00
Jason Gerard DeRose
ca53615ddd 158: Name local arg 'cls' to 'klass' in Registrar methods to avoid confusion with classmethods; some docstring improvement in Registrar 2008-08-14 09:38:28 +00:00
Jason Gerard DeRose
a3dc04ade4 157: More docstring cleanup; fixed remaining epydoc warnings 2008-08-14 09:01:02 +00:00
Jason Gerard DeRose
f0dfb9f873 156: Fixed all broken docstring cross references 2008-08-14 08:28:48 +00:00
Jason Gerard DeRose
8c27f4c2de 155: More docstring cleanup in plugable.py 2008-08-14 07:43:43 +00:00
Jason Gerard DeRose
00f4272662 154: Merged ProxyTarget functionality into Plugin to make things a bit clearer 2008-08-14 07:10:07 +00:00
Jason Gerard DeRose
a59d6698d2 153: Started cleaning up docstrings in Proxy and also experimented with restructuredtext formatting 2008-08-14 06:53:05 +00:00
Jason Gerard DeRose
ba8d32a110 150: NameSpace.__iter__() now iterates through the names, not the members; added NameSpace.__call__() method which iterates through the members; NameSpace no longer requires members to be Proxy instances; updated unit tests and affected code; cleaned up NameSpace docstrings and switch to epydoc param docstrings 2008-08-14 05:46:20 +00:00
Jason Gerard DeRose
0fed74b56d 138: Added ProxyTarget.doc property; CLI.print_commands() now uses cmd.doc instead of cmd.get_doc() 2008-08-13 02:34:36 +00:00
Jason Gerard DeRose
70cbe10624 124: Fixed case in example in ReadOnly class docstring 2008-08-12 23:45:36 +00:00
Jason Gerard DeRose
7db3aae1b2 123: API.finalize() now raises AssetionError if called more than once; added corresponding unit tests 2008-08-12 23:40:36 +00:00
Jason Gerard DeRose
b72cfa5dcc 121: Renamed API.__call__() method to API.finalize() 2008-08-12 22:52:37 +00:00
Jason Gerard DeRose
f767543fe7 120: Moved ProxyTarget below Proxy to emphasize relationship with Plugin; added docstrings for ProxyTarget.implements() and implemented_by() classmethods; fixed typo in Plugin.finalize() docstring 2008-08-12 22:40:06 +00:00
Jason Gerard DeRose
8640523632 119: Added ProxyTarget.implemented_by() classmethod; added corresponding unit tests 2008-08-12 21:45:54 +00:00
Jason Gerard DeRose
d7958f3fde 103: Fixed missing API.__keys assignment 2008-08-09 19:48:47 +00:00
Jason Gerard DeRose
0edb22c9ac 102: After the API instance calls plugin.finalize(), it also calls plugin.__lock__() 2008-08-09 19:39:58 +00:00
Jason Gerard DeRose
543aea31a4 101: Registrar now subclasses from ReadOnly 2008-08-09 19:33:13 +00:00
Jason Gerard DeRose
0e532cd7b3 100: Cleaned up NameSpace docstrings; cleanup up NameSpace unit tests 2008-08-09 19:28:01 +00:00
Jason Gerard DeRose
e756e12718 99: Cleaned up unit tests for plugable.Plugin 2008-08-09 19:09:10 +00:00
Jason Gerard DeRose
5315514f6c 98: Completed docstrings in Proxy 2008-08-09 18:58:46 +00:00
Jason Gerard DeRose
9712eae51c 97: Some whitespace and docstring cleanup; Plugin now subclasses from ProxyTarget 2008-08-09 05:19:40 +00:00
Jason Gerard DeRose
409f688ef5 96: Fixed typo is ReadOnly docstring 2008-08-09 04:37:37 +00:00
Jason Gerard DeRose
72f3132d2b 95: Improved docstrings for ReadOnly class; added ReadOnly.__islocked__() method; added corresponding unit tests 2008-08-09 04:35:06 +00:00
Jason Gerard DeRose
3495c67d57 94: Renamed Proxy._clone() method to Proxy.__clone__(); updated unit tests 2008-08-09 01:46:12 +00:00
Jason Gerard DeRose
cc5b017494 93: Added Proxy.implements() method; addeded corresponding unit tests 2008-08-09 01:06:42 +00:00
Jason Gerard DeRose
45201e31c1 92: Added ProxyTarget.name property; added corresponding unit tests 2008-08-08 23:26:17 +00:00
Jason Gerard DeRose
e3811f3f45 91: Fleshed out docstrings in plugable.Proxy 2008-08-08 23:07:22 +00:00
Jason Gerard DeRose
5a1223e943 90: Renamed plugable.Abstract to ProxyTarget, which now subclasses from ReadOnly; updated unit tests 2008-08-08 22:45:09 +00:00
Jason Gerard DeRose
1744723d11 88: Renamed ReadOnly._lock() to ReadOnly.__lock__(); updated subclasses and unit tests 2008-08-08 21:49:09 +00:00
Jason Gerard DeRose
3fe13d5945 87: Moved to_cli(), from_cli() functions from plugable.py into new cli.py file; moved corresponding unit tests into new test_cli.py file 2008-08-08 21:46:23 +00:00
Jason Gerard DeRose
fdfa827a36 86: Actually change *all* tab indentation to 4-space: 'sed s/\t/ /g' 2008-08-08 21:40:03 +00:00
Jason Gerard DeRose
58a3b1d091 85: Added ReadOnly._lock() method to make class easier to use; updated subclasses and unit tests 2008-08-08 21:28:56 +00:00
Jason Gerard DeRose
6dc60a18c7 84: Renamed Proxy.__public to Proxy.__public__ so it works with Abstract.implements() 2008-08-08 20:55:08 +00:00
Jason Gerard DeRose
d171dc9011 82: Cleaned up unit tests for public.option; added some doodles in plugable.Base 2008-08-08 19:53:45 +00:00
Jason Gerard DeRose
8e46824815 81: Switch from tab to 4-space indentation 2008-08-08 17:11:29 +00:00
Jason Gerard DeRose
f904cb0422 71: Proxy now uses base.__public__ instead of base.public; updated unit tests 2008-08-07 00:51:34 +00:00
Jason Gerard DeRose
778a019129 70: Plugin.__repr__ now again returns 'module_name.class_name()' form; updated unit test 2008-08-07 00:35:51 +00:00
Jason Gerard DeRose
19dbd57141 69: Made Proxy.base a private attribute; updated unit tests 2008-08-07 00:21:50 +00:00
Jason Gerard DeRose
7335af8a9e 68: Ported to changes in NameSpace, Proxy; updated unit tests 2008-08-07 00:14:38 +00:00
Jason Gerard DeRose
03bad04e7b 67: Deleted NameSpace, Proxy; renamed NameSpace2, Proxy2 to NameSpace, Proxy 2008-08-06 23:22:29 +00:00
Jason Gerard DeRose
e63453a858 66: Added NameSpace2 (bit simpler than NameSpace, better suited to Proxy2); added corresponding unit tests 2008-08-06 22:59:50 +00:00
Jason Gerard DeRose
f13f1226b4 65: Finished simplified Proxy2 class; updated unit tests 2008-08-06 21:54:56 +00:00
Jason Gerard DeRose
0c7769473c 64: Almost finish with Proxy2, where base class is passed to __init__ and methods use @export decorator; added corresponding unit tests 2008-08-06 20:38:07 +00:00
Jason Gerard DeRose
495f96a73f 62: NameSpace no longer takes base=base kwarg 2008-08-06 15:06:39 +00:00
Jason Gerard DeRose
4e825ba2d9 61: Proxy now does a setattr for all callable attributes in __slots__ (and uses __getattr__ for rest 2008-08-06 14:59:54 +00:00
Jason Gerard DeRose
62d2cd65f2 59: Removed NameSpace.__call__ method (returned max_len) 2008-08-06 14:27:33 +00:00
Jason Gerard DeRose
2081987186 58: A bit of docstring cleanup in plugable.py 2008-08-06 14:22:38 +00:00
Jason Gerard DeRose
e618d99bc7 57: to_cli() function no longer replaces '__' with '.'; from_cli() function no longer replaces '.' with '__'; updated unit tests 2008-08-06 03:58:15 +00:00
Jason Gerard DeRose
8865f516df 56: Fixed Proxy.__call__ 2008-08-06 03:51:33 +00:00
Jason Gerard DeRose
277685439c 55: Cleaned up print_api() function in ipa script 2008-08-06 03:27:00 +00:00
Jason Gerard DeRose
c6f69e1c66 54: Added plugable.Proxy._clone() method; fleshed out public.obj; updated unit tests; port ipa script 2008-08-06 02:00:18 +00:00
Jason Gerard DeRose
f31f7813fe 53: Changed plugable.Registar so the same plugin can be added to in the ns for more than one base (for cmd and mthd) 2008-08-05 23:34:59 +00:00
Jason Gerard DeRose
159207514f 52: Got cli working against new framework 2008-08-05 22:21:57 +00:00
Jason Gerard DeRose
56fa454fdd 47: Added plugable.check_identifier() function; added corresponding unit tests 2008-08-05 06:33:09 +00:00
Jason Gerard DeRose
d134b48306 46: plugable.API now takes allowed base class in __init__ and creates Registrar at API.register, thereby coupling the two; updated correspending unit tests 2008-08-05 05:12:09 +00:00
Jason Gerard DeRose
2b3c2238f6 45: Fixed docstring typo in plugable.__doc__ 2008-08-05 04:40:44 +00:00
Jason Gerard DeRose
42c53b2a53 44: Added Plugin.finalize() method called by API after all plugin instances are created; updated corresponding unit tests 2008-08-05 04:24:19 +00:00
Jason Gerard DeRose
c3bf5ad857 43: Fleshed out new plugable.API class; added corresponding unit tests 2008-08-05 03:21:52 +00:00