tbegin logging refactoring - amprolla - devuan's apt repo merger
 (HTM) git clone git://parazyd.org/amprolla.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit ae0f2f3219c8d65dbf826b49845ed37534fd1443
 (DIR) parent 7392a2b7ee956e00927c2cba424d86edaa912a08
 (HTM) Author: parazyd <parazyd@dyne.org>
       Date:   Wed, 28 Jun 2017 10:21:18 +0200
       
       begin logging refactoring
       
       Diffstat:
         M amprolla_update.py                  |      19 ++++++++++---------
         M lib/log.py                          |      54 +++++++++++++++++++++----------
         M lib/net.py                          |      13 +++++++------
       
       3 files changed, 54 insertions(+), 32 deletions(-)
       ---
 (DIR) diff --git a/amprolla_update.py b/amprolla_update.py
       t@@ -12,6 +12,7 @@ import requests
        
        from amprolla_merge import gen_release, merge, prepare_merge_dict
        from lib.config import aliases, cpunm, repos, repo_order, spooldir
       +from lib.log import info
        from lib.parse import compare_dict, get_date, get_time, parse_release
        from lib.net import download
        
       t@@ -23,11 +24,11 @@ def remote_is_newer(remote, local):
            rem_date = get_date(remote)
            loc_date = get_date(local)
        
       -    print('Remote date: %s' % rem_date)
       -    print('Local  date: %s' % loc_date)
       +    # print('Remote date: %s' % rem_date)
       +    # print('Local  date: %s' % loc_date)
        
            if get_time(rem_date) > get_time(loc_date):
       -        print('Remote Release is newer!')
       +        info('Remote Release is newer!')
                return True
        
            return False
       t@@ -37,8 +38,8 @@ def perform_update(suite, paths):
            """
            Performs an incremental update and merge of a given suite
            """
       -    print('Checking for updates in %s' % suite)
       -    print(paths)
       +    info('Checking for updates in %s' % suite)
       +    # print(paths)
        
            needsmerge = {}
            needsmerge['downloads'] = []  # all files that have to be downloaded
       t@@ -49,7 +50,7 @@ def perform_update(suite, paths):
                needsmerge[i]['mergelist'] = []
        
                if paths[c]:
       -            print('Working on %s repo' % i)
       +            info('Working on %s repo' % i)
                    remote_path = paths[c].replace(spooldir, repos[i]['host'])
                    remote_rel = requests.get(join(remote_path, 'Release'))
        
       t@@ -76,7 +77,7 @@ def perform_update(suite, paths):
        
            # download what needs to be downloaded
            if needsmerge['downloads']:
       -        print('Downloading updates...')
       +        info('Downloading updates...')
                dlpool = Pool(cpunm)
                dlpool.map(download, needsmerge['downloads'])
        
       t@@ -111,13 +112,13 @@ def perform_update(suite, paths):
        
            # perform the actual merge
            if merge_list:
       -        print('Merging files...')
       +        info('Merging files...')
                mrgpool = Pool(cpunm)
                mrgpool.map(merge, merge_list)
        
            # generate Release files if we got any new files
            if needsmerge['downloads']:
       -        print('Generating Release...')
       +        info('Generating Release...')
                gen_release(suite)
        
        
 (DIR) diff --git a/lib/log.py b/lib/log.py
       t@@ -4,33 +4,53 @@
        Logging functions
        """
        
       -# TODO: Replace with logging
       -
       -import os
       +from time import time
       +from os import makedirs, remove
       +from os.path import join
        import sys
        
       +from lib.config import logdir
        
       -def die(msg):
       -    print("\033[1;31m[E] %s\033[0m" % msg)
       -    sys.exit(1)
        
       +def die(msg, tofile=True):
       +    """
       +    Log error and exit with exitcode 1
       +    """
       +    msg = "%d [ERR] %s\n" % (int(time()), msg)
       +    print(msg)
       +    if tofile:
       +        logtofile('amprolla.txt', msg)
       +    sys.exit(1)
        
       -def notice(msg):
       -    print("\033[1;32m(*) %s\033[0m" % msg)
       -    return
        
       +def warn(msg, tofile=True):
       +    """
       +    Log warning and continue
       +    """
       +    msg = "%d [WARN] %s\n" % (int(time()), msg)
       +    print(msg)
       +    if tofile:
       +        logtofile('amprolla.txt', msg)
        
       -def warn(msg):
       -    print("\033[1;33m[W] %s\033[0m" % msg)
       -    return
        
       +def info(msg, tofile=True):
       +    """
       +    Log informational message and continue
       +    """
       +    msg = "%d [INFO] %s\n" % (int(time()), msg)
       +    print(msg)
       +    if tofile:
       +        logtofile('amprolla.txt', msg)
        
       -def cleanexit():
       -    notice("exiting cleanly...")
       -    sys.exit(0)
        
        def logtofile(filename, text, redo=False):
       -    os.makedirs(os.path.dirname(filename), exist_ok=True)
       -    lf = open(filename, 'a')
       +    """
       +    Log given text to a given file.
       +    If redo is True, rewrites the file
       +    """
       +    makedirs(logdir, exist_ok=True)
       +    if redo:
       +        remove(join(logdir, filename))
       +    lf = open(join(logdir, filename), 'a')
            lf.write(text)
            lf.close()
 (DIR) diff --git a/lib/net.py b/lib/net.py
       t@@ -4,10 +4,11 @@
        Network functions/helpers
        """
        
       -import os
       +from os import makedirs
       +from os.path import dirname
        import requests
        
       -from .log import die, warn
       +from lib.log import die, info, warn
        
        
        def download(uris):
       t@@ -16,17 +17,17 @@ def download(uris):
            """
            url = uris[0]
            path = uris[1]
       -    print("downloading: %s\nto: %s" % (url, path))
       +    info("dl: %s" % url)
        
            r = requests.get(url, stream=True)
        
            if r.status_code == 404:
       -        warn("download of %s failed: not found!" % url)
       +        warn("failed: 404 not found!")
                return
            elif r.status_code != 200:
       -        die("download of %s failed" % url)
       +        die("failed: %d" % r.status_code)
        
       -    os.makedirs(os.path.dirname(path), exist_ok=True)
       +    makedirs(dirname(path), exist_ok=True)
            f = open(path, 'wb')
            # chunk_size {sh,c}ould be more on gbit servers
            for chunk in r.iter_content(chunk_size=1024):