Skip to content

Commit

Permalink
don't raise exception when one of the registered processes cannot be …
Browse files Browse the repository at this point in the history
…imported (#226)
  • Loading branch information
ungarj committed Nov 12, 2019
1 parent 454db10 commit 44c61bd
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 33 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ Changelog
----
0.31
----
* don't raise exception when one of the registered processes cannot be imported (#225)
* don't close pool between zoom levels (#227)

----
Expand Down
47 changes: 14 additions & 33 deletions mapchete/cli/default/processes.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

import click
import logging
import pkg_resources

from mapchete.cli import utils
from mapchete.processes import process_names_docstrings

logger = logging.getLogger(__name__)

Expand All @@ -13,38 +13,19 @@
@click.option(
"--process_name", "-n", type=click.STRING, help="Print docstring of process."
)
@click.option(
"--docstrings", is_flag=True, help="Print docstrings of all processes."
)
@utils.opt_debug
def processes(process_name=None, docstrings=False, debug=False):
"""List available processes."""
# get all registered processes
processes = list(pkg_resources.iter_entry_points("mapchete.processes"))

# print selected process
if process_name:
for v in processes:
logger.debug("try to load %s", v)
process_module = v.load()
if process_name == process_module.__name__:
_print_process_info(process_module, docstrings=True)
else:
# print all processes
click.echo("%s processes found" % len(processes))
loaded_processes = [v.load() for v in processes]
loaded_processes.sort(key=lambda x: x.__name__)
for process_module in loaded_processes:
_print_process_info(process_module, docstrings=docstrings)


def _print_process_info(process_module, docstrings=False):
click.echo(
click.style(
process_module.__name__,
bold=docstrings,
underline=docstrings
)
)
if docstrings:
click.echo(process_module.execute.__doc__)
processes = process_names_docstrings(process_name=process_name)
click.echo("%s processes found" % len(processes))
for process_info in processes:
_print_process_info(process_info, print_docstring=process_name is not None)


def _print_process_info(process_info, print_docstring=False):
name, docstring = process_info
# print process name
click.echo(click.style(name, bold=print_docstring, underline=print_docstring))
# print process docstring
if print_docstring:
click.echo(docstring)
57 changes: 57 additions & 0 deletions mapchete/processes/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import logging
import pkg_resources

logger = logging.getLogger(__name__)


def registered_processes(process_name=None):
"""
Return registered process modules.
Parameters
----------
process_name : str
Python path of process.
Returns
-------
module
"""
def _import():
# get all registered processes by name
processes = list(pkg_resources.iter_entry_points("mapchete.processes"))
# try to load processes
for v in processes:
logger.debug("try to load %s", v)
try:
loaded = v.load()
if process_name is None or process_name == loaded.__name__:
yield loaded
except Exception as e:
logger.warning("%s could not be imported: %s", str(v), str(e))

# sort processes alphabetically
imported = list(_import())
imported.sort(key=lambda x: x.__name__)
logger.debug("%s processes found", len(imported))
return imported


def process_names_docstrings(process_name):
"""
Return registered process module names and docstrings.
Parameters
----------
process_name : str
Python path of process
Returns
-------
list of tuples
tuples contain containing process name and process docstring
"""
return [
(process.__name__, process.execute.__doc__)
for process in registered_processes(process_name=process_name)
]

0 comments on commit 44c61bd

Please sign in to comment.