old_contents: from boto import handler
  import xml.sax
  
  
  class Tag(object):
      def __init__(self, key=None, value=None):
          self.key = key
          self.value = value
  
      def startElement(self, name, attrs, connection):
          return None
  
      def endElement(self, name, value, connection):
          if name == 'Key':
              self.key = value
          elif name == 'Value':
              self.value = value
  
      def to_xml(self):
          return '<Tag><Key>%s</Key><Value>%s</Value></Tag>' % (
              self.key, self.value)
  
  
  class TagSet(list):
      def startElement(self, name, attrs, connection):
          if name == 'Tag':
              tag = Tag()
              self.append(tag)
              return tag
          return None
  
      def endElement(self, name, value, connection):
          setattr(self, name, value)
  
      def add_tag(self, key, value):
          tag = Tag(key, value)
          self.append(tag)
  
      def to_xml(self):
          xml = '<TagSet>'
          for tag in self:
              xml += tag.to_xml()
          xml += '</TagSet>'
          return xml
  
  
  class Tags(list):
      """A container for the tags associated with a bucket."""
  
      def startElement(self, name, attrs, connection):
          if name == 'TagSet':
              tag_set = TagSet()
              self.append(tag_set)
              return tag_set
          return None
  
      def endElement(self, name, value, connection):
          setattr(self, name, value)
  
      def to_xml(self):
          xml = '<Tagging>'
          for tag_set in self:
              xml += tag_set.to_xml()
          xml +='</Tagging>'
          return xml
  
      def add_tag_set(self, tag_set):
          self.append(tag_set)
  
new_contents: from boto import handler
  import xml.sax
  
  
  class Tag(object):
      def __init__(self, key=None, value=None):
          self.key = key
          self.value = value
  
      def startElement(self, name, attrs, connection):
          return None
  
      def endElement(self, name, value, connection):
          if name == 'Key':
              self.key = value
          elif name == 'Value':
              self.value = value
  
      def to_xml(self):
          return '<Tag><Key>%s</Key><Value>%s</Value></Tag>' % (
              self.key, self.value)
  
      def __eq__(self, other):
          return (self.key == other.key and self.value == other.value)
  
  
  class TagSet(list):
      def startElement(self, name, attrs, connection):
          if name == 'Tag':
              tag = Tag()
              self.append(tag)
              return tag
          return None
  
      def endElement(self, name, value, connection):
          setattr(self, name, value)
  
      def add_tag(self, key, value):
          tag = Tag(key, value)
          self.append(tag)
  
      def to_xml(self):
          xml = '<TagSet>'
          for tag in self:
              xml += tag.to_xml()
          xml += '</TagSet>'
          return xml
  
  
  class Tags(list):
      """A container for the tags associated with a bucket."""
  
      def startElement(self, name, attrs, connection):
          if name == 'TagSet':
              tag_set = TagSet()
              self.append(tag_set)
              return tag_set
          return None
  
      def endElement(self, name, value, connection):
          setattr(self, name, value)
  
      def to_xml(self):
          xml = '<Tagging>'
          for tag_set in self:
              xml += tag_set.to_xml()
          xml +='</Tagging>'
          return xml
  
      def add_tag_set(self, tag_set):
          self.append(tag_set)
  
subject: Add an __eq__ method for the Tag object allowing object comparisons, especially within TagSet objects