aboutsummaryrefslogtreecommitdiff
path: root/src/hydrilla/proxy/state_impl/base.py
diff options
context:
space:
mode:
authorWojtek Kosior <koszko@koszko.org>2022-08-25 16:37:53 +0200
committerWojtek Kosior <koszko@koszko.org>2022-09-28 12:54:54 +0200
commit367ea85057368047a50ae98a3510e0113eadd744 (patch)
tree5aecfd3a2e44377e9d331ca77346666ca193006c /src/hydrilla/proxy/state_impl/base.py
parentc1f6a379b3a85303f487e1b366e96d9db90cd4e3 (diff)
downloadhaketilo-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.py28
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