Created
December 6, 2010 23:59
-
-
Save garnaat/731228 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This software code is made available "AS IS" without warranties of any | |
# kind. You may copy, display, modify and redistribute the software | |
# code either by itself or as incorporated into your code; provided that | |
# you do not remove any proprietary notices. Your use of this software | |
# code is at your own risk and you waive any claim against Amazon | |
# Digital Services, Inc. or its affiliates with respect to your use of | |
# this software code. (c) 2006 Amazon Digital Services, Inc. or its | |
# affiliates. | |
# generates the aws canonical string for the given parameters | |
def canonical_string(method, path, headers, expires=None): | |
interesting_headers = {} | |
for key in headers: | |
lk = key.lower() | |
if lk in ['content-md5', 'content-type', 'date'] or lk.startswith(AMAZON_HEADER_PREFIX): | |
interesting_headers[lk] = headers[key].strip() | |
# these keys get empty strings if they don't exist | |
if not interesting_headers.has_key('content-type'): | |
interesting_headers['content-type'] = '' | |
if not interesting_headers.has_key('content-md5'): | |
interesting_headers['content-md5'] = '' | |
# just in case someone used this. it's not necessary in this lib. | |
if interesting_headers.has_key('x-amz-date'): | |
interesting_headers['date'] = '' | |
# if you're using expires for query string auth, then it trumps date | |
# (and x-amz-date) | |
if expires: | |
interesting_headers['date'] = str(expires) | |
sorted_header_keys = interesting_headers.keys() | |
sorted_header_keys.sort() | |
buf = "%s\n" % method | |
for key in sorted_header_keys: | |
if key.startswith(AMAZON_HEADER_PREFIX): | |
buf += "%s:%s\n" % (key, interesting_headers[key]) | |
else: | |
buf += "%s\n" % interesting_headers[key] | |
# don't include anything after the first ? in the resource... | |
buf += "/%s" % path.split('?')[0] | |
# ...unless there is an acl or torrent parameter | |
if re.search("[&?]acl($|=|&)", path): | |
buf += "?acl" | |
elif re.search("[&?]torrent($|=|&)", path): | |
buf += "?torrent" | |
return buf |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment