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]
