(
self,
class_: _ExternalEntityType[_O],
key: str,
parententity: _InternalEntityType[_O],
comparator: interfaces.PropComparator[_T_co],
impl: Optional[_AttributeImpl] = None,
of_type: Optional[_InternalEntityType[Any]] = None,
extra_criteria: Tuple[ColumnElement[bool], ...] = (),
)
| 196 | __visit_name__ = "orm_instrumented_attribute" |
| 197 | |
| 198 | def __init__( |
| 199 | self, |
| 200 | class_: _ExternalEntityType[_O], |
| 201 | key: str, |
| 202 | parententity: _InternalEntityType[_O], |
| 203 | comparator: interfaces.PropComparator[_T_co], |
| 204 | impl: Optional[_AttributeImpl] = None, |
| 205 | of_type: Optional[_InternalEntityType[Any]] = None, |
| 206 | extra_criteria: Tuple[ColumnElement[bool], ...] = (), |
| 207 | ): |
| 208 | self.class_ = class_ |
| 209 | self.key = key |
| 210 | |
| 211 | self._parententity = self.parent = parententity |
| 212 | |
| 213 | # this attribute is non-None after mappers are set up, however in the |
| 214 | # interim class manager setup, there's a check for None to see if it |
| 215 | # needs to be populated, so we assign None here leaving the attribute |
| 216 | # in a temporarily not-type-correct state |
| 217 | self.impl = impl # type: ignore |
| 218 | |
| 219 | assert comparator is not None |
| 220 | self.comparator = comparator |
| 221 | self._of_type = of_type |
| 222 | self._extra_criteria = extra_criteria |
| 223 | self._doc = None |
| 224 | |
| 225 | manager = opt_manager_of_class(class_) |
| 226 | # manager is None in the case of AliasedClass |
| 227 | if manager: |
| 228 | # propagate existing event listeners from |
| 229 | # immediate superclass |
| 230 | for base in manager._bases: |
| 231 | if key in base: |
| 232 | self.dispatch._update(base[key].dispatch) |
| 233 | if base[key].dispatch._active_history: |
| 234 | self.dispatch._active_history = True # type: ignore |
| 235 | |
| 236 | _cache_key_traversal = [ |
| 237 | ("key", visitors.ExtendedInternalTraversal.dp_string), |
nothing calls this directly
no test coverage detected