File: nvchecker-notify

package info (click to toggle)
python-nvchecker 2.16-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 736 kB
  • sloc: python: 4,801; makefile: 25
file content (73 lines) | stat: -rwxr-xr-x 2,045 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/usr/bin/env python3
# MIT licensed
# Copyright (c) 2020,2022 lilydjwg <lilydjwg@gmail.com>, et al.

'''
A simple wrapper to show desktop notifications while running nvchecker.
'''

import os
import subprocess
import json

import gi
try:
  gi.require_version('Notify', '0.8')
except ValueError:
  gi.require_version('Notify', '0.7')
from gi.repository import Notify

def get_args():
  import argparse
  parser = argparse.ArgumentParser(description='show desktop notifications while running nvchecker')
  parser.add_argument('-c', '--file',
                      metavar='FILE', type=str,
                      help='software version configuration file if not default')
  parser.add_argument('-k', '--keyfile',
                      metavar='FILE', type=str,
                      help='use specified keyfile (override the one in configuration file)')
  parser.add_argument('-t', '--tries', default=1, type=int, metavar='N',
                      help='try N times when network errors occur')
  parser.add_argument('--failures', action='store_true',
                      help='exit with code 3 if failures / errors happen during checking')

  return parser.parse_args()

def main():
  args = get_args()

  Notify.init('nvchecker')
  notif = Notify.Notification()
  updates = []

  rfd, wfd = os.pipe()
  cmd = [
    'nvchecker', '--logger', 'both', '--json-log-fd', str(wfd),
  ]
  if args.file:
    cmd.extend(['-c', args.file])
  if args.keyfile:
    cmd.extend(['-k', args.keyfile])
  if args.tries:
    cmd.extend(['-t', str(args.tries)])
  if args.failures:
    cmd.append('--failures')

  process = subprocess.Popen(cmd, pass_fds=(wfd,))
  os.close(wfd)

  output = os.fdopen(rfd)
  for l in output:
    j = json.loads(l)
    event = j['event']
    if event == 'updated':
      updates.append('%(name)s updated to version %(version)s' % j)
      notif.update('nvchecker', '\n'.join(updates))
      notif.show()

  ret = process.wait()
  if ret != 0:
    raise subprocess.CalledProcessError(ret, cmd)

if __name__ == '__main__':
  main()