(
self,
registry: _RegistryType,
cls_: Type[_O],
dict_: _ClassDict,
table: Optional[FromClause],
mapper_kw: _MapperKwArgs,
)
| 504 | """ |
| 505 | |
| 506 | def __init__( |
| 507 | self, |
| 508 | registry: _RegistryType, |
| 509 | cls_: Type[_O], |
| 510 | dict_: _ClassDict, |
| 511 | table: Optional[FromClause], |
| 512 | mapper_kw: _MapperKwArgs, |
| 513 | ): |
| 514 | # grab class dict before the instrumentation manager has been added. |
| 515 | # reduces cycles |
| 516 | self.clsdict_view = ( |
| 517 | util.immutabledict(dict_) if dict_ else util.EMPTY_DICT |
| 518 | ) |
| 519 | super().__init__(registry, cls_, mapper_kw) |
| 520 | self.registry = registry |
| 521 | self.persist_selectable = None |
| 522 | |
| 523 | self.collected_attributes = {} |
| 524 | self.collected_annotations = {} |
| 525 | self.declared_columns = util.OrderedSet() |
| 526 | self.column_ordering = {} |
| 527 | self.column_copies = {} |
| 528 | self.single = False |
| 529 | self.dataclass_setup_arguments = dca = getattr( |
| 530 | self.cls, "_sa_apply_dc_transforms", None |
| 531 | ) |
| 532 | |
| 533 | self.allow_unmapped_annotations = getattr( |
| 534 | self.cls, "__allow_unmapped__", False |
| 535 | ) or bool(self.dataclass_setup_arguments) |
| 536 | |
| 537 | self.is_dataclass_prior_to_mapping = cld = dataclasses.is_dataclass( |
| 538 | cls_ |
| 539 | ) |
| 540 | |
| 541 | sdk = _get_immediate_cls_attr(cls_, "__sa_dataclass_metadata_key__") |
| 542 | |
| 543 | # we don't want to consume Field objects from a not-already-dataclass. |
| 544 | # the Field objects won't have their "name" or "type" populated, |
| 545 | # and while it seems like we could just set these on Field as we |
| 546 | # read them, Field is documented as "user read only" and we need to |
| 547 | # stay far away from any off-label use of dataclasses APIs. |
| 548 | if (not cld or dca) and sdk: |
| 549 | raise exc.InvalidRequestError( |
| 550 | "SQLAlchemy mapped dataclasses can't consume mapping " |
| 551 | "information from dataclass.Field() objects if the immediate " |
| 552 | "class is not already a dataclass." |
| 553 | ) |
| 554 | |
| 555 | # if already a dataclass, and __sa_dataclass_metadata_key__ present, |
| 556 | # then also look inside of dataclass.Field() objects yielded by |
| 557 | # dataclasses.get_fields(cls) when scanning for attributes |
| 558 | self.allow_dataclass_fields = bool(sdk and cld) |
| 559 | |
| 560 | self._setup_declared_events() |
| 561 | |
| 562 | self._scan_attributes() |
| 563 |
nothing calls this directly
no test coverage detected