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

1"""Store-owned namespace metadata with constant-time lookup in both directions.""" 

2 

3from rdflib import URIRef 

4 

5 

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 } 

16 

17 def namespace(self, prefix): 

18 return self._namespaces.get(prefix) 

19 

20 def items(self): 

21 return self._namespaces.items() 

22 

23 def prefix(self, namespace): 

24 return self._prefixes.get(namespace) 

25 

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 

44 

45 def copy(self): 

46 return type(self)(self) 

47 

48 def replace(self, source): 

49 self._namespaces = source._namespaces.copy() 

50 self._prefixes = source._prefixes.copy()