diff options
Diffstat (limited to 'src/hydrilla/proxy/state_impl/base.py')
-rw-r--r-- | src/hydrilla/proxy/state_impl/base.py | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/hydrilla/proxy/state_impl/base.py b/src/hydrilla/proxy/state_impl/base.py index a889e71..e5a9898 100644 --- a/src/hydrilla/proxy/state_impl/base.py +++ b/src/hydrilla/proxy/state_impl/base.py @@ -49,6 +49,25 @@ from .. import state as st from .. import policies +@contextmanager +def temporary_ids_table( + cursor: sqlite3.Cursor, + ids: t.Iterable[int], + table_name: str = '__helper_ids' +) -> t.Iterator[None]: + cursor.execute( + f'CREATE TEMPORARY TABLE "{table_name}"(id INTEGER PRIMARY KEY);' + ) + + try: + for id in ids: + cursor.execute(f'INSERT INTO "{table_name}" VALUES(?);', (id,)) + + yield + finally: + cursor.execute(f'DROP TABLE "{table_name}";') + + @dc.dataclass(frozen=True) class PolicyTree(pattern_tree.PatternTree[policies.PolicyFactory]): SelfType = t.TypeVar('SelfType', bound='PolicyTree') @@ -105,6 +124,7 @@ def mark_failed_file_installs( (file_sha256, repo_id) ) +NoLockArg = t.Union[t.Sequence[int], t.Literal['all_mappings_unlocked']] PayloadsData = t.Mapping[st.PayloadRef, st.PayloadData] @@ -200,12 +220,14 @@ class HaketiloStateWithFields(st.HaketiloState): ... @abstractmethod + def prune_orphans(self) -> None: + ... + + @abstractmethod def recompute_dependencies( self, - requirements: t.Iterable[sds.MappingRequirement] = [], - prune_orphans: bool = False + unlocked_required_mappings: NoLockArg = [] ) -> None: - """....""" ... @abstractmethod |