aboutsummaryrefslogtreecommitdiff
path: root/src/hydrilla/proxy/state_impl/base.py
diff options
context:
space:
mode:
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