Source code for functions

import requests
import os
import zipfile
import logging
import sys
from datetime import date

[docs]def download(url: "url",destination: "path",if_exists='exit',proxies=None) -> bool: """ Downloads a file from the internet. :param url: The file location on the internet :type url: url (string) :param destination: Where to put the file :type destination: path :param if_exists: What to do if the destination file already exists ? If ``if_exists='exit'``, then the process is aborted before the download even starts. If ``if_exists='replace'``, then the destination file is replaced by the download. :type if_exists: {'exit','replace'}, default='exit' :return: True if the operation succeeded; False otherwise. :rtype: bool """ if os.path.exists(destination) and if_exists=='exit': logging.warning(f'Request aborted: {destination} already exists.') return False try: with open(destination, 'w') as f: pass # Check whether we can open the file with write access except IOError as e: logging.error(f'Impossible to create {destination}') return False logging.info(f'Download of {url} starts') if proxies: r = requests.get(url, allow_redirects=True,proxies=proxies) else: r = requests.get(url, allow_redirects=True) if r.status_code!=200: logging.error(f'Request failed with status code {r.status_code}.') return False else: with open(destination, 'wb') as f: f.write(r.content) logging.info(f'Download of {url}->{destination} completed successfully.') return True
[docs]def unzip(zipped: 'path',unzipped: 'path') -> None: """ Unzips an archive to a directory. :param zipped: Path to the zipped archive :type zipped: path :param unzipped: Directory to unzip the file :type unzipped: path :return: None """ with zipfile.ZipFile(zipped, 'r') as myzip: myzip.extractall(unzipped) return None
[docs]def getLogger(logFile): """ Get a logger. Log messages are sent both to the standard output and to a logFile. :param logFile: The path to the log file. Eg: ./log/myProgram. The iso date + .log extension will be added to the path. :type logFile: path :return: The logger :rtype: Logger :example: >>> from statbel.functions import getLogger >>> logging=getLogger('./log/myProgram') >>> logging.info('This is an info line') """ root = logging.getLogger() root.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s|%(levelname)s|%(message)s') standardOutputHandler = logging.StreamHandler(sys.stdout) standardOutputHandler.setLevel(logging.INFO) standardOutputHandler.setFormatter(formatter) fileHandler=logging.FileHandler(f'{logFile}-{date.today().isoformat()}.log') fileHandler.setLevel(logging.INFO) fileHandler.setFormatter(formatter) root.addHandler(standardOutputHandler) root.addHandler(fileHandler) return(logging)