docs: def parseExtensionArgs(self, ax_args):
          """Given attribute exchange arguments, populate this FetchRequest.
  
          @param ax_args: Attribute Exchange arguments from the request.
              As returned from L{Message.getArgs<openid.message.Message.getArgs>}.
          @type ax_args: dict
  
          @raises KeyError: if the message is not consistent in its use
              of namespace aliases.
  
          @raises NotAXMessage: If ax_args does not include an Attribute Exchange
              mode.
  
          @raises AXError: If the data to be parsed does not follow the
              attribute exchange specification. At least when
              'if_available' or 'required' is not specified for a
              particular attribute type.
          """
          # Raises an exception if the mode is not the expected value
          self._checkMode(ax_args)
  
          aliases = NamespaceMap()
  
          for key, value in ax_args.items():
              if key.startswith('type.'):
                  alias = key[5:]
                  type_uri = value
                  aliases.addAlias(type_uri, alias)
  
                  count_key = 'count.' + alias
                  count_s = ax_args.get(count_key)
                  if count_s:
                      try:
                          count = int(count_s)
                          if count <= 0:
                              raise AXError(
                                  "Count %r must be greater than zero, got %r" %
                                  (count_key, count_s, ))
                      except ValueError:
                          if count_s != UNLIMITED_VALUES:
                              raise AXError("Invalid count value for %r: %r" %
                                            (count_key, count_s, ))
                          count = count_s
                  else:
                      count = 1
  
                  self.add(AttrInfo(type_uri, alias=alias, count=count))
  
          required = toTypeURIs(aliases, ax_args.get('required'))
  
          for type_uri in required:
              self.requested_attributes[type_uri].required = True
  
          if_available = toTypeURIs(aliases, ax_args.get('if_available'))
  
          all_type_uris = required + if_available
  
          for type_uri in aliases.iterNamespaceURIs():
              if type_uri not in all_type_uris:
                  raise AXError('Type URI %r was in the request but not '
                                'present in "required" or "if_available"' %
                                (type_uri, ))
  
          self.update_url = ax_args.get('update_url')