Coverage for target/native-coverage/profiles/8cb89e7529e5488ca16399c0daa3ee58/project/.venv/lib/python3.13/site-packages/rdflib_turbo/_namespaces.py: 100%
36 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-20 21:00 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-20 21:00 +0000
1"""Store-owned namespace metadata with constant-time lookup in both directions."""
3from rdflib import URIRef
6class NamespaceBindings:
7 def __init__(self, source=()):
8 if isinstance(source, NamespaceBindings):
9 self._namespaces = source._namespaces.copy()
10 self._prefixes = source._prefixes.copy()
11 else:
12 self._namespaces = dict(source)
13 self._prefixes = {
14 namespace: prefix for prefix, namespace in reversed(self._namespaces.items())
15 }
17 def namespace(self, prefix):
18 return self._namespaces.get(prefix)
20 def items(self):
21 return self._namespaces.items()
23 def prefix(self, namespace):
24 return self._prefixes.get(namespace)
26 def bind(self, prefix, namespace, override=True):
27 prefix, namespace = str(prefix), URIRef(namespace)
28 bound_namespace = self._namespaces.get(prefix)
29 bound_prefix = self._prefixes.get(namespace)
30 if bound_prefix is None:
31 bound_prefix = self._prefixes.get(bound_namespace)
32 if override:
33 if bound_prefix is not None:
34 del self._namespaces[bound_prefix]
35 if bound_namespace is not None:
36 del self._prefixes[bound_namespace]
37 self._prefixes[namespace] = prefix
38 self._namespaces[prefix] = namespace
39 else:
40 key = bound_namespace if bound_namespace is not None else namespace
41 value = bound_prefix if bound_prefix is not None else prefix
42 self._prefixes[key] = value
43 self._namespaces[value] = key
45 def copy(self):
46 return type(self)(self)
48 def replace(self, source):
49 self._namespaces = source._namespaces.copy()
50 self._prefixes = source._prefixes.copy()