Michael Pasternak has uploaded a new change for review. Change subject: sdk: Implement Session-TTL header support #928313 ......................................................................
sdk: Implement Session-TTL header support #928313 https://bugzilla.redhat.com/show_bug.cgi?id=928313 Change-Id: I03ae76a9a5e40019da191175c44986fa871e6f0f Signed-off-by: Michael Pasternak <mpast...@redhat.com> --- M src/codegen/templates/entrypointmethodstemplate M src/codegen/templates/entrypointtemplate M src/ovirtsdk/api.py M src/ovirtsdk/infrastructure/cache.py M src/ovirtsdk/web/connection.py 5 files changed, 106 insertions(+), 31 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine-sdk refs/changes/79/13979/1 diff --git a/src/codegen/templates/entrypointmethodstemplate b/src/codegen/templates/entrypointmethodstemplate index 6ade8f6..636a8c6 100644 --- a/src/codegen/templates/entrypointmethodstemplate +++ b/src/codegen/templates/entrypointmethodstemplate @@ -53,7 +53,18 @@ def set_filter(self, filter): ''' enables user permission based filtering ''' - if type(filter) == types.BooleanType: - context.manager[self.id].add('filter', filter) - else: - raise TypeError(filter) \ No newline at end of file + if filter != None: + context.manager[self.id].add( + 'filter', + filter, + typ=types.BooleanType + ) + + def __set_session_timeout(self, session_timeout): + ''' set authentication session timeout ''' + if session_timeout != None: + context.manager[self.id].add( + 'session_timeout', + session_timeout, + typ=types.IntType + ) \ No newline at end of file diff --git a/src/codegen/templates/entrypointtemplate b/src/codegen/templates/entrypointtemplate index c2aa864..ecd6c69 100644 --- a/src/codegen/templates/entrypointtemplate +++ b/src/codegen/templates/entrypointtemplate @@ -1,6 +1,6 @@ class API(object): def __init__(self, url, username, password, key_file=None, cert_file=None, - ca_file=None, port=None, timeout=None, persistent_auth=True, + ca_file=None, port=None, timeout=None, session_timeout=None, persistent_auth=True, insecure=False, validate_cert_chain=True, filter=False, debug=False): ''' @@ -12,6 +12,7 @@ [@param ca_file: server ca_file for ssl enabled connection] [@param port: port to use (if not specified in url)] [@param timeout: request timeout] + [@param session_timeout: authentication session timeout (if persistent_auth is enabled)] [@param persistent_auth: enable persistent authentication (format True|False)] [@param insecure: signals to not demand site trustworthiness for ssl enabled connection (format True|False, default is False)] [@param validate_cert_chain: validate the server's certificate (format True|False, default is True)] @@ -50,15 +51,15 @@ # Create the proxy: proxy = Proxy( - pool, + pool, persistent_auth ) # Store filter to the context: - context.manager[self.id].add( - 'filter', - filter - ) + self.set_filter(filter) + + # Store session_timeout to the context: + self.__set_session_timeout(session_timeout) # Get entry point entry_point = proxy.request( @@ -80,8 +81,8 @@ # Store proxy to the context: context.manager[self.id].add( - 'proxy', - proxy, + 'proxy', + proxy, Mode.R ) @@ -89,6 +90,7 @@ context.manager[self.id].add( 'persistent_auth', persistent_auth, - Mode.R + Mode.R, + typ=types.BooleanType ) diff --git a/src/ovirtsdk/api.py b/src/ovirtsdk/api.py index 5d57787..cbe9077 100644 --- a/src/ovirtsdk/api.py +++ b/src/ovirtsdk/api.py @@ -20,7 +20,7 @@ ############ GENERATED CODE ############ ######################################## -'''Generated at: 2013-02-27 09:42:27.329672''' +'''Generated at: 2013-04-17 14:37:52.244063''' import types @@ -52,7 +52,7 @@ class API(object): def __init__(self, url, username, password, key_file=None, cert_file=None, - ca_file=None, port=None, timeout=None, persistent_auth=True, + ca_file=None, port=None, timeout=None, session_timeout=None, persistent_auth=True, insecure=False, validate_cert_chain=True, filter=False, debug=False): ''' @@ -64,6 +64,7 @@ [@param ca_file: server ca_file for ssl enabled connection] [@param port: port to use (if not specified in url)] [@param timeout: request timeout] + [@param session_timeout: authentication session timeout (if persistent_auth is enabled)] [@param persistent_auth: enable persistent authentication (format True|False)] [@param insecure: signals to not demand site trustworthiness for ssl enabled connection (format True|False, default is False)] [@param validate_cert_chain: validate the server's certificate (format True|False, default is True)] @@ -102,15 +103,15 @@ # Create the proxy: proxy = Proxy( - pool, + pool, persistent_auth ) # Store filter to the context: - context.manager[self.id].add( - 'filter', - filter - ) + self.set_filter(filter) + + # Store session_timeout to the context: + self.__set_session_timeout(session_timeout) # Get entry point entry_point = proxy.request( @@ -132,8 +133,8 @@ # Store proxy to the context: context.manager[self.id].add( - 'proxy', - proxy, + 'proxy', + proxy, Mode.R ) @@ -141,7 +142,8 @@ context.manager[self.id].add( 'persistent_auth', persistent_auth, - Mode.R + Mode.R, + typ=types.BooleanType ) self.capabilities = Capabilities(self.id) @@ -215,10 +217,21 @@ def set_filter(self, filter): ''' enables user permission based filtering ''' - if type(filter) == types.BooleanType: - context.manager[self.id].add('filter', filter) - else: - raise TypeError(filter) + if filter != None: + context.manager[self.id].add( + 'filter', + filter, + typ=types.BooleanType + ) + + def __set_session_timeout(self, session_timeout): + ''' set authentication session timeout ''' + if session_timeout != None: + context.manager[self.id].add( + 'session_timeout', + session_timeout, + typ=types.IntType + ) def get_special_objects(self): entry_point = context.manager[self.id].get('entry_point') diff --git a/src/ovirtsdk/infrastructure/cache.py b/src/ovirtsdk/infrastructure/cache.py index c472551..38306f6 100644 --- a/src/ovirtsdk/infrastructure/cache.py +++ b/src/ovirtsdk/infrastructure/cache.py @@ -16,6 +16,7 @@ import threading from ovirtsdk.infrastructure.errors import ImmutableError +import types class Item(): @@ -58,17 +59,31 @@ self.__cache = {} self.__lock = threading.RLock() - def add(self, key, val, mode=Mode.RW): + def add(self, key, val, mode=Mode.RW, typ=None): ''' Stores the value in cache @param key: is the cache key @param val: is the cache value [@param mode: is the access mode [r|rw]] + [@param typ: type to cast value to] + + @raise TypeError: when value cannot be cast to the typ ''' with self.__lock: if mode is Mode.R and self.__cache.has_key(key): raise ImmutableError(key) + elif typ: + try: + if typ == types.BooleanType and type(val) == types.StringType \ + and val not in ['True', 'False']: + raise ValueError(val) + self.__cache[key] = Item(typ(val), mode) + except ValueError: + raise TypeError( + key + "=" + val, + str(typ) + ' is expected.' + ) else: self.__cache[key] = Item(val, mode) diff --git a/src/ovirtsdk/web/connection.py b/src/ovirtsdk/web/connection.py index b21cc22..0e2aad0 100644 --- a/src/ovirtsdk/web/connection.py +++ b/src/ovirtsdk/web/connection.py @@ -19,6 +19,7 @@ import urlparse import base64 import socket +import logging from httplib import HTTPConnection @@ -26,6 +27,7 @@ from ovirtsdk.infrastructure.context import context from ovirtsdk.web.httpsconnection import HTTPSConnection from ovirtsdk.infrastructure.errors import NoCertificatesError, ImmutableError, RequestError, ConnectionError + class Connection(object): ''' @@ -167,8 +169,9 @@ return True return False - def getHeaders(self, headers, no_auth=False): - extended_headers = self.getDefaultHeaders(no_auth) + def getHeaders(self, headers={}, no_auth=False): + headers.update(self.getDefaultHeaders(no_auth)) + extended_headers = {} for k in headers.keys(): if (headers[k] is None and extended_headers.has_key(k)): extended_headers.pop(k) @@ -243,8 +246,39 @@ "Accept" : "application/xml", "Authorization": "Basic %s" % auth} + def __injectFilterHeader(self, headers): + filter_header = context.manager[self.context].get('filter') + if filter_header != None: + if type(filter_header) == types.BooleanType: + headers['Filter'] = filter_header + else: + logging.error( + TypeError( + "filter_header"+str(filter_header), + str(types.BooleanType) + ' is expected.' + ) + ) + + def __injectAuthSessionHeader(self, headers): + session_timeout = context.manager[self.context].get('session_timeout') + if session_timeout != None: + if type(session_timeout) == types.IntType: + headers['Session-TTL'] = session_timeout + else: + logging.error( + TypeError( + "session_timeout"+str(session_timeout), + str(types.IntType) + ' is expected.' + ) + ) + def __createDynamicHeaders(self): - return {'Filter' : str(context.manager[self.context].get('filter'))} + headers = {} + + self.__injectFilterHeader(headers) + self.__injectAuthSessionHeader(headers) + + return headers def __setattr__(self, name, value): if name in ['__context', 'context']: -- To view, visit http://gerrit.ovirt.org/13979 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I03ae76a9a5e40019da191175c44986fa871e6f0f Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine-sdk Gerrit-Branch: master Gerrit-Owner: Michael Pasternak <mpast...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches