forked from goodboy/tractor
				
			Use `msgspec.Struct.__repr__()` failover impl
In case the struct doesn't import a field type (which will cause the `.pformat()` to raise) just report the issue and try to fall back to the original `repr()` version.remotes/1757153874605917753/main
							parent
							
								
									0263599cef
								
							
						
					
					
						commit
						90bd757b48
					
				|  | @ -34,6 +34,9 @@ from pprint import ( | ||||||
|     saferepr, |     saferepr, | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | from tractor.log import get_logger | ||||||
|  | 
 | ||||||
|  | log = get_logger() | ||||||
| # TODO: auto-gen type sig for input func both for | # TODO: auto-gen type sig for input func both for | ||||||
| # type-msgs and logging of RPC tasks? | # type-msgs and logging of RPC tasks? | ||||||
| # taken and modified from: | # taken and modified from: | ||||||
|  | @ -143,7 +146,13 @@ def pformat( | ||||||
| 
 | 
 | ||||||
|         else:  # the `pprint` recursion-safe format: |         else:  # the `pprint` recursion-safe format: | ||||||
|             # https://docs.python.org/3.11/library/pprint.html#pprint.saferepr |             # https://docs.python.org/3.11/library/pprint.html#pprint.saferepr | ||||||
|             val_str: str = saferepr(v) |             try: | ||||||
|  |                 val_str: str = saferepr(v) | ||||||
|  |             except Exception: | ||||||
|  |                 log.exception( | ||||||
|  |                     'Failed to `saferepr({type(struct)})` !?\n' | ||||||
|  |                 ) | ||||||
|  |             return _Struct.__repr__(struct) | ||||||
| 
 | 
 | ||||||
|         # TODO: LOLOL use `textwrap.indent()` instead dawwwwwg! |         # TODO: LOLOL use `textwrap.indent()` instead dawwwwwg! | ||||||
|         obj_str += (field_ws + f'{k}: {typ_name} = {val_str},\n') |         obj_str += (field_ws + f'{k}: {typ_name} = {val_str},\n') | ||||||
|  | @ -194,12 +203,20 @@ class Struct( | ||||||
|         return sin_props |         return sin_props | ||||||
| 
 | 
 | ||||||
|     pformat = pformat |     pformat = pformat | ||||||
|  |     # __repr__ = pformat | ||||||
|     # __str__ = __repr__ = pformat |     # __str__ = __repr__ = pformat | ||||||
|     # TODO: use a pprint.PrettyPrinter instance around ONLY rendering |     # TODO: use a pprint.PrettyPrinter instance around ONLY rendering | ||||||
|     # inside a known tty? |     # inside a known tty? | ||||||
|     # def __repr__(self) -> str: |     # def __repr__(self) -> str: | ||||||
|     #     ... |     #     ... | ||||||
|     __repr__ = pformat |     def __repr__(self) -> str: | ||||||
|  |         try: | ||||||
|  |             return pformat(self) | ||||||
|  |         except Exception: | ||||||
|  |             log.exception( | ||||||
|  |                 f'Failed to `pformat({type(self)})` !?\n' | ||||||
|  |             ) | ||||||
|  |             return _Struct.__repr__(self) | ||||||
| 
 | 
 | ||||||
|     def copy( |     def copy( | ||||||
|         self, |         self, | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue