Sriram Krishnan, um Program Manager na Microsoft, escreveu um wrapper Phyton para o Windows Azure Data Storage. Python é uma das linguagens suportadas pelo Windows Azure.
De acordo com web site do Microsoft Azure, Python é uma das ferramentas e linguagens a serem suportadas pelo Windows Azure:
Windows Azure é uma plataforma aberta que suportará linguagens e ambientes Microsoft e não-Microsoft. Windows Azure é aberto a ferramentas e linguagens de terceiros, como Eclipse, Ruby, PHP e Python. ...
Milhões de desenvolvedores ao redor do mundo já usam o .NET Framework e o ambiente de desenvolvimento Visual Studio. Utilize estas mesmas habilidades para desenvolver aplicações cloud-enabled que podem ser escritas, testadas e instaladas direto do Visual Studio. Num futuro próximo, os desenvolvedores serão capazes de realizar deploy de aplicações Ruby on Rails e Python também.
Sriram escreveu um data storage wrapper em Python para o Windows Azure e publicou o código no GitHub. Armazenar/Retornar dados é feito como no seguinte exemplo:
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")
Signing-in é feito como no seguinte exemplo:
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()
Parece que os planos da Microsoft para o Windows Azure supera a oferta do Google. Atualmente, o Google App Engine suporta apenas Phyton, mas há planos para suportar mais linguagens no futuro, de acordo com o Google.