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]