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

40 statements  

« prev     ^ index     » next       coverage.py v7.5.0, created at 2024-04-30 02:54 -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 

44 parsed_args = parser.parse_args(args) 

45 log_cli.process_args(parsed_args) 

46 

47 kwargs = vars(parsed_args) 

48 # Strip keywords not understood by scripts. 

49 method = kwargs.pop("method") 

50 method(**kwargs) 

51 

52 

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

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

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

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

57 options.common_apdb_options(parser) 

58 options.sql_config_options(parser) 

59 parser.add_argument( 

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

61 ) 

62 parser.set_defaults(method=scripts.create_sql) 

63 

64 

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

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

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

68 parser.add_argument( 

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

70 ) 

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

72 options.common_apdb_options(parser) 

73 options.cassandra_config_options(parser) 

74 parser.add_argument( 

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

76 ) 

77 parser.set_defaults(method=scripts.create_cassandra) 

78 

79 

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

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

82 parser.add_argument( 

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

84 ) 

85 parser.set_defaults(method=scripts.list_index)