diff options
Diffstat (limited to 'webmap-download')
| -rwxr-xr-x | webmap-download | 62 | 
1 files changed, 1 insertions, 61 deletions
diff --git a/webmap-download b/webmap-download index 2c475fe..5e191ad 100755 --- a/webmap-download +++ b/webmap-download @@ -32,8 +32,6 @@ from os import (      O_TMPFILE,      path as os_path,      curdir as os_curdir, -    pardir as os_pardir, -    sep as os_sep  )  import os  import sys @@ -48,7 +46,7 @@ from typing import Optional, NoReturn, Never  import requests  import common -from common import BadConfiguration, getSourcePathLockFileName +from common import parse_config_dl, getSourcePathLockFileName  def download_trystream(url : str, **kwargs) -> requests.Response:      """GET a url, trying a number of times. Return immediately after the @@ -167,64 +165,6 @@ def download(dest : str,                   common.format_time(elapsed),                   common.format_bytes(int(size/elapsed))) -def _check_key_type(k : str, v : str, known_keys : list[type, tuple[set[str]]]) -> bool: -    for t, ks in known_keys: -        if k in ks and isinstance(v, t): -            return True -    return False - -def parse_config_dl(downloads) -> dict[str, dict[str, str|int]]: -    """Parse and validate the "downloads" section from the configuration dictionary""" - -    if not isinstance(downloads, list): -        raise BadConfiguration(f'Invalid download recipe: {downloads}') - -    known_keys = [ -        (str, {'path', 'url'}), -        (int, {'max-age', 'max-size'}) -    ] - -    destinations = {} -    known_keys_set = {k for _,ks in known_keys for k in ks} -    for dl in downloads: -        if 'url' in dl: -            dls = [dl] -        elif 'basedir' in dl and 'baseurl' in dl and 'files' in dl and 'path' not in dl: -            dls = [] -            for filename in dl['files']: -                dl2 = { -                    'path' : os_path.join(dl['basedir'], filename), -                    'url' : dl['baseurl'] + filename -                } -                for k, v in dl.items(): -                    if k not in ('basedir', 'baseurl', 'files'): -                        dl2[k] = v -                dls.append(dl2) -        else: -            raise BadConfiguration(f'Invalid download recipe: {dl}') - -        for dl in dls: -            path = dl.get('path', None) -            if path is None or path in ('', os_curdir, os_pardir) or path.endswith(os_sep): -                raise BadConfiguration(f'Invalid destination path "{path}"') -            if path in destinations: -                raise BadConfiguration(f'Duplicate download recipe for "{path}"') -            dl2 = {} -            for k, v in dl.items(): -                if k == 'path': -                    continue -                if k not in known_keys_set: -                    logging.warning('Ignoring unknown setting "%s" in download recipe for "%s"', -                                    k, path) -                elif not _check_key_type(k, v, known_keys): -                    logging.warning('Ignoring setting "%s" in download recipe for "%s"' -                                    ' (invalid type)', k, path) -                else: -                    dl2[k] = v -            destinations[path] = dl2 - -    return destinations -  # pylint: disable-next=missing-function-docstring  def main() -> NoReturn:      common.init_logger(app=os_path.basename(__file__), level=logging.INFO)  | 
