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

Reply via email to