]> scripts.mit.edu Git - wizard.git/blobdiff - wizard/deploy.py
Add infrastructure for app subclasses.
[wizard.git] / wizard / deploy.py
index a5a5ee181074e79022beb9e80e1939392976f130..b6d6f6648630c2455d703a6974079175097d8fe0 100644 (file)
@@ -76,6 +76,14 @@ class Application(object):
         if version not in self.versions:
             self.versions[version] = ApplicationVersion(distutils.version.LooseVersion(version), self)
         return self.versions[version]
+    @staticmethod
+    def make(name):
+        """Makes an application, but uses the correct subtype if available."""
+        try:
+            __import__("wizard.app." + name)
+            return getattr(wizard.app, name).Application(name)
+        except ImportError:
+            return Application(name)
 
 class ApplicationVersion(object):
     """Represents an abstract notion of a version for an application"""
@@ -112,7 +120,7 @@ class ApplicationVersion(object):
                 version = "trunk"
         except ValueError: # mostly from the a, b = foo.split(' ')
             raise DeploymentParseError(deploydir, location)
-        if not applookup: applookup = applications
+        if not applookup: applookup = applications()
         try:
             # defer to the application for version creation
             return applookup[app].makeVersion(version)
@@ -160,7 +168,12 @@ application_list = [
     # these are technically deprecated
     "advancedpoll", "gallery",
 ]
-
-"""Hash table for looking up string application name to instance"""
-applications = dict([(n,Application(n)) for n in application_list ])
+_applications = None
+
+def applications():
+    """Hash table for looking up string application name to instance"""
+    global _applications
+    if not _applications:
+        _applications = dict([(n,Application.make(n)) for n in application_list ])
+    return _applications