move sqlite charset fix to Configuration.py from Database.py, make separate not_needed variables in Charset.py in case we want to update them separately

This commit is contained in:
sqlcoder 2010-01-30 11:05:34 +00:00
parent d147187a71
commit 9932025271
3 changed files with 17 additions and 14 deletions

View File

@ -28,12 +28,12 @@ encoder_to_utf = codecs.lookup('utf-8')
encoder_to_sys = codecs.lookup(Configuration.LOCALE_ENCODING)
# I'm saving a few cycles with this one
not_needed = False
not_needed1, not_needed2, not_needed3 = False, False, False
if Configuration.LOCALE_ENCODING == 'UTF8':
not_needed = True
not_needed1, not_needed2, not_needed3 = True, True, True
def to_utf8(s):
if not_needed: return s
if not_needed1: return s
try:
#(_out, _len) = encoder_to_utf.encode(s)
@ -44,7 +44,7 @@ def to_utf8(s):
raise
def to_db_utf8(s):
if not_needed: return s
if not_needed2: return s
try:
(_out, _len) = encoder_to_utf.encode(unicode(s))
@ -54,7 +54,7 @@ def to_db_utf8(s):
raise
def to_gui(s):
if not_needed: return s
if not_needed3: return s
try:
(_out, _len) = encoder_to_sys.encode(s)

View File

@ -144,6 +144,11 @@ if LOCALE_ENCODING == "US-ASCII":
print "Default encoding set to US-ASCII, defaulting to CP1252 instead -- If you're not on a Mac, please report this problem."
LOCALE_ENCODING = "cp1252"
# needs LOCALE_ENCODING (above), imported for sqlite setup in Config class below
import Charset
########################################################################
def string_to_bool(string, default=True):
"""converts a string representation of a boolean value to boolean True or False
@ -648,6 +653,11 @@ class Config:
db['db-backend'] = 3
elif self.supported_databases[name].db_server== DATABASE_TYPE_SQLITE:
db['db-backend'] = 4
# sqlcoder: this assignment fixes unicode problems for me with sqlite (windows, cp1252)
# feel free to remove or improve this if you understand the problems
# better than me (not hard!)
#Charset.not_needed1, Charset.not_needed2, Charset.not_needed3 = True, True, True
else:
raise ValueError('Unsupported database backend: %s' % self.supported_databases[name].db_server)
return db

View File

@ -372,7 +372,6 @@ class Database:
print msg
raise FpdbError(msg)
elif backend == Database.SQLITE:
log.info("Connecting to SQLite: %(database)s" % {'database':database})
import sqlite3
if use_pool:
sqlite3 = pool.manage(sqlite3, pool_size=1)
@ -385,7 +384,8 @@ class Database:
log.info("Creating directory: '%s'" % (self.config.dir_databases))
os.mkdir(self.config.dir_databases)
database = os.path.join(self.config.dir_databases, database)
log.info(" sqlite db: " + database)
log.info("Connecting to SQLite: %(database)s" % {'database':database})
print "Connecting to SQLite: %(database)s" % {'database':database}
self.connection = sqlite3.connect(database, detect_types=sqlite3.PARSE_DECLTYPES )
sqlite3.register_converter("bool", lambda x: bool(int(x)))
sqlite3.register_adapter(bool, lambda x: "1" if x else "0")
@ -399,13 +399,6 @@ class Database:
self.cursor = self.connection.cursor()
self.cursor.execute('PRAGMA temp_store=2') # use memory for temp tables/indexes
self.cursor.execute('PRAGMA synchronous=0') # don't wait for file writes to finish
# sqlcoder: this assignment fixes unicode problems for me with sqlite (windows, cp1252)
# feel free to remove or improve this if you understand the problems
# better than me (not hard!)
# I think maybe we need a separate "not_needed" flag for each of the routines
# in Charset.py???
# Charset.not_needed = True
else:
raise FpdbError("unrecognised database backend:"+backend)