summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMichal Minar <miminar@redhat.com>2013-03-21 16:41:18 +0100
committerMichal Minar <miminar@redhat.com>2013-03-21 18:07:08 +0100
commit1c9627272440844c726052dc53900ecfe544d598 (patch)
tree23c1d9fe487998cc06e47cb4314cba87b186ff69 /src
parentc110c6309306b3208eb1c3dabfb0d9d860d06b9a (diff)
downloadopenlmi-providers-1c9627272440844c726052dc53900ecfe544d598.tar.gz
openlmi-providers-1c9627272440844c726052dc53900ecfe544d598.tar.xz
openlmi-providers-1c9627272440844c726052dc53900ecfe544d598.zip
various enhancements
consistent access to Package's version and release attributes - all 'ver' and 'rel' replaced to full names added tracing decorators to some functions providers having Values class under core subpackage now reference it with self.values property Identity.pkg2model now accepts also nevra as string removed tabs in source code
Diffstat (limited to 'src')
-rw-r--r--src/software/openlmi/software/LMI_ResourceForSoftwareIdentity.py6
-rw-r--r--src/software/openlmi/software/LMI_SoftwareIdentityResource.py27
-rw-r--r--src/software/openlmi/software/LMI_SoftwareInstallationJob.py53
-rw-r--r--src/software/openlmi/software/cimom_entry.py15
-rw-r--r--src/software/openlmi/software/core/ComputerSystem.py4
-rw-r--r--src/software/openlmi/software/core/Error.py2
-rw-r--r--src/software/openlmi/software/core/Identity.py86
-rw-r--r--src/software/openlmi/software/core/InstallationJob.py33
-rw-r--r--src/software/openlmi/software/core/InstallationService.py10
-rw-r--r--src/software/openlmi/software/core/SystemCollection.py4
-rw-r--r--src/software/openlmi/software/util/__init__.py30
-rw-r--r--src/software/openlmi/software/yumdb/__init__.py6
-rw-r--r--src/software/openlmi/software/yumdb/packageinfo.py9
-rw-r--r--src/software/openlmi/software/yumdb/process.py8
-rwxr-xr-xsrc/software/test/test_installed_software_identity.py3
15 files changed, 160 insertions, 136 deletions
diff --git a/src/software/openlmi/software/LMI_ResourceForSoftwareIdentity.py b/src/software/openlmi/software/LMI_ResourceForSoftwareIdentity.py
index e7815a7..42ef7dc 100644
--- a/src/software/openlmi/software/LMI_ResourceForSoftwareIdentity.py
+++ b/src/software/openlmi/software/LMI_ResourceForSoftwareIdentity.py
@@ -122,9 +122,9 @@ class LMI_ResourceForSoftwareIdentity(CIMProvider2):
repoid = model["AvailableSAP"]["Name"]
pkg_info = Identity.object_path2pkg(
model["ManagedElement"],
- kind='available',
- include_repos=repoid,
- exclude_repos='*',
+ kind='available',
+ include_repos=repoid,
+ exclude_repos='*',
repoid=repoid)
repos = ydb.filter_repositories('all', repoid=repoid)
if len(repos) < 1:
diff --git a/src/software/openlmi/software/LMI_SoftwareIdentityResource.py b/src/software/openlmi/software/LMI_SoftwareIdentityResource.py
index 1d1564a..1377520 100644
--- a/src/software/openlmi/software/LMI_SoftwareIdentityResource.py
+++ b/src/software/openlmi/software/LMI_SoftwareIdentityResource.py
@@ -52,6 +52,7 @@ class LMI_SoftwareIdentityResource(CIMProvider2):
def __init__ (self, _env):
cmpi_logging.logger.debug('Initializing provider %s from %s' \
% (self.__class__.__name__, __file__))
+ self.values = IdentityResource.Values
@cmpi_logging.trace_method
def get_instance(self, env, model):
@@ -74,13 +75,9 @@ class LMI_SoftwareIdentityResource(CIMProvider2):
CIM_ERR_NOT_FOUND (the CIM Class does exist, but the requested CIM
Instance does not exist in the specified namespace)
CIM_ERR_FAILED (some other unspecified error occurred)
-
"""
-
- repo = IdentityResource.object_path2repo(
- env, model.path, kind='all')
- return IdentityResource.repo2model(
- repo, keys_only=False, model=model)
+ repo = IdentityResource.object_path2repo(env, model.path, kind='all')
+ return IdentityResource.repo2model(repo, keys_only=False, model=model)
@cmpi_logging.trace_method
def enum_instances(self, env, model, keys_only):
@@ -240,23 +237,20 @@ class LMI_SoftwareIdentityResource(CIMProvider2):
"""
out_params = []
if param_timeoutperiod is not None:
- return ( IdentityResource.Values.RequestStateChange. \
+ return ( self.values.RequestStateChange. \
Use_of_Timeout_Parameter_Not_Supported
, out_params)
if param_requestedstate not in {
- IdentityResource.Values.RequestStateChange. \
- RequestedState.Enabled,
- IdentityResource.Values.RequestStateChange. \
- RequestedState.Disabled }:
- return ( IdentityResource.Values.RequestStateChange. \
- Invalid_State_Transition
+ self.values.RequestStateChange.RequestedState.Enabled,
+ self.values.RequestStateChange.RequestedState.Disabled }:
+ return ( self.values.RequestStateChange.Invalid_State_Transition
, out_params)
with YumDB.get_instance() as ydb:
repo = IdentityResource.object_path2repo(env,
object_name, 'all')
- enable = param_requestedstate == IdentityResource.Values. \
- RequestStateChange.RequestedState.Enabled
+ enable = param_requestedstate == \
+ self.values.RequestStateChange.RequestedState.Enabled
cmpi_logging.logger.info("%s repository %s" % ("enabling"
if enable else "disabling", repo))
try:
@@ -271,7 +265,6 @@ class LMI_SoftwareIdentityResource(CIMProvider2):
cmpi_logging.logger.info(msg % (repo,
"enabled" if enable else "disabled"))
- rval = IdentityResource.Values.RequestStateChange. \
- Completed_with_No_Error
+ rval = self.values.RequestStateChange.Completed_with_No_Error
return (rval, out_params)
diff --git a/src/software/openlmi/software/LMI_SoftwareInstallationJob.py b/src/software/openlmi/software/LMI_SoftwareInstallationJob.py
index ee12aa0..ba0867f 100644
--- a/src/software/openlmi/software/LMI_SoftwareInstallationJob.py
+++ b/src/software/openlmi/software/LMI_SoftwareInstallationJob.py
@@ -1,15 +1,31 @@
+# -*- encoding: utf-8 -*-
+# Software Management Providers
+#
+# Copyright (C) 2012-2013 Red Hat, Inc. All rights reserved.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
"""Python Provider for LMI_SoftwareInstallationJob
Instruments the CIM class LMI_SoftwareInstallationJob
-
"""
-import inspect
import pywbem
from pywbem.cim_provider2 import CIMProvider2
from openlmi.common import cmpi_logging
-from openlmi.software.core import Error, InstallationJob
+from openlmi.software.core import InstallationJob
from openlmi.software.yumdb import errors, YumDB
class LMI_SoftwareInstallationJob(CIMProvider2):
@@ -268,28 +284,11 @@ class LMI_SoftwareInstallationJob(CIMProvider2):
CIM_ERR_FAILED (some other unspecified error occurred)
"""
job = InstallationJob.object_path2job(object_name)
+ error = InstallationJob.job2error(job)
out_params = []
- if job.state == job.EXCEPTION:
- errortup = job.result_data
- callargs = inspect.getcallargs(Error.make_instance)
- if issubclass(errortup[0],
- (errors.RepositoryNotFound, errors.PackageNotFound)):
- callargs['status_code'] = Error.Values. \
- CIMStatusCode.CIM_ERR_NOT_FOUND
- if issubclass(errortup[0], errors.PackageNotFound):
- callargs['status_code_description'] = \
- "Package not found"
- else:
- callargs['status_code_description'] = \
- "Repository not found"
- elif issubclass(errortup[0], errors.PackageAlreadyInstalled):
- callargs['status_code'] = Error.Values. \
- CIMStatusCode.CIM_ERR_ALREADY_EXISTS
- callargs['message'] = getattr(errortup[1], 'message',
- str(errortup[1]))
- value = [Error.make_instance(**callargs)]
+ if error is not None:
param = pywbem.CIMParameter('Errors', type='instance',
- is_array=True, array_size=1, value=value)
+ is_array=True, array_size=1, value=[error])
out_params.append(param)
return (self.values.GetErrors.Success, out_params)
@@ -372,4 +371,10 @@ class LMI_SoftwareInstallationJob(CIMProvider2):
the invocation request)
CIM_ERR_FAILED (some other unspecified error occurred)
"""
- raise pywbem.CIMError(pywbem.CIM_ERR_METHOD_NOT_AVAILABLE)
+ job = InstallationJob.object_path2job(object_name)
+ error = InstallationJob.job2error(job)
+ out_params = []
+ if error is not None:
+ param = pywbem.CIMParameter('Errors', type='instance', value=error)
+ out_params.append(param)
+ return (self.values.GetErrors.Success, out_params)
diff --git a/src/software/openlmi/software/cimom_entry.py b/src/software/openlmi/software/cimom_entry.py
index 033e06f..a83f2b8 100644
--- a/src/software/openlmi/software/cimom_entry.py
+++ b/src/software/openlmi/software/cimom_entry.py
@@ -44,6 +44,14 @@ from openlmi.software.LMI_SoftwareInstallationService import \
LMI_SoftwareInstallationService
from openlmi.software.LMI_SoftwareInstallationJob import \
LMI_SoftwareInstallationJob
+from openlmi.software.LMI_SoftwareMethodResult import \
+ LMI_SoftwareMethodResult
+from openlmi.software.LMI_AffectedSoftwareJobElement import \
+ LMI_AffectedSoftwareJobElement
+from openlmi.software.LMI_AssociatedSoftwareJobMethodResult import \
+ LMI_AssociatedSoftwareJobMethodResult
+from openlmi.software.LMI_OwningSoftwareJobElement import \
+ LMI_OwningSoftwareJobElement
from openlmi.software.yumdb import YumDB
def get_providers(env):
@@ -65,7 +73,12 @@ def get_providers(env):
LMI_HostedSoftwareIdentityResource(env),
"LMI_SoftwareInstallationService" : \
LMI_SoftwareInstallationService(env),
- "LMI_SoftwareInstallationJob" : LMI_SoftwareInstallationJob(env)
+ "LMI_SoftwareInstallationJob" : LMI_SoftwareInstallationJob(env),
+ "LMI_SoftwareMethodResult" : LMI_SoftwareMethodResult(env),
+ "LMI_AffectedSoftwareJobElement" : LMI_AffectedSoftwareJobElement(env),
+ "LMI_AssociatedSoftwareJobMethodResult" : \
+ LMI_AssociatedSoftwareJobMethodResult(env),
+ "LMI_OwningSoftwareJobElement" : LMI_OwningSoftwareJobElement(env)
}
return providers
diff --git a/src/software/openlmi/software/core/ComputerSystem.py b/src/software/openlmi/software/core/ComputerSystem.py
index 9cbf725..48b4500 100644
--- a/src/software/openlmi/software/core/ComputerSystem.py
+++ b/src/software/openlmi/software/core/ComputerSystem.py
@@ -23,6 +23,8 @@ Just a common functionality related to associated class Linux_ComputerSystem.
import pywbem
import socket
+from openlmi.common import cmpi_logging
+
def get_path(prefix='Linux'):
"""
@return object path of Linux_ComputerSystem
@@ -34,6 +36,7 @@ def get_path(prefix='Linux'):
op["Name"] = socket.gethostname()
return op
+@cmpi_logging.trace_function
def check_path(env, system, prop_name):
"""
Checks instance name of ComputerSystem.
@@ -70,6 +73,7 @@ def check_path(env, system, prop_name):
prop_name, our_system['Name'])
return True
+@cmpi_logging.trace_function
def check_path_property(env, op, prop_name):
"""
Checks, whether object path contains correct instance name of
diff --git a/src/software/openlmi/software/core/Error.py b/src/software/openlmi/software/core/Error.py
index ccf4715..210c00e 100644
--- a/src/software/openlmi/software/core/Error.py
+++ b/src/software/openlmi/software/core/Error.py
@@ -22,6 +22,7 @@ Just a common functionality related to class CIM_Error.
import pywbem
+from openlmi.common import cmpi_logging
from openlmi.software.core import InstallationService
class Values(object):
@@ -414,6 +415,7 @@ class Values(object):
130 : 'Unexpected Information'
}
+@cmpi_logging.trace_function
def make_instance(
status_code=Values.CIMStatusCode.CIM_ERR_FAILED,
error_type=Values.ErrorType.Software_Error,
diff --git a/src/software/openlmi/software/core/Identity.py b/src/software/openlmi/software/core/Identity.py
index b7e8020..eda0ab9 100644
--- a/src/software/openlmi/software/core/Identity.py
+++ b/src/software/openlmi/software/core/Identity.py
@@ -162,6 +162,7 @@ class Values(object):
@cmpi_logging.trace_function
def object_path2nevra(op, with_epoch='NOT_ZERO'):
+ """Get nevra out of object path. Also checks for validity."""
if not isinstance(op, pywbem.CIMInstanceName):
raise pywbem.CIMError(pywbem.CIM_ERR_INVALID_PARAMETER,
"op must be an instance of CIMInstanceName")
@@ -185,8 +186,8 @@ def object_path2nevra(op, with_epoch='NOT_ZERO'):
return util.make_nevra(
match.group('name'),
epoch,
- match.group('ver'),
- match.group('rel'),
+ match.group('version'),
+ match.group('release'),
match.group('arch'), with_epoch=with_epoch)
@cmpi_logging.trace_function
@@ -224,85 +225,46 @@ def object_path2pkg(op,
op["InstanceID"])
@cmpi_logging.trace_function
-def pkg2model(pkg_info, keys_only=True, model=None):
+def pkg2model(pkg, keys_only=True, model=None):
"""
+ @param pkg can either be an instance of PackageInfo or nevra as string
@param model if not None, will be filled with data, otherwise
a new instance of CIMInstance or CIMObjectPath is created
"""
- if not isinstance(pkg_info, PackageInfo):
- raise TypeError("pkg must be an instance of PackageInfo")
+ if not isinstance(pkg, (basestring, PackageInfo)):
+ raise TypeError("pkg must be an instance of PackageInfo or nevra")
+ if isinstance(pkg, basestring) and not keys_only:
+ raise ValueError("can not create instance out of nevra")
if model is None:
model = pywbem.CIMInstanceName("LMI_SoftwareIdentity",
namespace="root/cimv2")
if not keys_only:
model = pywbem.CIMInstance("LMI_SoftwareIdentity", path=model)
- if isinstance(model, pywbem.CIMInstance):
- def _set_key(k, value):
- """Sets the value of key property of cim instance"""
- model[k] = value
- model.path[k] = value #pylint: disable=E1103
- else:
- _set_key = model.__setitem__
- _set_key('InstanceID', 'LMI:SoftwareIdentity:'+pkg_info.nevra)
+ nevra = pkg if isinstance(pkg, basestring) else pkg.nevra
+ model['InstanceID'] = 'LMI:SoftwareIdentity:'+nevra
if not keys_only:
- #model['BuildNumber'] = pywbem.Uint16() # TODO
- model['Caption'] = pkg_info.summary
- #model['ClassificationDescriptions'] = ['',] # TODO
+ model.path['InstanceID'] = model['InstanceID'] #pylint: disable=E1103
+ model['Caption'] = pkg.summary
model['Classifications'] = [pywbem.Uint16(0)]
- #model['CommunicationStatus'] = \
- # self.Values.CommunicationStatus.<VAL> # TODO
- model['Description'] = pkg_info.description
- #model['DetailedStatus'] = self.Values.DetailedStatus.<VAL> # TODO
- model['ElementName'] = pkg_info.nevra
- #model['ExtendedResourceType'] = \
- #self.Values.ExtendedResourceType.<VAL> # TODO
- #model['HealthState'] = self.Values.HealthState.<VAL> # TODO
- #model['IdentityInfoType'] = ['',] # TODO
- #model['IdentityInfoValue'] = ['',] # TODO
- if pkg_info.installed:
- model['InstallDate'] = pywbem.CIMDateTime(pkg_info.install_time)
+ model['Description'] = pkg.description
+ model['ElementName'] = pkg.nevra
+ if pkg.installed:
+ model['InstallDate'] = pywbem.CIMDateTime(pkg.install_time)
else:
model['InstallDate'] = pywbem.CIMProperty(
'InstallDate', None, type='datetime')
model['IsEntity'] = True
- #model['IsLargeBuildNumber'] = bool(False) # TODO
- #model['Languages'] = ['',] # TODO
- #model['LargeBuildNumber'] = pywbem.Uint64() # TODO
- #model['MajorVersion'] = pywbem.Uint16() # TODO
- #model['Manufacturer'] = '' # TODO
- #model['MinExtendedResourceTypeBuildNumber'] = \
- #pywbem.Uint16() # TODO
- #model['MinExtendedResourceTypeMajorVersion'] = \
- #pywbem.Uint16() # TODO
- #model['MinExtendedResourceTypeMinorVersion'] = \
- #pywbem.Uint16() # TODO
- #model['MinExtendedResourceTypeRevisionNumber'] = \
- #pywbem.Uint16() # TODO
- #model['MinorVersion'] = pywbem.Uint16() # TODO
- model['Name'] = pkg_info.name
+ model['Name'] = pkg.name
try:
- model["Epoch"] = pywbem.Uint32(int(pkg_info.epoch))
+ model["Epoch"] = pywbem.Uint32(int(pkg.epoch))
except ValueError:
cmpi_logging.logger.error('Could not convert epoch "%s"'
- ' to integer for package \"%s\"!' % (pkg_info.epoch, pkg_info))
+ ' to integer for package \"%s\"!' % (pkg.epoch, pkg))
model["Epoch"] = pywbem.CIMProperty('Epoch', None, type='uint32')
- model['Version'] = pkg_info.version
- model['Release'] = pkg_info.release
- model['Architecture'] = pkg_info.arch
- #model['OperatingStatus'] = \
- #self.Values.OperatingStatus.<VAL> # TODO
- #model['OperationalStatus'] = \
- #[self.Values.OperationalStatus.<VAL>,] # TODO
- #model['OtherExtendedResourceTypeDescription'] = '' # TODO
- #model['PrimaryStatus'] = self.Values.PrimaryStatus.<VAL> # TODO
- #model['ReleaseDate'] = pywbem.CIMDateTime() # TODO
- #model['RevisionNumber'] = pywbem.Uint16() # TODO
- #model['SerialNumber'] = '' # TODO
- #model['Status'] = self.Values.Status.<VAL> # TODO
- #model['StatusDescriptions'] = ['',] # TODO
- #model['TargetOperatingSystems'] = ['',] # TODO
- #model['TargetOSTypes'] = [pywbem.Uint16(),] # TODO
+ model['Version'] = pkg.version
+ model['Release'] = pkg.release
+ model['Architecture'] = pkg.arch
model['TargetTypes'] = ['rpm', 'yum']
- model['VersionString'] = pkg_info.evra
+ model['VersionString'] = pkg.evra
return model
diff --git a/src/software/openlmi/software/core/InstallationJob.py b/src/software/openlmi/software/core/InstallationJob.py
index b758f6e..2ac1f10 100644
--- a/src/software/openlmi/software/core/InstallationJob.py
+++ b/src/software/openlmi/software/core/InstallationJob.py
@@ -25,6 +25,7 @@ import pywbem
import time
from openlmi.common import cmpi_logging
+from openlmi.software.core import Error
from openlmi.software.yumdb import errors, jobs
from openlmi.software.yumdb import YumDB
@@ -384,6 +385,7 @@ class Values(object):
3: 'Error'
}
+@cmpi_logging.trace_function
def _fill_nonkeys(job, model):
"""
Fills into the model of instance all non-key properties.
@@ -440,6 +442,7 @@ def _fill_nonkeys(job, model):
model["MethodName"] = pywbem.CIMProperty('MethodName',
type='string', value=None)
model['Name'] = job.metadata['name']
+ model['LocalOrUtcTime'] = Values.LocalOrUtcTime.UTC_Time
model['PercentComplete'] = pywbem.Uint16(
100 if job.state == job.COMPLETED else (
50 if job.state == job.RUNNING else
@@ -509,7 +512,7 @@ def object_path2job(op):
return YumDB.get_instance().get_job(instid)
except errors.JobNotFound:
raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND,
- 'Not such job "%s".' % op['InstanceID'])
+ 'No such job "%s".' % op['InstanceID'])
@cmpi_logging.trace_function
def modify_instance(instance):
@@ -577,3 +580,31 @@ def modify_instance(instance):
return job2model(job, keys_only=False, model=instance)
+@cmpi_logging.trace_function
+def job2error(job):
+ """
+ @return instance of CIM_Error if job is in EXCEPTION state,
+ None otherwise
+ """
+ if not isinstance(job, jobs.YumJob):
+ raise TypeError("job must be isntance of YumJob")
+ if job.state == job.EXCEPTION:
+ errortup = job.result_data
+ kwargs = {}
+ if issubclass(errortup[0],
+ (errors.RepositoryNotFound, errors.PackageNotFound)):
+ kwargs['status_code'] = Error.Values. \
+ CIMStatusCode.CIM_ERR_NOT_FOUND
+ if issubclass(errortup[0], errors.PackageNotFound):
+ kwargs['status_code_description'] = \
+ "Package not found"
+ else:
+ kwargs['status_code_description'] = \
+ "Repository not found"
+ elif issubclass(errortup[0], errors.PackageAlreadyInstalled):
+ kwargs['status_code'] = Error.Values. \
+ CIMStatusCode.CIM_ERR_ALREADY_EXISTS
+ kwargs['message'] = getattr(errortup[1], 'message',
+ str(errortup[1]))
+ value = Error.make_instance(**kwargs)
+ return value
diff --git a/src/software/openlmi/software/core/InstallationService.py b/src/software/openlmi/software/core/InstallationService.py
index 56063f1..2935849 100644
--- a/src/software/openlmi/software/core/InstallationService.py
+++ b/src/software/openlmi/software/core/InstallationService.py
@@ -30,11 +30,6 @@ from openlmi.software.core import SystemCollection
from openlmi.software.yumdb import errors
from openlmi.software.yumdb import YumDB
-#UNSUPPORTED_INSTALL_OPTIONS = {
-# { "Defer_target_system_reset", "Force_installation",
-# "Reboot", "Password", "Log", "Silent_Mode", "Administrative_Mode",
-# "Schedule_Install_At", "DMTF_Reserved" }
-
class InstallationError(Exception):
"""This exception shall be raised upon any error within
install_or_remove_package() function.
@@ -555,6 +550,7 @@ def get_path():
op["Name"] = "LMI:SoftwareInstallationService"
return op
+@cmpi_logging.trace_function
def check_path(env, service, prop_name):
"""
Checks instance name of SoftwareInstallationService.
@@ -585,6 +581,7 @@ def check_path(env, service, prop_name):
prop_name, key, service[key], our_service[key]))
return True
+@cmpi_logging.trace_function
def check_path_property(env, op, prop_name):
"""
Checks, whether prop_name property of op object path is correct.
@@ -595,6 +592,7 @@ def check_path_property(env, op, prop_name):
"Missing %s key property!" % prop_name)
return check_path(env, op[prop_name], prop_name)
+@cmpi_logging.trace_function
def _check_target_and_collection(env, src_type, target, collection):
"""
Checks Target and Collection parameters of provider's installation
@@ -625,6 +623,7 @@ def _check_target_and_collection(env, src_type, target, collection):
if src_type == "identity" else
"Missing Target parameter.")
+@cmpi_logging.trace_function
def _install_or_remove_check_params(
env, src_type, source, target, collection,
install_options,
@@ -685,6 +684,7 @@ def _install_or_remove_check_params(
, values.InstallOptions.Force_installation in options
, values.InstallOptions.Repair in options)
+@cmpi_logging.trace_function
def install_or_remove_package(env, src_type, source, target, collection,
install_options,
install_options_values):
diff --git a/src/software/openlmi/software/core/SystemCollection.py b/src/software/openlmi/software/core/SystemCollection.py
index 6fced8e..2d07130 100644
--- a/src/software/openlmi/software/core/SystemCollection.py
+++ b/src/software/openlmi/software/core/SystemCollection.py
@@ -21,6 +21,8 @@ Common utilities concerning SystemSoftwareCollection provider.
import pywbem
+from openlmi.common import cmpi_logging
+
def get_path():
"""@return instance name with prefilled properties"""
op = pywbem.CIMInstanceName(
@@ -29,6 +31,7 @@ def get_path():
op['InstanceID'] = "LMI:SystemSoftwareCollection"
return op
+@cmpi_logging.trace_function
def check_path(env, collection, prop_name):
"""
Checks instance name of SystemSoftwareCollection.
@@ -58,6 +61,7 @@ def check_path(env, collection, prop_name):
prop_name, our_collection['InstanceID'])
return True
+@cmpi_logging.trace_function
def check_path_property(env, op, prop_name):
"""
Checks, whether prop_name property of op object path is correct.
diff --git a/src/software/openlmi/software/util/__init__.py b/src/software/openlmi/software/util/__init__.py
index f42f25a..9b0ab01 100644
--- a/src/software/openlmi/software/util/__init__.py
+++ b/src/software/openlmi/software/util/__init__.py
@@ -28,16 +28,16 @@ import re
import signal
RE_EVRA = re.compile(
- r'^(?P<epoch>\d+):(?P<ver>[^-]+)-(?P<rel>.+)\.(?P<arch>[^.]+)$')
+ r'^(?P<epoch>\d+):(?P<version>[^-]+)-(?P<release>.+)\.(?P<arch>[^.]+)$')
RE_NEVRA = re.compile(
- r'^(?P<name>.+)-(?P<evra>(?P<epoch>\d+):(?P<ver>[^-]+)'
- r'-(?P<rel>.+)\.(?P<arch>[^.]+))$')
+ r'^(?P<name>.+)-(?P<evra>(?P<epoch>\d+):(?P<version>[^-]+)'
+ r'-(?P<release>.+)\.(?P<arch>[^.]+))$')
RE_NEVRA_OPT_EPOCH = re.compile(
- r'^(?P<name>.+)-(?P<evra>((?P<epoch>\d+):)?(?P<ver>[^-]+)'
- r'-(?P<rel>.+)\.(?P<arch>[^.]+))$')
+ r'^(?P<name>.+)-(?P<evra>((?P<epoch>\d+):)?(?P<version>[^-]+)'
+ r'-(?P<release>.+)\.(?P<arch>[^.]+))$')
RE_ENVRA = re.compile(
- r'^(?P<epoch>\d+):(?P<name>.+)-(?P<evra>(?P<ver>[^-]+)'
- r'-(?P<rel>.+)\.(?P<arch>[^.]+))$')
+ r'^(?P<epoch>\d+):(?P<name>.+)-(?P<evra>(?P<version>[^-]+)'
+ r'-(?P<release>.+)\.(?P<arch>[^.]+))$')
def _get_distname():
"""
@@ -121,16 +121,16 @@ def nevra2filter(nevra):
else:
raise TypeError("nevra must be either string or regexp match object")
epoch = match.group("epoch")
- if not epoch or match.group("epoch") == "(none)":
+ if not epoch or match.group("epoch").lower() == "(none)":
epoch = "0"
- return { "name" : match.group("name")
- , "epoch" : epoch
- , "version" : match.group("ver")
- , "release" : match.group("rel")
- , "arch" : match.group("arch")
+ return { "name" : match.group("name")
+ , "epoch" : epoch
+ , "version" : match.group("version")
+ , "release" : match.group("release")
+ , "arch" : match.group("arch")
}
-def make_nevra(name, epoch, ver, rel, arch, with_epoch='NOT_ZERO'):
+def make_nevra(name, epoch, version, release, arch, with_epoch='NOT_ZERO'):
"""
@param with_epoch may be one of:
"NOT_ZERO" - include epoch only if it's not zero
@@ -145,7 +145,7 @@ def make_nevra(name, epoch, ver, rel, arch, with_epoch='NOT_ZERO'):
estr = epoch
if len(estr):
estr += ":"
- return "%s-%s%s-%s.%s" % (name, estr, ver, rel, arch)
+ return "%s-%s%s-%s.%s" % (name, estr, version, release, arch)
def pkg2nevra(pkg, with_epoch='NOT_ZERO'):
"""
diff --git a/src/software/openlmi/software/yumdb/__init__.py b/src/software/openlmi/software/yumdb/__init__.py
index 13539bb..b5160b4 100644
--- a/src/software/openlmi/software/yumdb/__init__.py
+++ b/src/software/openlmi/software/yumdb/__init__.py
@@ -275,7 +275,7 @@ class YumDB(singletonmixin.Singleton):
'level=%d', self._session_level)
new_session_job = jobs.YumBeginSession()
self._worker.uplink.put(new_session_job)
- (_, reply) = self._worker.downlink.get()
+ reply = self._worker.downlink.get()
log_reply_error(new_session_job, reply)
self._worker.uplink.put(job)
self._expected.append(job.jobid)
@@ -381,8 +381,8 @@ class YumDB(singletonmixin.Singleton):
uplink = Queue()
downlink = Queue()
self._process = YumWorker(uplink, downlink,
- yum_kwargs=self._yum_kwargs,
- logging_config=YUM_WORKER_DEBUG_LOGGING_CONFIG)
+ yum_kwargs=self._yum_kwargs)
+ #logging_config=YUM_WORKER_DEBUG_LOGGING_CONFIG)
self._process.start()
cmpi_logging.logger.trace_info(
"YumDB: YumWorker started with pid=%s", self._process.pid)
diff --git a/src/software/openlmi/software/yumdb/packageinfo.py b/src/software/openlmi/software/yumdb/packageinfo.py
index a088993..bfacc5d 100644
--- a/src/software/openlmi/software/yumdb/packageinfo.py
+++ b/src/software/openlmi/software/yumdb/packageinfo.py
@@ -152,6 +152,15 @@ class PackageInfo(object):
for k, value in state.items():
setattr(self, k, value)
+ def __eq__(self, other):
+ return ( self.name == other.name
+ and self.version == other.version
+ and self.release == other.release
+ and self.arch == other.arch
+ and self.epoch == other.epoch
+ and ( (self.repoid is None or other.repoid is None)
+ or (self.repoid == other.repoid)))
+
def make_package_from_db(pkg):
"""
Create instance of PackageInfo from instance of
diff --git a/src/software/openlmi/software/yumdb/process.py b/src/software/openlmi/software/yumdb/process.py
index 5f43c35..0b0c4c1 100644
--- a/src/software/openlmi/software/yumdb/process.py
+++ b/src/software/openlmi/software/yumdb/process.py
@@ -77,8 +77,6 @@ def _get_package_filter_function(filters):
if match is not None:
for attr in ("name", "epoch", "version", "release", "arch"):
match_attr = attr
- if attr in {'version', 'release'}:
- match_attr = attr[:3]
filters[attr] = match.group(match_attr)
filters.pop('nevra', None)
filters.pop('envra', None)
@@ -174,8 +172,11 @@ def _needs_database(method):
"""
Wrapper for the job handler method.
"""
+ created_session = False
self._init_database() #pylint: disable=W0212
if self._session_level == 0: #pylint: disable=W0212
+ self._session_level = 1 #pylint: disable=W0212
+ created_session = True
self._lock_database() #pylint: disable=W0212
try:
LOG.debug("calling job handler %s with args=(%s)",
@@ -187,7 +188,8 @@ def _needs_database(method):
LOG.debug("job handler %s finished", method.__name__)
return result
finally:
- if self._session_level == 0: #pylint: disable=W0212
+ if created_session is True: #pylint: disable=W0212
+ self._session_level = 0 #pylint: disable=W0212
self._unlock_database() #pylint: disable=W0212
return _wrapper
diff --git a/src/software/test/test_installed_software_identity.py b/src/software/test/test_installed_software_identity.py
index b796156..ade841b 100755
--- a/src/software/test/test_installed_software_identity.py
+++ b/src/software/test/test_installed_software_identity.py
@@ -202,8 +202,7 @@ class TestInstalledSoftwareIdentity(base.SoftwareBaseTestCase):
with self.assertRaises(pywbem.CIMError) as cm:
self.conn.DeleteInstance(InstanceName=objpath)
- self.assertEqual(cm.exception.args[0],
- pywbem.CIM_ERR_NOT_FOUND)
+ self.assertEqual(cm.exception.args[0], pywbem.CIM_ERR_NOT_FOUND)
@base.mark_tedious
def test_get_system_referents(self):