Get a string representation of the default value of a node. Returns a 2-tuple of the default and whether or not it is valid.
(self, rvalue: Expression)
| 1421 | return expr |
| 1422 | |
| 1423 | def get_str_default_of_node(self, rvalue: Expression) -> tuple[str, bool]: |
| 1424 | """Get a string representation of the default value of a node. |
| 1425 | |
| 1426 | Returns a 2-tuple of the default and whether or not it is valid. |
| 1427 | """ |
| 1428 | if isinstance(rvalue, NameExpr): |
| 1429 | if rvalue.name in ("None", "True", "False"): |
| 1430 | return rvalue.name, True |
| 1431 | elif isinstance(rvalue, (IntExpr, FloatExpr)): |
| 1432 | return f"{rvalue.value}", True |
| 1433 | elif isinstance(rvalue, UnaryExpr): |
| 1434 | if isinstance(rvalue.expr, (IntExpr, FloatExpr)): |
| 1435 | return f"{rvalue.op}{rvalue.expr.value}", True |
| 1436 | elif isinstance(rvalue, StrExpr): |
| 1437 | return repr(rvalue.value), True |
| 1438 | elif isinstance(rvalue, BytesExpr): |
| 1439 | return "b" + repr(rvalue.value).replace("\\\\", "\\"), True |
| 1440 | elif isinstance(rvalue, TupleExpr): |
| 1441 | items_defaults = [] |
| 1442 | for e in rvalue.items: |
| 1443 | e_default, valid = self.get_str_default_of_node(e) |
| 1444 | if not valid: |
| 1445 | break |
| 1446 | items_defaults.append(e_default) |
| 1447 | else: |
| 1448 | closing = ",)" if len(items_defaults) == 1 else ")" |
| 1449 | default = "(" + ", ".join(items_defaults) + closing |
| 1450 | return default, True |
| 1451 | elif isinstance(rvalue, ListExpr): |
| 1452 | items_defaults = [] |
| 1453 | for e in rvalue.items: |
| 1454 | e_default, valid = self.get_str_default_of_node(e) |
| 1455 | if not valid: |
| 1456 | break |
| 1457 | items_defaults.append(e_default) |
| 1458 | else: |
| 1459 | default = "[" + ", ".join(items_defaults) + "]" |
| 1460 | return default, True |
| 1461 | elif isinstance(rvalue, SetExpr): |
| 1462 | items_defaults = [] |
| 1463 | for e in rvalue.items: |
| 1464 | e_default, valid = self.get_str_default_of_node(e) |
| 1465 | if not valid: |
| 1466 | break |
| 1467 | items_defaults.append(e_default) |
| 1468 | else: |
| 1469 | if items_defaults: |
| 1470 | default = "{" + ", ".join(items_defaults) + "}" |
| 1471 | return default, True |
| 1472 | elif isinstance(rvalue, DictExpr): |
| 1473 | items_defaults = [] |
| 1474 | for k, v in rvalue.items: |
| 1475 | if k is None: |
| 1476 | break |
| 1477 | k_default, k_valid = self.get_str_default_of_node(k) |
| 1478 | v_default, v_valid = self.get_str_default_of_node(v) |
| 1479 | if not (k_valid and v_valid): |
| 1480 | break |