docs: def write_table(self, d):
          """
          Write out a Python dictionary made of up string keys, and values
          that are strings, signed integers, Decimal, datetime.datetime, or
          sub-dictionaries following the same constraints.
  
          """
          self._flushbits()
          table_data = AMQPWriter()
          for k, v in d.items():
              table_data.write_shortstr(k)
              if isinstance(v, basestring):
                  if isinstance(v, unicode):
                      v = v.encode('utf-8')
                  table_data.write(byte(83)) # 'S'
                  table_data.write_longstr(v)
              elif isinstance(v, (int, long)):
                  table_data.write(byte(73)) # 'I'
                  table_data.write(pack('>i', v))
              elif isinstance(v, Decimal):
                  table_data.write(byte(68)) # 'D'
                  sign, digits, exponent = v.as_tuple()
                  v = 0
                  for d in digits:
                      v = (v * 10) + d
                  if sign:
                      v = -v
                  table_data.write_octet(-exponent)
                  table_data.write(pack('>i', v))
              elif isinstance(v, datetime):
                  table_data.write(byte(84)) # 'T'
                  table_data.write_timestamp(v)
                  ## FIXME: timezone ?
              elif isinstance(v, dict):
                  table_data.write(byte(70)) # 'F'
                  table_data.write_table(v)
              else:
                  raise ValueError('%s not serializable in AMQP' % repr(v))
          table_data = table_data.getvalue()
          self.write_long(len(table_data))
          self.out.write(table_data)