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')
def parseExtensionArgs ( self , ax_args ) : 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' )
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.