forked from msvsphere/leapp-repository
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
190 lines
5.0 KiB
190 lines
5.0 KiB
10 months ago
|
import json
|
||
|
import logging
|
||
|
import os
|
||
|
from collections import namedtuple
|
||
|
|
||
|
from leapp import reporting
|
||
|
from leapp.libraries.common.config import architecture
|
||
|
from leapp.models import EnvVar
|
||
|
from leapp.utils.deprecation import deprecated
|
||
|
|
||
|
|
||
|
class produce_mocked(object):
|
||
|
def __init__(self):
|
||
|
self.called = 0
|
||
|
self.model_instances = []
|
||
|
|
||
|
def __call__(self, *model_instances):
|
||
|
self.called += len(model_instances)
|
||
|
self.model_instances.extend(list(model_instances))
|
||
|
|
||
|
|
||
|
class create_report_mocked(object):
|
||
|
def __init__(self):
|
||
|
self.called = 0
|
||
|
self.reports = []
|
||
|
|
||
|
def __call__(self, report_fields):
|
||
|
self.called += 1
|
||
|
report_obj = reporting._create_report_object(report_fields)
|
||
|
full_report = json.loads(report_obj.dump()['report'])
|
||
|
self.reports.append(full_report)
|
||
|
|
||
|
@property
|
||
|
def report_fields(self):
|
||
|
if self.reports:
|
||
|
return self.reports[-1]
|
||
|
return {}
|
||
|
|
||
|
|
||
|
class logger_mocked(object):
|
||
|
def __init__(self):
|
||
|
self.dbgmsg = []
|
||
|
self.infomsg = []
|
||
|
self.warnmsg = []
|
||
|
self.errmsg = []
|
||
|
|
||
|
def debug(self, *args):
|
||
|
self.dbgmsg.extend(args)
|
||
|
|
||
|
def info(self, *args):
|
||
|
self.infomsg.extend(args)
|
||
|
|
||
|
@deprecated(since='2020-09-23', message=(
|
||
|
'The logging.warn method has been deprecated since Python 3.3.'
|
||
|
'Use the warning method instead.'
|
||
|
))
|
||
|
def warn(self, *args):
|
||
|
self.warnmsg.extend(args)
|
||
|
|
||
|
def warning(self, *args):
|
||
|
self.warnmsg.extend(args)
|
||
|
|
||
|
def error(self, *args):
|
||
|
self.errmsg.extend(args)
|
||
|
|
||
|
def __call__(self):
|
||
|
return self
|
||
|
|
||
|
|
||
|
class CurrentActorMocked(object): # pylint:disable=R0904
|
||
|
def __init__(self, arch=architecture.ARCH_X86_64, envars=None, kernel='3.10.0-957.43.1.el7.x86_64',
|
||
|
release_id='rhel', src_ver='7.8', dst_ver='8.1', msgs=None, flavour='default'):
|
||
|
envarsList = [EnvVar(name=k, value=v) for k, v in envars.items()] if envars else []
|
||
|
version = namedtuple('Version', ['source', 'target'])(src_ver, dst_ver)
|
||
|
release = namedtuple('OS_release', ['release_id', 'version_id'])(release_id, src_ver)
|
||
|
|
||
|
self._common_folder = '../../files'
|
||
|
self._common_tools_folder = '../../tools'
|
||
|
self._actor_folder = 'files'
|
||
|
self._actor_tools_folder = 'tools'
|
||
|
self.configuration = namedtuple(
|
||
|
'configuration', ['architecture', 'kernel', 'leapp_env_vars', 'os_release', 'version', 'flavour']
|
||
|
)(arch, kernel, envarsList, release, version, flavour)
|
||
|
self._msgs = msgs or []
|
||
|
|
||
|
def __call__(self):
|
||
|
return self
|
||
|
|
||
|
def get_common_folder_path(self, folder):
|
||
|
return os.path.join(self._common_folder, folder)
|
||
|
|
||
|
def get_common_tool_path(self, name):
|
||
|
return os.path.join(self._common_tools_folder, name)
|
||
|
|
||
|
def consume(self, model):
|
||
|
return iter(filter( # pylint:disable=W0110,W1639
|
||
|
lambda msg: isinstance(msg, model), self._msgs
|
||
|
))
|
||
|
|
||
|
@property
|
||
|
def log(self):
|
||
|
return logging.getLogger(__name__)
|
||
|
|
||
|
def get_actor_file_path(self, name):
|
||
|
return os.path.join(self._actor_folder, name)
|
||
|
|
||
|
# other functions and properties from the API - can be implemented as needed
|
||
|
|
||
|
def serialize(self):
|
||
|
raise NotImplementedError
|
||
|
|
||
|
def get_answers(self, dialog):
|
||
|
raise NotImplementedError
|
||
|
|
||
|
def show_message(self, message):
|
||
|
raise NotImplementedError
|
||
|
|
||
|
@property
|
||
|
def actor_files_paths(self):
|
||
|
raise NotImplementedError
|
||
|
|
||
|
@property
|
||
|
def files_paths(self):
|
||
|
raise NotImplementedError
|
||
|
|
||
|
@property
|
||
|
def common_files_paths(self):
|
||
|
raise NotImplementedError
|
||
|
|
||
|
@property
|
||
|
def actor_tools_paths(self):
|
||
|
raise NotImplementedError
|
||
|
|
||
|
@property
|
||
|
def common_tools_paths(self):
|
||
|
raise NotImplementedError
|
||
|
|
||
|
@property
|
||
|
def tools_paths(self):
|
||
|
raise NotImplementedError
|
||
|
|
||
|
def get_folder_path(self, name):
|
||
|
raise NotImplementedError
|
||
|
|
||
|
def get_actor_folder_path(self, name):
|
||
|
raise NotImplementedError
|
||
|
|
||
|
def get_file_path(self, name):
|
||
|
raise NotImplementedError
|
||
|
|
||
|
def get_common_file_path(self, name):
|
||
|
raise NotImplementedError
|
||
|
|
||
|
def get_tool_path(self, name):
|
||
|
raise NotImplementedError
|
||
|
|
||
|
def get_actor_tool_path(self, name):
|
||
|
raise NotImplementedError
|
||
|
|
||
|
def run(self, *args):
|
||
|
raise NotImplementedError
|
||
|
|
||
|
def produce(self, *models):
|
||
|
raise NotImplementedError
|
||
|
|
||
|
def report_error(self, message, severity, details):
|
||
|
raise NotImplementedError
|
||
|
|
||
|
|
||
|
def make_IOError(error):
|
||
|
"""
|
||
|
Create an IOError instance
|
||
|
|
||
|
Create an IOError instance with the given error number.
|
||
|
|
||
|
:param error: the error number, e.g. errno.ENOENT
|
||
|
"""
|
||
|
return IOError(error, os.strerror(error))
|
||
|
|
||
|
|
||
|
def make_OSError(error):
|
||
|
"""
|
||
|
Create an OSError instance
|
||
|
|
||
|
Create an OSError instance with the given error number.
|
||
|
|
||
|
:param error: the error number, e.g. errno.ENOENT
|
||
|
"""
|
||
|
return OSError(error, os.strerror(error))
|