Michael Pasternak has uploaded a new change for review. Change subject: sdk: return error if amount of fetched objects in X.get() is > 1 #890327 ......................................................................
sdk: return error if amount of fetched objects in X.get() is > 1 #890327 https://bugzilla.redhat.com/show_bug.cgi?id=890327 Change-Id: I98b72a9235825f62297b35a26c0bd76413bc0143 Signed-off-by: Michael Pasternak <[email protected]> --- M src/codegen/templates/collectiongetdiskstemplate M src/codegen/templates/collectiongetnotsearchabletemplate M src/codegen/templates/collectiongetsearchabletemplate M src/codegen/templates/subcollectiongettemplate M src/ovirtsdk/infrastructure/brokers.py M src/ovirtsdk/infrastructure/errors.py M src/ovirtsdk/utils/filterhelper.py 7 files changed, 224 insertions(+), 92 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine-sdk refs/changes/80/12680/1 diff --git a/src/codegen/templates/collectiongetdiskstemplate b/src/codegen/templates/collectiongetdiskstemplate index 72827f5..c5ad640 100644 --- a/src/codegen/templates/collectiongetdiskstemplate +++ b/src/codegen/templates/collectiongetdiskstemplate @@ -20,7 +20,10 @@ ).get_%(resource_name_lc)s() return %(resource_type)s( - FilterHelper.getItem(result), + FilterHelper.getItem( + result, + query="alias=" + alias + ), self.context ) else: diff --git a/src/codegen/templates/collectiongetnotsearchabletemplate b/src/codegen/templates/collectiongetnotsearchabletemplate index 4bb27c7..55e8b17 100644 --- a/src/codegen/templates/collectiongetnotsearchabletemplate +++ b/src/codegen/templates/collectiongetnotsearchabletemplate @@ -22,7 +22,10 @@ ).get_%(resource_name_lc)s() return %(resource_type)s( - FilterHelper.getItem(FilterHelper.filter(result, {'name':name})), + FilterHelper.getItem( + FilterHelper.filter(result, {'name':name}), + query="name=" + name + ), self.context ) else: diff --git a/src/codegen/templates/collectiongetsearchabletemplate b/src/codegen/templates/collectiongetsearchabletemplate index 8120a52..a9bc2a9 100644 --- a/src/codegen/templates/collectiongetsearchabletemplate +++ b/src/codegen/templates/collectiongetsearchabletemplate @@ -22,7 +22,10 @@ ).get_%(resource_name_lc)s() return %(resource_type)s( - FilterHelper.getItem(result), + FilterHelper.getItem( + result, + query="name=" + name + ), self.context ) else: diff --git a/src/codegen/templates/subcollectiongettemplate b/src/codegen/templates/subcollectiongettemplate index 404a538..1b1b55b 100644 --- a/src/codegen/templates/subcollectiongettemplate +++ b/src/codegen/templates/subcollectiongettemplate @@ -40,7 +40,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) diff --git a/src/ovirtsdk/infrastructure/brokers.py b/src/ovirtsdk/infrastructure/brokers.py index c3bae68..6f5faa8 100644 --- a/src/ovirtsdk/infrastructure/brokers.py +++ b/src/ovirtsdk/infrastructure/brokers.py @@ -20,7 +20,7 @@ ############ GENERATED CODE ############ ######################################## -'''Generated at: 2013-03-04 15:02:46.897427''' +'''Generated at: 2013-03-04 15:48:23.658388''' from ovirtsdk.xml import params @@ -538,7 +538,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -681,7 +682,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -887,7 +889,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -1066,7 +1069,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -1184,7 +1188,10 @@ ).get_cluster() return Cluster( - FilterHelper.getItem(result), + FilterHelper.getItem( + result, + query="name=" + name + ), self.context ) else: @@ -1722,7 +1729,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -1849,7 +1857,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -2055,7 +2064,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -2239,7 +2249,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -2385,7 +2396,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -2564,7 +2576,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -2724,7 +2737,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -3032,7 +3046,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -3156,7 +3171,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -3314,7 +3330,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -3448,7 +3465,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -3555,7 +3573,10 @@ ).get_data_center() return DataCenter( - FilterHelper.getItem(result), + FilterHelper.getItem( + result, + query="name=" + name + ), self.context ) else: @@ -3755,7 +3776,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -3878,7 +3900,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -4014,7 +4037,10 @@ ).get_disk() return Disk( - FilterHelper.getItem(result), + FilterHelper.getItem( + result, + query="alias=" + alias + ), self.context ) else: @@ -4151,7 +4177,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -4276,7 +4303,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -4359,7 +4387,10 @@ ).get_domain() return Domain( - FilterHelper.getItem(FilterHelper.filter(result, {'name':name})), + FilterHelper.getItem( + FilterHelper.filter(result, {'name':name}), + query="name=" + name + ), self.context ) else: @@ -4498,7 +4529,10 @@ ).get_event() return Event( - FilterHelper.getItem(result), + FilterHelper.getItem( + result, + query="name=" + name + ), self.context ) else: @@ -4729,7 +4763,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -4952,7 +4987,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -5083,7 +5119,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -5257,7 +5294,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -5358,7 +5396,10 @@ ).get_group() return Group( - FilterHelper.getItem(result), + FilterHelper.getItem( + result, + query="name=" + name + ), self.context ) else: @@ -5744,7 +5785,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -6006,7 +6048,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -6148,7 +6191,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -6373,7 +6417,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -6496,7 +6541,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -6597,7 +6643,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -6771,7 +6818,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -6906,7 +6954,10 @@ ).get_host() return Host( - FilterHelper.getItem(result), + FilterHelper.getItem( + result, + query="name=" + name + ), self.context ) else: @@ -7148,7 +7199,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -7259,7 +7311,10 @@ ).get_network() return Network( - FilterHelper.getItem(result), + FilterHelper.getItem( + result, + query="name=" + name + ), self.context ) else: @@ -7492,7 +7547,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -7600,7 +7656,10 @@ ).get_role() return Role( - FilterHelper.getItem(FilterHelper.filter(result, {'name':name})), + FilterHelper.getItem( + FilterHelper.filter(result, {'name':name}), + query="name=" + name + ), self.context ) else: @@ -7896,7 +7955,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -8017,7 +8077,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -8171,7 +8232,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -8297,7 +8359,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -8478,7 +8541,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -8681,7 +8745,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -8778,7 +8843,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -8982,7 +9048,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -9079,7 +9146,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -9228,7 +9296,10 @@ ).get_storage_domain() return StorageDomain( - FilterHelper.getItem(result), + FilterHelper.getItem( + result, + query="name=" + name + ), self.context ) else: @@ -9387,7 +9458,10 @@ ).get_tag() return Tag( - FilterHelper.getItem(FilterHelper.filter(result, {'name':name})), + FilterHelper.getItem( + FilterHelper.filter(result, {'name':name}), + query="name=" + name + ), self.context ) else: @@ -9625,7 +9699,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -9802,7 +9877,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -10019,7 +10095,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -10198,7 +10275,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -10348,7 +10426,10 @@ ).get_template() return Template( - FilterHelper.getItem(result), + FilterHelper.getItem( + result, + query="name=" + name + ), self.context ) else: @@ -10578,7 +10659,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -10801,7 +10883,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -10932,7 +11015,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -11106,7 +11190,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -11209,7 +11294,10 @@ ).get_user() return User( - FilterHelper.getItem(result), + FilterHelper.getItem( + result, + query="name=" + name + ), self.context ) else: @@ -11755,7 +11843,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -12084,7 +12173,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -12205,7 +12295,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -12370,7 +12461,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -12625,7 +12717,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -12746,7 +12839,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -12881,7 +12975,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -13060,7 +13155,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -13183,7 +13279,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -13446,7 +13543,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -13567,7 +13665,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -13688,7 +13787,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -13814,7 +13914,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -13937,7 +14038,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -14111,7 +14213,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -14319,7 +14422,10 @@ ).get_vm() return VM( - FilterHelper.getItem(result), + FilterHelper.getItem( + result, + query="name=" + name + ), self.context ) else: @@ -14598,7 +14704,8 @@ FilterHelper.filter( result, {'name':name} - ) + ), + query="name=" + name ), self.context ) @@ -14703,7 +14810,10 @@ ).get_vmpool() return VmPool( - FilterHelper.getItem(result), + FilterHelper.getItem( + result, + query="name=" + name + ), self.context ) else: diff --git a/src/ovirtsdk/infrastructure/errors.py b/src/ovirtsdk/infrastructure/errors.py index a197770..c75e62d 100644 --- a/src/ovirtsdk/infrastructure/errors.py +++ b/src/ovirtsdk/infrastructure/errors.py @@ -17,7 +17,7 @@ from ovirtsdk.xml import params import types -class ERROR(Exception): +class OvirtSdkError(Exception): def __init__(self, content): Exception.__init__(self, content) @@ -53,7 +53,7 @@ RESPONSE_FAULT_BODY = '<fault>' APP_SERVER_RESPONSE_FORMAT = '<html><head><title>JBoss Web' - #REST error + # REST error if res and res.startswith(RESPONSE_FORMAT) and res.find(RESPONSE_FAULT_BODY) != -1: try: f_detail = params.parseString(res) @@ -62,18 +62,18 @@ if types.StringType != type(f_detail): if isinstance(f_detail, params.Action) and f_detail.fault is not None: - #self.reason = f_detail.fault.reason + # self.reason = f_detail.fault.reason detail = f_detail.fault.detail.lstrip() else: - #self.reason = response.reason + # self.reason = response.reason if f_detail and f_detail.detail: detail = f_detail.detail.lstrip() - #engine returns can-do-action error messages with brackets + # engine returns can-do-action error messages with brackets if detail and detail.startswith('[') and detail.endswith(']'): detail = detail[1:len(detail) - 1] - #application server error + # application server error elif res.startswith(APP_SERVER_RESPONSE_FORMAT): detail = res start = detail.find('<h1>') @@ -101,3 +101,11 @@ class FormatError(Exception): def __init__(self): Exception.__init__(self, '[ERROR]::Server reply is in inappropriate format.') + +class AmbiguousQueryError(OvirtSdkError): + def __init__(self, query=None): + Exception.__init__( + self, + '[ERROR]::Used query %s produces ambiguous results.' + % ("(" + query + ")" if query and query != "" else "") + ) diff --git a/src/ovirtsdk/utils/filterhelper.py b/src/ovirtsdk/utils/filterhelper.py index d32f9cc..17e204a 100644 --- a/src/ovirtsdk/utils/filterhelper.py +++ b/src/ovirtsdk/utils/filterhelper.py @@ -15,6 +15,7 @@ # from ovirtsdk.utils.searchhelper import SearchHelper +from ovirtsdk.infrastructure.errors import AmbiguousQueryError class FilterHelper(): @staticmethod @@ -23,6 +24,9 @@ return SearchHelper.filterResults(collection, kwargs) if (len(kwargs) is not 0) else collection @staticmethod - def getItem(result=[]): + def getItem(result=[], query=None): '''Returns first item in collection if exist, otherwise None''' + + if len(result) > 1: + raise AmbiguousQueryError(query) return result[0] if result else None -- To view, visit http://gerrit.ovirt.org/12680 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I98b72a9235825f62297b35a26c0bd76413bc0143 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine-sdk Gerrit-Branch: master Gerrit-Owner: Michael Pasternak <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
