(
cls, data_type: PythonType | GithubClass | None, short_class_name: bool = False
)
| 411 | |
| 412 | @classmethod |
| 413 | def create_type( |
| 414 | cls, data_type: PythonType | GithubClass | None, short_class_name: bool = False |
| 415 | ) -> cst.BaseExpression: |
| 416 | if data_type is None: |
| 417 | return cst.Name("None") |
| 418 | if isinstance(data_type, GithubClass): |
| 419 | if short_class_name: |
| 420 | return cst.Name(data_type.name.split(".")[-1]) |
| 421 | return cls.create_attribute([data_type.package, data_type.module] + data_type.name.split(".")) |
| 422 | if data_type.type == "union": |
| 423 | if len(data_type.inner_types) == 0: |
| 424 | return cst.Name("None") |
| 425 | if len(data_type.inner_types) == 1: |
| 426 | return cls.create_type(data_type.inner_types[0], short_class_name) |
| 427 | result = cst.BinaryOperation( |
| 428 | cls.create_type(data_type.inner_types[0], short_class_name), |
| 429 | cst.BitOr(), |
| 430 | cls.create_type(data_type.inner_types[1], short_class_name), |
| 431 | ) |
| 432 | for dt in data_type.inner_types[2:]: |
| 433 | result = cst.BinaryOperation(result, cst.BitOr(), cls.create_type(dt, short_class_name)) |
| 434 | return result |
| 435 | if data_type.inner_types: |
| 436 | elems = [ |
| 437 | cst.SubscriptElement(cst.Index(cls.create_type(elem, short_class_name))) |
| 438 | for elem in data_type.inner_types |
| 439 | ] |
| 440 | return cst.Subscript(cst.Name(data_type.type), slice=elems) |
| 441 | return cst.Name(data_type.type) |
| 442 | |
| 443 | @classmethod |
| 444 | def find_nodes(cls, node: cst.CSTNode, node_type: type[cst.CSTNode]) -> list[cst.CSTNode]: |
no test coverage detected