#!/usr/bin/python3

from __future__ import print_function
import sys, os, re, time
from importlib.machinery import SourceFileLoader

class config_class(dict):
  # defaults:
  logfile = "/var/log/dnf-autoupdate.log"
  basic_args = ["update", "-y", "--setopt=install_weak_deps=False"]
  args = []
  disabled = False
  report_url = '' # disabled

  def __init__(self, fn='/etc/yum/autoupdate.conf'):
      try:
        exec(open(fn, "rt").read(), self)
      except IOError:
        print("Unable to read configuration file: %s. Using defaults." % fn)
  def __getattr__(self, attr):
      return self[attr]
config = config_class(*sys.argv[1:])

# exit if service disabled
if config.disabled:
  sys.exit()

# redirect stdout and stderr to logfile
try:
  oldumask = os.umask(7)
  logfile = open(config.logfile, "a")
  os.umask(oldumask)
  os.dup2(logfile.fileno(), 1) # stdout
  os.dup2(logfile.fileno(), 2) # stderr
except IOError as err:
  logfile = sys.stdout
  logfile.write("Error opening logfile %s\n" % err.args)

logfile.write(time.strftime("----- %c -----\n"))
logfile.flush()

from dnf.cli import main
#sys.argv.extend(config.basic_args + config.args) # yum-3.2 fix
main.user_main(config.basic_args + config.args)

if config.report_url:
  # try to report system release and running kernel version
  system_release = open('/etc/system-release').read()
  dr = re.compile('^(.*) release ([0-9.]+) .*$').search(system_release)
  distribution, release = dr.groups()
  uname_r = os.popen("/bin/uname -r").read().strip()
  url = "%s?distrib=%s&release=%s&kernel=%s" % (
    config.report_url,
    distribution.replace(" ", "+"),
    release,
    uname_r
  )
  import urllib2
  try:
    urllib2.urlopen(url).read()
  except urllib2.HTTPError as err:
    logfile.write("Report URL problem: %s\n" % err.args)
    logfile.write("URL: %s\n" % url)
