From 73b1fdc38b9ecd86775c4cece6e2a0a4a3b5b5c8 Mon Sep 17 00:00:00 2001 From: Robert Scheck Date: Mon, 3 Jan 2011 00:02:13 +0100 Subject: [PATCH] Added a patch for python 2.4 support (#656446, #661233) --- python-boto-1.9b-python24.patch | 121 ++++++++++++++++++++++++++++++++ python-boto.spec | 11 ++- 2 files changed, 129 insertions(+), 3 deletions(-) create mode 100644 python-boto-1.9b-python24.patch diff --git a/python-boto-1.9b-python24.patch b/python-boto-1.9b-python24.patch new file mode 100644 index 0000000..3b593d2 --- /dev/null +++ b/python-boto-1.9b-python24.patch @@ -0,0 +1,121 @@ +Patch by Robert Scheck for boto >= 1.9b, which replaces +ternary operator and with-statement context usages by python 2.4 compatible stuff. +It also works around PEP 341 (Unifying try-except and try-finally). + +--- boto-1.9b/boto/manage/server.py 2009-12-13 16:32:54.000000000 +0100 ++++ boto-1.9b/boto/manage/server.py.python24 2011-01-02 23:36:53.000000000 +0100 +@@ -22,7 +22,6 @@ + """ + High-level abstraction of an EC2 server + """ +-from __future__ import with_statement + import boto.ec2 + from boto.mashups.iobject import IObject + from boto.pyami.config import BotoConfigPath, Config +@@ -328,7 +327,10 @@ + for instance in instances: + s = cls() + s.ec2 = ec2 +- s.name = params.get('name') + '' if i==0 else str(i) ++ if i == 0: ++ s.name = params.get('name') + '' ++ else: ++ s.name = str(i) + s.description = params.get('description') + s.region_name = region.name + s.instance_id = instance.id +@@ -522,8 +524,11 @@ + self._cmdshell = None + + def run(self, command): +- with closing(self.get_cmdshell()) as cmd: ++ try: ++ cmd = self.get_cmdshell() + status = cmd.run(command) ++ finally: ++ cmd.close() + return status + + def get_bundler(self, uname='root'): +--- boto-1.9b/boto/manage/volume.py 2009-11-24 04:47:51.000000000 +0100 ++++ boto-1.9b/boto/manage/volume.py.python24 2011-01-02 23:55:51.000000000 +0100 +@@ -19,7 +19,6 @@ + # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + # IN THE SOFTWARE. + +-from __future__ import with_statement + from boto.sdb.db.model import Model + from boto.sdb.db.property import * + from boto.manage.server import Server +@@ -232,28 +231,33 @@ + def wait(self): + if self.server == None: + raise ValueError, 'server attribute must be set to run this command' +- with closing(self.server.get_cmdshell()) as cmd: ++ try: + # wait for the volume device to appear + cmd = self.server.get_cmdshell() + while not cmd.exists(self.device): + boto.log.info('%s still does not exist, waiting 10 seconds' % self.device) + time.sleep(10) ++ finally: ++ cmd.close() + + def format(self): + if self.server == None: + raise ValueError, 'server attribute must be set to run this command' + status = None +- with closing(self.server.get_cmdshell()) as cmd: ++ try: ++ cmd = self.server.get_cmdshell() + if not self.checkfs(cmd): + boto.log.info('make_fs...') + status = cmd.run('mkfs -t xfs %s' % self.device) ++ finally: ++ cmd.close() + return status + + def mount(self): + if self.server == None: + raise ValueError, 'server attribute must be set to run this command' + boto.log.info('handle_mount_point') +- with closing(self.server.get_cmdshell()) as cmd: ++ try: + cmd = self.server.get_cmdshell() + if not cmd.isdir(self.mount_point): + boto.log.info('making directory') +@@ -276,6 +280,8 @@ + # Mount up our new EBS volume onto mount_point + cmd.run("mount %s %s" % (self.device, self.mount_point)) + cmd.run('xfs_growfs %s' % self.mount_point) ++ finally: ++ cmd.close() + + def make_ready(self, server): + self.server = server +@@ -298,15 +304,16 @@ + # if this volume is attached to a server + # we need to freeze the XFS file system + try: +- self.freeze() +- if self.server == None: +- snapshot = self.get_ec2_connection().create_snapshot(self.volume_id) +- else: +- snapshot = self.server.ec2.create_snapshot(self.volume_id) +- boto.log.info('Snapshot of Volume %s created: %s' % (self.name, snapshot)) +- except Exception, e: +- boto.log.info('Snapshot error') +- boto.log.info(traceback.format_exc()) ++ try: ++ self.freeze() ++ if self.server == None: ++ snapshot = self.get_ec2_connection().create_snapshot(self.volume_id) ++ else: ++ snapshot = self.server.ec2.create_snapshot(self.volume_id) ++ boto.log.info('Snapshot of Volume %s created: %s' % (self.name, snapshot)) ++ except Exception, e: ++ boto.log.info('Snapshot error') ++ boto.log.info(traceback.format_exc()) + finally: + status = self.unfreeze() + return status diff --git a/python-boto.spec b/python-boto.spec index e408d38..2388899 100644 --- a/python-boto.spec +++ b/python-boto.spec @@ -1,10 +1,10 @@ -%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} -%define pkgname boto +%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} +%global pkgname boto Summary: A simple lightweight interface to Amazon Web Services Name: python-boto Version: 1.9b -Release: 5%{?dist} +Release: 6%{?dist} License: MIT Group: Development/Languages URL: http://code.google.com/p/%{pkgname}/ @@ -12,6 +12,7 @@ Source: http://boto.googlecode.com/files/%{pkgname}-%{version}.tar.gz Patch0: python-boto-1.9b-image.patch Patch1: python-boto-1.9b-prefix.patch Patch2: python-boto-1.9b-python27.patch +Patch3: python-boto-1.9b-python24.patch BuildRequires: python-devel, python-setuptools-devel BuildArch: noarch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -28,6 +29,7 @@ use, lightweight wrapper around the Amazon services. %patch0 -p1 -b .image %patch1 -p1 -b .prefix %patch2 -p1 -b .python27 +%patch3 -p1 -b .python24 %build %{__python} setup.py build @@ -52,6 +54,9 @@ rm -rf $RPM_BUILD_ROOT %{python_sitelib}/* %changelog +* Sun Jan 02 2011 Robert Scheck 1.9b-6 +- Added a patch for python 2.4 support (#656446, #661233) + * Thu Dec 02 2010 Lubomir Rintel 1.9b-5 - Apply a patch for python 2.7 support (#659248)