Source code for safe.postprocessors.postprocessor_factory

# -*- coding: utf-8 -*-
"""**Postprocessors package.**

.. tip::
   import like this from safe.postprocessors import get_post_processors and
   then call get_post_processors(requested_postprocessors)

"""

__author__ = 'Marco Bernasocchi <marco@opengis.ch>'
__revision__ = '$Format:%H$'
__date__ = '10/10/2012'
__license__ = "GPL"
__copyright__ = 'Copyright 2012, Australia Indonesia Facility for '
__copyright__ += 'Disaster Reduction'

import logging
from safe.common.utilities import ugettext as tr

# pylint: disable=W0611
from gender_postprocessor import GenderPostprocessor
from age_postprocessor import AgePostprocessor
# pylint: enable=W0611

LOGGER = logging.getLogger('InaSAFE')
#this _must_reflect the imported classes above
AVAILABLE_POSTPTOCESSORS = ['Gender', 'Age']


[docs]def get_post_processors(requested_postprocessors): """ Creates a dictionary of applicable postprocessor instances Args: * requested_postprocessors: dictionary of requested postprocessors such as { 'Gender': {'on': True}, 'Age': {'on': True, 'params': { 'youth_ratio': defaults['YOUTH_RATIO'], 'adult_ratio': defaults['ADULT_RATIO'], 'elder_ratio': defaults['ELDER_RATIO'] } } } with 'PostprocessorName': {'on': True} being the minimum needed to activate a postprocessor. If asked for unimplemented postprocessors, the factory will just skip it returning the valid ones Returns: dict of postprocessors instances e.g. {'Gender':GenderPostprocessors instance} """ postprocessor_instances = {} if requested_postprocessors is None or requested_postprocessors == {}: return postprocessor_instances for name, values in requested_postprocessors.iteritems(): constr_id = name + 'Postprocessor' try: if values['on']: if name in AVAILABLE_POSTPTOCESSORS: #http://stackoverflow.com/a/554462 constr = globals()[constr_id] instance = constr() postprocessor_instances[name] = instance else: LOGGER.debug(constr_id + ' is not a valid Postprocessor,' ' skipping it') else: LOGGER.debug(constr_id + ' user disabled, skipping it') except KeyError: LOGGER.debug(constr_id + ' has no "on" key, skipping it') return postprocessor_instances
[docs]def get_postprocessor_human_name(postprocesor): """ Returns the human readable name of post processor Args: * postprocessor: Machine name of the postprocessor Returns: str with the human readable name """ # TODO (MB) this is a stub, the correct implementation will come when # aggregation branch gets merged # Sunni translate it and make it pretty for v 1.1 postprocesor = postprocesor.replace('_', ' ').capitalize() human_name_translated = tr(postprocesor) return human_name_translated