(dct, _current_indent_level)
| 337 | del markers[markerid] |
| 338 | |
| 339 | def _iterencode_dict(dct, _current_indent_level): |
| 340 | if not dct: |
| 341 | yield '{}' |
| 342 | return |
| 343 | if markers is not None: |
| 344 | markerid = id(dct) |
| 345 | if markerid in markers: |
| 346 | raise ValueError("Circular reference detected") |
| 347 | markers[markerid] = dct |
| 348 | yield '{' |
| 349 | if _indent is not None: |
| 350 | _current_indent_level += 1 |
| 351 | newline_indent = '\n' + _indent * _current_indent_level |
| 352 | item_separator = _item_separator + newline_indent |
| 353 | else: |
| 354 | newline_indent = None |
| 355 | item_separator = _item_separator |
| 356 | first = True |
| 357 | if _sort_keys: |
| 358 | items = sorted(dct.items()) |
| 359 | else: |
| 360 | items = dct.items() |
| 361 | for key, value in items: |
| 362 | if isinstance(key, str): |
| 363 | pass |
| 364 | # JavaScript is weakly typed for these, so it makes sense to |
| 365 | # also allow them. Many encoders seem to do something like this. |
| 366 | elif isinstance(key, float): |
| 367 | # see comment for int/float in _make_iterencode |
| 368 | key = _floatstr(key) |
| 369 | elif key is True: |
| 370 | key = 'true' |
| 371 | elif key is False: |
| 372 | key = 'false' |
| 373 | elif key is None: |
| 374 | key = 'null' |
| 375 | elif isinstance(key, int): |
| 376 | # see comment for int/float in _make_iterencode |
| 377 | key = _intstr(key) |
| 378 | elif _skipkeys: |
| 379 | continue |
| 380 | else: |
| 381 | raise TypeError(f'keys must be str, int, float, bool or None, ' |
| 382 | f'not {key.__class__.__name__}') |
| 383 | if first: |
| 384 | first = False |
| 385 | if newline_indent is not None: |
| 386 | yield newline_indent |
| 387 | else: |
| 388 | yield item_separator |
| 389 | yield _encoder(key) |
| 390 | yield _key_separator |
| 391 | try: |
| 392 | if isinstance(value, str): |
| 393 | yield _encoder(value) |
| 394 | elif value is None: |
| 395 | yield 'null' |
| 396 | elif value is True: |
no test coverage detected