Source code for seiscat.editdb

# -*- coding: utf8 -*-
# SPDX-License-Identifier: GPL-3.0-or-later
"""
Edit functions for seiscat.

:copyright:
    2022-2023 Claudio Satriano <satriano@ipgp.fr>
:license:
    GNU General Public License v3.0 or later
    (https://www.gnu.org/licenses/gpl-3.0-standalone.html)
"""
from .utils import err_exit
from .db import (
    read_fields_and_rows_from_db, replicate_event_in_db,
    delete_event_from_db, update_event_in_db)


def _are_you_sure(msg):
    """
    Ask user if she is sure to proceed.

    :param msg: message to print
    """
    print(msg)
    answer = input('Are you sure? [y/N] ')
    if answer.lower() != 'y':
        err_exit('Aborted')


def _parse_set_arg(arg):
    """
    Parse "--set" argument.

    :param arg: argument string
    :return: key, value
    """
    if '=' not in arg:
        err_exit(
            f'Invalid argument "{arg}" for "--set". '
            'Argument must be in the form "key=value"')
    key, val = arg.split('=')
    return key, val


[docs]def editdb(config): """ Edit database. :param config: config object """ args = config['args'] eventid = args.eventid[0] version = args.version fields, rows = read_fields_and_rows_from_db(config, eventid, version) if not rows: if version: msg = f'Event {eventid} version {version} not found in database' else: msg = f'Event {eventid} not found in database' err_exit(msg) if len(rows) > 1: err_exit( f'Event {eventid} has {len(rows)} versions, ' 'please specify version with "--version"') if args.replicate: replicate_event_in_db(config, eventid) elif args.delete: version = rows[0][fields.index('ver')] if not args.force: _are_you_sure( f'Delete event {eventid} version {version} from database?') delete_event_from_db(config, eventid, version) elif args.set: version = rows[0][fields.index('ver')] if not args.force: _are_you_sure( f'Update event {eventid} version {version} in database?') key_values = [_parse_set_arg(arg) for arg in args.set] for key, val in key_values: update_event_in_db(config, eventid, version, key, val) else: err_exit('No action specified. See "seiscat editdb -h" for help')