summaryrefslogtreecommitdiff
path: root/boards/generate.py
blob: 86c7ca5aa85f59d5e0332b40ff82f1544a456e79 (plain)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import json, os, re, subprocess, sys
from datetime import datetime
from pathlib import Path


DEAL_CONVERT_PATH = os.environ.get('LIGA_BOARDS_DEAL_CONVERT_PATH')
PBN_EVENT_TAG = re.compile('\[Event ".*"\]')


def deal_convert(source_file, target_files, params=''):
    command = 'python2 %s %s %s %s' % (DEAL_CONVERT_PATH, params, source_file, ' '.join(target_files))
    try:
        subprocess.check_output(command, stderr=subprocess.STDOUT, universal_newlines=True, shell=True)
    except subprocess.CalledProcessError as ex:
        print('ERROR: %s' % (ex.output), file=sys.stderr)


def ensure_pbn(source_id, config_name, event_name):
    target_path = Path('output') / config_name / 'files' / (source_id + '.pbn')
    if target_path.exists():
        return target_path
    print('Target path %s does not exist, generating' % (target_path), file=sys.stderr)
    source_path = Path('pbns') / config_name / (source_id + '.pbn')
    target_path.parent.mkdir(parents=True, exist_ok=True)
    deal_convert(str(source_path), [str(target_path)], '--jfr')
    with open(target_path) as target_file:
        pbn_content = target_file.read()
    pbn_content = re.sub(PBN_EVENT_TAG, '[Event "%s"]' % (event_name), pbn_content)
    with open(target_path, 'w') as target_file:
        target_file.write(pbn_content)
    return target_path


def ensure_pdf(source_id, config_name):
    target_path = Path('output') / config_name / 'files' / (source_id + '.pdf')
    if target_path.exists():
        return target_path
    print('Target path %s does not exist, generating' % (target_path), file=sys.stderr)
    source_path = Path('output') / config_name / 'files' / (source_id + '.pbn')
    target_path.parent.mkdir(parents=True, exist_ok=True)
    deal_convert(str(source_path), [str(target_path)])
    return target_path

output_files = []

config_dir = Path('config')
for config_path in config_dir.glob('*.json'):
    config_name = config_path.stem
    print('Found config "%s" in %s' % (config_name, config_path), file=sys.stderr)
    with open(config_path) as config_file:
        config = json.load(config_file)

    output_dir = Path('output') / config_name
    output_dir.mkdir(parents=True, exist_ok=True)

    content = ''
    for section in config['sections']:
        content += '<tr><td class="bdnt12" colspan="3">%s</td></tr>' % (section['title'])
        for dealset in section['sets']:
            set_enabled = False
            set_finished = True
            set_content = '<tr><td class="bdcc1" colspan="3">%s</td></tr>' % (dealset['title'])
            set_files = []
            for pbn in dealset['files']:
                if pbn.get('enabled', 0):
                    set_files.append(
                        ensure_pbn(pbn['path'], config_name, pbn['title']))
                    set_files.append(
                        ensure_pdf(pbn['path'], config_name))
                    set_enabled = True
                    set_content += '<tr>'
                    set_content += '<td class="bd1">%s</td>' % (pbn['name'])
                    for filetype in ('pbn', 'pdf'):
                        set_content += '<td class="bdc"><a class="zb" href="files/%s.%s">%s</a></td>' % (pbn['path'], filetype, filetype)
                    set_content += '</tr>'
                else:
                    set_finished = False
            output_files += set_files
            if set_finished:
                output_files.append(
                    ensure_zip(dealset['zip']['id'], config_name, set_files))
                set_content += '<tr>'
                set_content += '<td class="bd1" colspan="2">%s</td>' % (dealset['zip'].get('title', 'cały mecz'))
                set_content += '<td class="bdc"><a class="zb" href="files/%s.zip">zip</a></td>' % (dealset['zip']['id'])
                set_content += '</tr>'
            if set_enabled:
                content += set_content
        content += '<tr><td class="e" colspan="3">&nbsp;</td></tr>'

    with open('template/%s.html' % (config_name)) as template_file:
        template = template_file.read()
    with open('template/%s.logo.html' % (config_name)) as logoh_file:
        template = template.replace('<!---[LOGOH]--->', logoh_file.read())
    template = template.replace('<!---[CONTENT]--->', content)
    template = template.replace('<!---[GENDATE]--->', datetime.now().strftime('%Y-%m-%d %X'))

    output_path = output_dir / 'index.html'
    with open(output_path, 'w') as output_file:
        output_file.write(template)
    print('Written output file %s' % (output_path), file=sys.stderr)
    output_files.append(output_path)