Coverage for python/lsst/dax/apdb/cli/apdb_cli.py: 23%

70 statements  

« prev     ^ index     » next       coverage.py v7.5.1, created at 2024-05-16 03:20 -0700

1# This file is part of dax_apdb 

2# 

3# Developed for the LSST Data Management System. 

4# This product includes software developed by the LSST Project 

5# (https://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 <https://www.gnu.org/licenses/>. 

21 

22from __future__ import annotations 

23 

24__all__ = ["main"] 

25 

26import argparse 

27from collections.abc import Sequence 

28 

29from .. import scripts 

30from . import options 

31from .logging_cli import LoggingCli 

32 

33 

34def main(args: Sequence[str] | None = None) -> None: 

35 """APDB command line tools.""" 

36 parser = argparse.ArgumentParser(description="APDB command line tools") 

37 log_cli = LoggingCli(parser) 

38 

39 subparsers = parser.add_subparsers(title="available subcommands", required=True) 

40 _create_sql_subcommand(subparsers) 

41 _create_cassandra_subcommand(subparsers) 

42 _list_index_subcommand(subparsers) 

43 _metadata_subcommand(subparsers) 

44 

45 parsed_args = parser.parse_args(args) 

46 log_cli.process_args(parsed_args) 

47 

48 kwargs = vars(parsed_args) 

49 # Strip keywords not understood by scripts. 

50 method = kwargs.pop("method") 

51 method(**kwargs) 

52 

53 

54def _create_sql_subcommand(subparsers: argparse._SubParsersAction) -> None: 

55 parser = subparsers.add_parser("create-sql", help="Create new APDB instance in SQL database.") 

56 parser.add_argument("db_url", help="Database URL in SQLAlchemy format for APDB instance.") 

57 parser.add_argument("output_config", help="Name of the new configuration file for created APDB instance.") 

58 options.common_apdb_options(parser) 

59 options.sql_config_options(parser) 

60 parser.add_argument( 

61 "--drop", help="If True then drop existing tables.", default=False, action="store_true" 

62 ) 

63 parser.set_defaults(method=scripts.create_sql) 

64 

65 

66def _create_cassandra_subcommand(subparsers: argparse._SubParsersAction) -> None: 

67 parser = subparsers.add_parser("create-cassandra", help="Create new APDB instance in Cassandra cluster.") 

68 parser.add_argument("host", help="One or more host names for Cassandra cluster.", nargs="+") 

69 parser.add_argument( 

70 "keyspace", help="Cassandra keyspace name for APDB tables, will be created if does not exist." 

71 ) 

72 parser.add_argument("output_config", help="Name of the new configuration file for created APDB instance.") 

73 options.common_apdb_options(parser) 

74 options.cassandra_config_options(parser) 

75 parser.add_argument( 

76 "--drop", help="If True then drop existing tables.", default=False, action="store_true" 

77 ) 

78 parser.set_defaults(method=scripts.create_cassandra) 

79 

80 

81def _list_index_subcommand(subparsers: argparse._SubParsersAction) -> None: 

82 parser = subparsers.add_parser("list-index", help="List contents of APDB index file.") 

83 parser.add_argument( 

84 "index_path", help="Location of index file, if missing then $DAX_APDB_INDEX_URI is used.", nargs="?" 

85 ) 

86 parser.set_defaults(method=scripts.list_index) 

87 

88 

89def _metadata_subcommand(subparsers: argparse._SubParsersAction) -> None: 

90 parser = subparsers.add_parser("metadata", help="Operations with APDB metadata table.") 

91 subparsers = parser.add_subparsers(title="available subcommands", required=True) 

92 _metadata_set_subcommand(subparsers) 

93 _metadata_get_subcommand(subparsers) 

94 _metadata_show_subcommand(subparsers) 

95 _metadata_delete_subcommand(subparsers) 

96 

97 

98def _metadata_show_subcommand(subparsers: argparse._SubParsersAction) -> None: 

99 parser = subparsers.add_parser("show", help="Show contents of APDB metadata table.") 

100 parser.add_argument( 

101 "-j", 

102 "--json", 

103 dest="use_json", 

104 help="Dump metadata in JSON format.", 

105 default=False, 

106 action="store_true", 

107 ) 

108 parser.add_argument("config", help="Path or URI of APDB configuration file.") 

109 parser.set_defaults(method=scripts.metadata_show) 

110 

111 

112def _metadata_get_subcommand(subparsers: argparse._SubParsersAction) -> None: 

113 parser = subparsers.add_parser("get", help="Print value of the metadata item.") 

114 parser.add_argument("config", help="Path or URI of APDB configuration file.") 

115 parser.add_argument("key", help="Metadata key, arbitrary string.") 

116 parser.set_defaults(method=scripts.metadata_get) 

117 

118 

119def _metadata_set_subcommand(subparsers: argparse._SubParsersAction) -> None: 

120 parser = subparsers.add_parser("set", help="Add or update metadata item.") 

121 parser.add_argument( 

122 "-f", 

123 "--force", 

124 help="Force update of the existing key.", 

125 default=False, 

126 action="store_true", 

127 ) 

128 parser.add_argument("config", help="Path or URI of APDB configuration file.") 

129 parser.add_argument("key", help="Metadata key, arbitrary string.") 

130 parser.add_argument("value", help="Corresponding metadata value.") 

131 parser.set_defaults(method=scripts.metadata_set) 

132 

133 

134def _metadata_delete_subcommand(subparsers: argparse._SubParsersAction) -> None: 

135 parser = subparsers.add_parser("delete", help="Delete metadata item.") 

136 parser.add_argument("config", help="Path or URI of APDB configuration file.") 

137 parser.add_argument("key", help="Metadata key, arbitrary string.") 

138 parser.set_defaults(method=scripts.metadata_delete)