зависнет на этом:
```
a = {'a': 123}
a['b'] = a
dumper(a)
```

Есть кстати `pprint` и есть к нему патч для unicode (см. upprint.py в logic), но он конечно ничего сворачивать/разворачивать не сможет, но он умеет определять рекурсии и выведет полный дамп python структуры.

Если хочется красиво сделать, то можешь глянуть как там это реализовано, там ничего сложного, см `ppprint.PrettyPrinter._format` и как она работает с `context`.