import-bug-from-debian: add type hints

This commit is contained in:
Benjamin Drung 2024-11-02 15:34:59 +01:00
parent c205ee0381
commit c9339aeae4

View File

@ -29,6 +29,8 @@ import logging
import re import re
import sys import sys
import webbrowser import webbrowser
from collections.abc import Iterable
from email.message import EmailMessage
import debianbts import debianbts
from launchpadlib.launchpad import Launchpad from launchpadlib.launchpad import Launchpad
@ -40,7 +42,7 @@ Logger = getLogger()
ATTACHMENT_MAX_SIZE = 2000 ATTACHMENT_MAX_SIZE = 2000
def parse_args(): def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument( parser.add_argument(
"-b", "-b",
@ -73,7 +75,7 @@ def parse_args():
return parser.parse_args() return parser.parse_args()
def get_bug_numbers(bug_list): def get_bug_numbers(bug_list: Iterable[str]) -> list[int]:
bug_re = re.compile(r"bug=(\d+)") bug_re = re.compile(r"bug=(\d+)")
bug_nums = [] bug_nums = []
@ -92,7 +94,7 @@ def get_bug_numbers(bug_list):
return bug_nums return bug_nums
def walk_multipart_message(message): def walk_multipart_message(message: EmailMessage) -> tuple[str, list[tuple[int, EmailMessage]]]:
summary = "" summary = ""
attachments = [] attachments = []
i = 1 i = 1
@ -135,7 +137,13 @@ Faulty message part:
return summary, attachments return summary, attachments
def process_bugs(bugs, launchpad, package, dry_run=True, browserless=False): def process_bugs(
bugs: Iterable[debianbts.Bugreport],
launchpad: Launchpad,
package: str,
dry_run: bool = True,
browserless: bool = False,
) -> bool:
debian = launchpad.distributions["debian"] debian = launchpad.distributions["debian"]
ubuntu = launchpad.distributions["ubuntu"] ubuntu = launchpad.distributions["ubuntu"]
lp_debbugs = launchpad.bug_trackers.getByName(name="debbugs") lp_debbugs = launchpad.bug_trackers.getByName(name="debbugs")
@ -149,11 +157,12 @@ def process_bugs(bugs, launchpad, package, dry_run=True, browserless=False):
subject = bug.subject subject = bug.subject
log = debianbts.get_bug_log(bug_num) log = debianbts.get_bug_log(bug_num)
message = log[0]["message"] message = log[0]["message"]
attachments = [] assert isinstance(message, EmailMessage)
attachments: list[tuple[int, EmailMessage]] = []
if message.is_multipart(): if message.is_multipart():
summary, attachments = walk_multipart_message(message) summary, attachments = walk_multipart_message(message)
else: else:
summary = message.get_payload() summary = str(message.get_payload())
target = ubuntu.getSourcePackage(name=ubupackage) target = ubuntu.getSourcePackage(name=ubupackage)
if target is None: if target is None:
@ -217,7 +226,7 @@ def process_bugs(bugs, launchpad, package, dry_run=True, browserless=False):
return err return err
def main(): def main() -> None:
options = parse_args() options = parse_args()
config = UDTConfig(options.no_conf) config = UDTConfig(options.no_conf)