summaryrefslogtreecommitdiffstats
path: root/src/software/lmi
diff options
context:
space:
mode:
authorMichal Minar <miminar@redhat.com>2013-08-06 11:29:56 +0200
committerMichal Minar <miminar@redhat.com>2013-08-06 17:06:02 +0200
commitfc0036ab7df2d336d10d4f9ce3af2eb731f3a9c3 (patch)
tree7d31897d920731f039d74f3704c1b97064a3107c /src/software/lmi
parentb9f795b8b9196c42d93d9d0022d2c4a02377844e (diff)
downloadopenlmi-providers-fc0036ab7df2d336d10d4f9ce3af2eb731f3a9c3.tar.gz
openlmi-providers-fc0036ab7df2d336d10d4f9ce3af2eb731f3a9c3.tar.xz
openlmi-providers-fc0036ab7df2d336d10d4f9ce3af2eb731f3a9c3.zip
assign __ReturnValue property of CIM_ConcreteJob
Diffstat (limited to 'src/software/lmi')
-rw-r--r--src/software/lmi/software/core/InstMethodCall.py22
-rw-r--r--src/software/lmi/software/core/Job.py32
2 files changed, 37 insertions, 17 deletions
diff --git a/src/software/lmi/software/core/InstMethodCall.py b/src/software/lmi/software/core/InstMethodCall.py
index d314375..ec9356e 100644
--- a/src/software/lmi/software/core/InstMethodCall.py
+++ b/src/software/lmi/software/core/InstMethodCall.py
@@ -24,10 +24,9 @@ CIM values for enumeration types of CIM_InstMethodCall indication class.
import pywbem
from lmi.software import util
-from lmi.software.core import InstallationService
from lmi.software.core import Job
from lmi.software.util import cmpi_logging
-from lmi.software.yumdb import jobs, errors
+from lmi.software.yumdb import jobs
class Values(object):
class ReturnValueType(object):
@@ -123,20 +122,9 @@ def job2model(job, pre=True):
if error is not None:
inst["Error"].append(error)
inst["ReturnValueType"] = Values.ReturnValueType.uint32
- if job.state == job.COMPLETED:
- inst["ReturnValue"] = str(InstallationService. \
- Values.InstallFromURI.Job_Completed_with_No_Error)
- elif job.state == job.EXCEPTION:
- if issubclass(job.result_data[0], (
- errors.InvalidNevra, errors.InvalidURI,
- errors.PackageNotFound)):
- inst["ReturnValue"] = str(InstallationService.Values. \
- InstallFromURI.Invalid_Parameter)
- else:
- inst["ReturnValue"] = str(InstallationService.Values. \
- InstallFromURI.Failed)
- else:
- inst["ReturnValue"] = str(InstallationService.Values. \
- InstallFromURI.Unspecified_Error)
+ return_value = Job.make_return_value(job)
+ if return_value is not None:
+ inst["ReturnValue"] = str(return_value)
+
return inst
diff --git a/src/software/lmi/software/core/Job.py b/src/software/lmi/software/core/Job.py
index f199081..b3ccd5d 100644
--- a/src/software/lmi/software/core/Job.py
+++ b/src/software/lmi/software/core/Job.py
@@ -485,8 +485,40 @@ def make_method_params(job, class_name, include_input, include_output):
# overwrite any input parameter
for (name, value) in job.metadata["output_params"].iteritems():
inst[name] = value
+ return_value = make_return_value(job)
+ if return_value is not None:
+ inst["__ReturnValue"] = return_value
return inst
+def make_return_value(job):
+ """
+ Compute return value of particular job.
+
+ :param job: (``jobs.YumAsyncJob``) Asynchronous job.
+ :rtype: (``pywbem.Uint32``) Return value of asynchronous method or ``None``
+ if job has not completed yet.
+ """
+ from lmi.software.core import InstallationService
+
+ if not isinstance(job, jobs.YumAsyncJob):
+ raise TypeError("job must be a YumAsyncJob")
+
+ if job.state == job.COMPLETED:
+ return InstallationService. \
+ Values.InstallFromURI.Job_Completed_with_No_Error
+ if job.state == job.EXCEPTION:
+ if issubclass(job.result_data[0], (
+ errors.InvalidNevra, errors.InvalidURI,
+ errors.PackageNotFound)):
+ return InstallationService.Values.InstallFromURI.Invalid_Parameter
+ else:
+ return InstallationService.Values.InstallFromURI.Failed
+ if job.state == job.TERMINATED:
+ return InstallationService.Values.InstallFromURI.Unspecified_Error
+
+ # job has not finished yet
+ return None
+
def job_class2cim_class_name(jobcls):
"""
Here we map classes of job objects to their corresponding CIM class