diff options
author | Wojtek Kosior <koszko@koszko.org> | 2022-08-25 16:37:53 +0200 |
---|---|---|
committer | Wojtek Kosior <koszko@koszko.org> | 2022-09-28 12:54:54 +0200 |
commit | 367ea85057368047a50ae98a3510e0113eadd744 (patch) | |
tree | 5aecfd3a2e44377e9d331ca77346666ca193006c /src/hydrilla/proxy/state_impl/base.py | |
parent | c1f6a379b3a85303f487e1b366e96d9db90cd4e3 (diff) | |
download | haketilo-hydrilla-367ea85057368047a50ae98a3510e0113eadd744.tar.gz haketilo-hydrilla-367ea85057368047a50ae98a3510e0113eadd744.zip |
[proxy] make it possible to uninstall a package
This commit also brings some more refactoring under state_impl/.
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 |