mirror of
https://github.com/codex-storage/deluge.git
synced 2025-01-14 13:34:21 +00:00
30a0f3c9ed
* Use the inline '# NOQA' to supress N802 lower-case warnings
118 lines
3.4 KiB
Python
118 lines
3.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
#
|
|
# Copyright (C) 2007 Andrew Resch <andrewresch@gmail.com>
|
|
#
|
|
# This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with
|
|
# the additional special exception to link portions of this program with the OpenSSL library.
|
|
# See LICENSE for more details.
|
|
#
|
|
|
|
import logging
|
|
import os
|
|
|
|
import deluge.common
|
|
import deluge.log
|
|
from deluge.config import Config
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
class _ConfigManager:
|
|
def __init__(self):
|
|
log.debug("ConfigManager started..")
|
|
self.config_files = {}
|
|
self.__config_directory = None
|
|
|
|
@property
|
|
def config_directory(self):
|
|
if self.__config_directory is None:
|
|
self.__config_directory = deluge.common.get_default_config_dir()
|
|
return self.__config_directory
|
|
|
|
def __del__(self):
|
|
del self.config_files
|
|
|
|
def set_config_dir(self, directory):
|
|
"""
|
|
Sets the config directory.
|
|
|
|
:param directory: str, the directory where the config info should be
|
|
|
|
:returns bool: True if successfully changed directory, False if not
|
|
"""
|
|
|
|
if not directory:
|
|
return False
|
|
|
|
log.info("Setting config directory to: %s", directory)
|
|
if not os.path.exists(directory):
|
|
# Try to create the config folder if it doesn't exist
|
|
try:
|
|
os.makedirs(directory)
|
|
except OSError as ex:
|
|
log.error("Unable to make config directory: %s", ex)
|
|
return False
|
|
elif not os.path.isdir(directory):
|
|
log.error("Config directory needs to be a directory!")
|
|
return False
|
|
|
|
self.__config_directory = directory
|
|
|
|
# Reset the config_files so we don't get config from old config folder
|
|
# XXX: Probably should have it go through the config_files dict and try
|
|
# to reload based on the new config directory
|
|
self.save()
|
|
self.config_files = {}
|
|
deluge.log.tweak_logging_levels()
|
|
|
|
return True
|
|
|
|
def get_config_dir(self):
|
|
return self.config_directory
|
|
|
|
def close(self, config):
|
|
"""Closes a config file."""
|
|
try:
|
|
del self.config_files[config]
|
|
except KeyError:
|
|
pass
|
|
|
|
def save(self):
|
|
"""Saves all the configs to disk."""
|
|
for value in self.config_files.values():
|
|
value.save()
|
|
# We need to return True to keep the timer active
|
|
return True
|
|
|
|
def get_config(self, config_file, defaults=None):
|
|
"""Get a reference to the Config object for this filename"""
|
|
log.debug("Getting config '%s'", config_file)
|
|
# Create the config object if not already created
|
|
if config_file not in self.config_files.keys():
|
|
self.config_files[config_file] = Config(config_file, defaults, self.config_directory)
|
|
|
|
return self.config_files[config_file]
|
|
|
|
# Singleton functions
|
|
_configmanager = _ConfigManager()
|
|
|
|
|
|
def ConfigManager(config, defaults=None): # NOQA
|
|
return _configmanager.get_config(config, defaults)
|
|
|
|
|
|
def set_config_dir(directory):
|
|
"""Sets the config directory, else just uses default"""
|
|
return _configmanager.set_config_dir(directory)
|
|
|
|
|
|
def get_config_dir(filename=None):
|
|
if filename is not None:
|
|
return os.path.join(_configmanager.get_config_dir(), filename)
|
|
else:
|
|
return _configmanager.get_config_dir()
|
|
|
|
|
|
def close(config):
|
|
return _configmanager.close(config)
|