[pkg-eucalyptus-commits] [SCM] managing cloud instances for Eucalyptus branch, master, updated. 3.0.0-alpha3-257-g1da8e3a

Garrett Holmstrom gholms at fedoraproject.org
Sun Jun 16 02:30:03 UTC 2013


The following commit has been merged in the master branch:
commit ad00b8c1167f4ae2fdba458493617af2be3b68f0
Author: Garrett Holmstrom <gholms at fedoraproject.org>
Date:   Mon Feb 11 17:26:33 2013 -0800

    Temporary request class refactor so walrus dev can begin

diff --git a/euca2ools/commands/__init__.py b/euca2ools/commands/__init__.py
index 89437aa..50df0bf 100644
--- a/euca2ools/commands/__init__.py
+++ b/euca2ools/commands/__init__.py
@@ -45,17 +45,16 @@ class Euca2oolsCommand(requestbuilder.command.BaseCommand):
     @property
     def config_files(self):
         if self._config_files is None:
-            self._config_files = ['/etc/euca2ools.ini']
-            user_glob = os.path.join(os.path.expanduser('~/.euca'), '*.ini')
-            self._config_files.extend(sorted(glob.glob(user_glob)))
+            self._config_files = _list_config_files()
         return self._config_files
 
     @staticmethod
     def print_version_and_exit():
         _print_version_and_exit()
 
-# FIXME:  the base class should change
-class Euca2oolsRequest(requestbuilder.request.AWSQueryRequest):
+
+# FIXME:  Duplicating requestbuilder's hierarchy is dumb
+class Euca2oolsRequest(requestbuilder.request.BaseRequest):
     def __init__(self, **kwargs):
         self._config_files = None
         self.__user_agent = None
@@ -64,9 +63,7 @@ class Euca2oolsRequest(requestbuilder.request.AWSQueryRequest):
     @property
     def config_files(self):
         if self._config_files is None:
-            self._config_files = ['/etc/euca2ools.ini']
-            user_glob = os.path.join(os.path.expanduser('~/.euca'), '*.ini')
-            self._config_files.extend(sorted(glob.glob(user_glob)))
+            self._config_files = _list_config_files()
         return self._config_files
 
     @property
@@ -110,6 +107,68 @@ class Euca2oolsRequest(requestbuilder.request.AWSQueryRequest):
     def print_version_and_exit():
         _print_version_and_exit()
 
+
+class Euca2oolsQueryRequest(requestbuilder.request.AWSQueryRequest):
+    def __init__(self, **kwargs):
+        self._config_files = None
+        self.__user_agent = None
+        requestbuilder.request.AWSQueryRequest.__init__(self, **kwargs)
+
+    @property
+    def config_files(self):
+        if self._config_files is None:
+            self._config_files = _list_config_files()
+        return self._config_files
+
+    @property
+    def user_agent(self):
+        if self.__user_agent is None:
+            user_agent_bits = ['euca2ools/{0}'.format(__version__)]
+
+            tokens = []
+            impl = platform.python_implementation()
+            if impl == 'PyPy':
+                impl_version = '{0}.{1}.{2}'.format(
+                        sys.pypy_version_info.major,
+                        sys.pypy_version_info.minor,
+                        sys.pypy_version_info.micro)
+                if sys.pypy_version_info.releaselevel != 'final':
+                    impl_version += sys.pypy_version_info.releaselevel
+            else:
+                # I'm guessing for non-CPython implementations; feel free to
+                # submit patches or the needed implementation-specific API
+                # references.
+                impl_version = platform.python_version()
+            tokens.append('{0} {1}'.format(impl, impl_version))
+            plat = []
+            try:
+                plat.append(platform.system())
+                plat.append(platform.release())
+            except IOError:
+                pass
+            if plat:
+                tokens.append(' '.join(plat))
+            tokens.append(platform.machine())
+            user_agent_bits.append('({0})'.format('; '.join(tokens)))
+
+            user_agent_bits.append('requestbuilder/{0}'.format(
+                    requestbuilder.__version__))
+            user_agent_bits.append('requests/{0}'.format(requests.__version__))
+            self.__user_agent = ' '.join(user_agent_bits)
+        return self.__user_agent
+
+    @staticmethod
+    def print_version_and_exit():
+        _print_version_and_exit()
+
+
+def _list_config_files():
+    sys_config_files = ['/etc/euca2ools.ini']
+    user_glob = os.path.join(os.path.expanduser('~/.euca'), '*.ini')
+    user_config_files = sorted(glob.glob(user_glob))
+    return sys_config_files + user_config_files
+
+
 def _print_version_and_exit():
     print >> sys.stderr, 'euca2ools {0} (Sparta)'.format(__version__)
     if os.path.isfile('/etc/eucalyptus/eucalyptus-version'):
diff --git a/euca2ools/commands/euare/__init__.py b/euca2ools/commands/euare/__init__.py
index 433909f..9ec120e 100644
--- a/euca2ools/commands/euare/__init__.py
+++ b/euca2ools/commands/euare/__init__.py
@@ -31,7 +31,7 @@
 from requestbuilder import Arg, SERVICE
 import requestbuilder.auth
 import requestbuilder.service
-from .. import Euca2oolsRequest
+from .. import Euca2oolsQueryRequest
 
 class Euare(requestbuilder.service.BaseService):
     NAME = 'iam'
@@ -40,13 +40,13 @@ class Euare(requestbuilder.service.BaseService):
     AUTH_CLASS = requestbuilder.auth.QuerySigV2Auth
     URL_ENVVAR = 'EUARE_URL'
 
-class EuareRequest(Euca2oolsRequest):
+class EuareRequest(Euca2oolsQueryRequest):
     SERVICE_CLASS = Euare
     ARGS = [Arg('-U', '--url', dest='url', metavar='URL', route_to=SERVICE,
                 help='identity service endpoint URL')]
 
     def parse_response(self, response):
-        response_dict = Euca2oolsRequest.parse_response(self, response)
+        response_dict = Euca2oolsQueryRequest.parse_response(self, response)
         # EUARE responses enclose their useful data inside FooResponse
         # elements.  If that's all we have after stripping out ResponseMetadata
         # then just return its contents.
diff --git a/euca2ools/commands/euca/__init__.py b/euca2ools/commands/euca/__init__.py
index c99208d..7d808ff 100644
--- a/euca2ools/commands/euca/__init__.py
+++ b/euca2ools/commands/euca/__init__.py
@@ -40,7 +40,7 @@ import requests
 import shlex
 from string import Template
 import sys
-from .. import Euca2oolsRequest
+from .. import Euca2oolsQueryRequest
 
 class EC2CompatibleQuerySigV2Auth(QuerySigV2Auth):
     # -a and -s are deprecated; remove them in 3.2
@@ -157,15 +157,16 @@ class Eucalyptus(requestbuilder.service.BaseService):
             self.auth.configure()
 
 
-class EucalyptusRequest(Euca2oolsRequest, TabifyingCommand):
+class EucalyptusRequest(Euca2oolsQueryRequest, TabifyingCommand):
     SERVICE_CLASS = Eucalyptus
 
     def __init__(self, **kwargs):
-        Euca2oolsRequest.__init__(self, **kwargs)
+        Euca2oolsQueryRequest.__init__(self, **kwargs)
         self.method = 'POST'  ## FIXME
 
     def parse_http_response(self, response_body):
-        response = Euca2oolsRequest.parse_http_response(self, response_body)
+        response = Euca2oolsQueryRequest.parse_http_response(self,
+                                                             response_body)
         # Compute cloud controller responses enclose their useful data inside
         # FooResponse elements.  If that's all we have after stripping out
         # RequestId then just return its contents.

-- 
managing cloud instances for Eucalyptus



More information about the pkg-eucalyptus-commits mailing list