(dct, _current_indent_level)
| 429 | del markers[markerid] |
| 430 | |
| 431 | def _iterencode_dict(dct, _current_indent_level): |
| 432 | if not dct: |
| 433 | yield '{}' |
| 434 | return |
| 435 | if markers is not None: |
| 436 | markerid = id(dct) |
| 437 | if markerid in markers: |
| 438 | raise ValueError("Circular reference detected") |
| 439 | markers[markerid] = dct |
| 440 | yield '{' |
| 441 | if _indent is not None: |
| 442 | _current_indent_level += 1 |
| 443 | newline_indent = '\n' + (_indent * _current_indent_level) |
| 444 | item_separator = _item_separator + newline_indent |
| 445 | yield newline_indent |
| 446 | else: |
| 447 | newline_indent = None |
| 448 | item_separator = _item_separator |
| 449 | first = True |
| 450 | if _item_sort_key: |
| 451 | items = dct.items() |
| 452 | items.sort(key=_item_sort_key) |
| 453 | elif _sort_keys: |
| 454 | items = dct.items() |
| 455 | items.sort(key=lambda kv: kv[0]) |
| 456 | else: |
| 457 | items = dct.iteritems() |
| 458 | for key, value in items: |
| 459 | if isinstance(key, basestring): |
| 460 | pass |
| 461 | # JavaScript is weakly typed for these, so it makes sense to |
| 462 | # also allow them. Many encoders seem to do something like this. |
| 463 | elif isinstance(key, float): |
| 464 | key = _floatstr(key) |
| 465 | elif key is True: |
| 466 | key = 'true' |
| 467 | elif key is False: |
| 468 | key = 'false' |
| 469 | elif key is None: |
| 470 | key = 'null' |
| 471 | elif isinstance(key, (int, long)): |
| 472 | key = str(key) |
| 473 | elif _skipkeys: |
| 474 | continue |
| 475 | else: |
| 476 | raise TypeError("key " + repr(key) + " is not a string") |
| 477 | if first: |
| 478 | first = False |
| 479 | else: |
| 480 | yield item_separator |
| 481 | yield _encoder(key) |
| 482 | yield _key_separator |
| 483 | if isinstance(value, basestring): |
| 484 | yield _encoder(value) |
| 485 | elif value is None: |
| 486 | yield 'null' |
| 487 | elif value is True: |
| 488 | yield 'true' |
no test coverage detected
searching dependent graphs…