entropy.core.SystemSettings: make SystemSettings usable without

entropy.client.interfaces.Client instance. Copy socket service
settings into it (parsing in entropy.const will be removed very
soon)
This commit is contained in:
Fabio Erculiani
2009-04-03 13:43:29 +02:00
parent b4a8dbc53d
commit 800fa6ac2a
+156 -48
View File
@@ -74,7 +74,7 @@ class SystemSettings(Singleton):
"""
import entropy.tools as entropyTools
def init_singleton(self, entropy_client_instance):
def init_singleton(self, entropy_client_instance = None):
"""
Replaces __init__ because SystemSettings is a Singleton.
@@ -87,13 +87,14 @@ class SystemSettings(Singleton):
self.__data = {}
self.__is_destroyed = False
from entropy.client.interfaces import Client
if not isinstance(entropy_client_instance, Client):
mytxt = _("A valid Client interface instance is needed")
raise IncorrectParameter("IncorrectParameter: %s" % (mytxt,))
if entropy_client_instance != None:
from entropy.client.interfaces import Client
if not isinstance(entropy_client_instance, Client):
mytxt = _("A valid Client interface instance is needed")
raise IncorrectParameter("IncorrectParameter: %s" % (mytxt,))
self.Entropy = entropy_client_instance
self.__settings = {}
self.__setting_files = {}
self.__mtime_files = {}
self.__persistent_settings = {
'pkg_masking_reasons': {
@@ -147,10 +148,10 @@ class SystemSettings(Singleton):
@return None
"""
self.__settings.clear()
self.__setting_files.clear()
self.__mtime_files.clear()
self.__settings.update({
self.__setting_files.update({
# keywording configuration files
'keywords': etpConst['confpackagesdir']+"/package.keywords",
# unmasking configuration files
@@ -167,15 +168,16 @@ class SystemSettings(Singleton):
'conflicting_tagged_packages': {},
'system_dirs': etpConst['confdir']+"/fsdirs.conf",
'system_dirs_mask': etpConst['confdir']+"/fsdirsmask.conf",
'socket_service': etpConst['socketconf'],
})
## XXX trunk support, for a while - exp. date 10/10/2009
trunk_fsdirs_conf = "../conf/fsdirs.conf"
trunk_fsdirsmask_conf = "../conf/fsdirsmask.conf"
if os.path.isfile(trunk_fsdirs_conf):
self.__settings['system_dirs'] = trunk_fsdirs_conf
self.__setting_files['system_dirs'] = trunk_fsdirs_conf
if os.path.isfile(trunk_fsdirsmask_conf):
self.__settings['system_dirs_mask'] = trunk_fsdirsmask_conf
self.__setting_files['system_dirs_mask'] = trunk_fsdirsmask_conf
dmp_dir = etpConst['dumpstoragedir']
self.__mtime_files.update({
@@ -216,8 +218,8 @@ class SystemSettings(Singleton):
# match installed packages of system_mask
mask_installed = []
mask_installed_keys = {}
if self.Entropy.clientDbconn != None:
while 1:
if self.Entropy != None:
while (self.Entropy.clientDbconn != None):
try:
self.Entropy.clientDbconn.validateDatabase()
except SystemDatabaseError:
@@ -435,20 +437,20 @@ class SystemSettings(Singleton):
if os.path.isfile(ct_path) and os.access(ct_path, os.R_OK):
confl_tagged[repoid] = ct_path
self.__settings['repos_mask'].update(repos_mask_setting)
self.__setting_files['repos_mask'].update(repos_mask_setting)
self.__mtime_files['repos_mask'].update(repos_mask_mtime)
self.__settings['repos_license_whitelist'].update(
self.__setting_files['repos_license_whitelist'].update(
repos_lic_wl_setting)
self.__mtime_files['repos_license_whitelist'].update(
repos_lic_wl_mtime)
self.__settings['repos_system_mask'].update(
self.__setting_files['repos_system_mask'].update(
repos_sm_mask_setting)
self.__mtime_files['repos_system_mask'].update(
repos_sm_mask_mtime)
self.__settings['conflicting_tagged_packages'].update(
self.__setting_files['conflicting_tagged_packages'].update(
confl_tagged)
def __setup_package_sets_vars(self):
@@ -474,7 +476,7 @@ class SystemSettings(Singleton):
except (UnicodeDecodeError, UnicodeEncodeError,):
continue
pkg_set_data[set_file] = os.path.join(sets_dir, set_file)
self.__settings['system_package_sets'].update(pkg_set_data)
self.__setting_files['system_package_sets'].update(pkg_set_data)
def __parse(self):
"""
@@ -489,7 +491,7 @@ class SystemSettings(Singleton):
self.__setup_package_sets_vars()
data = {}
for item in self.__settings:
for item in self.__setting_files:
myattr = '%s_parser' % (item,)
if not hasattr(self, myattr):
continue
@@ -502,9 +504,9 @@ class SystemSettings(Singleton):
Return a copy of the internal *files* dictionary.
This dict contains config file paths and their identifiers.
@return dict __settings
@return dict __setting_files
"""
return self.__settings.copy()
return self.__setting_files.copy()
def get_mtime_files_data(self):
"""
@@ -530,10 +532,10 @@ class SystemSettings(Singleton):
'repositories': {},
}
self.__validate_entropy_cache(self.__settings['keywords'],
self.__validate_entropy_cache(self.__setting_files['keywords'],
self.__mtime_files['keywords_mtime'])
content = [x.split() for x in \
self.__generic_parser(self.__settings['keywords']) \
self.__generic_parser(self.__setting_files['keywords']) \
if len(x.split()) < 4]
for keywordinfo in content:
# skip wrong lines
@@ -597,9 +599,9 @@ class SystemSettings(Singleton):
@return list parsed data
"""
self.__validate_entropy_cache(self.__settings['unmask'],
self.__validate_entropy_cache(self.__setting_files['unmask'],
self.__mtime_files['unmask_mtime'])
return self.__generic_parser(self.__settings['unmask'])
return self.__generic_parser(self.__setting_files['unmask'])
def mask_parser(self):
"""
@@ -610,9 +612,9 @@ class SystemSettings(Singleton):
@return list parsed data
"""
self.__validate_entropy_cache(self.__settings['mask'],
self.__validate_entropy_cache(self.__setting_files['mask'],
self.__mtime_files['mask_mtime'])
return self.__generic_parser(self.__settings['mask'])
return self.__generic_parser(self.__setting_files['mask'])
def system_mask_parser(self):
"""
@@ -624,9 +626,9 @@ class SystemSettings(Singleton):
@return list parsed data
"""
self.__validate_entropy_cache(self.__settings['system_mask'],
self.__validate_entropy_cache(self.__setting_files['system_mask'],
self.__mtime_files['system_mask_mtime'])
return self.__generic_parser(self.__settings['system_mask'])
return self.__generic_parser(self.__setting_files['system_mask'])
def license_mask_parser(self):
"""
@@ -636,9 +638,9 @@ class SystemSettings(Singleton):
@return list parsed data
"""
self.__validate_entropy_cache(self.__settings['license_mask'],
self.__validate_entropy_cache(self.__setting_files['license_mask'],
self.__mtime_files['license_mask_mtime'])
return self.__generic_parser(self.__settings['license_mask'])
return self.__generic_parser(self.__setting_files['license_mask'])
def repos_license_whitelist_parser(self):
"""
@@ -648,13 +650,13 @@ class SystemSettings(Singleton):
@return dict parsed data
"""
data = {}
for repoid in self.__settings['repos_license_whitelist']:
for repoid in self.__setting_files['repos_license_whitelist']:
self.__validate_entropy_cache(
self.__settings['repos_license_whitelist'][repoid],
self.__setting_files['repos_license_whitelist'][repoid],
self.__mtime_files['repos_license_whitelist'][repoid],
repoid = repoid)
data[repoid] = self.__generic_parser(
self.__settings['repos_license_whitelist'][repoid])
self.__setting_files['repos_license_whitelist'][repoid])
return data
def repos_mask_parser(self):
@@ -665,12 +667,12 @@ class SystemSettings(Singleton):
@return dict parsed data
"""
data = {}
for repoid in self.__settings['repos_mask']:
for repoid in self.__setting_files['repos_mask']:
self.__validate_entropy_cache(
self.__settings['repos_mask'][repoid],
self.__setting_files['repos_mask'][repoid],
self.__mtime_files['repos_mask'][repoid], repoid = repoid)
data[repoid] = self.__generic_parser(
self.__settings['repos_mask'][repoid])
self.__setting_files['repos_mask'][repoid])
# why ? line = line.split()[0] in the previous one?
return data
@@ -685,13 +687,13 @@ class SystemSettings(Singleton):
@return dict parsed data
"""
data = []
for repoid in self.__settings['repos_system_mask']:
for repoid in self.__setting_files['repos_system_mask']:
self.__validate_entropy_cache(
self.__settings['repos_system_mask'][repoid],
self.__setting_files['repos_system_mask'][repoid],
self.__mtime_files['repos_system_mask'][repoid],
repoid = repoid)
data += [x for x in self.__generic_parser(
self.__settings['repos_system_mask'][repoid]) if x \
self.__setting_files['repos_system_mask'][repoid]) if x \
not in data]
# why ? line = line.split()[0] in the previous one?
return data
@@ -704,8 +706,8 @@ class SystemSettings(Singleton):
@return dict parsed data
"""
data = {}
for set_name in self.__settings['system_package_sets']:
set_filepath = self.__settings['system_package_sets'][set_name]
for set_name in self.__setting_files['system_package_sets']:
set_filepath = self.__setting_files['system_package_sets'][set_name]
set_elements = self.entropyTools.extract_packages_from_set_file(
set_filepath)
if set_elements:
@@ -718,7 +720,7 @@ class SystemSettings(Singleton):
@return list parsed data
"""
return self.__generic_parser(self.__settings['system_dirs'])
return self.__generic_parser(self.__setting_files['system_dirs'])
def system_dirs_mask_parser(self):
"""
@@ -727,7 +729,7 @@ class SystemSettings(Singleton):
@return list parsed data
"""
return self.__generic_parser(self.__settings['system_dirs_mask'])
return self.__generic_parser(self.__setting_files['system_dirs_mask'])
def conflicting_tagged_packages_parser(self):
"""
@@ -740,9 +742,9 @@ class SystemSettings(Singleton):
data = {}
# keep priority order
repoids = [x for x in etpRepositoriesOrder if x in \
self.__settings['conflicting_tagged_packages']]
self.__setting_files['conflicting_tagged_packages']]
for repoid in repoids:
filepath = self.__settings['conflicting_tagged_packages'].get(
filepath = self.__setting_files['conflicting_tagged_packages'].get(
repoid)
if os.path.isfile(filepath) and os.access(filepath, os.R_OK):
confl_f = open(filepath,"r")
@@ -756,6 +758,111 @@ class SystemSettings(Singleton):
data[mydata[0]] = mydata[1:]
return data
def socket_service_parser(self):
"""
Parses socket service configuration file.
This file contains information about Entropy remote service ports
and SSL.
@return dict data
"""
data = etpConst['socket_service'].copy()
sock_conf = self.__setting_files['socket_service']
if not (os.path.isfile(sock_conf) and \
os.access(sock_conf,os.R_OK)):
return data
socket_f = open(sock_conf,"r")
socketconf = [x.strip() for x in socket_f.readlines() if \
x.strip() and not x.strip().startswith("#")]
socket_f.close()
for line in socketconf:
if line.startswith("listen|") and (len(line.split("|")) > 1):
item = line.split("|")[1].strip()
if item:
data['hostname'] = item
elif line.startswith("listen-port|") and \
(len(line.split("|")) > 1):
item = line.split("|")[1].strip()
try:
item = int(item)
data['port'] = item
except ValueError:
pass
elif line.startswith("listen-timeout|") and \
(len(line.split("|")) > 1):
item = line.split("|")[1].strip()
try:
item = int(item)
data['timeout'] = item
except ValueError:
pass
elif line.startswith("listen-threads|") and \
(len(line.split("|")) > 1):
item = line.split("|")[1].strip()
try:
item = int(item)
data['threads'] = item
except ValueError:
pass
elif line.startswith("session-ttl|") and \
(len(line.split("|")) > 1):
item = line.split("|")[1].strip()
try:
item = int(item)
data['session_ttl'] = item
except ValueError:
pass
elif line.startswith("max-connections|") and \
(len(line.split("|")) > 1):
item = line.split("|")[1].strip()
try:
item = int(item)
data['max_connections'] = item
except ValueError:
pass
elif line.startswith("ssl-port|") and \
(len(line.split("|")) > 1):
item = line.split("|")[1].strip()
try:
item = int(item)
data['ssl_port'] = item
except ValueError:
pass
elif line.startswith("disabled-commands|") and \
(len(line.split("|")) > 1):
disabled_cmds = line.split("|")[1].strip().split()
for disabled_cmd in disabled_cmds:
data['disabled_cmds'].add(disabled_cmd)
elif line.startswith("ip-blacklist|") and \
(len(line.split("|")) > 1):
ips_blacklist = line.split("|")[1].strip().split()
for ip_blacklist in ips_blacklist:
data['ip_blacklist'].add(ip_blacklist)
return data
def __generic_parser(self, filepath):
"""
Internal method. This is the generic file parser here.
@@ -787,11 +894,12 @@ class SystemSettings(Singleton):
@return None
"""
if os.path.isdir(etpConst['dumpstoragedir']):
if repoid:
if repoid and (self.Entropy != None):
self.Entropy.repository_move_clear_cache(repoid)
return
for repoid in etpRepositoriesOrder:
self.Entropy.repository_move_clear_cache(repoid)
if self.Entropy != None:
for repoid in etpRepositoriesOrder:
self.Entropy.repository_move_clear_cache(repoid)
else:
os.makedirs(etpConst['dumpstoragedir'])