support XDG Base Directory Specification (closes #765)
This commit is contained in:
parent
5bd0aeed41
commit
3a3bbd377e
3 changed files with 39 additions and 11 deletions
|
|
@ -21,6 +21,7 @@
|
||||||
from __future__ import with_statement
|
from __future__ import with_statement
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import shutil
|
||||||
|
|
||||||
from weboob.core.bcall import BackendsCall
|
from weboob.core.bcall import BackendsCall
|
||||||
from weboob.core.modules import ModulesLoader, ModuleLoadError
|
from weboob.core.modules import ModulesLoader, ModuleLoadError
|
||||||
|
|
@ -52,17 +53,35 @@ class Weboob(object):
|
||||||
self.scheduler = scheduler
|
self.scheduler = scheduler
|
||||||
|
|
||||||
# Create WORKDIR
|
# Create WORKDIR
|
||||||
if workdir is None:
|
if workdir is not None:
|
||||||
workdir = os.environ.get('WEBOOB_WORKDIR', self.WORKDIR)
|
datadir = workdir
|
||||||
self.workdir = os.path.realpath(workdir)
|
elif 'WEBOOB_WORKDIR' in os.environ:
|
||||||
|
datadir = workdir = os.environ.get('WEBOOB_WORKDIR')
|
||||||
|
else:
|
||||||
|
old_workdir = os.path.join(os.path.expanduser('~'), '.weboob')
|
||||||
|
xdg_config_home = os.environ.get('XDG_CONFIG_HOME', os.path.join(os.path.expanduser('~'), '.config', 'weboob'))
|
||||||
|
xdg_data_home = os.environ.get('XDG_DATA_HOME', os.path.join(os.path.expanduser('~'), '.local', 'share', 'weboob'))
|
||||||
|
|
||||||
if not os.path.exists(self.workdir):
|
if os.path.isdir(old_workdir):
|
||||||
os.mkdir(self.workdir, 0700)
|
self.logger.warning('You are using "%s" as working directory. Files are moved into %s and %s.'
|
||||||
elif not os.path.isdir(self.workdir):
|
% (old_workdir, xdg_config_home, xdg_data_home))
|
||||||
self.logger.warning(u'"%s" is not a directory' % self.workdir)
|
self.create_dir(xdg_config_home)
|
||||||
|
self.create_dir(xdg_data_home)
|
||||||
|
for f in os.listdir(old_workdir):
|
||||||
|
if f in Repositories.SHARE_DIRS:
|
||||||
|
dest = xdg_data_home
|
||||||
|
else:
|
||||||
|
dest = xdg_config_home
|
||||||
|
shutil.move(os.path.join(old_workdir, f), dest)
|
||||||
|
os.unlink(old_workdir)
|
||||||
|
workdir = xdg_config_home
|
||||||
|
datadir = xdg_data_home
|
||||||
|
|
||||||
|
self.workdir = os.path.realpath(workdir)
|
||||||
|
self.create_dir(workdir)
|
||||||
|
|
||||||
# Repositories management
|
# Repositories management
|
||||||
self.repositories = Repositories(self.workdir, self.VERSION)
|
self.repositories = Repositories(datadir, self.VERSION)
|
||||||
|
|
||||||
# Backends loader
|
# Backends loader
|
||||||
self.modules_loader = ModulesLoader(self.repositories)
|
self.modules_loader = ModulesLoader(self.repositories)
|
||||||
|
|
@ -77,6 +96,12 @@ class Weboob(object):
|
||||||
# Storage
|
# Storage
|
||||||
self.storage = storage
|
self.storage = storage
|
||||||
|
|
||||||
|
def create_dir(self, name):
|
||||||
|
if not os.path.exists(name):
|
||||||
|
os.makedirs(name)
|
||||||
|
elif not os.path.isdir(name):
|
||||||
|
self.logger.error(u'"%s" is not a directory' % name)
|
||||||
|
|
||||||
def __deinit__(self):
|
def __deinit__(self):
|
||||||
self.deinit()
|
self.deinit()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -309,6 +309,8 @@ class Repositories(object):
|
||||||
REPOSITORIES_DIR = 'repositories'
|
REPOSITORIES_DIR = 'repositories'
|
||||||
ICONS_DIR = 'icons'
|
ICONS_DIR = 'icons'
|
||||||
|
|
||||||
|
SHARE_DIRS = [MODULES_DIR, REPOSITORIES_DIR, ICONS_DIR]
|
||||||
|
|
||||||
def __init__(self, workdir, version):
|
def __init__(self, workdir, version):
|
||||||
self.logger = getLogger('repositories')
|
self.logger = getLogger('repositories')
|
||||||
self.version = version
|
self.version = version
|
||||||
|
|
@ -318,6 +320,7 @@ class Repositories(object):
|
||||||
self.repos_dir = os.path.join(self.workdir, self.REPOSITORIES_DIR)
|
self.repos_dir = os.path.join(self.workdir, self.REPOSITORIES_DIR)
|
||||||
self.icons_dir = os.path.join(self.workdir, self.ICONS_DIR)
|
self.icons_dir = os.path.join(self.workdir, self.ICONS_DIR)
|
||||||
|
|
||||||
|
self.create_dir(self.workdir)
|
||||||
self.create_dir(self.repos_dir)
|
self.create_dir(self.repos_dir)
|
||||||
self.create_dir(self.modules_dir)
|
self.create_dir(self.modules_dir)
|
||||||
self.create_dir(self.icons_dir)
|
self.create_dir(self.icons_dir)
|
||||||
|
|
@ -335,9 +338,9 @@ class Repositories(object):
|
||||||
|
|
||||||
def create_dir(self, name):
|
def create_dir(self, name):
|
||||||
if not os.path.exists(name):
|
if not os.path.exists(name):
|
||||||
os.mkdir(name)
|
os.makedirs(name)
|
||||||
elif not os.path.isdir(name):
|
elif not os.path.isdir(name):
|
||||||
self.logger.warning(u'"%s" is not a directory' % name)
|
self.logger.error(u'"%s" is not a directory' % name)
|
||||||
|
|
||||||
def _extend_module_info(self, repos, info):
|
def _extend_module_info(self, repos, info):
|
||||||
if repos.local:
|
if repos.local:
|
||||||
|
|
|
||||||
|
|
@ -237,7 +237,7 @@ class ReplApplication(Cmd, ConsoleApplication):
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
history_filepath = os.path.join(self.weboob.WORKDIR, '%s_history' % self.APPNAME)
|
history_filepath = os.path.join(self.weboob.workdir, '%s_history' % self.APPNAME)
|
||||||
try:
|
try:
|
||||||
readline.read_history_file(history_filepath)
|
readline.read_history_file(history_filepath)
|
||||||
except IOError:
|
except IOError:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue