26 lines
1.2 KiB
Python
26 lines
1.2 KiB
Python
"""Explicit one-time migration; runtime never reads the monitor configuration."""
|
|
import argparse
|
|
import configparser
|
|
from pathlib import Path
|
|
from settings import SCHEMA,load,validated,check,save
|
|
|
|
|
|
def migrate(source):
|
|
c=configparser.ConfigParser()
|
|
if not c.read(source):raise ValueError('monitor config missing')
|
|
result={s:{k:v['default'] for k,v in spec.items()} for s,spec in SCHEMA.items()}
|
|
for section,old in (('fan','fan'),('rgb','led')):
|
|
if c.has_section(old):
|
|
values={k:v for k,v in c.items(old) if k in SCHEMA[section]}
|
|
result[section].update(validated({section:values})[section])
|
|
for old,key in (('oled_refresh_interval','refresh_seconds'),('page_interval','page_seconds')):
|
|
if c.has_option('timing',old):result['oled'].update(validated({'oled':{key:c.get('timing',old)}})['oled'])
|
|
check(result)
|
|
return result
|
|
|
|
if __name__=='__main__':
|
|
p=argparse.ArgumentParser();p.add_argument('source');p.add_argument('--check',action='store_true');p.add_argument('--output');a=p.parse_args()
|
|
result=migrate(a.source)
|
|
if a.output:save(a.output,result)
|
|
else:print('migration valid; no files changed')
|