This is an automated email from the ASF dual-hosted git repository.

sbp pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-release.git


The following commit(s) were added to refs/heads/main by this push:
     new 4db54ec  Use the storage interface in the KEYS import task
4db54ec is described below

commit 4db54ecf276ad32ac6ea618e69ebb10bcc527dbb
Author: Sean B. Palmer <[email protected]>
AuthorDate: Tue Jul 22 19:21:20 2025 +0100

    Use the storage interface in the KEYS import task
---
 atr/storage/types.py        | 12 ++++++++++--
 atr/storage/writers/keys.py |  4 ++--
 atr/tasks/__init__.py       |  7 ++++---
 atr/tasks/keys.py           | 39 +++++++++++----------------------------
 4 files changed, 27 insertions(+), 35 deletions(-)

diff --git a/atr/storage/types.py b/atr/storage/types.py
index 096d48e..83f78d3 100644
--- a/atr/storage/types.py
+++ b/atr/storage/types.py
@@ -132,11 +132,19 @@ class Outcomes[T, E: Exception = Exception]:
         self.__outcomes = list(outcomes)
 
     @property
-    def any_ok(self) -> bool:
+    def any_exception(self) -> bool:
+        return any((not outcome.ok) for outcome in self.__outcomes)
+
+    @property
+    def any_result(self) -> bool:
         return any(outcome.ok for outcome in self.__outcomes)
 
     @property
-    def all_ok(self) -> bool:
+    def all_exceptions(self) -> bool:
+        return all((not outcome.ok) for outcome in self.__outcomes)
+
+    @property
+    def all_results(self) -> bool:
         return all(outcome.ok for outcome in self.__outcomes)
 
     def append(self, outcome: Outcome[T, E]) -> None:
diff --git a/atr/storage/writers/keys.py b/atr/storage/writers/keys.py
index 7cd088e..a8ae3df 100644
--- a/atr/storage/writers/keys.py
+++ b/atr/storage/writers/keys.py
@@ -445,14 +445,14 @@ class CommitteeMember(CommitteeParticipant):
     @performance_async
     async def ensure_associated(self, keys_file_text: str) -> 
types.Outcomes[types.Key]:
         outcomes: types.Outcomes[types.Key] = await 
self.__ensure(keys_file_text, associate=True)
-        if outcomes.any_ok:
+        if outcomes.any_result:
             await self.autogenerate_keys_file()
         return outcomes
 
     @performance_async
     async def ensure_stored(self, keys_file_text: str) -> 
types.Outcomes[types.Key]:
         outcomes: types.Outcomes[types.Key] = await 
self.__ensure(keys_file_text, associate=False)
-        if outcomes.any_ok:
+        if outcomes.any_result:
             await self.autogenerate_keys_file()
         return outcomes
 
diff --git a/atr/tasks/__init__.py b/atr/tasks/__init__.py
index 4efaa3c..bf4fe38 100644
--- a/atr/tasks/__init__.py
+++ b/atr/tasks/__init__.py
@@ -94,7 +94,7 @@ async def draft_checks(
 
 
 async def keys_import_file(
-    release_name: str, revision_number: str, abs_keys_path: str, caller_data: 
db.Session | None = None
+    asf_uid: str, project_name: str, version_name: str, revision_number: str, 
caller_data: db.Session | None = None
 ) -> None:
     """Import a KEYS file from a draft release candidate revision."""
     async with db.ensure_session(caller_data) as data:
@@ -103,8 +103,9 @@ async def keys_import_file(
                 status=sql.TaskStatus.QUEUED,
                 task_type=sql.TaskType.KEYS_IMPORT_FILE,
                 task_args=keys.ImportFile(
-                    release_name=release_name,
-                    abs_keys_path=abs_keys_path,
+                    asf_uid=asf_uid,
+                    project_name=project_name,
+                    version_name=version_name,
                 ).model_dump(),
                 revision_number=revision_number,
                 primary_rel_path=None,
diff --git a/atr/tasks/keys.py b/atr/tasks/keys.py
index 3bd8c55..6fe5671 100644
--- a/atr/tasks/keys.py
+++ b/atr/tasks/keys.py
@@ -15,45 +15,28 @@
 # specific language governing permissions and limitations
 # under the License.
 
-import logging
-from typing import Final
-
-import aiofiles
-
-import atr.db as db
-import atr.db.interaction as interaction
 import atr.models.results as results
 import atr.models.schema as schema
-import atr.models.sql as sql
+import atr.storage as storage
 import atr.tasks.checks as checks
-import atr.util as util
-
-_LOGGER: Final = logging.getLogger(__name__)
 
 
 class ImportFile(schema.Strict):
     """Import a KEYS file from a draft release candidate revision."""
 
-    release_name: str
-    abs_keys_path: str
+    asf_uid: str
+    project_name: str
+    version_name: str
 
 
 @checks.with_model(ImportFile)
 async def import_file(args: ImportFile) -> results.Results | None:
     """Import a KEYS file from a draft release candidate revision."""
-    async with db.session() as data:
-        release = await data.release(name=args.release_name).demand(
-            RuntimeError(f"Release {args.release_name} not found")
-        )
-        if release.phase != sql.ReleasePhase.RELEASE_CANDIDATE_DRAFT:
-            raise RuntimeError(f"Release {args.release_name} is not in the 
DRAFT phase")
-
-    async with aiofiles.open(args.abs_keys_path, "rb") as keys_file:
-        keys_text = await keys_file.read()
-    key_blocks = util.parse_key_blocks(keys_text.decode("utf-8"))
-    if release.committee is None:
-        raise RuntimeError(f"Release {args.release_name} has no committee")
-    for key_block in key_blocks:
-        added_keys = await interaction.key_user_add(None, key_block, 
[release.committee.name])
-        _LOGGER.info(f"Added key block to user: {added_keys}")
+    async with storage.write(args.asf_uid) as write:
+        access_outcome = await 
write.as_project_committee_member(args.project_name)
+        wacm = access_outcome.result_or_raise()
+        outcomes = await wacm.keys.import_keys_file(args.project_name, 
args.version_name)
+        if outcomes.any_exception:
+            # TODO: Log this? This code is unused anyway
+            pass
     return None


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to