def iterencode(self, o, _one_shot=False):
        """Encode the given object and yield each string
        representation as available.

        For example::

            for chunk in JSONEncoder().iterencode(bigobject):
                mysocket.write(chunk)

        """

        if self.check_circular:
            markers = {}
        else:
            markers = None
        if self.ensure_ascii:
            _encoder = encode_basestring_ascii
        else:
            _encoder = encode_basestring
        if self.encoding != 'utf-8':
            def _encoder(o, _orig_encoder=_encoder, _encoding=self.encoding):
                if isinstance(o, str):
                    o = o.decode(_encoding)
                return _orig_encoder(o)

        def floatstr(o, allow_nan=self.allow_nan,
                _repr=FLOAT_REPR, _inf=INFINITY, _neginf=-INFINITY):
            # Check for specials.  Note that this type of test is processor
            # and/or platform-specific, so do tests which don't depend on the
            # internals.

            if o != o:
                text = 'NaN'
            elif o == _inf:
                text = 'Infinity'
            elif o == _neginf:
                text = '-Infinity'
            else:
                return _repr(o)

            if not allow_nan:
                raise ValueError(
                    "Out of range float values are not JSON compliant: " +
                    repr(o))

            return text


        if (_one_shot and c_make_encoder is not None
                and self.indent is None and not self.sort_keys):
            _iterencode = c_make_encoder(
                markers, self.default, _encoder, self.indent,
                self.key_separator, self.item_separator, self.sort_keys,
                self.skipkeys, self.allow_nan)
        else:
            _iterencode = _make_iterencode(
                markers, self.default, _encoder, self.indent, floatstr,
                self.key_separator, self.item_separator, self.sort_keys,
                self.skipkeys, _one_shot, self.resource_classes)
        return _iterencode(o, 0)
Beispiel #2
0
    def iterencode(self, o, _one_shot=False):
        """Encode the given object and yield each string
        representation as available.

        For example::

            for chunk in JSONEncoder().iterencode(bigobject):
                mysocket.write(chunk)

        """
        if self.check_circular:
            markers = {}
        else:
            markers = None
        if self.ensure_ascii:
            _encoder = encode_basestring_ascii
        else:
            _encoder = encode_basestring
            
        if self.encoding != 'utf-8':
            def _encoder(o, _orig_encoder=_encoder, _encoding=self.encoding):
                if isinstance(o, str):
                    o = o.decode(_encoding)
                return _orig_encoder(o)

        def floatstr(o, allow_nan=self.allow_nan,
                _repr=FLOAT_REPR, _inf=INFINITY, _neginf=-INFINITY):
            # Check for specials.  Note that this type of test is processor
            # and/or platform-specific, so do tests which don't depend on the
            # internals.

            if o != o:
                text = 'NaN'
            elif o == _inf:
                text = 'Infinity'
            elif o == _neginf:
                text = '-Infinity'
            else:
                return _repr(o)

            if not allow_nan:
                raise ValueError(
                    "Out of range float values are not JSON compliant: " +
                    repr(o))

            return text


        if (_one_shot and c_make_encoder is not None
                and self.indent is None and not self.sort_keys):
            _iterencode = c_make_encoder(
                markers, self.default, _encoder, self.indent,
                self.key_separator, self.item_separator, self.sort_keys,
                self.skipkeys, self.allow_nan)
        else:
            _iterencode = _make_iterencode(
                markers, self.default, _encoder, self.indent, floatstr,
                self.key_separator, self.item_separator, self.sort_keys,
                self.skipkeys, _one_shot)
        return _iterencode(o, 0)
Beispiel #3
0
    def iterencode(self, o, _one_shot = False):
        if self.check_circular:
            markers = {}
        else:
            markers = None
        if self.ensure_ascii:
            _encoder = encode_basestring_ascii
        else:
            _encoder = encode_basestring
        if self.encoding != 'utf-8':

            def _encoder(o, _orig_encoder = _encoder, _encoding = self.encoding):
                if isinstance(o, str):
                    o = o.decode(_encoding)
                return _orig_encoder(o)

        def floatstr(o, allow_nan = self.allow_nan, _repr = FLOAT_REPR, _inf = INFINITY, _neginf = -INFINITY):
            if o != o:
                text = 'NaN'
            elif o == _inf:
                text = 'Infinity'
            elif o == _neginf:
                text = '-Infinity'
            else:
                return _repr(o)
            if not allow_nan:
                raise ValueError('Out of range float values are not JSON compliant: ' + repr(o))
            return text

        if _one_shot and c_make_encoder is not None and not self.indent and not self.sort_keys:
            _iterencode = c_make_encoder(markers, self.default, _encoder, self.indent, self.key_separator, self.item_separator, self.sort_keys, self.skipkeys, self.allow_nan)
        else:
            _iterencode = _make_iterencode(markers, self.default, _encoder, self.indent, floatstr, self.key_separator, self.item_separator, self.sort_keys, self.skipkeys, _one_shot)
        return _iterencode(o, 0)
Beispiel #4
0
    def iterencode(self, o, _one_shot=False):
        """Encode the given object and yield each string
        representation as available.

        For example::

            for chunk in JSONEncoder().iterencode(bigobject):
                mysocket.write(chunk)

        """
        if self.check_circular:
            markers = {}
        else:
            markers = None
        if self.ensure_ascii:
            _encoder = encode_basestring_ascii
        else:
            _encoder = encode_basestring

        def floatstr(o,
                     allow_nan=self.allow_nan,
                     _repr=float.__repr__,
                     _inf=INFINITY,
                     _neginf=-INFINITY):
            if o != o:
                text = 'NaN'
            elif o == _inf:
                text = 'Infinity'
            elif o == _neginf:
                text = '-Infinity'
            else:
                return _repr(o)
            if not allow_nan:
                raise ValueError(
                    'Out of range float values are not JSON compliant: ' +
                    repr(o))
            return text

        if _one_shot and c_make_encoder is not None and self.indent is None:
            _iterencode = c_make_encoder(markers, self.default, _encoder,
                                         self.indent, self.key_separator,
                                         self.item_separator, self.sort_keys,
                                         self.skipkeys, self.allow_nan)
        else:
            _iterencode = _make_iterencode(markers, self.default, _encoder,
                                           self.indent, floatstr,
                                           self.key_separator,
                                           self.item_separator, self.sort_keys,
                                           self.skipkeys, _one_shot)
        return _iterencode(o, 0)
Beispiel #5
0
    def iterencode(self, o, _one_shot=False):
        if self.check_circular:
            markers = {}
        else:
            markers = None
        if self.ensure_ascii:
            _encoder = encode_basestring_ascii
        else:
            _encoder = encode_basestring

        def floatstr(o,
                     allow_nan=self.allow_nan,
                     _repr=float.__repr__,
                     _inf=INFINITY,
                     _neginf=-INFINITY):
            # Check for specials.  Note that this type of test is processor
            # and/or platform-specific, so do tests which don't depend on the
            # internals.

            if o != o:
                text = 'NaN'
            elif o == _inf:
                text = 'Infinity'
            elif o == _neginf:
                text = '-Infinity'
            else:
                if self.float_digits >= 0:
                    return format(o, '.%df' % self.float_digits)
                else:
                    return '{0}'.format(o)

            if not allow_nan:
                raise ValueError(
                    "Out of range float values are not JSON compliant: " +
                    repr(o))

            return text

        if (_one_shot and c_make_encoder is not None and self.indent is None):
            _iterencode = c_make_encoder(markers, self.default, _encoder,
                                         self.indent, self.key_separator,
                                         self.item_separator, self.sort_keys,
                                         self.skipkeys, self.allow_nan)
        else:
            _iterencode = _make_iterencode(markers, self.default, _encoder,
                                           self.indent, floatstr,
                                           self.key_separator,
                                           self.item_separator, self.sort_keys,
                                           self.skipkeys, _one_shot)
        return _iterencode(o, 0)
    def iterencode(self, o, _one_shot=False):
        if self.check_circular:
            markers = {}
        else:
            markers = None
        if self.ensure_ascii:
            _encoder = encode_basestring_ascii
        else:
            _encoder = encode_basestring
        if self.encoding != 'utf-8':

            def _encoder(o, _orig_encoder=_encoder, _encoding=self.encoding):
                if isinstance(o, str):
                    o = o.decode(_encoding)
                return _orig_encoder(o)

        def floatstr(o,
                     allow_nan=self.allow_nan,
                     _repr=FLOAT_REPR,
                     _inf=INFINITY,
                     _neginf=-INFINITY):
            if o != o:
                text = 'NaN'
            else:
                if o == _inf:
                    text = 'Infinity'
                else:
                    if o == _neginf:
                        text = '-Infinity'
                    else:
                        return _repr(o)
            if not allow_nan:
                raise ValueError(
                    'Out of range float values are not JSON compliant: ' +
                    repr(o))
            return text

        if _one_shot and c_make_encoder is not None and self.indent is None and not self.sort_keys:
            _iterencode = c_make_encoder(markers, self.default, _encoder,
                                         self.indent, self.key_separator,
                                         self.item_separator, self.sort_keys,
                                         self.skipkeys, self.allow_nan)
        else:
            _iterencode = _make_iterencode(markers, self.default, _encoder,
                                           self.indent, floatstr,
                                           self.key_separator,
                                           self.item_separator, self.sort_keys,
                                           self.skipkeys, _one_shot)
        return _iterencode(o, 0)
    def iterencode(self, o, _one_shot=False):
        """Encode the given object and yield each string
        representation as available.

        For example::

            for chunk in JSONEncoder().iterencode(bigobject):
                mysocket.write(chunk)

        """
        # Encode-to-iterable function that encodes Python object to JSON data
        # by returning an iterable of result chunks.
        #
        # @param o: Python object to encode.
        #
        # @param _one_shot: Whether the iteration is one-shot.
        #
        # @return: An iterable of result chunks.

        # If check circular references
        if self.check_circular:
            # Create makers dict
            markers = {}
        else:
            # Set makers dict to None
            markers = None

        # If ensure output is ACII-only
        if self.ensure_ascii:
            # Use ACII-only string escape function
            _encoder = encode_basestring_ascii
        else:
            # Use non-ACII-only string escape function
            _encoder = encode_basestring

        # Create an float-to-text function
        def floatstr(o, allow_nan=self.allow_nan,
                _repr=FLOAT_REPR, _inf=INFINITY, _neginf=-INFINITY):
            # Get a float object's text.
            #
            # @param allow_nan: Whether allow NaN.
            #
            # @param _repr: Repr function for regular float objects.
            #
            # @param _inf: Infinity object.
            #
            # @param _neginf: -Infinity object.
            #
            # @return: Float object's text.

            # Check for specials.  Note that this type of test is processor
            # and/or platform-specific, so do tests which don't depend on the
            # internals.

            # If the object is NaN
            if o != o:
                # Get the object's text
                text = 'NaN'

            # If the object is infinity
            elif o == _inf:
                # Get the object's text
                text = 'Infinity'

            # If the object is -infinity
            elif o == _neginf:
                # Get the object's text
                text = '-Infinity'

            # If the object is not special values above
            else:
                # Use given repr function to get the object's text
                return _repr(o)

            # If NaN is not allowed
            if not allow_nan:
                # Raise error
                raise ValueError(
                    "Out of range float values are not JSON compliant: " +
                    repr(o))

            # Return the object's text
            return text


        # If the iteration is one-shot,
        # and C version of encoder function is available,
        # and indentation argument is not given
        if (_one_shot and c_make_encoder is not None
                and self.indent is None):
            # Use C version of make-encoder function to create iterable
            _iterencode = c_make_encoder(
                markers, self.default, _encoder, self.indent,
                self.key_separator, self.item_separator, self.sort_keys,
                self.skipkeys, self.allow_nan)

        # If the iteration is not one-shot,
        # or C version of encoder is not available,
        # or indentation argument is given
        else:
            # Use Python version of make-encoder function to create iterable
            _iterencode = _make_iterencode(
                markers, self.default, _encoder, self.indent, floatstr,
                self.key_separator, self.item_separator, self.sort_keys,
                self.skipkeys, _one_shot)

        # Create and return the iterable
        return _iterencode(o, 0)