Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1# This file is part of daf_butler. 

2# 

3# Developed for the LSST Data Management System. 

4# This product includes software developed by the LSST Project 

5# (http://www.lsst.org). 

6# See the COPYRIGHT file at the top-level directory of this distribution 

7# for details of code ownership. 

8# 

9# This program is free software: you can redistribute it and/or modify 

10# it under the terms of the GNU General Public License as published by 

11# the Free Software Foundation, either version 3 of the License, or 

12# (at your option) any later version. 

13# 

14# This program is distributed in the hope that it will be useful, 

15# but WITHOUT ANY WARRANTY; without even the implied warranty of 

16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

17# GNU General Public License for more details. 

18# 

19# You should have received a copy of the GNU General Public License 

20# along with this program. If not, see <http://www.gnu.org/licenses/>. 

21 

22 

23import click 

24from functools import partial 

25 

26from ..utils import (MWOption, 

27 split_commas, 

28 split_kv as split_kv_func, 

29 split_kv_separator) 

30 

31 

32class config_option: # noqa: N801 

33 """A decorator that adds a config option to a click command. 

34 

35 Parameters 

36 ---------- 

37 help : `str`, optional 

38 The help text to use for the option, by default `defaultHelp` 

39 metavar : `str`, optional 

40 How the type is represented in the help page. 

41 multiple : `bool`, optional 

42 If true, multiple instances of the option may be passed in on the 

43 command line, by default False 

44 required : bool, optional 

45 If true, the option is required to be passed in on the command line, by 

46 default False 

47 split_kv : `bool`, optional 

48 If true, values that contain commas will be split into multiple values 

49 at the comma, by default False. 

50 """ 

51 

52 defaultHelp = "Config override, as a key-value pair." 

53 optionFlags = ("-c", "--config") 

54 optionKey = "config" 

55 

56 def __init__(self, help=defaultHelp, metavar=None, multiple=False, required=False, split_kv=False): 

57 self.help = help 

58 self.metavar = metavar 

59 self.multiple = multiple 

60 self.required = required 

61 if split_kv: 

62 self.callback = partial(split_kv_func, 

63 separator=split_kv_separator, 

64 multiple=multiple) 

65 elif multiple: 

66 self.callback = split_commas 

67 else: 

68 self.callback = None 

69 

70 def __call__(self, f): 

71 return click.option(*self.optionFlags, cls=MWOption, 

72 callback=self.callback, 

73 help=self.help, 

74 metavar=self.metavar, 

75 multiple=self.multiple, 

76 required=self.required)(f)