134 lines
3.4 KiB
Python
134 lines
3.4 KiB
Python
import dataclasses
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
import platformdirs
|
|
|
|
from flandre import DEV_PROJECT_FOLDER
|
|
|
|
ISDEV = False
|
|
if '--dev' in sys.argv:
|
|
ISDEV = True
|
|
|
|
CONFIG_FOLDER = platformdirs.user_config_path('Flandre', 'Scarlet')
|
|
|
|
if ISDEV:
|
|
CONFIG_FOLDER = DEV_PROJECT_FOLDER / 'config'
|
|
|
|
DS = DEV_PROJECT_FOLDER / '@DS'
|
|
DS.mkdir(exist_ok=True, parents=True)
|
|
|
|
SOFTWARE_CONFIG_PATH = CONFIG_FOLDER / 'software.json'
|
|
|
|
|
|
@dataclasses.dataclass
|
|
class SoftwareConfig:
|
|
def s(self, host, port, proto='tcp'):
|
|
return f'{proto}://{host}:{port}'
|
|
|
|
data_folder: Path = DS
|
|
|
|
@property
|
|
def imaging_config_folder(self):
|
|
p = CONFIG_FOLDER / 'imaging'
|
|
p.mkdir(exist_ok=True, parents=True)
|
|
return p
|
|
|
|
@property
|
|
def device_config_folder(self):
|
|
p = CONFIG_FOLDER / 'device'
|
|
p.mkdir(exist_ok=True, parents=True)
|
|
return p
|
|
|
|
video_height: int = 1080
|
|
video_width: int = 960
|
|
|
|
live_ip: str = '11.6.1.71'
|
|
live_push_port: int = 5555
|
|
live_rep_port: int = 5556
|
|
device_py_rep_port: int = 5558
|
|
|
|
@property
|
|
def live_push_socket(self):
|
|
return f'tcp://{self.live_ip}:{self.live_push_port}'
|
|
|
|
@property
|
|
def live_rep_socket(self):
|
|
return f'tcp://{self.live_ip}:{self.live_rep_port}'
|
|
|
|
@property
|
|
def live_rep_socket_http(self):
|
|
return f'http://{self.live_ip}:{self.live_rep_port}'
|
|
|
|
@property
|
|
def device_py_rep_socket(self):
|
|
return f'tcp://{self.live_ip}:{self.device_py_rep_port}'
|
|
|
|
playback_port: int = 5003
|
|
|
|
@property
|
|
def playback_socket(self):
|
|
return f'tcp://127.0.0.1:{self.playback_port}'
|
|
|
|
local_ip: str = '127.0.0.1'
|
|
mi_rep_port: int = 5557
|
|
muxer_rep_port: int = 5560
|
|
driver_rep_port: int = 5561
|
|
|
|
|
|
@property
|
|
def mi_rep_socket(self):
|
|
return self.s(self.local_ip, self.device_py_rep_port)
|
|
|
|
@property
|
|
def muxer_rep_socket(self):
|
|
return self.s(self.local_ip, self.muxer_rep_port)
|
|
|
|
@property
|
|
def driver_rep_socket(self):
|
|
return self.s(self.local_ip, self.driver_rep_port)
|
|
|
|
switch1_ip: str = 'c1'
|
|
switch1_token: str = '7ad51e0016e7a9d22f753d5110f76c7d'
|
|
switch2_ip: str = 'c2'
|
|
switch2_token: str = 'bf5a7b77a1ba3761ea63fafd8427b7d6'
|
|
|
|
@staticmethod
|
|
def read_config(path: Path):
|
|
j = json.loads(path.read_text(encoding='utf-8'))
|
|
arg_d = dict()
|
|
for field in dataclasses.fields(SoftwareConfig):
|
|
try:
|
|
v = j[field.name]
|
|
match field.type:
|
|
case Path():
|
|
arg_d[field.name] = Path(v)
|
|
case _:
|
|
arg_d[field.name] = v
|
|
except KeyError:
|
|
pass
|
|
sc = SoftwareConfig(**arg_d)
|
|
return sc
|
|
|
|
def write_config(self):
|
|
arg_d = dict()
|
|
for field in dataclasses.fields(SoftwareConfig):
|
|
v = self.__getattribute__(field.name)
|
|
match v:
|
|
case Path():
|
|
arg_d[field.name] = str(v)
|
|
case _:
|
|
arg_d[field.name] = v
|
|
SOFTWARE_CONFIG_PATH.parent.mkdir(exist_ok=True, parents=True)
|
|
SOFTWARE_CONFIG_PATH.write_text(json.dumps(arg_d, indent=4), encoding='utf-8')
|
|
|
|
|
|
C = SoftwareConfig()
|
|
|
|
if SOFTWARE_CONFIG_PATH.exists() and not ISDEV:
|
|
C = SoftwareConfig.read_config(SOFTWARE_CONFIG_PATH)
|
|
|
|
if __name__ == '__main__':
|
|
print(C)
|