LSST Applications g0603fd7c41+501e3db9f9,g0aad566f14+23d8574c86,g0dd44d6229+a1a4c8b791,g2079a07aa2+86d27d4dc4,g2305ad1205+a62672bbc1,g2bbee38e9b+047b288a59,g337abbeb29+047b288a59,g33d1c0ed96+047b288a59,g3a166c0a6a+047b288a59,g3d1719c13e+23d8574c86,g487adcacf7+cb7fd919b2,g4be5004598+23d8574c86,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+4a9e435310,g63cd9335cc+585e252eca,g858d7b2824+23d8574c86,g88963caddf+0cb8e002cc,g99cad8db69+43388bcaec,g9ddcbc5298+9a081db1e4,ga1e77700b3+a912195c07,gae0086650b+585e252eca,gb0e22166c9+60f28cb32d,gb2522980b2+793639e996,gb3a676b8dc+b4feba26a1,gb4b16eec92+63f8520565,gba4ed39666+c2a2e4ac27,gbb8dafda3b+a5d255a82e,gc120e1dc64+d820f8acdb,gc28159a63d+047b288a59,gc3e9b769f7+f4f1cc6b50,gcf0d15dbbd+a1a4c8b791,gdaeeff99f8+f9a426f77a,gdb0af172c8+b6d5496702,ge79ae78c31+047b288a59,w.2024.19
LSST Data Management Base Package
Loading...
Searching...
No Matches
apdb_cli.py
Go to the documentation of this file.
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)
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.")
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.")
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)
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)
None _create_sql_subcommand(argparse._SubParsersAction subparsers)
Definition apdb_cli.py:54
None _metadata_subcommand(argparse._SubParsersAction subparsers)
Definition apdb_cli.py:89
None _metadata_get_subcommand(argparse._SubParsersAction subparsers)
Definition apdb_cli.py:112
None main(Sequence[str]|None args=None)
Definition apdb_cli.py:34
None _create_cassandra_subcommand(argparse._SubParsersAction subparsers)
Definition apdb_cli.py:66
None _list_index_subcommand(argparse._SubParsersAction subparsers)
Definition apdb_cli.py:81
None _metadata_delete_subcommand(argparse._SubParsersAction subparsers)
Definition apdb_cli.py:134
None _metadata_set_subcommand(argparse._SubParsersAction subparsers)
Definition apdb_cli.py:119
None _metadata_show_subcommand(argparse._SubParsersAction subparsers)
Definition apdb_cli.py:98
None common_apdb_options(argparse.ArgumentParser parser)
Definition options.py:54
None cassandra_config_options(argparse.ArgumentParser parser)
Definition options.py:87
None sql_config_options(argparse.ArgumentParser parser)
Definition options.py:67