1from enum import Enum
2from itertools import chain
3
4from typing import Set
5
6
7class Action(Enum):
8    CONSOLIDATE = 'consolidate'
9    BACKUP = 'backup'
10    RESTORE = 'restore'
11
12
13class Command(Enum):
14    QUERY = 'QUERY'
15    SUGGEST = 'SUGGEST'
16    PING = 'PING'
17    QUIT = 'QUIT'
18    HELP = 'HELP'
19    PUSH = 'PUSH'
20    POP = 'POP'
21    FLUSHB = 'FLUSHB'
22    FLUSHC = 'FLUSHC'
23    FLUSHO = 'FLUSHO'
24    COUNT = 'COUNT'
25    TRIGGER = 'TRIGGER'
26    INFO = 'INFO'
27
28
29class Channel(Enum):
30    UNINITIALIZED = 'uninitialized'
31    INGEST = 'ingest'
32    SEARCH = 'search'
33    CONTROL = 'control'
34
35
36enabled_commands = {
37    Channel.UNINITIALIZED: {
38        Command.QUIT,
39    },
40    Channel.SEARCH: {
41        Command.QUERY,
42        Command.SUGGEST,
43        Command.PING,
44        Command.HELP,
45        Command.QUIT,
46    },
47    Channel.INGEST: {
48        Command.PUSH,
49        Command.POP,
50        Command.COUNT,
51        Command.FLUSHB,
52        Command.FLUSHC,
53        Command.FLUSHO,
54        Command.PING,
55        Command.HELP,
56        Command.QUIT,
57    },
58    Channel.CONTROL: {
59        Command.TRIGGER,
60        Command.PING,
61        Command.HELP,
62        Command.QUIT,
63    }
64}
65
66all_commands = set(chain(*enabled_commands.values()))  # type: Set[Command]
67