<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -3,6 +3,7 @@
 &quot;&quot;&quot;
 Python wrapper around Windows Azure storage
 Sriram Krishnan &lt;sriramk@microsoft.com&gt;
+Steve Marx &lt;steve.marx@microsoft.com&gt;
 &quot;&quot;&quot;
 
 import base64
@@ -38,13 +39,16 @@ TIME_FORMAT =&quot;%a, %d %b %Y %H:%M:%S %Z&quot;
 
 def parse_edm_datetime(input):
     d = datetime.strptime(input[:input.find('.')], &quot;%Y-%m-%dT%H:%M:%S&quot;)
-    if input[:input.find('.')] != -1:
+    if input.find('.') != -1:
         d += timedelta(0, 0, int(round(float(input[input.index('.'):-1])*1000000)))
     return d
 
 def parse_edm_int32(input):
     return int(input)
 
+def parse_edm_double(input):
+    return float(input)
+
 def parse_edm_boolean(input):
     return input.lower() == &quot;true&quot;
 
@@ -122,12 +126,69 @@ class Storage(object):
 
 class TableEntity(object): pass
 
+class QueueStorage(Storage):
+    def __init__(self, host, account_name, secret_key, use_path_style_uris = None):
+        super(QueueStorage, self).__init__(host, account_name, secret_key, use_path_style_uris)
+
+    def create_queue(self, name):
+        req = RequestWithMethod(&quot;PUT&quot;, &quot;%s/%s&quot; % (self.get_base_url(), name))
+        req.add_header(&quot;Content-Length&quot;, &quot;0&quot;)
+        self._credentials.sign_request(req)
+        try:
+            response = urlopen(req)
+            return response.code
+        except URLError, e:
+            return e.code
+
+    def delete_queue(self, name):
+        req = RequestWithMethod(&quot;DELETE&quot;, &quot;%s/%s&quot; % (self.get_base_url(), name))
+        self._credentials.sign_request(req)
+        try:
+            response = urlopen(req)
+            return response.code
+        except URLError, e:
+            return e.code
+
 class TableStorage(Storage):
-    '''Due to local development storage not supporting SharedKeyLite authentication, this class
+    '''Due to local development storage not supporting SharedKey authentication, this class
        will only work against cloud storage.'''
     def __init__(self, host, account_name, secret_key, use_path_style_uris = None):
         super(TableStorage, self).__init__(host, account_name, secret_key, use_path_style_uris)
 
+    def create_table(self, name):
+        data = &quot;&quot;&quot;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; standalone=&quot;yes&quot;?&gt;
+&lt;entry xmlns:d=&quot;http://schemas.microsoft.com/ado/2007/08/dataservices&quot; xmlns:m=&quot;http://schemas.microsoft.com/ado/2007/08/dataservices/metadata&quot; xmlns=&quot;http://www.w3.org/2005/Atom&quot;&gt;
+  &lt;title /&gt;
+  &lt;updated&gt;%s&lt;/updated&gt;
+  &lt;author&gt;
+    &lt;name /&gt;
+  &lt;/author&gt;
+  &lt;id /&gt;
+  &lt;content type=&quot;application/xml&quot;&gt;
+    &lt;m:properties&gt;
+      &lt;d:TableName&gt;%s&lt;/d:TableName&gt;
+    &lt;/m:properties&gt;
+  &lt;/content&gt;
+&lt;/entry&gt;&quot;&quot;&quot; % (time.strftime(&quot;%Y-%m-%dT%H:%M:%S.000Z&quot;, time.gmtime()), name)
+        req = RequestWithMethod(&quot;POST&quot;, &quot;%s/Tables&quot; % self.get_base_url(), data=data)
+        req.add_header(&quot;Content-Length&quot;, &quot;%d&quot; % len(data))
+        req.add_header(&quot;Content-Type&quot;, &quot;application/atom+xml&quot;)
+        self._credentials.sign_table_request(req)
+        try:
+            response = urlopen(req)
+            return response.code
+        except URLError, e:
+            return e.code
+
+    def delete_table(self, name):
+        req = RequestWithMethod(&quot;DELETE&quot;, &quot;%s/Tables('%s')&quot; % (self.get_base_url(), name))
+        self._credentials.sign_table_request(req)
+        try:
+            response = urlopen(req)
+            return response.code
+        except URLError, e:
+            return e.code
+
     def list_tables(self):
         req = Request(&quot;%s/Tables&quot; % self.get_base_url())
         self._credentials.sign_table_request(req)
@@ -157,8 +218,9 @@ class TableStorage(Storage):
                 if t.lower() == 'edm.datetime': value = parse_edm_datetime(property.firstChild.data)
                 elif t.lower() == 'edm.int32': value = parse_edm_int32(property.firstChild.data)
                 elif t.lower() == 'edm.boolean': value = parse_edm_boolean(property.firstChild.data)
+                elif t.lower() == 'edm.double': value = parse_edm_double(property.firstChild.data)
                 else: raise Exception(t.lower())
-            else: value = property.firstChild.data
+            else: value = property.firstChild is not None and property.firstChild.data or None
             setattr(entity, key, value)
         return entity
 </diff>
      <filename>winazurestorage.py</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>214010a2f8931bac9c96dfeb337d56fe084ca63b</id>
    </parent>
  </parents>
  <author>
    <name>Steve Marx</name>
    <email>Steve.Marx@microsoft.com</email>
  </author>
  <url>http://github.com/sriramk/winazurestorage/commit/132c7dcdcc51549576cc6f2a1dfbc35a75339b9e</url>
  <id>132c7dcdcc51549576cc6f2a1dfbc35a75339b9e</id>
  <committed-date>2009-03-19T00:18:42-07:00</committed-date>
  <authored-date>2009-03-19T00:18:42-07:00</authored-date>
  <message>better table support, minimal queue support</message>
  <tree>56499c245ec5e5f01f0e3ff3766e1b408425441c</tree>
  <committer>
    <name>Steve Marx</name>
    <email>Steve.Marx@microsoft.com</email>
  </committer>
</commit>
