55from copy import deepcopy
66from hashlib import sha256
77from pathlib import Path
8+ from contextlib import contextmanager
89from importlib .machinery import SourceFileLoader
910from pkgutil import iter_modules
1011from typing import (
1617 TypeVar ,
1718 Tuple ,
1819 NamedTuple ,
20+ Iterator ,
1921)
2022
2123from jsonschema import validate as validate_schema
@@ -40,16 +42,18 @@ def __init__(self, path: Path) -> None:
4042 for name , entry in self .data ["entries" ].items ()
4143 }
4244
43- def get_entry (self , source_name : str ) -> ConfigEntry :
44- return self .data ["entries" ][source_name ]
45-
46- def get_entry_info (self , source_name : str ) -> "ConfigEntryInfo" :
47- return self ._entry_info [source_name ]
48-
4945 def clear_entries (self ) -> None :
5046 self .data ["entries" ].clear ()
5147 self ._entry_info .clear ()
5248
49+ @contextmanager
50+ def change_entry (self , source_name : str ) -> Iterator [ConfigEntry ]:
51+ entry = self .data ["entries" ].setdefault (
52+ source_name , {"source_name" : source_name }
53+ )
54+ yield entry
55+ self .update_entries ([entry ])
56+
5357 def update_entries (self , config_entries : Iterable [Dict [str , Any ]]) -> None :
5458 # a useful debug assertion - the error which would result otherwise is confusing
5559 assert not isinstance (config_entries , dict ), "expected list, not a dict"
@@ -68,11 +72,10 @@ def has_entry(self, source_name: str) -> bool:
6872
6973 def entry_has_dependency (self , source_name : str , dependency : str ) -> bool :
7074 name , _ = split_package_name_and_version (dependency )
71- entry_info = self .get_entry_info (source_name )
72- return (
73- name in entry_info .js_dependency_aliases
74- or name == entry_info .js_package_def .name
75- )
75+ if source_name not in self ._entry_info :
76+ return False
77+ else :
78+ return name in self ._entry_info [source_name ].js_dependency_aliases
7679
7780 def resolve_js_dependency_name (
7881 self ,
0 commit comments