#!/usr/bin/python2

import sys, os, re, time, imp
#import yum
#from ConfigParser import SafeConfigParser
if sys.version_info[0]>2:
  from urllib.request import urlopen, URLError
else:
  from urllib2 import urlopen, URLError

class config_class:
  class defaults:
        logfile = "/var/log/yum-autoupdate.log"
        basic_args = ["update", "-y", "-q", "--skip-broken"]
        args = []
        disabled = False
        report_url = '' # disabled

  def __init__(self, fn='/etc/yum/autoupdate.conf'):
      try:
        self.config = imp.load_source('config', '/dev/null', open(fn, 'rt'))
      except IOError:
        print("Unable to read configuration file: %s. Using defaults." % fn)
        self.config = None
  def __getattr__(self, attr):
      if hasattr(self.config, attr):
        return getattr(self.config, attr)
      return getattr(self.defaults, 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(0007)
  logfile = open(config.logfile, "a", 0)
  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)

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

sys.path.insert(0, '/usr/share/yum-cli')
import yummain
sys.argv.extend(config.basic_args + config.args) # yum-3.2 fix
yummain.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
  )
  try:
    urlopen(url).read()
  except HTTPError as err:
    logfile.write("Report URL problem: %s\n" % err)
    logfile.write("URL: %s\n" % url)
