]> kaliko git repositories - sid.git/blob - sid/archive.py
6875f1bad430717e1adbadc23630e12eb90bfaf7
[sid.git] / sid / archive.py
1 # -*- coding: utf-8 -*-
2 # SPDX-FileCopyrightText: 2020 kaliko <kaliko@azylum.org>
3 # SPDX-License-Identifier: GPL-3.0-or-later
4
5 from re import compile as re_compile
6
7 from .plugin import Plugin, botcmd
8 from .lib import get_pkg
9
10
11 class Archive(Plugin):
12     """Fetches package info from the archive
13     """
14     #: Current stable Suite
15     stable_codename = 'buster'
16     #: Pakage name regexp
17     re_pkg = re_compile(r'(?P<package>[0-9a-z.+-]+)$')
18
19     def __init__(self, bot):
20         Plugin.__init__(self, bot)
21
22     @botcmd
23     def archive(self, rcv, args):
24         """Fetches package info from the archive
25
26         ``!archive pkg-name`` : Returns package versions (by suite)"""
27         if not args:
28             return
29         if len(args) > 1:
30             self.log.info('more than one packages provided')
31         pkg = Archive.re_pkg.match(args[0])
32         if not pkg:
33             msg = 'Wrong package name format re: "{}"'.format(
34                 Archive.re_pkg.pattern)
35             self.reply(rcv, msg)
36             return
37         pkg_name = pkg.groupdict('package').get('package')
38         info = get_pkg(pkg_name)
39         if not info:
40             self.reply(rcv, 'pakage not found')
41             return
42         messages = []
43         suites_av = set(info.keys() & {'stable', 'testing', 'unstable',
44                                        f'{Archive.stable_codename}-backports'})
45         for suite in sorted(suites_av):
46             cpnt = '/'.join({v['component'] for v in info[suite].values()})
47             versions = '/'.join(info[suite].keys())
48             messages.append(f'{suite:16}: {versions} {cpnt}')
49         msg = '\n'.join(messages)
50         self.reply(rcv, msg)