MCPcopy
hub / github.com/sqlalchemy/sqlalchemy / _ModuleMarker

Class _ModuleMarker

lib/sqlalchemy/orm/clsregistry.py:259–328  ·  view source on GitHub ↗

Refers to a module name within _decl_class_registry.

Source from the content-addressed store, hash-verified

257
258
259class _ModuleMarker(_ClsRegistryToken):
260 """Refers to a module name within
261 _decl_class_registry.
262
263 """
264
265 __slots__ = "parent", "name", "contents", "mod_ns", "path", "__weakref__"
266
267 parent: Optional[_ModuleMarker]
268 contents: Dict[str, Union[_ModuleMarker, _MultipleClassMarker]]
269 mod_ns: _ModNS
270 path: List[str]
271
272 def __init__(self, name: str, parent: Optional[_ModuleMarker]):
273 self.parent = parent
274 self.name = name
275 self.contents = {}
276 self.mod_ns = _ModNS(self)
277 if self.parent:
278 self.path = self.parent.path + [self.name]
279 else:
280 self.path = []
281 _registries.add(self)
282
283 def __contains__(self, name: str) -> bool:
284 return name in self.contents
285
286 def __getitem__(self, name: str) -> _ClsRegistryToken:
287 return self.contents[name]
288
289 def _remove_item(self, name: str) -> None:
290 self.contents.pop(name, None)
291 if not self.contents:
292 if self.parent is not None:
293 self.parent._remove_item(self.name)
294 _registries.discard(self)
295
296 def resolve_attr(self, key: str) -> Union[_ModNS, Type[Any]]:
297 return self.mod_ns.__getattr__(key)
298
299 def get_module(self, name: str) -> _ModuleMarker:
300 if name not in self.contents:
301 marker = _ModuleMarker(name, self)
302 self.contents[name] = marker
303 else:
304 marker = cast(_ModuleMarker, self.contents[name])
305 return marker
306
307 def add_class(self, name: str, cls: Type[Any]) -> None:
308 if name in self.contents:
309 existing = cast(_MultipleClassMarker, self.contents[name])
310 try:
311 existing.add_item(cls)
312 except AttributeError as ae:
313 if not isinstance(existing, _MultipleClassMarker):
314 raise exc.InvalidRequestError(
315 f'name "{name}" matches both a '
316 "class name and a module name"

Callers 2

_add_classFunction · 0.85
get_moduleMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected