dabo Commit
Revision 6043
Date: 2010-09-30 17:58:33 -0700 (Thu, 30 Sep 2010)
Author: Ed
Trac: http://trac.dabodev.com/changeset/6043

Changed:
U   trunk/dabo/__init__.py
U   trunk/dabo/biz/dBizobj.py
U   trunk/dabo/dApp.py
U   trunk/dabo/dLocalize.py
U   trunk/dabo/dReportWriter.py
U   trunk/dabo/db/dBackend.py
U   trunk/dabo/db/dDataSet.py
U   trunk/dabo/db/dbMySQL.py
U   trunk/dabo/db/test/test_dCursorMixin.py
U   trunk/dabo/lib/DesignerClassConverter.py
U   trunk/dabo/lib/RemoteConnector.py
U   trunk/dabo/lib/__init__.py
U   trunk/dabo/lib/connParser.py
U   trunk/dabo/lib/reportWriter.py
U   trunk/dabo/lib/utils.py
U   trunk/dabo/lib/xmltodict.py
U   trunk/dabo/ui/uiwx/dDataControlMixin.py
U   trunk/dabo/ui/uiwx/dEditor.py
U   trunk/dabo/ui/uiwx/dGrid.py
U   trunk/dabo/ui/uiwx/dMenuItem.py

Log:
Added the method 'getEncoding()' to the main dabo module. Updated all code to 
reference this method when looking for encoding settings.

Updated xmltodict() so that it uses the encoding specified in the XML document.


Diff:
Modified: trunk/dabo/__init__.py
===================================================================
--- trunk/dabo/__init__.py      2010-09-30 13:44:05 UTC (rev 6042)
+++ trunk/dabo/__init__.py      2010-10-01 00:58:33 UTC (rev 6043)
@@ -127,6 +127,24 @@
 # we want to make them part of the dabo namespace.
 from settings import *
 
+# 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)
+
+
+def getEncoding():
+       ret = locale.getlocale()[1]
+       if ret is None:
+               ret = defaultEncoding
+       return ret
+
+
 # These are the various standard log handlers.
 consoleLogHandler = fileLogHandler = None
 dbConsoleLogHandler = dbFileLogHandler = None
@@ -162,6 +180,7 @@
                        dbConsoleLogHandler = _handler
 else:
        # Use dabo.settings values to configure the logs
+       enc = getEncoding()
        consoleLogHandler = logging.StreamHandler()
        consoleLogHandler.setLevel(mainLogConsoleLevel)
        consoleFormatter = logging.Formatter(consoleFormat)
@@ -172,7 +191,7 @@
        log.addHandler(consoleLogHandler)
        if mainLogFile is not None:
                fileLogHandler = 
logging.handlers.RotatingFileHandler(filename=mainLogFile,
-                               maxBytes=maxLogFileSize, 
encoding=defaultEncoding)
+                               maxBytes=maxLogFileSize, encoding=enc)
                fileLogHandler.setLevel(mainLogFileLevel)
                fileFormatter = logging.Formatter(fileFormat)
                fileFormatter.datefmt = mainLogDateFormat
@@ -189,7 +208,7 @@
        dbActivityLog.addHandler(dbConsoleLogHandler)
        if dbLogFile is not None:
                dbFileLogHandler = 
logging.handlers.RotatingFileHandler(filename=dbLogFile,
-                               maxBytes=maxLogFileSize, 
encoding=defaultEncoding)
+                               maxBytes=maxLogFileSize, encoding=enc)
                dbFileLogHandler.setLevel(dbLogFileLevel)
                dbFileFormatter = logging.Formatter(dbFileFormat)
                dbFileFormatter.datefmt = dbLogDateFormat
@@ -215,7 +234,7 @@
                        dabo.fileLogHandler.close()
                        dabo.fileLogHandler = None
                dabo.fileLogHandler = 
logging.handlers.RotatingFileHandler(filename=fname,
-                               maxBytes=dabo.maxLogFileSize, 
encoding=dabo.defaultEncoding)
+                               maxBytes=dabo.maxLogFileSize, 
encoding=getEncoding())
                if level:
                        dabo.fileLogHandler.setLevel(level)
                else:
@@ -244,7 +263,7 @@
                        dabo.dbFileLogHandler.close()
                        dabo.dbFileLogHandler = None
                dabo.dbFileLogHandler = 
logging.handlers.RotatingFileHandler(filename=fname,
-                               maxBytes=dabo.maxLogFileSize, 
encoding=dabo.defaultEncoding)
+                               maxBytes=dabo.maxLogFileSize, 
encoding=getEncoding())
                if level:
                        dabo.dbFileLogHandler.setLevel(level)
                else:
@@ -255,16 +274,6 @@
                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")
-# 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

Modified: trunk/dabo/biz/dBizobj.py
===================================================================
--- trunk/dabo/biz/dBizobj.py   2010-09-30 13:44:05 UTC (rev 6042)
+++ trunk/dabo/biz/dBizobj.py   2010-10-01 00:58:33 UTC (rev 6043)
@@ -2179,10 +2179,7 @@
                        if cursor is not None:
                                ret = cursor.Encoding
                        if ret is None:
-                               if self.Application:
-                                       ret = self.Application.Encoding
-                               else:
-                                       ret = dabo.defaultEncoding
+                               ret = dabo.getEncoding()
                        self._encoding = ret
                return ret
 

Modified: trunk/dabo/dApp.py
===================================================================
--- trunk/dabo/dApp.py  2010-09-30 13:44:05 UTC (rev 6042)
+++ trunk/dabo/dApp.py  2010-10-01 00:58:33 UTC (rev 6043)
@@ -1397,10 +1397,7 @@
 
 
        def _getEncoding(self):
-               ret = locale.getlocale()[1]
-               if ret is None:
-                       ret = dabo.defaultEncoding
-               return ret
+               return dabo.getEncoding()
 
 
        def _getHomeDirectory(self):

Modified: trunk/dabo/dLocalize.py
===================================================================
--- trunk/dabo/dLocalize.py     2010-09-30 13:44:05 UTC (rev 6042)
+++ trunk/dabo/dLocalize.py     2010-10-01 00:58:33 UTC (rev 6043)
@@ -14,7 +14,7 @@
        _defaultLanguage = dabo.settings.defaultLanguage
 
 if _defaultEncoding is None:
-       _defaultEncoding = dabo.settings.defaultEncoding
+       _defaultEncoding = dabo.getEncoding()
 
 
 _domains = {}

Modified: trunk/dabo/dReportWriter.py
===================================================================
--- trunk/dabo/dReportWriter.py 2010-09-30 13:44:05 UTC (rev 6042)
+++ trunk/dabo/dReportWriter.py 2010-10-01 00:58:33 UTC (rev 6043)
@@ -67,10 +67,7 @@
                try:
                        v = self._encoding
                except AttributeError:
-                       if self.Application:
-                               v = self.Application.Encoding
-                       else:
-                               v = "utf-8"
+                       v = dabo.getEncoding()
                        self._encoding = v
                return v
 

Modified: trunk/dabo/db/dBackend.py
===================================================================
--- trunk/dabo/db/dBackend.py   2010-09-30 13:44:05 UTC (rev 6042)
+++ trunk/dabo/db/dBackend.py   2010-10-01 00:58:33 UTC (rev 6043)
@@ -30,10 +30,6 @@
                super(dBackend, self).__init__()
                self.dbModuleName = None
                self._connection = None
-               if self.Application:
-                       self._encoding = self.Application.Encoding
-               else:
-                       self._encoding = dabo.defaultEncoding
                # If the db module is set to hook into dCursor to correct the 
field
                # types and convert the records to dict inline, then 
dCursorMixin doesn't
                # have to reiterate the records to do those tasks. Set the 
following to
@@ -584,17 +580,21 @@
                        wt = self._keepAliveThread = WorkerThread(self)
                        wt.start()
 
+       def _getEncoding(self):
+               """ Get backend encoding."""
+               try:
+                       return self._encoding
+               except AttributeError:
+                       self._encoding = dabo.getEncoding()
+                       return self._encoding
+
        def _setEncoding(self, enc):
                """ Set backend encoding. Must be overridden in the subclass
                to notify database about proper charset conversion.
                """
                self._encoding = enc
 
-       def _getEncoding(self):
-               """ Get backend encoding."""
-               return self._encoding
 
-
        def _getKeepAliveInterval(self):
                try:
                        ret = self._keepAliveInterval

Modified: trunk/dabo/db/dDataSet.py
===================================================================
--- trunk/dabo/db/dDataSet.py   2010-09-30 13:44:05 UTC (rev 6042)
+++ trunk/dabo/db/dDataSet.py   2010-10-01 00:58:33 UTC (rev 6043)
@@ -57,7 +57,6 @@
                # When filtering datasets, we need a reference to the dataset
                # this dataset was derived from.
                self._sourceDataSet = None
-               self._encoding = "utf8"
 
                # Register the converters
                sqlite.register_converter("decimal", self._convert_decimal)
@@ -356,8 +355,6 @@
                        self._connection = sqlite.connect(":memory:",
                                        
detect_types=(sqlite.PARSE_DECLTYPES|sqlite.PARSE_COLNAMES),
                                        isolation_level="EXCLUSIVE")
-                       # Set to default encoding
-                       self.Encoding = self._encoding
                if self._cursor is None:
                        self._cursor = 
self._connection.cursor(factory=DictCursor)
 
@@ -429,7 +426,11 @@
 
 
        def _getEncoding(self):
-               return self._encoding
+               try:
+                       return self._encoding
+               except AttributeError:
+                       self._encoding = dabo.getEncoding()
+                       return self._encoding
 
        def _setEncoding(self, encoding):
                self._encoding = encoding

Modified: trunk/dabo/db/dbMySQL.py
===================================================================
--- trunk/dabo/db/dbMySQL.py    2010-09-30 13:44:05 UTC (rev 6042)
+++ trunk/dabo/db/dbMySQL.py    2010-10-01 00:58:33 UTC (rev 6043)
@@ -58,11 +58,8 @@
                        except IndexError:
                                pass
                if charset is None:
-                       # Use the app encoding
-                       try:
-                               charset = self.Application.Encoding
-                       except AttributeError:
-                               charset = dabo.defaultEncoding
+                       # Use the default Dabo encoding
+                       charset = dabo.getEncoding()
                        charset = charset.lower().replace("-", "")
 
                try:

Modified: trunk/dabo/db/test/test_dCursorMixin.py
===================================================================
--- trunk/dabo/db/test/test_dCursorMixin.py     2010-09-30 13:44:05 UTC (rev 
6042)
+++ trunk/dabo/db/test/test_dCursorMixin.py     2010-10-01 00:58:33 UTC (rev 
6043)
@@ -8,12 +8,11 @@
 # flags so that only the db's you want to test against are True. DB's set as
 # False by default are probably not working as-is.
 db_tests = {"sqlite": True,
-            "mysql": True,
-            "firebird": False,
-            "postgresql": False,
-            "mssql": False,
-           "oracle": False,
-           }
+               "mysql": True,
+               "firebird": False,
+               "postgresql": False,
+               "mssql": False,
+               "oracle": False}
 
 # Convert the flags into class references. Setting to object will keep the 
tests
 # for that backend from running.
@@ -362,9 +361,9 @@
 
 class Test_dCursorMixin_firebird(Test_dCursorMixin, unittest.TestCase):
        ## NOTE: Firebird not set up completely yet. What is here is courtesy 
Uwe
-       ##       Grauer. We need insert statements, and we need a firebird 
server.
-       ##       I intend to set up a test server, but don't know when it will
-       ##       actually occur.
+       ##               Grauer. We need insert statements, and we need a 
firebird server.
+       ##               I intend to set up a test server, but don't know when 
it will
+       ##               actually occur.
        def setUp(self):
                con = dabo.db.dConnection(DbType="Firebird", User="dabotester",
                                password="Y57W8EN6CB06KBCCDCX01D6B", 
Database="dabo_unittest",

Modified: trunk/dabo/lib/DesignerClassConverter.py
===================================================================
--- trunk/dabo/lib/DesignerClassConverter.py    2010-09-30 13:44:05 UTC (rev 
6042)
+++ trunk/dabo/lib/DesignerClassConverter.py    2010-10-01 00:58:33 UTC (rev 
6043)
@@ -63,11 +63,7 @@
                # Location of the cdxml source file, if any
                self._srcFile = None
                # Encoding to be used
-               try:
-                       self._encoding = self.Application.Encoding
-               except AttributeError:
-                       # No app object
-                       self._encoding = dabo.defaultEncoding
+               self._encoding = dabo.getEncoding()
 
 
        def classFromText(self, src):
@@ -176,7 +172,7 @@
                        else:
                                parseCode = False
                                self._srcFile = os.getcwd()
-               return xtd.xmltodict(xml, encoding="utf-8")
+               return xtd.xmltodict(xml)
 
 
        @classmethod
@@ -795,8 +791,6 @@
 
        def indentCode(self, cd, level):
                """Takes code and indents it to the desired level"""
-#              if isinstance(cd, str):
-#                      cd = cd.decode(self.Application.Encoding)
                lns = cd.splitlines()
                indent = "\t" * level
                # Compiled code needs newlines, no matter what platform.

Modified: trunk/dabo/lib/RemoteConnector.py
===================================================================
--- trunk/dabo/lib/RemoteConnector.py   2010-09-30 13:44:05 UTC (rev 6042)
+++ trunk/dabo/lib/RemoteConnector.py   2010-10-01 00:58:33 UTC (rev 6043)
@@ -73,7 +73,7 @@
                        try:
                                ret = pickle.loads(val)
                        except UnicodeEncodeError:
-                               for enctype in (dabo.defaultEncoding, "utf-8", 
"iso8859-1"):
+                               for enctype in (dabo.getEncoding(), "utf-8", 
"iso8859-1"):
                                        try:
                                                ret = 
pickle.loads(val.encode(enctype))
                                        except KeyError:

Modified: trunk/dabo/lib/__init__.py
===================================================================
--- trunk/dabo/lib/__init__.py  2010-09-30 13:44:05 UTC (rev 6042)
+++ trunk/dabo/lib/__init__.py  2010-10-01 00:58:33 UTC (rev 6043)
@@ -38,7 +38,7 @@
                                ret = jsonConverter.loads(val)
                        except UnicodeDecodeError:
                                # Try typical encodings, starting with the 
default.
-                               for enctype in (dabo.defaultEncoding, "utf-8", 
"latin-1"):
+                               for enctype in (dabo.getEncoding(), "utf-8", 
"latin-1"):
                                        try:
                                                ret = jsonConverter.loads(val, 
enctype)
                                                break

Modified: trunk/dabo/lib/connParser.py
===================================================================
--- trunk/dabo/lib/connParser.py        2010-09-30 13:44:05 UTC (rev 6042)
+++ trunk/dabo/lib/connParser.py        2010-10-01 00:58:33 UTC (rev 6043)
@@ -160,7 +160,7 @@
 %s
 
 </connectiondefs>
-""" % (dabo.defaultEncoding, "%s")
+""" % (dabo.getEncoding(), "%s")
 
 
 def getConnTemplate():

Modified: trunk/dabo/lib/reportWriter.py
===================================================================
--- trunk/dabo/lib/reportWriter.py      2010-09-30 13:44:05 UTC (rev 6042)
+++ trunk/dabo/lib/reportWriter.py      2010-10-01 00:58:33 UTC (rev 6043)
@@ -2513,7 +2513,7 @@
                try:
                        v = self._encoding
                except AttributeError:
-                       v = self._encoding = "utf-8"
+                       v = self._encoding = dabo.getEncoding()
                return v
 
        def _setEncoding(self, val):

Modified: trunk/dabo/lib/utils.py
===================================================================
--- trunk/dabo/lib/utils.py     2010-09-30 13:44:05 UTC (rev 6042)
+++ trunk/dabo/lib/utils.py     2010-10-01 00:58:33 UTC (rev 6043)
@@ -134,7 +134,7 @@
                        try:
                                ret[str(kk)] = vv
                        except UnicodeEncodeError:
-                               kk = kk.encode(dabo.defaultEncoding)
+                               kk = kk.encode(dabo.getEncoding())
                                ret[kk] = vv
                else:
                        ret[kk] = vv

Modified: trunk/dabo/lib/xmltodict.py
===================================================================
--- trunk/dabo/lib/xmltodict.py 2010-09-30 13:44:05 UTC (rev 6042)
+++ trunk/dabo/lib/xmltodict.py 2010-10-01 00:58:33 UTC (rev 6043)
@@ -18,14 +18,7 @@
 from dabo.lib.utils import ustr
 
 app = dabo.dAppRef
-if app:
-       default_encoding = app.Encoding
-else:
-       default_encoding = locale.getlocale()[1]
-       if default_encoding is None:
-               default_encoding = locale.getdefaultlocale()[1]
-               if default_encoding is None:
-                       default_encoding = dabo.defaultEncoding
+default_encoding = dabo.getEncoding()
 # Normalize the names, as xml.sax running on Gtk will complain for some 
variations
 deLow = default_encoding.lower()
 if deLow in ("utf8", "utf-8"):
@@ -56,7 +49,7 @@
                self._currPropAtt = ""
                self._currPropDict = None
                if encoding is None:
-                       self._encoding = dabo.defaultEncoding
+                       self._encoding = dabo.getEncoding()
                else:
                        self._encoding = encoding
 
@@ -167,7 +160,7 @@
 
        def Parse(self, xml):
                # Create a SAX parser
-               Parser = expat.ParserCreate(self._encoding)
+               Parser = expat.ParserCreate()
                # SAX event handlers
                Parser.StartElementHandler = self.StartElement
                Parser.EndElementHandler = self.EndElement
@@ -183,8 +176,6 @@
 
 def xmltodict(xml, attsToSkip=[], addCodeFile=False, encoding=None):
        """Given an xml string or file, return a Python dictionary."""
-       if encoding is None:
-               encoding = dabo.defaultEncoding
        parser = Xml2Obj(encoding=encoding)
        parser.attsToSkip = attsToSkip
        if eol in xml and "<?xml" in xml:

Modified: trunk/dabo/ui/uiwx/dDataControlMixin.py
===================================================================
--- trunk/dabo/ui/uiwx/dDataControlMixin.py     2010-09-30 13:44:05 UTC (rev 
6042)
+++ trunk/dabo/ui/uiwx/dDataControlMixin.py     2010-10-01 00:58:33 UTC (rev 
6043)
@@ -50,7 +50,7 @@
                                val = ustr(val)
                        else:
                                if not isinstance(val, unicode):
-                                       val = unicode(val, 
self.Application.Encoding)
+                                       val = unicode(val, dabo.getEncoding())
                elif isinstance(oldval, int) and isinstance(val, basestring):
                        if val:
                                val = int(val)

Modified: trunk/dabo/ui/uiwx/dEditor.py
===================================================================
--- trunk/dabo/ui/uiwx/dEditor.py       2010-09-30 13:44:05 UTC (rev 6042)
+++ trunk/dabo/ui/uiwx/dEditor.py       2010-10-01 00:58:33 UTC (rev 6043)
@@ -254,7 +254,7 @@
                self._hiliteLimitColumn = 79
                self._showEdgeGuide = False
                self._edgeGuideColumn = 80
-               self._encoding = self.Application.Encoding
+               self._encoding = dabo.getEncoding()
                self._eolMode = ""
                self._useAntiAliasing = True
                self._codeFolding = True
@@ -2505,7 +2505,7 @@
                        position the guide is in(int)"""))
 
        Encoding = property(_getEncoding, _setEncoding, None,
-                       _("Type of encoding to use. Defaults to the 
application's default encoding.  (str)"))
+                       _("Type of encoding to use. Defaults to Dabo's 
encoding.  (str)"))
 
        EOLMode = property(_getEOLMode, _setEOLMode, None,
                        _("End of line characters. Allowed values are 'CRLF', 
'LF' and 'CR'. (default=os dependent) (str)"))

Modified: trunk/dabo/ui/uiwx/dGrid.py
===================================================================
--- trunk/dabo/ui/uiwx/dGrid.py 2010-09-30 13:44:05 UTC (rev 6042)
+++ trunk/dabo/ui/uiwx/dGrid.py 2010-10-01 00:58:33 UTC (rev 6043)
@@ -4240,7 +4240,7 @@
                try:
                        ret = self.getBizobj().Encoding
                except AttributeError:
-                       ret = self.Application.Encoding
+                       ret = dabo.getEncoding()
                return ret
 
 

Modified: trunk/dabo/ui/uiwx/dMenuItem.py
===================================================================
--- trunk/dabo/ui/uiwx/dMenuItem.py     2010-09-30 13:44:05 UTC (rev 6042)
+++ trunk/dabo/ui/uiwx/dMenuItem.py     2010-10-01 00:58:33 UTC (rev 6043)
@@ -69,10 +69,7 @@
                curr = self.GetText()
                def toUni(s):
                        if isinstance(s, str):
-                               try:
-                                       enc = self.Application.Encoding
-                               except AttributeError:
-                                       enc = dabo.defaultEncoding
+                               enc = dabo.getEncoding()
                                s = unicode(s, enc)
                        return s
 



_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://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