dabo Commit
Revision 7300
Date: 2012-12-29 20:45:55 -0800 (Sat, 29 Dec 2012)
Author: Paul
Trac: http://trac.dabodev.com/changeset/7300

Changed:
U   trunk/dabo/__init__.py
U   trunk/dabo/biz/dAutoBizobj.py
U   trunk/dabo/biz/test/test_dBizobj.py
U   trunk/dabo/dApp.py
U   trunk/dabo/dEvents.py
U   trunk/dabo/dObject.py
U   trunk/dabo/dPref.py
U   trunk/dabo/dReportWriter.py
U   trunk/dabo/dSecurityManager.py
U   trunk/dabo/db/test/test_dConnectInfo.py
U   trunk/dabo/db/test/test_dConnection.py
U   trunk/dabo/db/test/test_dCursorMixin.py
U   trunk/dabo/lib/DesignerClassConverter.py
U   trunk/dabo/lib/DesignerUtils.py
U   trunk/dabo/lib/EasyDialogBuilder.py
U   trunk/dabo/lib/RemoteConnector.py
U   trunk/dabo/lib/eventMixin.py
U   trunk/dabo/lib/reporting_tests/invoice_demo/invoice_progressControl.py
U   trunk/dabo/ui/dDataControlMixinBase.py
U   trunk/dabo/ui/dialogs/HotKeyEditor.py
U   trunk/dabo/ui/dialogs/PreferenceDialog.py
U   trunk/dabo/ui/dialogs/SortingForm.py
U   trunk/dabo/ui/dialogs/Wizard.py
U   trunk/dabo/ui/dialogs/WizardPage.py
U   trunk/dabo/ui/dialogs/about.py
U   trunk/dabo/ui/dialogs/htmlAbout.py
U   trunk/dabo/ui/dialogs/infoMessage.py
U   trunk/dabo/ui/dialogs/login.py
U   trunk/dabo/ui/uitk/test.py
U   trunk/dabo/ui/uiwx/__init__.py
U   trunk/dabo/ui/uiwx/concordance.py
U   trunk/dabo/ui/uiwx/dBaseMenuBar.py
U   trunk/dabo/ui/uiwx/dBitmap.py
U   trunk/dabo/ui/uiwx/dBorderSizer.py
U   trunk/dabo/ui/uiwx/dBorderlessButton.py
U   trunk/dabo/ui/uiwx/dCalendar.py
U   trunk/dabo/ui/uiwx/dCheckBox.py
U   trunk/dabo/ui/uiwx/dCheckList.py
U   trunk/dabo/ui/uiwx/dComboBox.py
U   trunk/dabo/ui/uiwx/dControlItemMixin.py
U   trunk/dabo/ui/uiwx/dDatePicker.py
U   trunk/dabo/ui/uiwx/dDateTextBox.py
U   trunk/dabo/ui/uiwx/dDialog.py
U   trunk/dabo/ui/uiwx/dDockForm.py
U   trunk/dabo/ui/uiwx/dDropdownList.py
U   trunk/dabo/ui/uiwx/dEditableList.py
U   trunk/dabo/ui/uiwx/dEditor.py
U   trunk/dabo/ui/uiwx/dFont.py
U   trunk/dabo/ui/uiwx/dForm.py
U   trunk/dabo/ui/uiwx/dFormMain.py
U   trunk/dabo/ui/uiwx/dGauge.py
U   trunk/dabo/ui/uiwx/dGlWindow.py
U   trunk/dabo/ui/uiwx/dGrid.py
U   trunk/dabo/ui/uiwx/dHtmlBox.py
U   trunk/dabo/ui/uiwx/dHyperLink.py
U   trunk/dabo/ui/uiwx/dImage.py
U   trunk/dabo/ui/uiwx/dImageMixin.py
U   trunk/dabo/ui/uiwx/dLabel.py
U   trunk/dabo/ui/uiwx/dLed.py
U   trunk/dabo/ui/uiwx/dLinePlot.py
U   trunk/dabo/ui/uiwx/dListControl.py
U   trunk/dabo/ui/uiwx/dMaskedTextBox.py
U   trunk/dabo/ui/uiwx/dMediaControl.py
U   trunk/dabo/ui/uiwx/dMenu.py
U   trunk/dabo/ui/uiwx/dMessageBox.py
U   trunk/dabo/ui/uiwx/dNumericBox.py
U   trunk/dabo/ui/uiwx/dPage.py
U   trunk/dabo/ui/uiwx/dPageFrameNoTabs.py
U   trunk/dabo/ui/uiwx/dPanel.py
U   trunk/dabo/ui/uiwx/dPdfWindow.py
U   trunk/dabo/ui/uiwx/dPemMixin.py
U   trunk/dabo/ui/uiwx/dRadioList.py
U   trunk/dabo/ui/uiwx/dReportProgress.py
U   trunk/dabo/ui/uiwx/dRichTextBox.py
U   trunk/dabo/ui/uiwx/dSearchBox.py
U   trunk/dabo/ui/uiwx/dShell.py
U   trunk/dabo/ui/uiwx/dSlidePanelControl.py
U   trunk/dabo/ui/uiwx/dSlider.py
U   trunk/dabo/ui/uiwx/dSpinner.py
U   trunk/dabo/ui/uiwx/dSplitForm.py
U   trunk/dabo/ui/uiwx/dSplitter.py
U   trunk/dabo/ui/uiwx/dStatusBar.py
U   trunk/dabo/ui/uiwx/dTextBox.py
U   trunk/dabo/ui/uiwx/dTextBoxMixin.py
U   trunk/dabo/ui/uiwx/dTimer.py
U   trunk/dabo/ui/uiwx/dToggleButton.py
U   trunk/dabo/ui/uiwx/dToolBar.py
U   trunk/dabo/ui/uiwx/dTreeView.py
U   trunk/dabo/ui/uiwx/object_inspector.py
U   trunk/dabo/ui/uiwx/test/test_dEditBox.py
U   trunk/dabo/ui/uiwx/test/test_dForm.py
U   trunk/dabo/ui/uiwx/test/test_dTextBox.py
U   trunk/dabo/ui/uiwx/test.py
U   trunk/dabo/ui/uiwx/uiApp.py
U   trunk/daboserver/appSource/people/main.py
U   trunk/demo/DaboDemo.py
U   trunk/demo/Modules.py
U   trunk/demo/samples/bubblet.py
U   trunk/demo/samples/dBitmapButton.py
U   trunk/demo/samples/dButton.py
U   trunk/demo/samples/dCheckBox.py
U   trunk/demo/samples/dDateTextBox.py
U   trunk/demo/samples/dDockTabs.py
U   trunk/demo/samples/dEditBox.py
U   trunk/demo/samples/dGauge.py
U   trunk/demo/samples/dGrid.py
U   trunk/demo/samples/dGridSizer.py
U   trunk/demo/samples/dHtmlBox.py
U   trunk/demo/samples/dHyperLink.py
U   trunk/demo/samples/dImage.py
U   trunk/demo/samples/dLabel.py
U   trunk/demo/samples/dLed.py
U   trunk/demo/samples/dLinePlot.py
U   trunk/demo/samples/dPageFrame.py
U   trunk/demo/samples/dPageList.py
U   trunk/demo/samples/dPageSelect.py
U   trunk/demo/samples/dPageStyled.py
U   trunk/demo/samples/dPageToolBar.py
U   trunk/demo/samples/dSizer.py
U   trunk/demo/samples/dSlidePanelControl.py
U   trunk/demo/samples/dSlider.py
U   trunk/demo/samples/dSpinner.py
U   trunk/demo/samples/dTextBox.py
U   trunk/demo/samples/dToggleButton.py
U   trunk/demo/samples/dTreeView.py
U   trunk/demo/samples/games/Minesweeper.py
U   trunk/demo/samples/games/Montana.py
U   trunk/demo/samples/games/bubblet/BubblePanel.py
U   trunk/demo/samples/games/bubblet/BubbletForm.py
U   trunk/demo/samples/games/bubblet/StatsForm.py
U   trunk/demo/samples/games/cardlib.py
U   trunk/demo/samples/minesweeper.py
U   trunk/demo/samples/montana.py
U   trunk/demo/setup.py
U   trunk/ide/ClassDesigner.py
U   trunk/ide/ClassDesignerComponents.py
U   trunk/ide/ClassDesignerControlMixin.py
U   trunk/ide/ClassDesignerCustomPropertyDialog.py
U   trunk/ide/ClassDesignerEditor.py
U   trunk/ide/ClassDesignerExceptions.py
U   trunk/ide/ClassDesignerFormMixin.py
U   trunk/ide/ClassDesignerMenu.py
U   trunk/ide/ClassDesignerMethodSheet.py
U   trunk/ide/ClassDesignerObjectPropertySheet.py
U   trunk/ide/ClassDesignerPemForm.py
U   trunk/ide/ClassDesignerSizerPalette.py
U   trunk/ide/ClassDesignerTreeSheet.py
U   trunk/ide/CxnEditor.py
U   trunk/ide/DragHandle.py
U   trunk/ide/Editor.py
U   trunk/ide/HomeDirectoryStatusBar.py
U   trunk/ide/MenuDesigner.py
U   trunk/ide/MenuDesignerComponents.py
U   trunk/ide/MenuDesignerForm.py
U   trunk/ide/MenuDesignerPropForm.py
U   trunk/ide/MenuPanel.py
U   trunk/ide/PrefEditor.cdxml
U   trunk/ide/PrefEditor.py
U   trunk/ide/ReportDesigner.py
U   trunk/ide/wizards/AppWizard/AppWizard.py
U   trunk/ide/wizards/AppWizard/spec-App.py.txt
U   trunk/ide/wizards/AppWizard/spec-Frm.py.txt
U   trunk/ide/wizards/AppWizard/spec-Grd.py.txt
U   trunk/ide/wizards/AppWizard/spec-MenFileOpen.py.txt
U   trunk/ide/wizards/AppWizard/spec-MenReports.py.txt
U   trunk/ide/wizards/AppWizard/spec-PagEdit.py.txt
U   trunk/ide/wizards/AppWizard/spec-PagSelect.py.txt
U   trunk/ide/wizards/AppWizard/spec-PagSelectBase.py.txt
U   trunk/ide/wizards/AppWizard/spec-main.py.txt
U   trunk/ide/wizards/QuickLayoutWizard.py
U   trunk/springboard/main.py
U   trunk/springboard/ui/springboard-code.py
U   trunk/tests/unitTests/Test_dObject.py
U   trunk/tests/unitTests/masterTestSuite.py
U   trunk/tests/unitTests/ui/UIwx/Test_dTextBox.py

Log:
Second of two commits (went ahead and combined them all in this one).

Only import dApp, dPref, dColors, dEvents, ui, biz, and db if 
dabo.implicitImports is True, the default. 

Only localize Dabo if dabo.localizeDabo is True, the default.

As sqlite is part of Python in all supported versions, we no longer 
need to try to import it and offer the nice message on failure, so
that is removed.

Only import dBug.logPoint and define debugout if dabo.importDebugger
is True.

Altered a lot of files to explicitly import the needed imports, even 
though this isn't needed by default yet.

As far as I can tell with extensive testing on Mac, I haven't broken
anything here. When dabo.implicitImports is set to False however,
note the following changes:

  dabo.dApp no longer refers to the dApp class, but when dabo.dApp 
  is imported, refers to the dabo.dApp module.

  dabo.dPref no longer refers to the dPref class, but when dabo.dPref
  is imported, refers to the dabo.dPref module. 



Diff:
Modified: trunk/dabo/__init__.py
===================================================================
--- trunk/dabo/__init__.py      2012-12-30 02:33:03 UTC (rev 7299)
+++ trunk/dabo/__init__.py      2012-12-30 04:45:55 UTC (rev 7300)
@@ -80,31 +80,11 @@
 import locale
 import logging
 import logging.handlers
-try:
-       import pysqlite2
-except ImportError:
-       try:
-               import sqlite3
-       except ImportError:
-               msg = """
+from settings import *
 
-Dabo requires SQLite 3 and the pysqlite2 module. You will have to install these
-free products before running Dabo. You can get them from the following 
locations:
-
-SQLite: http://www.sqlite.org/download.html
-pysqlite2: http://initd.org/tracker/pysqlite
-
-"""
-               sys.exit(msg)
-
 # dApp will change the following values upon its __init__:
 dAppRef = None
 
-# Import global settings (do this first, as other imports may rely on it):
-# NOTE: Yeah, it's namespace pollution, but in this case it is deliberate:
-# we want to make them part of the dabo namespace.
-from settings import *
-
 def getEncoding():
        encoding = locale.getlocale()[1] or locale.getdefaultlocale()[1] or 
defaultEncoding
 
@@ -183,7 +163,8 @@
        log.setLevel(logging.DEBUG)
        log.addHandler(consoleLogHandler)
        if mainLogFile is not None:
-               fileLogHandler = 
logging.handlers.RotatingFileHandler(filename=mainLogFile,
+               fileLogHandler = logging.handlers.RotatingFileHandler(
+                               filename=mainLogFile,
                                maxBytes=maxLogFileSize, encoding=enc)
                fileLogHandler.setLevel(mainLogFileLevel)
                fileFormatter = logging.Formatter(fileFormat)
@@ -200,7 +181,8 @@
        dbActivityLog.setLevel(dbLogLevel)
        dbActivityLog.addHandler(dbConsoleLogHandler)
        if dbLogFile is not None:
-               dbFileLogHandler = 
logging.handlers.RotatingFileHandler(filename=dbLogFile,
+               dbFileLogHandler = logging.handlers.RotatingFileHandler(
+                               filename=dbLogFile,
                                maxBytes=maxLogFileSize, encoding=enc)
                dbFileLogHandler.setLevel(dbLogFileLevel)
                dbFileFormatter = logging.Formatter(dbFileFormat)
@@ -214,6 +196,7 @@
        set the log level. If the passed 'fname' is None, any existing 
file-based
        logger will be closed.
        """
+       import dabo
        if fname is None:
                if dabo.fileLogHandler:
                        # Remove the existing handler
@@ -227,13 +210,13 @@
                        dabo.fileLogHandler.close()
                        dabo.fileLogHandler = None
                dabo.fileLogHandler = 
logging.handlers.RotatingFileHandler(filename=fname,
-                               maxBytes=dabo.maxLogFileSize, 
encoding=getEncoding())
+                               maxBytes=maxLogFileSize, encoding=getEncoding())
                if level:
                        dabo.fileLogHandler.setLevel(level)
                else:
-                       dabo.fileLogHandler.setLevel(dabo.mainLogFileLevel)
-               dabo.fileFormatter = logging.Formatter(dabo.fileFormat)
-               dabo.fileFormatter.datefmt = dabo.mainLogDateFormat
+                       dabo.fileLogHandler.setLevel(mainLogFileLevel)
+               dabo.fileFormatter = logging.Formatter(fileFormat)
+               dabo.fileFormatter.datefmt = mainLogDateFormat
                dabo.fileLogHandler.setFormatter(dabo.fileFormatter)
                dabo.log.addHandler(dabo.fileLogHandler)
 
@@ -256,74 +239,66 @@
                        dabo.dbFileLogHandler.close()
                        dabo.dbFileLogHandler = None
                dabo.dbFileLogHandler = 
logging.handlers.RotatingFileHandler(filename=fname,
-                               maxBytes=dabo.maxLogFileSize, 
encoding=getEncoding())
+                               maxBytes=maxLogFileSize, encoding=getEncoding())
                if level:
                        dabo.dbFileLogHandler.setLevel(level)
                else:
-                       dabo.dbFileLogHandler.setLevel(dabo.mainLogFileLevel)
-               dabo.dbFileFormatter = logging.Formatter(dabo.dbFileFormat)
-               dabo.dbFileFormatter.datefmt = dabo.dbLogDateFormat
+                       dabo.dbFileLogHandler.setLevel(mainLogFileLevel)
+               dabo.dbFileFormatter = logging.Formatter(dbFileFormat)
+               dabo.dbFileFormatter.datefmt = dbLogDateFormat
                dabo.dbFileLogHandler.setFormatter(dabo.dbFileFormatter)
                dabo.dbActivityLog.addHandler(dabo.dbFileLogHandler)
 
-# Install localization service for dabo. dApp will install localization service
-# for the user application separately.
-import dLocalize
-dLocalize.install("dabo")
+if localizeDabo:
+       # Install localization service for dabo. dApp will install localization 
service
+       # for the user application separately.
+       import dLocalize
+       dLocalize.install("dabo")
+
 # On some platforms getfilesystemencoding() and even getdefaultlocale()
 # can return None, so we make sure we always set a reasonable encoding:
-# NOTE: 'defaultEncoding' is imported from 'from settings import *' line above.
 fileSystemEncoding = (sys.getfilesystemencoding()
     or locale.getdefaultlocale()[1] or defaultEncoding)
 
-
-from __version__ import version
-import dColors
-import dEvents
-from lib.utils import ustr
-
-from dBug import logPoint
 if importDebugger:
+       from dBug import logPoint
        try:
                import pudb as pdb
        except ImportError:
                import pdb
        trace = pdb.set_trace
-else:
-       def trace():
-               raise NotImplementedError
 
-from dApp import dApp
-from dPref import dPref
+       def debugout(*args):
+               from lib.utils import ustr
+               txtargs = [ustr(arg) for arg in args]
+               txt = " ".join(txtargs)
+               log = logging.getLogger("Debug")
+               log.debug(txt)
+       # Mangle the namespace so that developers can add lines like:
+       #               debugo("Some Message")
+       # or
+       #               debugout("Another Message", self.Caption)
+       # to their code for debugging.
+       # (I added 'debugo' as an homage to Whil Hentzen!)
+       import __builtin__
+       __builtin__.debugo = __builtin__.debugout = debugout
 
-def debugout(*args):
-       txtargs = [ustr(arg) for arg in args]
-       txt = " ".join(txtargs)
-       log = logging.getLogger("Debug")
-       log.debug(txt)
-# Mangle the namespace so that developers can add lines like:
-#              debugo("Some Message")
-# or
-#              debugout("Another Message", self.Caption)
-# to their code for debugging.
-# (I added 'debugo' as an homage to Whil Hentzen!)
-import __builtin__
-__builtin__.debugo = __builtin__.debugout = debugout
+from __version__ import version
+if implicitImports:
+       import dColors
+       import dEvents
+       import dabo.db
+       import dabo.biz
+       import dabo.ui
+       from dApp import dApp
+       from dPref import dPref
 
-# Make sure dabo.db, dabo.biz, and dabo.ui are imported:
-import dabo.db
-import dabo.biz
-import dabo.ui
-
 # Store the base path to the framework
 frameworkPath = os.path.dirname(__file__)
 
+# Subdirectories that make up a standard Dabo app
+_standardDirs = ("biz", "cache", "db", "lib", "reports", "resources", "test", 
"ui")
 
-# Define the standard Dabo subdirectory stucture for apps.
-def _getAppDirectoryNames():
-       return ("biz", "cache", "db", "lib", "reports", "resources", "test", 
"ui")
-
-
 # Method to create a standard Dabo directory structure layout
 def makeDaboDirectories(homedir=None):
        """If homedir is passed, the directories will be created off of that
@@ -333,12 +308,11 @@
        currLoc = os.getcwd()
        if homedir is not None:
                os.chdir(homedir)
-       for d in _getAppDirectoryNames():
+       for d in _standardDirs:
                if not os.path.exists(d):
                        os.mkdir(d)
        os.chdir(currLoc)
 
-
 def quickStart(homedir=None):
        """This creates a bare-bones application in either the specified
        directory, or the current one if none is specified.
@@ -355,10 +329,11 @@
        makeDaboDirectories()
        open("main.py", "w").write("""#!/usr/bin/env python
 # -*- coding: utf-8 -*-
-import dabo
+import dabo.ui
 dabo.ui.loadUI("wx")
+from dabo.dApp import dApp
 
-app = dabo.dApp()
+app = dApp()
 
 # IMPORTANT! Change app.MainFormClass value to the name
 # of the form class that you want to run when your
@@ -384,7 +359,7 @@
 ######
 
 """
-       for dd in dabo._getAppDirectoryNames():
+       for dd in _standardDirs:
                fname = "%s/__init__.py" % dd
                txt = template % locals()
                open(fname, "w").write(txt)
@@ -392,18 +367,3 @@
        os.chdir(currLoc)
        print "Application '%s' has been created for you" % homedir
 
-
-# Automatically load a default UI if the environmental variable exists.
-# If the DABO_DEFAULT_UI exists, that ui will be loaded into the dabo.ui
-# global namespace. This is really only meant as a convenience for the
-# dabo developers when rolling single-file distributions - we don't want
-# everyone setting this environment variable. To specify the UI for your
-# app, you should instead set the UI property of the dApp object.
-# We can't do this from within the ui package because of the corss references.
-try:
-       __defaultUI = os.environ["DABO_DEFAULT_UI"]
-except KeyError:
-       __defaultUI = None
-else:
-       dabo.log.info("Automatically loading default ui '%s'..." % __defaultUI)
-       dabo.ui.loadUI(__defaultUI)

Modified: trunk/dabo/biz/dAutoBizobj.py
===================================================================
--- trunk/dabo/biz/dAutoBizobj.py       2012-12-30 02:33:03 UTC (rev 7299)
+++ trunk/dabo/biz/dAutoBizobj.py       2012-12-30 04:45:55 UTC (rev 7300)
@@ -59,6 +59,7 @@
                                        super(DbAdminLogin, 
self).__init__(parent)
 
                                def addControls(self):
+                                       import dabo.dEvents as dEvents
                                        self.Caption = 
self.Application.getAppInfo("appName")
 
                                        self.Sizer = dabo.ui.dSizer("v")
@@ -85,11 +86,11 @@
 
                                        s = dabo.ui.dSizer()
                                        b = self.addObject(dabo.ui.dButton, 
DefaultButton=True, Caption=_("OK"))
-                                       b.bindEvent(dabo.dEvents.Hit, 
self.onHitOK)
+                                       b.bindEvent(dEvents.Hit, self.onHitOK)
                                        s.append(b, border=3)
 
                                        b = self.addObject(dabo.ui.dButton, 
CancelButton=True, Caption=_("Cancel"))
-                                       b.bindEvent(dabo.dEvents.Hit, 
self.onHitCancel)
+                                       b.bindEvent(dEvents.Hit, 
self.onHitCancel)
                                        s.append(b, border=3)
 
                                        self.Sizer.append(lblmain, border=3, 
halign="center")

Modified: trunk/dabo/biz/test/test_dBizobj.py
===================================================================
--- trunk/dabo/biz/test/test_dBizobj.py 2012-12-30 02:33:03 UTC (rev 7299)
+++ trunk/dabo/biz/test/test_dBizobj.py 2012-12-30 04:45:55 UTC (rev 7300)
@@ -1,6 +1,8 @@
 # -*- coding: utf-8 -*-
 import unittest
 import dabo
+import dabo.db
+import dabo.biz
 from dabo.lib import getRandomUUID
 
 ## Only tests against sqlite, as we already test dCursorMixin against the

Modified: trunk/dabo/dApp.py
===================================================================
--- trunk/dabo/dApp.py  2012-12-30 02:33:03 UTC (rev 7299)
+++ trunk/dabo/dApp.py  2012-12-30 04:45:55 UTC (rev 7300)
@@ -16,8 +16,6 @@
 from zipfile import ZipFile
 from xml.sax._exceptions import SAXParseException
 import dabo
-import dabo.ui
-import dabo.db
 import dabo.dLocalize as dLocalize
 import dabo.dException as dException
 from dabo.dLocalize import _
@@ -25,8 +23,8 @@
 from dSecurityManager import dSecurityManager
 from dabo.lib.SimpleCrypt import SimpleCrypt
 from dabo.dObject import dObject
+from dabo.dPref import dPref
 from dabo import dUserSettingProvider
-from dabo.lib.RemoteConnector import RemoteConnector
 from dabo.lib.utils import ustr
 from dabo.lib.utils import cleanMenuCaption
 
@@ -132,8 +130,8 @@
        All Dabo objects have an Application property which refers to the dApp
        instance. Instantiate your dApp object from your main script, like so::
 
-       >>> import dabo
-       >>> app = dabo.dApp
+       >>> from dabo.dApp import dApp
+       >>> app = dApp()
        >>> app.start()
 
        Normally, dApp gets instantiated from the client app's main Python 
script,
@@ -181,9 +179,6 @@
                if dabo.loadUserLocale:
                        locale.setlocale(locale.LC_ALL, '')
 
-               # Subdirectories that make up a standard Dabo app
-               self._standardDirs = dabo._getAppDirectoryNames()
-
                # Some apps, such as the visual tools, are meant to be run from 
directories
                # other than that where they are located. In those cases, use 
the current dir.
                self._ignoreScriptDir = ignoreScriptDir
@@ -214,7 +209,7 @@
                self._tempFileHolder = TempFileHolder()
                self.getTempFile = self._tempFileHolder.getTempFile
                # Create the framework-level preference manager
-               self._frameworkPrefs = dabo.dPref(key="dabo_framework")
+               self._frameworkPrefs = dPref(key="dabo_framework")
                # Hold a reference to the bizobj and connection, if any, 
controlling
                # the current database transaction
                self._transactionTokens = {}
@@ -307,6 +302,8 @@
 
        def setup(self, initUI=True):
                """Set up the application object."""
+               if initUI:
+                       import dabo.ui
                # dabo is going to want to import various things from the Home 
Directory
                if self.HomeDirectory not in sys.path:
                        sys.path.append(self.HomeDirectory)
@@ -966,7 +963,7 @@
                currsyspath = sys.path
                if not currdir in sys.path:
                        sys.path.insert(0, currdir)
-               for dd in self._standardDirs:
+               for dd in dabo._standardDirs:
                        currmod = getattr(self, dd, None)
                        if currmod:
                                # Module has already been imported; reload to 
get current state.
@@ -989,7 +986,7 @@
        def getStandardDirectories(self):
                """Return a tuple of the fullpath to each standard directory"""
                hd = self.HomeDirectory
-               subdirs = [os.path.join(hd, dd) for dd in self._standardDirs]
+               subdirs = [os.path.join(hd, dd) for dd in dabo._standardDirs]
                subdirs.insert(0, hd)
                return tuple(subdirs)
 
@@ -1104,7 +1101,7 @@
                If a starting file path is provided, use that first. If not, 
use the
                HomeDirectory as the starting point.
                """
-               stdDirs = self._standardDirs + ("main.py", )
+               stdDirs = dabo._standardDirs + ("main.py", )
                if dirname not in stdDirs:
                        dabo.log.error(_("Non-standard directory '%s' 
requested") % dirname)
                        return None
@@ -1470,7 +1467,7 @@
                                        else:
                                                # See if it's a child directory 
of a standard Dabo app structure
                                                dname = os.path.basename(hd)
-                                               if dname in self._standardDirs:
+                                               if dname in dabo._standardDirs:
                                                        hd = os.path.dirname(hd)
                                else:
                                        try:
@@ -1595,6 +1592,7 @@
 
 
        def _getRemoteProxy(self):
+               from dabo.lib.RemoteConnector import RemoteConnector
                if self.SourceURL:
                        try:
                                return self._remoteProxy
@@ -1790,8 +1788,8 @@
                        based on the value of MainFormClass. If you want to 
swap in your own
                        MainForm instance, do it after setup() but before 
start(), as in::
 
-                       >>> import dabo
-                       >>> app = dabo.dApp()
+                       >>> from dabo.dApp import dApp
+                       >>> app = dApp()
                        >>> app.setup()
                        >>> app.MainForm = myMainFormInstance
                        >>> app.start()
@@ -1806,8 +1804,8 @@
                        main form, or set to your own main form class. Do this 
before calling
                        dApp.start(), as in::
 
-                       >>> import dabo
-                       >>> app = dabo.dApp()
+                       >>> from dabo.dApp import dApp
+                       >>> app = dApp()
                        >>> app.MainFormClass = MyMainFormClass
                        >>> app.start()
                        

Modified: trunk/dabo/dEvents.py
===================================================================
--- trunk/dabo/dEvents.py       2012-12-30 02:33:03 UTC (rev 7299)
+++ trunk/dabo/dEvents.py       2012-12-30 04:45:55 UTC (rev 7300)
@@ -2,8 +2,6 @@
 import logging
 import time
 import dabo
-from dabo.dObject import dObject
-import dabo.ui as ui
 from dabo.dLocalize import _
 
 class dEvent(object):
@@ -165,7 +163,8 @@
 
 class KeyEvent(dEvent):
        def appliesToClass(eventClass, objectClass):
-               return issubclass(objectClass, (dabo.ui.dPemMixin, dabo.dApp))
+               from dabo.dApp import dApp
+               return issubclass(objectClass, (dabo.ui.dPemMixin, dApp))
        appliesToClass = classmethod(appliesToClass)
 
 
@@ -243,7 +242,8 @@
 class Activate(dEvent):
        """Occurs when the form or application becomes active."""
        def appliesToClass(eventClass, objectClass):
-               return issubclass(objectClass, (dabo.dApp, dabo.ui.dForm,
+               from dabo.dApp import dApp
+               return issubclass(objectClass, (dApp, dabo.ui.dForm,
                                dabo.ui.dFormMain, dabo.ui.dDialog))
        appliesToClass = classmethod(appliesToClass)
 
@@ -288,7 +288,8 @@
 class Deactivate(dEvent):
        """Occurs when another form becomes active."""
        def appliesToClass(eventClass, objectClass):
-               return issubclass(objectClass, (dabo.dApp, dabo.ui.dForm,
+               from dabo.dApp import dApp
+               return issubclass(objectClass, (dApp, dabo.ui.dForm,
                                dabo.ui.dFormMain, dabo.ui.dDialog))
        appliesToClass = classmethod(appliesToClass)
 

Modified: trunk/dabo/dObject.py
===================================================================
--- trunk/dabo/dObject.py       2012-12-30 02:33:03 UTC (rev 7299)
+++ trunk/dabo/dObject.py       2012-12-30 04:45:55 UTC (rev 7300)
@@ -7,7 +7,6 @@
 from dabo.lib.doDefaultMixin import DoDefaultMixin
 from dabo.lib.eventMixin import EventMixin
 from dabo.lib.autosuper import autosuper
-from dabo.dPref import dPref
 from dabo.dLocalize import _
 
 NONE_TYPE = type(None)
@@ -387,10 +386,12 @@
                                        ret = self._preferenceManager = 
self.Application.PreferenceManager
                                except AttributeError: pass
                        if ret is None:
+                               from dabo.dPref import dPref  ## here to avoid 
circular import
                                ret = self._preferenceManager = 
dPref(key=self.BasePrefKey)
                return ret
 
        def _setPreferenceManager(self, val):
+               from dabo.dPref import dPref  ## here to avoid circular import
                if not isinstance(val, dPref):
                        raise TypeError('PreferenceManager must be a dPref 
object')
                self._preferenceManager = val
@@ -432,9 +433,10 @@
 
 
 if __name__ == "__main__":
+       from dabo.dApp import dApp
        d = dObject()
        print d.Application
-       app = dabo.dApp()
+       app = dApp()
        print d.Application
 
        print _("Testing doDefault():")

Modified: trunk/dabo/dPref.py
===================================================================
--- trunk/dabo/dPref.py 2012-12-30 02:33:03 UTC (rev 7299)
+++ trunk/dabo/dPref.py 2012-12-30 04:45:55 UTC (rev 7300)
@@ -7,14 +7,8 @@
 from dabo.dLocalize import _
 import dabo.lib.utils as utils
 from dabo.lib.utils import ustr
+import dabo.db
 
-try:
-       from pysqlite2 import dbapi2 as sqlite
-except ImportError:
-       try:
-               import sqlite3 as sqlite
-       except ImportError:
-               dabo.log.error("Class dPref requires package 'pysqlite2'.")
 
 # We don't want to deal with these as preferences.
 regularAtts = ("AutoPersist", "__base__", "__bases__", "__basicsize__", 
"__call__",
@@ -24,7 +18,6 @@
                "_getAttributeNames", "_key", "_noneType", "_parent", 
"_persistAll", "_typeDict", "mro")
 
 
-
 class dPref(object):
        """dPref is a class that is used to automatically manage preferences. 
It requires
        SQLite in order to function; without that installed, you cannot use 
this class. It

Modified: trunk/dabo/dReportWriter.py
===================================================================
--- trunk/dabo/dReportWriter.py 2012-12-30 02:33:03 UTC (rev 7299)
+++ trunk/dabo/dReportWriter.py 2012-12-30 04:45:55 UTC (rev 7300)
@@ -3,8 +3,8 @@
 from dabo.dLocalize import _
 from dabo.lib.reportWriter import ReportWriter
 from dabo.dObject import dObject
+import dabo.dEvents as dEvents
 
-
 # dReportWriter is simply a raw ReportWriter/dObject mixin:
 class dReportWriter(dObject, ReportWriter):
        """The Dabo Report Writer Engine, which mixes a data cursor and a report
@@ -24,23 +24,23 @@
 
        def _onReportCancel(self):
                super(dReportWriter, self)._onReportCancel()
-               self.raiseEvent(dabo.dEvents.ReportCancel)
+               self.raiseEvent(dEvents.ReportCancel)
                self._hideProgress()
 
        def _onReportBegin(self):
                super(dReportWriter, self)._onReportBegin()
-               self.raiseEvent(dabo.dEvents.ReportBegin)
+               self.raiseEvent(dEvents.ReportBegin)
                self._showProgress()
 
        def _onReportEnd(self):
                super(dReportWriter, self)._onReportEnd()
-               self.raiseEvent(dabo.dEvents.ReportEnd)
+               self.raiseEvent(dEvents.ReportEnd)
                self._updateProgress(force=True)
                #self._hideProgress()  ## Let the form controlling the progress 
gauge do this (less blinky)
 
        def _onReportIteration(self):
                super(dReportWriter, self)._onReportIteration()
-               self.raiseEvent(dabo.dEvents.ReportIteration)
+               self.raiseEvent(dEvents.ReportIteration)
                self._updateProgress()
 
        def _showProgress(self):

Modified: trunk/dabo/dSecurityManager.py
===================================================================
--- trunk/dabo/dSecurityManager.py      2012-12-30 02:33:03 UTC (rev 7299)
+++ trunk/dabo/dSecurityManager.py      2012-12-30 04:45:55 UTC (rev 7300)
@@ -192,7 +192,8 @@
 
 
 if __name__ == "__main__":
-       app = dabo.dApp(MainFormClass=None)
+       from dabo.dApp import dApp
+       app = dApp(MainFormClass=None)
        app.setup()
 
        class TestSM(dSecurityManager):

Modified: trunk/dabo/db/test/test_dConnectInfo.py
===================================================================
--- trunk/dabo/db/test/test_dConnectInfo.py     2012-12-30 02:33:03 UTC (rev 
7299)
+++ trunk/dabo/db/test/test_dConnectInfo.py     2012-12-30 04:45:55 UTC (rev 
7300)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 import unittest
-import dabo
+import dabo.db
 
 
 class Test_dConnectInfo(unittest.TestCase):

Modified: trunk/dabo/db/test/test_dConnection.py
===================================================================
--- trunk/dabo/db/test/test_dConnection.py      2012-12-30 02:33:03 UTC (rev 
7299)
+++ trunk/dabo/db/test/test_dConnection.py      2012-12-30 04:45:55 UTC (rev 
7300)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 import unittest
-import dabo
+import dabo.db
 
 
 class Test_dConnectInfo(unittest.TestCase):

Modified: trunk/dabo/db/test/test_dCursorMixin.py
===================================================================
--- trunk/dabo/db/test/test_dCursorMixin.py     2012-12-30 02:33:03 UTC (rev 
7299)
+++ trunk/dabo/db/test/test_dCursorMixin.py     2012-12-30 04:45:55 UTC (rev 
7300)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 import unittest
-import dabo
+import dabo.db
 from dabo.lib import getRandomUUID
 
 

Modified: trunk/dabo/lib/DesignerClassConverter.py
===================================================================
--- trunk/dabo/lib/DesignerClassConverter.py    2012-12-30 02:33:03 UTC (rev 
7299)
+++ trunk/dabo/lib/DesignerClassConverter.py    2012-12-30 04:45:55 UTC (rev 
7300)
@@ -13,7 +13,6 @@
 import tempfile
 import dabo
 dabo.ui.loadUI("wx")
-import dabo.dEvents as dEvents
 from dabo.dLocalize import _
 from dabo.dObject import dObject
 from dabo.lib import utils

Modified: trunk/dabo/lib/DesignerUtils.py
===================================================================
--- trunk/dabo/lib/DesignerUtils.py     2012-12-30 02:33:03 UTC (rev 7299)
+++ trunk/dabo/lib/DesignerUtils.py     2012-12-30 04:45:55 UTC (rev 7300)
@@ -4,7 +4,6 @@
 """
 import re
 import copy
-import dabo.ui as dui
 
 
 
@@ -72,6 +71,7 @@
        """Return a dict that contains the defaults for the various controls 
based upon
        what sort of sizer they are contained within.
        """
+       import dabo.ui as dui  ## kept here on purpose
        szDefaults = {}
        defVals = {
                        "G": {"BorderSides": ["All"], "Proportion": 0, 
"HAlign": "Center", "VAlign": "Middle", "Border": 0, "Expand": True, 
"RowExpand": False, "ColExpand": True},

Modified: trunk/dabo/lib/EasyDialogBuilder.py
===================================================================
--- trunk/dabo/lib/EasyDialogBuilder.py 2012-12-30 02:33:03 UTC (rev 7299)
+++ trunk/dabo/lib/EasyDialogBuilder.py 2012-12-30 04:45:55 UTC (rev 7300)
@@ -15,6 +15,7 @@
 import dabo
 if __name__ == "__main__":
        dabo.ui.loadUI("wx")
+from dabo.dApp import dApp
 import dabo.dEvents as dEvents
 from dabo.lib.utils import ustr
 
@@ -319,6 +320,6 @@
 
                        self.Sizer.append1x(vs)
 
-       app = dabo.dApp()
+       app = dApp()
        app.MainFormClass = TestForm
        app.start()

Modified: trunk/dabo/lib/RemoteConnector.py
===================================================================
--- trunk/dabo/lib/RemoteConnector.py   2012-12-30 02:33:03 UTC (rev 7299)
+++ trunk/dabo/lib/RemoteConnector.py   2012-12-30 04:45:55 UTC (rev 7300)
@@ -13,6 +13,7 @@
 
 import dabo
 import dabo.dException as dException
+from dabo.dApp import dApp
 from dabo.dObject import dObject
 from dabo.dLocalize import _
 from dabo.lib.utils import ustr
@@ -229,7 +230,7 @@
 
        def syncFiles(self, path=None):
                app = self.obj
-               if isinstance(app, dabo.dApp):
+               if isinstance(app, dApp):
                        homedir = app.HomeDirectory
                        try:
                                appname = file(pathjoin(homedir, 
".appname")).read()

Modified: trunk/dabo/lib/eventMixin.py
===================================================================
--- trunk/dabo/lib/eventMixin.py        2012-12-30 02:33:03 UTC (rev 7299)
+++ trunk/dabo/lib/eventMixin.py        2012-12-30 04:45:55 UTC (rev 7300)
@@ -4,9 +4,9 @@
 import traceback
 import dabo
 from dabo.dLocalize import _
+import dabo.dEvents as dEvents
 
 
-
 class EventMixin(object):
        """
        Mix-in class making objects know how to bind and raise Dabo events.
@@ -163,7 +163,7 @@
                auto event binding.
 
                If you want to bind your events explicitly, you can turn off 
auto event
-               binding by calling::
+               binding by issuing::
 
                         dabo.autoBindEvents = False
 
@@ -215,8 +215,6 @@
                        if regid is None or regid == "":
                                return False
 
-               # Do the import here; putting it at the top throws errors while 
Dabo is starting up.
-               import dabo.dEvents as dEvents
                funcNames = [i for i in dir(context) if i[:2] == "on"]
                for funcName in funcNames:
                        # if funcName is onActivate, then parsedEvtName == 
"Activate" and parsedRegID=""
@@ -285,11 +283,10 @@
                        # we are an instance, cls is self.
                        classRef = cls.__class__
 
-               import dabo.dEvents as e  # imported here to avoid circular 
import
                validEvents = []
-               events = [e.__dict__[evt] for evt in dir(e)]
+               events = [dEvents.__dict__[evt] for evt in dir(dEvents)]
                for evt in events:
-                       if type(evt) == type and issubclass(evt, e.dEvent):
+                       if type(evt) == type and issubclass(evt, 
dEvents.dEvent):
                                if evt.appliesToClass(classRef):
                                        validEvents.append(evt)
                return validEvents

Modified: trunk/dabo/lib/reporting_tests/invoice_demo/invoice_progressControl.py
===================================================================
--- trunk/dabo/lib/reporting_tests/invoice_demo/invoice_progressControl.py      
2012-12-30 02:33:03 UTC (rev 7299)
+++ trunk/dabo/lib/reporting_tests/invoice_demo/invoice_progressControl.py      
2012-12-30 04:45:55 UTC (rev 7300)
@@ -4,8 +4,9 @@
 """
 This demo is like invoice.py, but shows how to use the progress dialog.
 """
-import dabo
+import dabo.ui
 dabo.ui.loadUI("wx")
+from dabo.dApp import dApp
 from dabo.dReportWriter import dReportWriter
 from dabo.lib import reportUtils
 
@@ -42,6 +43,5 @@
                reportUtils.previewPDF("invoice.pdf")
 
 
-app = dabo.dApp(MainFormClass=ReportingForm)
-app.start()
+dApp(MainFormClass=ReportingForm).start()
 

Modified: trunk/dabo/ui/dDataControlMixinBase.py
===================================================================
--- trunk/dabo/ui/dDataControlMixinBase.py      2012-12-30 02:33:03 UTC (rev 
7299)
+++ trunk/dabo/ui/dDataControlMixinBase.py      2012-12-30 04:45:55 UTC (rev 
7300)
@@ -126,7 +126,7 @@
 
        def __dataUpdate(self):
                """This handles all the value updating from the data source."""
-               if not self.DataField or not (self.DataSource or 
isinstance(self.DataSource, dabo.dPref)):
+               if not self.DataField or not (self.DataSource or 
isinstance(self.DataSource, dPref)):
                        return
                if self._DesignerMode:
                        return
@@ -257,7 +257,7 @@
                        # To prevent such situation we have to check the 
_from_flushValue attribute at the beginning.
                        self._from_flushValue = True
                        if not self._DesignerMode:
-                               if (self.DataSource or 
isinstance(self.DataSource, dabo.dPref)) and self.DataField:
+                               if (self.DataSource or 
isinstance(self.DataSource, dPref)) and self.DataField:
                                        src = self.Source
                                        if self._srcIsBizobj:
                                                try:
@@ -306,8 +306,8 @@
                        # Raise an event so that user code can react if needed:
                        if self._userChanged:
                                self._userChanged = False
-                               self.raiseEvent(dabo.dEvents.InteractiveChange, 
oldVal=oldVal)
-                       dabo.ui.callAfterInterval(200, self.raiseEvent, 
dabo.dEvents.ValueChanged)
+                               self.raiseEvent(dEvents.InteractiveChange, 
oldVal=oldVal)
+                       dabo.ui.callAfterInterval(200, self.raiseEvent, 
dEvents.ValueChanged)
                return ret
 
 
@@ -479,7 +479,7 @@
                if self.__src is None:
                        ds = self.DataSource
                        self._srcIsBizobj = False
-                       if (ds or isinstance(ds, dabo.dPref)):
+                       if (ds or isinstance(ds, dPref)):
                                # First, see if it's a string
                                if isinstance(ds, basestring):
                                        # Source can be a bizobj, which we get 
from the form, or

Modified: trunk/dabo/ui/dialogs/HotKeyEditor.py
===================================================================
--- trunk/dabo/ui/dialogs/HotKeyEditor.py       2012-12-30 02:33:03 UTC (rev 
7299)
+++ trunk/dabo/ui/dialogs/HotKeyEditor.py       2012-12-30 04:45:55 UTC (rev 
7300)
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-import dabo
+import dabo.ui
 import dabo.dEvents as dEvents
-from dabo.ui import dKeys as dKeys
 if __name__ == "__main__":
        dabo.ui.loadUI("wx")
+from dabo.ui import dKeys as dKeys
 from dabo.dLocalize import _
 
 

Modified: trunk/dabo/ui/dialogs/PreferenceDialog.py
===================================================================
--- trunk/dabo/ui/dialogs/PreferenceDialog.py   2012-12-30 02:33:03 UTC (rev 
7299)
+++ trunk/dabo/ui/dialogs/PreferenceDialog.py   2012-12-30 04:45:55 UTC (rev 
7300)
@@ -2,7 +2,7 @@
 import sys
 import os
 import inspect
-import dabo
+import dabo.ui
 if __name__ == "__main__":
        dabo.ui.loadUI("wx")
 from dabo.dLocalize import _
@@ -354,12 +354,13 @@
 
 
 if __name__ == "__main__":
+       from dabo.dApp import dApp
        class TestForm(dabo.ui.dForm):
                def afterInit(self):
                        lbl = dabo.ui.dLabel(self, Caption="Preference Manager 
Demo\n" +
                                "Select 'Preferences' from the menu.", 
WordWrap=True)
                        self.Sizer.append(lbl, halign="center", border=20)
 
-       app = dabo.dApp(MainFormClass=TestForm)
+       app = dApp(MainFormClass=TestForm)
        app.start()
 

Modified: trunk/dabo/ui/dialogs/SortingForm.py
===================================================================
--- trunk/dabo/ui/dialogs/SortingForm.py        2012-12-30 02:33:03 UTC (rev 
7299)
+++ trunk/dabo/ui/dialogs/SortingForm.py        2012-12-30 04:45:55 UTC (rev 
7300)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-import dabo
+import dabo.ui
 dabo.ui.loadUI("wx")
 import dabo.dEvents as dEvents
 from dabo.dLocalize import _
@@ -51,6 +51,7 @@
 
 
 if __name__ == "__main__":
+       from dabo.dApp import dApp
        class DummyForm(dabo.ui.dForm):
                def onActivate(self, evt):
                        self.Visible = False
@@ -66,7 +67,7 @@
                        dlg.release()
                        dabo.ui.callAfter(self.release)
 
-       app = dabo.dApp()
+       app = dApp()
        app.MainFormClass = DummyForm
        app.start()
 

Modified: trunk/dabo/ui/dialogs/Wizard.py
===================================================================
--- trunk/dabo/ui/dialogs/Wizard.py     2012-12-30 02:33:03 UTC (rev 7299)
+++ trunk/dabo/ui/dialogs/Wizard.py     2012-12-30 04:45:55 UTC (rev 7300)
@@ -1,6 +1,7 @@
 # -*- coding: utf-8 -*-
-import dabo
+import dabo.ui
 dabo.ui.loadUI("wx")
+from dabo.dApp import dApp
 from dabo.dLocalize import _
 import dabo.dEvents as dEvents
 import dabo.dConstants as k
@@ -484,7 +485,7 @@
                        self.Sizer.append(lbl, alignment="center")
 
 
-       app = dabo.dApp()
+       app = dApp()
        app.MainFormClass = None
        app.setup()
        # OK, we've defined all of our pages. Now let's define

Modified: trunk/dabo/ui/dialogs/WizardPage.py
===================================================================
--- trunk/dabo/ui/dialogs/WizardPage.py 2012-12-30 02:33:03 UTC (rev 7299)
+++ trunk/dabo/ui/dialogs/WizardPage.py 2012-12-30 04:45:55 UTC (rev 7300)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-import dabo
+import dabo.ui
 dabo.ui.loadUI("wx")
 from dabo.dLocalize import _
 import dabo.dEvents as dEvents

Modified: trunk/dabo/ui/dialogs/about.py
===================================================================
--- trunk/dabo/ui/dialogs/about.py      2012-12-30 02:33:03 UTC (rev 7299)
+++ trunk/dabo/ui/dialogs/about.py      2012-12-30 04:45:55 UTC (rev 7300)
@@ -80,7 +80,8 @@
 
 
 def main():
-       app = dabo.dApp()
+       from dabo.dApp import dApp
+       app = dApp()
        app.MainFormClass = None
        app.setup()
        app.MainForm = About(None)

Modified: trunk/dabo/ui/dialogs/htmlAbout.py
===================================================================
--- trunk/dabo/ui/dialogs/htmlAbout.py  2012-12-30 02:33:03 UTC (rev 7299)
+++ trunk/dabo/ui/dialogs/htmlAbout.py  2012-12-30 04:45:55 UTC (rev 7300)
@@ -85,7 +85,8 @@
 
 
 def main():
-       app = dabo.dApp()
+       from dabo.dApp import dApp
+       app = dApp()
        app.MainFormClass = None
        app.setup()
        app.MainForm = HtmlAbout(None)

Modified: trunk/dabo/ui/dialogs/infoMessage.py
===================================================================
--- trunk/dabo/ui/dialogs/infoMessage.py        2012-12-30 02:33:03 UTC (rev 
7299)
+++ trunk/dabo/ui/dialogs/infoMessage.py        2012-12-30 04:45:55 UTC (rev 
7300)
@@ -52,7 +52,8 @@
 
 
 if __name__ == '__main__':
-       app = dabo.dApp(MainFormClass=None)
+       from dabo.dApp import dApp
+       app = dApp(MainFormClass=None)
        app.setup()
        dlg = D

 (94580 bytes were truncated as it was too long for the email (max 40000 bytes.)

_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://mail.leafe.com/mailman/listinfo/dabo-dev
Searchable Archives: http://leafe.com/archives/search/dabo-dev
This message: 
http://leafe.com/archives/byMID/[email protected]

Reply via email to