code: def http_error_handler(f):
      def hrefs_to_resources(hrefs):
          for href in hrefs.replace(',', '').split():
              type, uuid = href.split('/')[-2:]
              yield Resource(type, uuid=uuid)
      def hrefs_list_to_resources(hrefs_list):
          for href in eval(hrefs_list):
              type, uuid = href.split('/')[-2:]
              yield Resource(type, uuid=uuid)
      @wraps(f)
      def wrapper(self, *args, **kwargs):
          try:
              return f(self, *args, **kwargs)
          except HttpError as e:
              if e.http_status == 404:
                  self.emit('deleted', self)
                  if isinstance(self, Resource):
                      raise ResourceNotFound(resource=self)
                  elif isinstance(self, Collection):
                      raise CollectionNotFound(collection=self)
              elif e.http_status == 409:
                  matches = re.match(r'^Delete when children still present: (\[[^]]*\])', e.message)
                  if matches:
                      raise ChildrenExists(
                          resources=list(hrefs_list_to_resources(matches.group(1))))
                  matches = re.match(r'^Delete when resource still referred: (\[[^]]*\])', e.message)
                  if matches:
                      raise BackRefsExists(
                          resources=list(hrefs_list_to_resources(matches.group(1))))
                  matches = re.match(r'^Children (.*) still exist$', e.message)
                  if matches:
                      raise ChildrenExists(
                          resources=list(hrefs_to_resources(matches.group(1))))
                  matches = re.match(r'^Back-References from (.*) still exist$', e.message)
                  if matches:
                      raise BackRefsExists(
                          resources=list(hrefs_to_resources(matches.group(1))))
              raise
      return wrapper