This is an automatically generated e-mail. To reply, visit: http://reviewboard-openlmi.rhcloud.com/r/299/

On May 2nd, 2013, 11:50 a.m. CEST, Michal Minar wrote:

src/python/openlmi/common/__init__.py (Diff revision 1)
25
def parse_instance_id(instance_id, classname=None):
26
    """
27
    Parse InstanceID, check it has LMI:<classname>:<ID> format and return
28
    the ID. Return None if the format is bad.
29
    :param instance_id: (``string``) String to parse.
30
    :param classname: (``string``) Name of class, whose InstanceID we parse.
31
        If the classname is None, it won't be checked.
32
    :returns: ``string`` with the ID.
33
    """
34
    parts = instance_id.split(":", 2)
35
    if len(parts) != 3:
36
        return None
37
    if parts[0] != "LMI":
38
        return None
39
    real_classname = parts[1]
40
    if classname and real_classname != classname:
41
        return None
42
    return parts[2]
I agree with Roman, I'm just not sure if the CIM error is the correct one to use here:
raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND, 'Failed to parse id "%s"' % instance_id)
Looking at your code, it seems that you don't parse the user's input but something generated by your code. In that case I would go for a new subclass of ValueError.
Exceptions are double-edge sword. I have in my code:

id = parse_instance_id(instance_id, classname)
if not id:
    raise pywbem.CIMError(.., "<concrete error message").

If I raise exception in parse_instance_id, I get generic error message in the exception and if I want specific one, I have to wrap everything into try:/except:, which then looks ugly. I leave the patch as it is.

(This is concept I started to use long time ago, when storage provider started; I do not claim it is the best one).

- Jan


On May 2nd, 2013, 11:01 a.m. CEST, Jan Safranek wrote:

Review request for OpenLMI Developers.
By Jan Safranek.

Updated May 2, 2013, 11:01 a.m.

Repository: openlmi-providers

Description

Added global function to parse InstanceID.

Diffs

  • src/python/openlmi/common/JobManager.py (e78967cea04cecf8b31ab9e4c5e4442c127411f4)
  • src/python/openlmi/common/__init__.py (2d19515e863dd592a628d8ab935a39b0cf1e831f)

View Diff