• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Kinto / kinto-wizard / 7670149160

26 Jan 2024 03:37PM UTC coverage: 95.775% (-4.2%) from 100.0%
7670149160

Pull #304

github

web-flow
Merge 2ccaadff0 into d2beee2c1
Pull Request #304: Modernize repo

284 of 286 new or added lines in 5 files covered. (99.3%)

408 of 426 relevant lines covered (95.77%)

1.9 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

99.04
/src/kinto_wizard/__main__.py
1
from __future__ import print_function
2✔
2

3
import argparse
2✔
4
import asyncio
2✔
5
import logging
2✔
6
import sys
2✔
7
from concurrent.futures import ThreadPoolExecutor
2✔
8

9
from kinto_http import cli_utils
2✔
10
from ruamel.yaml import YAML
2✔
11

12
from .async_kinto import AsyncKintoClient
2✔
13
from .kinto2yaml import introspect_server
2✔
14
from .logger import logger
2✔
15
from .validate import validate_export
2✔
16
from .yaml2kinto import initialize_server
2✔
17

18

19
def main():
2✔
20
    parser = argparse.ArgumentParser(description="Wizard to setup Kinto with YAML")
2✔
21
    subparsers = parser.add_subparsers(
2✔
22
        title="subcommand",
2✔
23
        description="Load/Dump/Validate",
2✔
24
        dest="subcommand",
2✔
25
        help="Choose and run with --help",
2✔
26
    )
27
    subparsers.required = True
2✔
28

29
    # load sub-command.
30
    subparser = subparsers.add_parser("load")
2✔
31
    subparser.set_defaults(which="load")
2✔
32
    cli_utils.add_parser_options(subparser)
2✔
33
    subparser.add_argument(dest="filepath", help="YAML file")
2✔
34
    subparser.add_argument(
2✔
35
        "--force",
2✔
36
        help="Load the file using the CLIENT_WINS conflict resolution strategy",
2✔
37
        action="store_true",
2✔
38
    )
39
    subparser.add_argument(
2✔
40
        "--dry-run", help="Do not apply write call to the server", action="store_true"
2✔
41
    )
42
    subparser.add_argument(
2✔
43
        "--delete-records", help="Delete records that are not in the file.", action="store_true"
2✔
44
    )
45

46
    # dump sub-command.
47
    subparser = subparsers.add_parser("dump")
2✔
48
    subparser.set_defaults(which="dump")
2✔
49
    cli_utils.add_parser_options(subparser)
2✔
50
    subparser.add_argument(
2✔
51
        "--full",
2✔
52
        help="Full output (same as with both --data and --records options)",
2✔
53
        action="store_true",
2✔
54
    )
55
    subparser.add_argument(
2✔
56
        "--data", help="Export buckets, collections and groups data", action="store_true"
2✔
57
    )
58
    subparser.add_argument("--records", help="Export collections' records", action="store_true")
2✔
59

60
    # validate sub-command.
61
    subparser = subparsers.add_parser("validate")
2✔
62
    subparser.set_defaults(which="validate")
2✔
63
    subparser.set_defaults(verbosity=logging.INFO)
2✔
64
    subparser.add_argument(dest="filepath", help="YAML file to validate")
2✔
65
    cli_utils.add_parser_options(subparser)
2✔
66

67
    # Parse CLI args.
68
    args = parser.parse_args()
2✔
69
    cli_utils.setup_logger(logger, args)
2✔
70
    kinto_logger = logging.getLogger("kinto_http")
2✔
71
    cli_utils.setup_logger(kinto_logger, args)
2✔
72

73
    if args.which == "validate":
2✔
74
        logger.debug("Start validation...")
2✔
75
        logger.info("Load YAML file {!r}".format(args.filepath))
2✔
76
        yaml = YAML(typ="safe")
2✔
77
        with open(args.filepath, "r") as f:
2✔
78
            config = yaml.load(f)
2✔
79
        logger.info("File loaded!")
2✔
80
        fine = validate_export(config)
2✔
81
        sys.exit(0 if fine else 1)
2✔
82

83
    logger.debug("Instantiate Kinto client.")
2✔
84
    client = cli_utils.create_client_from_args(args)
2✔
85

86
    thread_pool = ThreadPoolExecutor()
2✔
87
    event_loop = asyncio.get_event_loop()
2✔
88
    async_client = AsyncKintoClient(
2✔
89
        client, event_loop, thread_pool, dry_run=getattr(args, "dry_run", False)
2✔
90
    )
91

92
    # Run chosen subcommand.
93
    if args.which == "dump":
2✔
94
        if args.full:
2✔
95
            data = True
2✔
96
            records = True
2✔
NEW
97
        else:
×
98
            data = args.data
2✔
99
            records = args.records
2✔
100

101
        logger.debug(
2✔
102
            "Start introspection with %s%s%s..."
2✔
103
            % (
2✔
104
                "data" if data else "",
2✔
105
                " and " if data and records else "",
2✔
106
                "records" if records else "",
2✔
107
            )
108
        )
109
        result = event_loop.run_until_complete(
2✔
110
            introspect_server(
2✔
111
                async_client,
2✔
112
                bucket=args.bucket,
2✔
113
                collection=args.collection,
2✔
114
                data=data,
2✔
115
                records=records,
2✔
116
            )
117
        )
118
        yaml = YAML()
2✔
119
        yaml.default_flow_style = False
2✔
120
        yaml.dump(result, sys.stdout)
2✔
121

122
    elif args.which == "load":
2✔
123
        logger.debug("Start initialization...")
2✔
124
        logger.info("Load YAML file {!r}".format(args.filepath))
2✔
125
        yaml = YAML(typ="safe")
2✔
126
        with open(args.filepath, "r") as f:
2✔
127
            config = yaml.load(f)
2✔
128
        event_loop.run_until_complete(
2✔
129
            initialize_server(
2✔
130
                async_client,
2✔
131
                config,
2✔
132
                bucket=args.bucket,
2✔
133
                collection=args.collection,
2✔
134
                force=args.force,
2✔
135
                delete_missing_records=args.delete_records,
2✔
136
            )
137
        )
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc