MCPcopy Create free account
hub / github.com/sqlalchemy/sqlalchemy / _ModuleMarker

Class _ModuleMarker

lib/sqlalchemy/orm/clsregistry.py:258–327  ·  view source on GitHub ↗

Refers to a module name within _decl_class_registry.

Source from the content-addressed store, hash-verified

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