def normalize(self, obj):
        """
        Runs an object through the normalizer mechanism, with the goal of producing a value consisting only of "native types" (:obj:`unicode`, :obj:`int`, :obj:`long`, :obj:`float`, :obj:`dict`, :obj:`list`, etc).

        The resolution order looks like this:

        - Loop through :attr:`self.normalizer_overrides[type(obj)] <normalizer_overrides>` (taking parent classes into account), should be a callable taking (obj, pushrod), falls through on :obj:`NotImplemented`
        - :attr:`self.normalizers[type(obj)] <normalizers>` (taking parent classes into account), should be a callable taking (obj, pushrod), falls through on :obj:`NotImplemented`

        See :ref:`bundled-normalizers` for all default normalizers.

        :param obj: The object to normalize.
        """

        for cls in type(obj).__mro__:
            for override in self.normalizer_overrides[cls]:
                attempt = override(obj, self)
                if attempt is not NotImplemented:
                    return attempt

        attempt = normalizers.normalize_object(obj, self)
        if attempt is not NotImplemented:
            return attempt

        for cls in type(obj).__mro__:
            if cls is self.normalizers:
                attempt = self.normalizers[cls](obj, self)
                if attempt is not NotImplemented:
                    return attempt

        return NotImplemented
dataset/ETHPy150Open teozkr/Flask-Pushrod/flask_pushrod/resolver.py/Pushrod.normalize/operator `in` -> `is`