File: extract_data.py

package info (click to toggle)
freeorion 0.5.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 194,940 kB
  • sloc: cpp: 186,508; python: 40,969; ansic: 1,164; xml: 719; makefile: 32; sh: 7
file content (64 lines) | stat: -rw-r--r-- 1,447 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
from common.statistic_interface import StatKey


def start_turn(key, value, data):
    data["turns"].append({})


def add_attribute(key: StatKey, value, data):
    info = data["turns"][-1]
    if key.is_multi():
        info.setdefault(key.name, []).append(value)
    else:
        info[key.name] = value


def start_first_turn(key, value, data):
    start_turn(key, value, data)
    data["empire_id"] = value["empire_id"]
    data["player_name"] = value["name"]


def set_color(key, value, data):
    data["color"] = value


def process_output(key, value, data):
    info = data["turns"][-1]
    info["turn"] = value["turn"]
    info["PP"] = value["PP"]
    info["RP"] = value["RP"]


def skip(key, value, data):
    pass


DEFAULT = object()

states = {
    "new": {StatKey.EmpireID: (start_first_turn, "first_turn")},
    "first_turn": {
        StatKey.EmpireColors: (set_color, "turn"),
    },
    "turn": {
        StatKey.EmpireID: (start_turn, "turn"),
        StatKey.EmpireColors: (skip, "turn"),
        DEFAULT: (add_attribute, "turn"),
        StatKey.Output: (process_output, "turn"),
    },
}


def process_state(lines):
    data = {"turns": []}

    state = "new"
    for key, value in lines:
        handlers = states[state]
        if key in handlers:
            handler, state = handlers[key]
        else:
            handler, state = handlers[DEFAULT]
        handler(key, key.value.deserialize(value), data)
    return data