Module rok4_tools.make_layer

Expand source code
#!/usr/bin/env python3

import argparse
import logging
import sys

from rok4.layer import Layer

from rok4_tools import __version__

# Default logger
logging.basicConfig(format="%(asctime)s %(levelname)s: %(message)s", level=logging.INFO)

args = None


def parse() -> None:
    """Parse call arguments and check values

    Exit program if an error occured
    """

    global args

    # CLI call parser
    parser = argparse.ArgumentParser(
        prog="make-layer",
        description="Tool to generate layer descriptor from pyramids' descriptor",
        epilog="",
    )

    parser.add_argument("--version", action="version", version="%(prog)s " + __version__)

    parser.add_argument(
        "--pyramids",
        metavar="storage://path/to/pyr.json[>BOTTOM>TOP]",
        action="extend",
        nargs="+",
        type=str,
        dest="pyramids",
        help="Pyramids' descriptors, with extrem levels to use if not all levels have to be used",
        required=True,
    )

    parser.add_argument(
        "--name",
        metavar="my_data",
        action="store",
        dest="name",
        help="Layer's technical name",
        required=True,
    )

    parser.add_argument(
        "--styles",
        metavar="normal",
        action="extend",
        nargs="+",
        type=str,
        default=["normal"],
        dest="styles",
        help="Styles ID available for the layer (no controls, ID are added as provided)",
        required=False,
    )

    parser.add_argument(
        "--title",
        metavar="my data",
        action="store",
        dest="title",
        help="Layer title",
        required=False,
    )

    parser.add_argument(
        "--abstract",
        metavar="my data description",
        action="store",
        dest="abstract",
        help="Layer description",
        required=False,
    )

    parser.add_argument(
        "--resampling",
        choices=["nn", "linear", "bicubic", "lanczos_2", "lanczos_3", "lanczos_4"],
        action="store",
        dest="abstract",
        help="Layer resampling",
        required=False,
    )

    parser.add_argument(
        "--directory",
        action="store",
        dest="directory",
        metavar="s3://layers_bucket",
        help="Directory (file or object) where to write layer's descriptor. Print in standard output if not provided",
        required=False,
    )

    args = parser.parse_args()


def work() -> None:
    """Load informations and write layer descriptor

    If the directory option is provided, descriptor will be written in it, else it is print into standard output.

    Raises:
        Exception: name contains forbidden characters or used pyramids do not shared same parameters (format, tms...)
        MissingEnvironmentError: Missing object storage informations
        StorageError: Storage write issue
    """

    # Chargement des pyramides à utiliser dans la couche
    pyramids = []
    for p in args.pyramids:
        if p.find(">") != -1:
            # Les niveaux du haut et du bas sont précisés
            descriptor, bottom, top = p.split(">", 2)
        else:
            # On utilisera la pyramide dans son intégralité
            descriptor = p
            bottom = None
            top = None

        pyramids.append({"path": descriptor, "bottom_level": bottom, "top_level": top})

    name = args.name
    kwa = vars(args)
    # On supprime ces deux clés pour qu'elles ne rentre pas en conflit avec les paramètres positionnels dans le constructeur de Layer
    del kwa["pyramids"]
    del kwa["name"]
    layer = Layer.from_parameters(pyramids, name, **kwa)

    layer.write_descriptor(args.directory)


def main() -> None:
    """Main function

    Return 0 if success, 1 if an error occured
    """

    parse()

    try:
        work()

    except Exception as e:
        logging.error(e)
        sys.exit(1)

    sys.exit(0)


if __name__ == "__main__":
    main()

Functions

def main() ‑> None

Main function

Return 0 if success, 1 if an error occured

Expand source code
def main() -> None:
    """Main function

    Return 0 if success, 1 if an error occured
    """

    parse()

    try:
        work()

    except Exception as e:
        logging.error(e)
        sys.exit(1)

    sys.exit(0)
def parse() ‑> None

Parse call arguments and check values

Exit program if an error occured

Expand source code
def parse() -> None:
    """Parse call arguments and check values

    Exit program if an error occured
    """

    global args

    # CLI call parser
    parser = argparse.ArgumentParser(
        prog="make-layer",
        description="Tool to generate layer descriptor from pyramids' descriptor",
        epilog="",
    )

    parser.add_argument("--version", action="version", version="%(prog)s " + __version__)

    parser.add_argument(
        "--pyramids",
        metavar="storage://path/to/pyr.json[>BOTTOM>TOP]",
        action="extend",
        nargs="+",
        type=str,
        dest="pyramids",
        help="Pyramids' descriptors, with extrem levels to use if not all levels have to be used",
        required=True,
    )

    parser.add_argument(
        "--name",
        metavar="my_data",
        action="store",
        dest="name",
        help="Layer's technical name",
        required=True,
    )

    parser.add_argument(
        "--styles",
        metavar="normal",
        action="extend",
        nargs="+",
        type=str,
        default=["normal"],
        dest="styles",
        help="Styles ID available for the layer (no controls, ID are added as provided)",
        required=False,
    )

    parser.add_argument(
        "--title",
        metavar="my data",
        action="store",
        dest="title",
        help="Layer title",
        required=False,
    )

    parser.add_argument(
        "--abstract",
        metavar="my data description",
        action="store",
        dest="abstract",
        help="Layer description",
        required=False,
    )

    parser.add_argument(
        "--resampling",
        choices=["nn", "linear", "bicubic", "lanczos_2", "lanczos_3", "lanczos_4"],
        action="store",
        dest="abstract",
        help="Layer resampling",
        required=False,
    )

    parser.add_argument(
        "--directory",
        action="store",
        dest="directory",
        metavar="s3://layers_bucket",
        help="Directory (file or object) where to write layer's descriptor. Print in standard output if not provided",
        required=False,
    )

    args = parser.parse_args()
def work() ‑> None

Load informations and write layer descriptor

If the directory option is provided, descriptor will be written in it, else it is print into standard output.

Raises

Exception
name contains forbidden characters or used pyramids do not shared same parameters (format, tms…)
MissingEnvironmentError
Missing object storage informations
StorageError
Storage write issue
Expand source code
def work() -> None:
    """Load informations and write layer descriptor

    If the directory option is provided, descriptor will be written in it, else it is print into standard output.

    Raises:
        Exception: name contains forbidden characters or used pyramids do not shared same parameters (format, tms...)
        MissingEnvironmentError: Missing object storage informations
        StorageError: Storage write issue
    """

    # Chargement des pyramides à utiliser dans la couche
    pyramids = []
    for p in args.pyramids:
        if p.find(">") != -1:
            # Les niveaux du haut et du bas sont précisés
            descriptor, bottom, top = p.split(">", 2)
        else:
            # On utilisera la pyramide dans son intégralité
            descriptor = p
            bottom = None
            top = None

        pyramids.append({"path": descriptor, "bottom_level": bottom, "top_level": top})

    name = args.name
    kwa = vars(args)
    # On supprime ces deux clés pour qu'elles ne rentre pas en conflit avec les paramètres positionnels dans le constructeur de Layer
    del kwa["pyramids"]
    del kwa["name"]
    layer = Layer.from_parameters(pyramids, name, **kwa)

    layer.write_descriptor(args.directory)