Michael Pasternak has uploaded a new change for review. Change subject: sdk: add filter parameter to proxy ctr. ......................................................................
sdk: add filter parameter to proxy ctr. api resource /api has few queries (such as GetSystemStatistics, etc.) which require admin permissions, raising /filter flag will signal to turn on permission based filtering and not call this queries what will allow non-admin users to use sdk. Change-Id: Ia6707a165fd32519f0778fae0c75f302ae4c9d26 Signed-off-by: Michael Pasternak <[email protected]> --- M src/codegen/entrypoint/entrypoint.py M src/ovirtsdk/api.py M src/ovirtsdk/web/connection.py 3 files changed, 69 insertions(+), 22 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine-sdk refs/changes/29/7429/1 diff --git a/src/codegen/entrypoint/entrypoint.py b/src/codegen/entrypoint/entrypoint.py index 7b2e293..9aa71ee 100644 --- a/src/codegen/entrypoint/entrypoint.py +++ b/src/codegen/entrypoint/entrypoint.py @@ -40,8 +40,7 @@ "\n\n########################################\n" + \ "############ GENERATED CODE ############\n" + \ "########################################\n\n" + \ - "'''\nGenerated at: " + str(datetime.datetime.now()) + "\n\n" + \ - "@author: [email protected]\n'''\n\n" + \ + "'''Generated at: " + str(datetime.datetime.now()) + "'''\n\n" + \ "from ovirtsdk.infrastructure import contextmanager\n" + \ "from ovirtsdk.infrastructure.connectionspool import ConnectionsPool\n" + \ "from ovirtsdk.infrastructure.proxy import Proxy\n" + \ @@ -64,24 +63,33 @@ """ dinamic_methods_template = "\n" + \ """ - def get_%(attr)s(self): + def get_%(attr)s(self): proxy = contextmanager.get('proxy') - return proxy.request(method='GET', url='/api').%(attr)s + filter_header = contextmanager.get('filter') + + return proxy.request(method='GET', + url='/api', + headers={'Filter': filter_header}).%(attr)s """ methods_template = "\n" + \ """ def disconnect(self): ''' terminates server connection/s ''' + proxy = contextmanager.get('proxy') persistent_auth = contextmanager.get('persistent_auth') + filter_header = contextmanager.get('filter') # If persistent authentication is enabled then we need to # send a last request as a hint to the server to close the # session: if proxy and persistent_auth: try: - proxy.request(method='GET', url='/api', last=True) + proxy.request(method='GET', + url='/api', + headers={'Filter': filter_header}, + last=True) except Exception: pass @@ -90,15 +98,23 @@ def test(self, throw_exception=False): ''' test server connectivity ''' + proxy = contextmanager.get('proxy') + filter_header = contextmanager.get('filter') + if proxy: try : - proxy.request(method='GET', url='/api') + proxy.request(method='GET', + url='/api', + headers={'Filter': filter_header}) except Exception, e: if throw_exception: raise e else: return False return True return False + + def set_filter(self, filter): + contextmanager.add('filter', filter) """ from ovirtsdk.infrastructure import contextmanager entry_point_resource = contextmanager.get('proxy').request('GET', '/api') @@ -128,7 +144,7 @@ api_template = EntryPoint.entryPointImports() + \ EntryPoint.entryPointCustomImports(types) + \ """class API(): - def __init__(self, url, username, password, key_file=None, cert_file=None, ca_file=None, port=None, timeout=None, persistent_auth=True, insecure=False, debug=False): + def __init__(self, url, username, password, key_file=None, cert_file=None, ca_file=None, port=None, timeout=None, persistent_auth=True, insecure=False, filter=False, debug=False): \""" @param url: server url (format "http/s://server[:port]/api") @@ -141,6 +157,7 @@ [@param timeout: request timeout] [@param persistent_auth: enable persistent authentication (format True|False)] [@param insecure: signals to not demand site trustworthiness for ssl enabled connection (format True|False)] + [@param filter: signals if user permission based filtering should be turned on/off (format True|False)] [@param debug: debug (format True|False)] \""" @@ -165,7 +182,8 @@ # Store entry point to the context contextmanager.add('entry_point', proxy.request(method='GET', - url='/api'), + url='/api', + headers={'Filter': filter}), Mode.R) # Store proxy to the context: @@ -176,6 +194,9 @@ persistent_auth, Mode.R) + # Store filter to the context: + contextmanager.add('filter', filter) + """ return (api_template + rootCollections + EntryPoint.instanceMethods()) diff --git a/src/ovirtsdk/api.py b/src/ovirtsdk/api.py index 30aad76..2e744d6 100644 --- a/src/ovirtsdk/api.py +++ b/src/ovirtsdk/api.py @@ -19,11 +19,7 @@ ############ GENERATED CODE ############ ######################################## -''' -Generated at: 2012-08-15 15:14:36.711730 - -@author: [email protected] -''' +'''Generated at: 2012-08-23 13:37:20.407529''' from ovirtsdk.infrastructure import contextmanager from ovirtsdk.infrastructure.connectionspool import ConnectionsPool @@ -48,7 +44,7 @@ class API(): - def __init__(self, url, username, password, key_file=None, cert_file=None, ca_file=None, port=None, timeout=None, persistent_auth=True, insecure=False, debug=False): + def __init__(self, url, username, password, key_file=None, cert_file=None, ca_file=None, port=None, timeout=None, persistent_auth=True, insecure=False, filter=False, debug=False): """ @param url: server url (format "http/s://server[:port]/api") @@ -61,6 +57,7 @@ [@param timeout: request timeout] [@param persistent_auth: enable persistent authentication (format True|False)] [@param insecure: signals to not demand site trustworthiness for ssl enabled connection (format True|False)] + [@param filter: signals if user permission based filtering should be turned on/off (format True|False)] [@param debug: debug (format True|False)] """ @@ -85,7 +82,8 @@ # Store entry point to the context contextmanager.add('entry_point', proxy.request(method='GET', - url='/api'), + url='/api', + headers={'Filter': filter}), Mode.R) # Store proxy to the context: @@ -95,6 +93,9 @@ contextmanager.add('persistent_auth', persistent_auth, Mode.R) + + # Store filter to the context: + contextmanager.add('filter', filter) self.capabilities = Capabilities() self.clusters = Clusters() @@ -116,15 +117,20 @@ def disconnect(self): ''' terminates server connection/s ''' + proxy = contextmanager.get('proxy') persistent_auth = contextmanager.get('persistent_auth') + filter_header = contextmanager.get('filter') # If persistent authentication is enabled then we need to # send a last request as a hint to the server to close the # session: if proxy and persistent_auth: try: - proxy.request(method='GET', url='/api', last=True) + proxy.request(method='GET', + url='/api', + headers={'Filter': filter_header}, + last=True) except Exception: pass @@ -133,15 +139,23 @@ def test(self, throw_exception=False): ''' test server connectivity ''' + proxy = contextmanager.get('proxy') + filter_header = contextmanager.get('filter') + if proxy: try : - proxy.request(method='GET', url='/api') + proxy.request(method='GET', + url='/api', + headers={'Filter': filter_header}) except Exception, e: if throw_exception: raise e else: return False return True return False + + def set_filter(self, filter): + contextmanager.add('filter', filter) def get_special_objects(self): @@ -151,14 +165,22 @@ return None - def get_summary(self): + def get_summary(self): proxy = contextmanager.get('proxy') - return proxy.request(method='GET', url='/api').summary + filter_header = contextmanager.get('filter') + + return proxy.request(method='GET', + url='/api', + headers={'Filter': filter_header}).summary - def get_time(self): + def get_time(self): proxy = contextmanager.get('proxy') - return proxy.request(method='GET', url='/api').time + filter_header = contextmanager.get('filter') + + return proxy.request(method='GET', + url='/api', + headers={'Filter': filter_header}).time def get_product_info(self): diff --git a/src/ovirtsdk/web/connection.py b/src/ovirtsdk/web/connection.py index 02ee7d3..28ab12f 100644 --- a/src/ovirtsdk/web/connection.py +++ b/src/ovirtsdk/web/connection.py @@ -20,6 +20,7 @@ import urlparse from ovirtsdk.web.httpsconnection import HTTPSConnection from ovirtsdk.infrastructure.errors import NoCertificatesError +import types class Connection(object): ''' @@ -59,7 +60,10 @@ if (headers[k] is None and extended_headers.has_key(k)): extended_headers.pop(k) elif headers[k] != None: - extended_headers[k] = headers[k] + if type(headers[k]) != types.StringType: + extended_headers[k] = str(headers[k]) + else: + extended_headers[k] = headers[k] return extended_headers def getResponse(self): -- To view, visit http://gerrit.ovirt.org/7429 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ia6707a165fd32519f0778fae0c75f302ae4c9d26 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
