X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=python%2Fcumulus%2Fstore%2Fs3.py;h=4ad403cc3bb6244c323150a5162e72da2bf81326;hb=64bff41cb3ccdd60e767a5bb9ed8525d2dda1966;hp=65884ea5465e956738c0cae736176575b6e38c7e;hpb=65edb87a0b8a578b4a7221478a851d71df21fab0;p=cumulus.git diff --git a/python/cumulus/store/s3.py b/python/cumulus/store/s3.py index 65884ea..4ad403c 100644 --- a/python/cumulus/store/s3.py +++ b/python/cumulus/store/s3.py @@ -1,3 +1,23 @@ +# Cumulus: Efficient Filesystem Backup to the Cloud +# Copyright (C) 2008-2010 The Cumulus Developers +# See the AUTHORS file for a list of contributors. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +"""Amazon S3 storage backend. Uses a URL of the form s3://BUCKET/PATH/.""" + import os, sys, tempfile import boto from boto.s3.bucket import Bucket @@ -7,10 +27,21 @@ import cumulus.store class S3Store(cumulus.store.Store): def __init__(self, url, **kw): - (bucket, prefix) = self.path.lstrip("/").split("/", 1) + # Old versions of the Python urlparse library will take a URL like + # s3://bucket/path/ and include the bucket with the path, while new + # versions (2.6 and later) treat it as the netloc (which seems more + # correct). + # + # But, so that we can work with either behavior, for now just combine + # the netloc and path together before we do any further processing + # (which will then split the combined path apart into a bucket and path + # again). If we didn't want to support Python 2.5, this would be + # easier as we could just use the netloc as the bucket directly. + path = self.netloc + '/' + self.path + (bucket, prefix) = path.lstrip("/").split("/", 1) self.conn = boto.connect_s3(is_secure=False) self.bucket = self.conn.create_bucket(bucket) - self.prefix = prefix.rstrip ("/") + self.prefix = prefix.strip("/") self.scan_cache = {} def _get_key(self, type, name):