# -*- coding: utf-8 -*- ########################################################################### # Copyright (c), The AiiDA team. All rights reserved. # # This file is part of the AiiDA code. # # # # The code is hosted on GitHub at https://github.com/aiidateam/aiida-core # # For further information on the license, see the LICENSE.txt file # # For further information please visit http://www.aiida.net # ########################################################################### """ .. py:module::contextualdefault :synopsis: Tools for options which allow for a default callable that needs also the context ctx """ import click [docs]class ContextualDefaultOption(click.Option): """A class that extends click.Option allowing to define a default callable that also get the context ctx as a parameter. """ [docs] def __init__(self, *args, contextual_default=None, **kwargs): self._contextual_default = contextual_default super().__init__(*args, **kwargs) [docs] def get_default(self, ctx): """If a contextual default is defined, use it, otherwise behave normally.""" if self._contextual_default is None: return super().get_default(ctx) return self._contextual_default(ctx)