Python

  1. Home
  2. Computing & Technology
  3. Python

Python Blog

From Al Lukaszewski, for About.com

Python Embracing Windows Azure

Monday November 17, 2008
Sriram Krishnan, a Microsoft Program Manager, recently posted on using Python to access Azure's storage service. Azure, you may recall, is Microsoft's latest try to break into cloud computing. In a recent entry on his blog, Krishnan features a Python wrapper that shows how to automate your session's authentication with Azure. First, you make the connection:
conn = WAStorageConnection(DEVSTORE_HOST, DEVSTORE_ACCOUNT, DEVSTORE_SECRET_KEY)
     for (container_name,etag, last_modified ) in conn.list_containers():
     print container_name
     print etag
     print last_modified


     conn.create_container("testcontainer", False)
     conn.put_blob("testcontainer","test","Hello World!" )
     print conn.get_blob("testcontainer", "test")
Then you get the security headers:
def _get_auth_header(self, http_method, path, data, headers):
     # As documented at http://msdn.microsoft.com/en-us/library/dd179428.aspx
     string_to_sign =""


     #First element is the method
     string_to_sign += http_method + NEW_LINE


     #Second is the optional content MD5
     string_to_sign += NEW_LINE


     #content type - this should have been initialized atleast to a blank value
     if headers.has_key("content-type"):
         string_to_sign += headers["content-type"]
     string_to_sign += NEW_LINE


     # date - we don't need to add header here since the special date storage header
     # always exists in our implementation
     string_to_sign += NEW_LINE


     # Construct canonicalized storage headers.
     # TODO: Note that this doesn't implement parts of the spec - combining header fields with same name,
     # unfolding long lines and trimming white spaces around the colon


     ms_headers =[header_key for header_key in headers.keys() if header_key.startswith(PREFIX_STORAGE_HEADER)]
     ms_headers.sort()
     for header_key in ms_headers:
         string_to_sign += "%s:%s%s" % (header_key, headers[header_key], NEW_LINE)


     # Add canonicalized resource
     string_to_sign += "/" + self.account_name + path
     utf8_string_to_sign = unicode(string_to_sign).encode("utf-8")
     hmac_digest = hmac.new(self.secret_key, utf8_string_to_sign, hashlib.sha256).digest()
     return base64.encodestring(hmac_digest).strip()
As noted by Krishnan, this is his draft code and not production quality. You can get updates at his GitHub spot.

Kudos to Abel Avram for his discussion on this.

Comments

No comments yet. Leave a Comment

Leave a Comment

Line and paragraph breaks are automatic. Some HTML allowed: <a href="" title="">, <b>, <i>, <strike>

Explore Python

About.com Special Features

Build Your Own Website

Step-by-step advice on how to do everything from choosing a Web host to promoting your content. More >

Connect Your Home Computers

Easy ways to connect two computers for networking purposes. More >

Python

  1. Home
  2. Computing & Technology
  3. Python

©2009 About.com, a part of The New York Times Company.

All rights reserved.