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

Reply via email to