| @@ -0,0 +1,42 @@ | |||||
| """ | |||||
| Generic loader of extensions (plugins & templates) | |||||
| """ | |||||
| import sys | |||||
| from hyde.exceptions import HydeException | |||||
| plugins = {} | |||||
| templates = {} | |||||
| def load_python_object(name): | |||||
| """ | |||||
| Loads a python module from string | |||||
| """ | |||||
| (module_name, _, object_name) = name.rpartition(".") | |||||
| if module_name == '': | |||||
| (module_name, object_name) = (object_name, module_name) | |||||
| try: | |||||
| module = __import__(module_name) | |||||
| except ImportError: | |||||
| raise HydeException("The given module name [%s] is invalid." % | |||||
| module_name) | |||||
| if object_name == '': | |||||
| return module | |||||
| try: | |||||
| module = sys.modules[module_name] | |||||
| except KeyError: | |||||
| raise HydeException("Error occured when loading module [%s]" % | |||||
| module_name) | |||||
| try: | |||||
| return getattr(module, object_name) | |||||
| except AttributeError: | |||||
| raise HydeException("Cannot load the specified plugin [%s]. " | |||||
| "The given module [%s] does not contain the " | |||||
| "desired object [%s]. Please fix the" | |||||
| "configuration or ensure that the module is " | |||||
| "installed properly" % | |||||
| (name, module_name, object_name)) | |||||
| @@ -0,0 +1,54 @@ | |||||
| # -*- coding: utf-8 -*- | |||||
| """ | |||||
| Use nose | |||||
| `$ pip install nose` | |||||
| `$ nosetests` | |||||
| """ | |||||
| from hyde.loader import load_python_object | |||||
| from nose.tools import raises | |||||
| import os | |||||
| from hyde.exceptions import HydeException | |||||
| def test_can_load_locals(): | |||||
| file_class = load_python_object('hyde.fs.File') | |||||
| assert file_class | |||||
| f = file_class(__file__) | |||||
| assert f | |||||
| assert f.name == os.path.basename(__file__) | |||||
| def test_can_load_from_python_path(): | |||||
| markdown = load_python_object('markdown.markdown') | |||||
| assert markdown | |||||
| assert "<h3>h3</h3>" == markdown("### h3") | |||||
| def test_can_load_module_without_dot(): | |||||
| yaml = load_python_object('yaml') | |||||
| abc = yaml.load(""" | |||||
| d: efg | |||||
| l: mno | |||||
| """) | |||||
| assert abc['d'] == 'efg' | |||||
| assert abc['l'] == 'mno' | |||||
| @raises(HydeException) | |||||
| def test_exception_raised_for_invalid_module(): | |||||
| load_python_object("junk.junk.junk") | |||||
| assert False | |||||
| @raises(HydeException) | |||||
| def test_exception_raised_for_invalid_object(): | |||||
| load_python_object("markdown.junk") | |||||
| assert False | |||||
| @@ -1,19 +0,0 @@ | |||||
| # -*- coding: utf-8 -*- | |||||
| """ | |||||
| Use nose | |||||
| `$ pip install nose` | |||||
| `$ nosetests` | |||||
| """ | |||||
| from hyde.util import load_python_object | |||||
| import os | |||||
| def test_can_load_locals(): | |||||
| file_class = load_python_object('hyde.fs.File') | |||||
| assert file_class | |||||
| f = file_class(__file__) | |||||
| assert f | |||||
| assert f.name == os.path.basename(__file__) | |||||
| @@ -1,14 +0,0 @@ | |||||
| """ | |||||
| Hyde utilities | |||||
| """ | |||||
| import sys | |||||
| def load_python_object(name): | |||||
| """ | |||||
| Loads a python module from string | |||||
| """ | |||||
| (module_name, _ , object_name) = name.rpartition(".") | |||||
| __import__(module_name) | |||||
| module = sys.modules[module_name] | |||||
| return getattr(module, object_name) | |||||