From: Brian Masney <masneyb@kernel.org>
To: "Kernel.org Tools" <tools@kernel.org>
Cc: Konstantin Ryabitsev <konstantin@linuxfoundation.org>,
Jerome Brunet <jbrunet@baylibre.com>,
Brian Masney <masneyb@kernel.org>
Subject: [PATCH b4 1/3] review: centralize lookup of patchwork key in one place
Date: Thu, 15 Oct 2026 10:08:41 -0400 [thread overview]
Message-ID: <20261015-pw-key-command-v1-1-6daa9b8cee2a@kernel.org> (raw)
In-Reply-To: <20261015-pw-key-command-v1-0-6daa9b8cee2a@kernel.org>
Introduce get_pw_key() so that the patchwork key lookup is done in one
place. This is in preparation for adding a pw-key-command configuration
option.
Assisted-by: LLM
Signed-off-by: Brian Masney <masneyb@kernel.org>
---
src/b4/__init__.py | 14 ++++++++++++--
src/b4/review/_review.py | 4 ++--
src/b4/review_tui/_common.py | 2 +-
src/b4/review_tui/_entry.py | 2 +-
src/b4/review_tui/_tracking_app.py | 2 +-
5 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/src/b4/__init__.py b/src/b4/__init__.py
index eb04a2af55ee..16b7208f0b09 100644
--- a/src/b4/__init__.py
+++ b/src/b4/__init__.py
@@ -2504,7 +2504,7 @@ class LoreMessage:
@staticmethod
def get_patchwork_data_by_msgid(msgid: str) -> Dict[str, str]:
config = get_main_config()
- pwkey = str(config.get('pw-key', ''))
+ pwkey = get_pw_key(config)
pwurl = str(config.get('pw-url', ''))
pwproj = str(config.get('pw-project', ''))
if not (pwkey and pwurl and pwproj):
@@ -6402,6 +6402,16 @@ def get_smtp(
return SMTPConnector(_connect), fromaddr
+def get_pw_key(config: Optional[ConfigDictT] = None) -> str:
+ """Return the Patchwork API key from b4.pw-key.
+
+ Returns an empty string when no key is configured.
+ """
+ if config is None:
+ config = get_main_config()
+ return str(config.get('pw-key', '') or '')
+
+
def get_patchwork_session(pwkey: str, pwurl: str) -> Tuple[requests.Session, str]:
session = requests.session()
session.headers.update(
@@ -6418,7 +6428,7 @@ def get_patchwork_session(pwkey: str, pwurl: str) -> Tuple[requests.Session, str
def patchwork_set_state(msgids: List[str], state: str) -> None:
# Do we have a pw-key defined in config?
config = get_main_config()
- pwkey = str(config.get('pw-key', ''))
+ pwkey = get_pw_key(config)
pwurl = str(config.get('pw-url', ''))
pwproj = str(config.get('pw-project', ''))
if not (pwkey and pwurl and pwproj):
diff --git a/src/b4/review/_review.py b/src/b4/review/_review.py
index b69a7f094bc7..c5e4289ea930 100644
--- a/src/b4/review/_review.py
+++ b/src/b4/review/_review.py
@@ -4232,7 +4232,7 @@ def pw_update_series_state(
Patchwork is not configured), False on failure.
"""
config = b4.get_main_config()
- pwkey = str(config.get('pw-key', ''))
+ pwkey = b4.get_pw_key(config)
pwurl = str(config.get('pw-url', ''))
if not (pwkey and pwurl):
# Patchwork not configured, nothing to do
@@ -4270,7 +4270,7 @@ def pw_lookup_series_id(msgid: str) -> Optional[int]:
configured or does not know the message.
"""
config = b4.get_main_config()
- pwkey = str(config.get('pw-key', ''))
+ pwkey = b4.get_pw_key(config)
pwurl = str(config.get('pw-url', ''))
pwproj = str(config.get('pw-project', ''))
if not (pwkey and pwurl and pwproj):
diff --git a/src/b4/review_tui/_common.py b/src/b4/review_tui/_common.py
index 43db8c9358bf..205762956517 100644
--- a/src/b4/review_tui/_common.py
+++ b/src/b4/review_tui/_common.py
@@ -361,7 +361,7 @@ class CheckRunnerMixin:
# Patchwork config for _builtin_patchwork
config = b4.get_main_config()
- pwkey = str(config.get('pw-key', ''))
+ pwkey = b4.get_pw_key(config)
pwurl = str(config.get('pw-url', ''))
# Dump tracking data to a temp file for external scripts. This is
diff --git a/src/b4/review_tui/_entry.py b/src/b4/review_tui/_entry.py
index 700c5eae0e6a..275d6703949f 100644
--- a/src/b4/review_tui/_entry.py
+++ b/src/b4/review_tui/_entry.py
@@ -151,7 +151,7 @@ def run_tracking_tui(
if branch_name == TrackingApp.PATCHWORK_SENTINEL:
# User pressed [p]atchwork — run PwApp and loop back
config = b4.get_main_config()
- pwkey = str(config.get('pw-key', ''))
+ pwkey = b4.get_pw_key(config)
pwurl = str(config.get('pw-url', ''))
pwproj = str(config.get('pw-project', ''))
if pwkey and pwurl and pwproj:
diff --git a/src/b4/review_tui/_tracking_app.py b/src/b4/review_tui/_tracking_app.py
index 4ae826ee5b9e..75d652149e29 100644
--- a/src/b4/review_tui/_tracking_app.py
+++ b/src/b4/review_tui/_tracking_app.py
@@ -1159,7 +1159,7 @@ class TrackingApp(LoreNodeShutdownMixin, CheckRunnerMixin, App[Optional[str]]):
self._db_mtime: float = 0.0
# Detect patchwork configuration
config = b4.get_main_config()
- self._pwkey = str(config.get('pw-key', ''))
+ self._pwkey = b4.get_pw_key(config)
self._pwurl = str(config.get('pw-url', ''))
self._pwproj = str(config.get('pw-project', ''))
# Remember last snooze choices within the session
--
2.55.0
next prev parent reply other threads:[~2026-10-15 14:08 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-15 14:08 [PATCH b4 0/3] review: add support for b4.pw-key-command Brian Masney
2026-10-15 14:08 ` Brian Masney [this message]
2026-10-15 14:08 ` [PATCH b4 2/3] review: introduce " Brian Masney
2026-10-15 14:08 ` [PATCH b4 3/3] review: tests: add tests for get_pw_key() and b4.pw-key-command Brian Masney
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261015-pw-key-command-v1-1-6daa9b8cee2a@kernel.org \
--to=masneyb@kernel.org \
--cc=jbrunet@baylibre.com \
--cc=konstantin@linuxfoundation.org \
--cc=tools@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox