Fix the issues with non-ASCII characters in path on Windows #1613
|
@ -12,7 +12,7 @@ The PyBitmessage startup script
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
app_dir = os.path.dirname(os.path.abspath(__file__))
|
app_dir = os.path.dirname(os.path.abspath(unicode(__file__)))
|
||||||
os.chdir(app_dir)
|
os.chdir(app_dir)
|
||||||
sys.path.insert(0, app_dir)
|
sys.path.insert(0, app_dir)
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,8 @@ class sqlThread(threading.Thread):
|
||||||
def run(self): # pylint: disable=too-many-locals, too-many-branches, too-many-statements
|
def run(self): # pylint: disable=too-many-locals, too-many-branches, too-many-statements
|
||||||
"""Process SQL queries from `.helper_sql.sqlSubmitQueue`"""
|
"""Process SQL queries from `.helper_sql.sqlSubmitQueue`"""
|
||||||
helper_sql.sql_available = True
|
helper_sql.sql_available = True
|
||||||
self.conn = sqlite3.connect(state.appdata + 'messages.dat')
|
self.conn = sqlite3.connect(
|
||||||
|
os.path.join(state.appdata, 'messages.dat'))
|
||||||
self.conn.text_factory = str
|
self.conn.text_factory = str
|
||||||
self.cur = self.conn.cursor()
|
self.cur = self.conn.cursor()
|
||||||
|
|
||||||
|
|
|
@ -6,11 +6,11 @@ Namecoin queries
|
||||||
import base64
|
import base64
|
||||||
import httplib
|
import httplib
|
||||||
import json
|
import json
|
||||||
import os
|
|
||||||
import socket
|
import socket
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
import defaults
|
import defaults
|
||||||
|
import paths
|
||||||
import tr # translate
|
import tr # translate
|
||||||
from addresses import decodeAddress
|
from addresses import decodeAddress
|
||||||
from bmconfigparser import BMConfigParser
|
from bmconfigparser import BMConfigParser
|
||||||
|
@ -267,34 +267,6 @@ class namecoinConnection(object):
|
||||||
raise Exception("Socket error in RPC connection: %s" % exc)
|
raise Exception("Socket error in RPC connection: %s" % exc)
|
||||||
|
|
||||||
|
|
||||||
def lookupNamecoinFolder():
|
|
||||||
"""
|
|
||||||
Look up the namecoin data folder.
|
|
||||||
|
|
||||||
.. todo:: Check whether this works on other platforms as well!
|
|
||||||
"""
|
|
||||||
|
|
||||||
app = "namecoin"
|
|
||||||
from os import path, environ
|
|
||||||
if sys.platform == "darwin":
|
|
||||||
if "HOME" in environ:
|
|
||||||
dataFolder = path.join(os.environ["HOME"],
|
|
||||||
"Library/Application Support/", app) + '/'
|
|
||||||
else:
|
|
||||||
print(
|
|
||||||
"Could not find home folder, please report this message"
|
|
||||||
" and your OS X version to the BitMessage Github."
|
|
||||||
)
|
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
elif "win32" in sys.platform or "win64" in sys.platform:
|
|
||||||
dataFolder = path.join(environ["APPDATA"], app) + "\\"
|
|
||||||
else:
|
|
||||||
dataFolder = path.join(environ["HOME"], ".%s" % app) + "/"
|
|
||||||
|
|
||||||
return dataFolder
|
|
||||||
|
|
||||||
|
|
||||||
def ensureNamecoinOptions():
|
def ensureNamecoinOptions():
|
||||||
"""
|
"""
|
||||||
Ensure all namecoin options are set, by setting those to default values
|
Ensure all namecoin options are set, by setting those to default values
|
||||||
|
@ -313,7 +285,7 @@ def ensureNamecoinOptions():
|
||||||
# Try to read user/password from .namecoin configuration file.
|
# Try to read user/password from .namecoin configuration file.
|
||||||
defaultUser = ""
|
defaultUser = ""
|
||||||
defaultPass = ""
|
defaultPass = ""
|
||||||
nmcFolder = lookupNamecoinFolder()
|
nmcFolder = paths.lookupUserconfigDir('namecoin')
|
||||||
nmcConfig = nmcFolder + "namecoin.conf"
|
nmcConfig = nmcFolder + "namecoin.conf"
|
||||||
try:
|
try:
|
||||||
nmc = open(nmcConfig, "r")
|
nmc = open(nmcConfig, "r")
|
||||||
|
|
62
src/paths.py
62
src/paths.py
|
@ -23,7 +23,8 @@ def lookupExeFolder():
|
||||||
# targetdir/Bitmessage.app/Contents/MacOS/Bitmessage
|
# targetdir/Bitmessage.app/Contents/MacOS/Bitmessage
|
||||||
os.path.dirname(sys.executable).split(os.path.sep)[0] + os.path.sep
|
os.path.dirname(sys.executable).split(os.path.sep)[0] + os.path.sep
|
||||||
if frozen == "macosx_app" else
|
if frozen == "macosx_app" else
|
||||||
os.path.dirname(sys.executable) + os.path.sep)
|
os.path.dirname(sys.executable).decode(
|
||||||
|
sys.getfilesystemencoding(), 'ignore') + os.path.sep)
|
||||||
elif __file__:
|
elif __file__:
|
||||||
exeFolder = os.path.dirname(__file__) + os.path.sep
|
exeFolder = os.path.dirname(__file__) + os.path.sep
|
||||||
else:
|
else:
|
||||||
|
@ -31,44 +32,63 @@ def lookupExeFolder():
|
||||||
return exeFolder
|
return exeFolder
|
||||||
|
|
||||||
|
|
||||||
|
def lookupUserconfigDir(appname):
|
||||||
|
"""Lookup user data directory for the *appname* application"""
|
||||||
|
try:
|
||||||
|
from appdirs import user_config_dir
|
||||||
|
return user_config_dir(appname, False, roaming=True) + os.path.sep
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if sys.platform == 'darwin':
|
||||||
|
try:
|
||||||
|
dataFolder = os.path.join(
|
||||||
|
os.environ['HOME'],
|
||||||
|
"Library/Application Support/", appname) + '/'
|
||||||
|
except KeyError:
|
||||||
|
sys.exit(
|
||||||
|
"Could not find home folder, please report this message"
|
||||||
|
" and your OS X version to the BitMessage Github.")
|
||||||
|
elif sys.platform.startswith('win'):
|
||||||
|
dataFolder = os.path.join(
|
||||||
|
os.environ['APPDATA'], appname
|
||||||
|
).decode(sys.getfilesystemencoding(), 'ignore') + os.path.sep
|
||||||
|
else:
|
||||||
|
dataFolder = os.path.join(
|
||||||
|
os.environ['HOME'], '.%s' % appname) + os.path.sep
|
||||||
|
|
||||||
|
return dataFolder
|
||||||
|
|
||||||
|
|
||||||
def lookupAppdataFolder():
|
def lookupAppdataFolder():
|
||||||
"""Returns path of the folder where application data is stored"""
|
"""Returns path of the folder where application data is stored"""
|
||||||
APPNAME = "PyBitmessage"
|
APPNAME = "PyBitmessage"
|
||||||
|
|
||||||
dataFolder = os.environ.get('BITMESSAGE_HOME')
|
dataFolder = os.environ.get('BITMESSAGE_HOME')
|
||||||
if dataFolder:
|
if dataFolder:
|
||||||
if dataFolder[-1] not in (os.path.sep, os.path.altsep):
|
if dataFolder[-1] not in (os.path.sep, os.path.altsep):
|
||||||
dataFolder += os.path.sep
|
dataFolder += os.path.sep
|
||||||
elif sys.platform == 'darwin':
|
return dataFolder
|
||||||
try:
|
|
||||||
dataFolder = os.path.join(
|
|
||||||
os.environ['HOME'],
|
|
||||||
'Library/Application Support/', APPNAME
|
|
||||||
) + '/'
|
|
||||||
|
|
||||||
except KeyError:
|
dataFolder = lookupUserconfigDir(APPNAME)
|
||||||
sys.exit(
|
# Try to follow XDG spec on Linux, Unix or BSD
|
||||||
'Could not find home folder, please report this message'
|
# TODO: use pyxdg
|
||||||
' and your OS X version to the BitMessage Github.')
|
if os.name == 'posix' and sys.platform != 'darwin':
|
||||||
elif 'win32' in sys.platform or 'win64' in sys.platform:
|
|
||||||
dataFolder = os.path.join(
|
|
||||||
os.environ['APPDATA'].decode(
|
|
||||||
sys.getfilesystemencoding(), 'ignore'), APPNAME
|
|
||||||
) + os.path.sep
|
|
||||||
else:
|
|
||||||
try:
|
try:
|
||||||
dataFolder = os.path.join(os.environ['XDG_CONFIG_HOME'], APPNAME)
|
datadir = os.path.join(os.environ['XDG_CONFIG_HOME'], APPNAME)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
dataFolder = os.path.join(os.environ['HOME'], '.config', APPNAME)
|
datadir = os.path.join(os.environ['HOME'], '.config', APPNAME)
|
||||||
|
|
||||||
# Migrate existing data to the proper location
|
# Migrate existing data to the proper location
|
||||||
# if this is an existing install
|
# if this is an existing install
|
||||||
try:
|
try:
|
||||||
move(os.path.join(os.environ['HOME'], '.%s' % APPNAME), dataFolder)
|
move(dataFolder, datadir)
|
||||||
|
dataFolder = datadir + os.path.sep
|
||||||
logger.info('Moving data folder to %s', dataFolder)
|
logger.info('Moving data folder to %s', dataFolder)
|
||||||
except IOError:
|
except IOError:
|
||||||
# Old directory may not exist.
|
# Old directory may not exist.
|
||||||
pass
|
pass
|
||||||
dataFolder = dataFolder + os.path.sep
|
|
||||||
return dataFolder
|
return dataFolder
|
||||||
|
|
||||||
|
|
||||||
|
|
Reference in New Issue
Block a user