| 567 | dispatch[list] = dump_array |
| 568 | |
| 569 | def dump_struct(self, value, write, escape=escape): |
| 570 | i = id(value) |
| 571 | if i in self.memo: |
| 572 | raise TypeError("cannot marshal recursive dictionaries") |
| 573 | self.memo[i] = None |
| 574 | dump = self.__dump |
| 575 | write("<value><struct>\n") |
| 576 | for k, v in value.items(): |
| 577 | write("<member>\n") |
| 578 | if not isinstance(k, str): |
| 579 | raise TypeError("dictionary key must be string") |
| 580 | write("<name>%s</name>\n" % escape(k)) |
| 581 | dump(v, write) |
| 582 | write("</member>\n") |
| 583 | write("</struct></value>\n") |
| 584 | del self.memo[i] |
| 585 | dispatch[dict] = dump_struct |
| 586 | |
| 587 | def dump_datetime(self, value, write): |