code: def iter_identities(self, stanza=None):
          
          for (category, type_), names in self._identities.items():
              for lang, name in names.items():
                  yield category, type_, lang, name
              if not names:
                  yield category, type_, None, None
docs: Return an iterator of tuples describing the identities of the node.
  
          :param stanza: The IQ request stanza
          :type stanza: :class:`~aioxmpp.IQ` or :data:`None`
          :rtype: iterable of (:class:`str`, :class:`str`, :class:`str` or
              :data:`None`, :class:`str` or :data:`None`) tuples
          :return: :xep:`30` identities of this node
  
          `stanza` can be the :class:`aioxmpp.IQ` stanza of the request. This can
          be used to hide a node depending on who is asking. If the returned
          iterable is empty, the :class:`~.DiscoServer` returns an
          ``<item-not-found/>`` error.
  
          `stanza` may be :data:`None` if the identities are queried without
          a specific request context. In that case, implementors should assume
          that the result is visible to everybody.
  
          .. note::
  
             Subclasses must allow :data:`None` for `stanza` and default it to
             :data:`None`.
  
          Return an iterator which yields tuples consisting of the category, the
          type, the language code and the name of each identity declared in this
          :class:`Node`.
  
          Both the language code and the name may be :data:`None`, if no names or
          a name without language code have been declared.