From 3fb477c69da2f33c9f0719753da77aac78cea1ef Mon Sep 17 00:00:00 2001 From: Trey Smith Date: Wed, 6 Jun 2012 07:31:42 -0700 Subject: [PATCH] added loader module for importing a python class or django model by name --- geocamUtil/loader.py | 29 +++++++++++++++++++++++++++++ geocamUtil/storeTest.py | 31 +++++++++++++++++++++++++++++++ geocamUtil/tests.py | 1 + 3 files changed, 61 insertions(+) create mode 100644 geocamUtil/loader.py create mode 100644 geocamUtil/storeTest.py diff --git a/geocamUtil/loader.py b/geocamUtil/loader.py new file mode 100644 index 0000000..50ffbac --- /dev/null +++ b/geocamUtil/loader.py @@ -0,0 +1,29 @@ +# __BEGIN_LICENSE__ +# Copyright (C) 2008-2010 United States Government as represented by +# the Administrator of the National Aeronautics and Space Administration. +# All Rights Reserved. +# __END_LICENSE__ + +""" +Utilities for loading Python classes and Django models by name. Modeled +in part on django.utils.importlib. +""" + +def getModClass(name): + """converts 'app_name.ModelName' to ['stuff.module', 'ClassName']""" + try: + dot = name.rindex('.') + except ValueError: + return name, '' + return name[:dot], name[dot + 1:] + + +def getModelByName(qualifiedName): + """ + converts 'module_name.ClassName' to a class object + """ + appName, className = qualifiedName.split('.', 1) + modelsName = '%s.models' % appName + __import__(modelsName) + mod = sys.modules[modelsName] + return getattr(mod, className) diff --git a/geocamUtil/storeTest.py b/geocamUtil/storeTest.py new file mode 100644 index 0000000..ba5580b --- /dev/null +++ b/geocamUtil/storeTest.py @@ -0,0 +1,31 @@ +# __BEGIN_LICENSE__ +# Copyright (C) 2008-2010 United States Government as represented by +# the Administrator of the National Aeronautics and Space Administration. +# All Rights Reserved. +# __END_LICENSE__ + +import shutil + +from geocamUtil.store import FileStore, LruCacheStore + + +class StoreTest(TestCase): + def storeTest(self, storeFactory): + tempDir = tempfile.mkdtemp('-storeTestDir') + + store1 = storeFactory(tempDir) + store1['a'] = 1 + store1['b'] = 2 + store1.sync() + + store2 = storeFactory(tempDir) + self.assertEqual(store2['a'], 1) + self.assertEqual(store2['b'], 2) + + shutil.rmtree(tempDir) + + def test_FileStore(self): + self.storeTest(FileStore) + + def test_LruCacheStore(self): + self.storeTest(lambda path: LruCacheStore(FileStore(path), 100)) diff --git a/geocamUtil/tests.py b/geocamUtil/tests.py index cdc68e1..704244d 100644 --- a/geocamUtil/tests.py +++ b/geocamUtil/tests.py @@ -14,6 +14,7 @@ from geocamUtil.models.ExtrasFieldTest import ExtrasFieldTest from geocamUtil.BuilderTest import BuilderTest from geocamUtil.InstallerTest import InstallerTest +from geocamUtil.storeTest import StoreTest from geocamUtil.icons.rotateTest import IconsRotateTest from geocamUtil.icons.svgTest import IconsSvgTest