From 191b270804c73b5e39c826208df57e9f8743929c Mon Sep 17 00:00:00 2001 From: "WQY\\qiong" Date: Fri, 18 Nov 2022 23:46:27 +0800 Subject: [PATCH 1/5] Fix energy inp out --- api/s15_energy.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/api/s15_energy.py b/api/s15_energy.py index aad2fd6..231a898 100644 --- a/api/s15_energy.py +++ b/api/s15_energy.py @@ -170,7 +170,8 @@ def inp_out_energy(name: str) -> list[str]: for obj in objs: key = obj['key'] value = obj['value'] - lines.append(f'{key} {value}') + if value.strip() != '': + lines.append(f'{key} {value}') objs = read_all(name, f"select * from energy_pump_price") for obj in objs: From c0a79f49d88a179a006bd988c8d7660e313a69a7 Mon Sep 17 00:00:00 2001 From: "WQY\\qiong" Date: Fri, 18 Nov 2022 23:46:51 +0800 Subject: [PATCH 2/5] Support inp out [REPORT] --- api/s22_report.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/api/s22_report.py b/api/s22_report.py index e69de29..3308543 100644 --- a/api/s22_report.py +++ b/api/s22_report.py @@ -0,0 +1,11 @@ +from .operation import * + + +def inp_out_report(name: str) -> list[str]: + lines = [] + objs = read_all(name, f"select * from report") + for obj in objs: + key = obj['key'] + value = obj['value'] + lines.append(f'{key} {value}') + return lines From 55a511f7fd53dad4fe3fb09a672ea6d412a4ebea Mon Sep 17 00:00:00 2001 From: "WQY\\qiong" Date: Fri, 18 Nov 2022 23:47:09 +0800 Subject: [PATCH 3/5] Fix pipe field --- api/s5_pipes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/s5_pipes.py b/api/s5_pipes.py index 9e4bcf3..afabea7 100644 --- a/api/s5_pipes.py +++ b/api/s5_pipes.py @@ -165,7 +165,7 @@ def inp_out_pipe(name: str) -> list[str]: diameter = obj['diameter'] roughness = obj['roughness'] minor_loss = obj['minor_loss'] - status = obj['vol_curve'] + status = obj['status'] desc = ';' lines.append(f'{id} {node1} {node2} {length} {diameter} {roughness} {minor_loss} {status} {desc}') return lines From d73b90c20a9354c77d63c55508496b52ce70beac Mon Sep 17 00:00:00 2001 From: "WQY\\qiong" Date: Fri, 18 Nov 2022 23:47:35 +0800 Subject: [PATCH 4/5] Support to dump inp --- api/__init__.py | 2 +- api/api_parser.py | 115 ++++++++++++++++++++++++++++++++++++++++++++-- tjnetwork.py | 3 ++ 3 files changed, 116 insertions(+), 4 deletions(-) diff --git a/api/__init__.py b/api/__init__.py index 5443d37..9856e92 100644 --- a/api/__init__.py +++ b/api/__init__.py @@ -2,7 +2,7 @@ from .project import list_project, have_project, create_project, delete_project from .project import is_project_open, get_project_open_count, open_project, close_project from .project import copy_project -from .api_parser import read_inp +from .api_parser import read_inp, dump_inp from .operation import API_ADD, API_UPDATE, API_DELETE from .operation import ChangeSet diff --git a/api/api_parser.py b/api/api_parser.py index d25a795..c02ab98 100644 --- a/api/api_parser.py +++ b/api/api_parser.py @@ -1,4 +1,5 @@ from typing import Any +import os from .project import * from .s1_title import * from .s2_junctions import * @@ -213,8 +214,116 @@ def read_inp(project: str, inp: str): create_project(project) open_project(project) - execute_batch_command(project, cs) + execute_batch_commands(project, cs) -def dump_inp(name: str, inp: str): - pass +def dump_inp(project: str, inp: str): + if not have_project(project): + return + + if not is_project_open(project): + open_project(project) + + dir = os.getcwd() + path = os.path.join(dir, inp) + + if os.path.exists(path): + os.remove(path) + + file = open(path, mode='w') + + for name in section_name: + if name == 'TITLE': + file.write(f'[{name}]\n') + else: + file.write(f'\n[{name}]\n') + + if name == 'TITLE': + file.write('\n'.join(inp_out_title(project))) + + elif name == 'JUNCTIONS': # + coords + file.write('\n'.join(inp_out_junction(project))) + + elif name == 'RESERVOIRS': # + coords + file.write('\n'.join(inp_out_reservoir(project))) + + elif name == 'TANKS': # + coords + file.write('\n'.join(inp_out_tank(project))) + + elif name == 'PIPES': + file.write('\n'.join(inp_out_pipe(project))) + + elif name == 'PUMPS': + file.write('\n'.join(inp_out_pump(project))) + + elif name == 'VALVES': + file.write('\n'.join(inp_out_valve(project))) + + elif name == 'TAGS': + file.write('\n'.join(inp_out_tag(project))) + + elif name == 'DEMANDS': + file.write('\n'.join(inp_out_demand(project))) + + elif name == 'STATUS': + file.write('\n'.join(inp_out_status(project))) + + elif name == 'PATTERNS': + file.write('\n'.join(inp_out_pattern(project))) + + elif name == 'CURVES': + file.write('\n'.join(inp_out_curve(project))) + + elif name == 'CONTROLS': + file.write('\n'.join(inp_out_control(project))) + + elif name == 'RULES': + file.write('\n'.join(inp_out_rule(project))) + + elif name == 'ENERGY': + file.write('\n'.join(inp_out_energy(project))) + + elif name == 'EMITTERS': + file.write('\n'.join(inp_out_emitter(project))) + + elif name == 'QUALITY': + file.write('\n'.join(inp_out_quality(project))) + + elif name == 'SOURCES': + file.write('\n'.join(inp_out_source(project))) + + elif name == 'REACTIONS': + file.write('\n'.join(inp_out_reaction(project))) + + elif name == 'MIXING': + file.write('\n'.join(inp_out_mixing(project))) + + elif name == 'TIMES': + file.write('\n'.join(inp_out_time(project))) + + elif name == 'REPORT': + file.write('\n'.join(inp_out_report(project))) + + elif name == 'OPTIONS': + file.write('\n'.join(inp_out_option(project))) + + elif name == 'COORDINATES': + file.write('\n'.join(inp_out_coord(project))) + + elif name == 'VERTICES': + file.write('\n'.join(inp_out_vertex(project))) + + elif name == 'LABELS': + file.write('\n'.join(inp_out_label(project))) + + elif name == 'BACKDROP': + file.write('\n'.join(inp_out_backdrop(project))) + + elif name == 'END': + pass # :) + + file.write('\n') + + file.close() + + close_project(project) diff --git a/tjnetwork.py b/tjnetwork.py index dc10683..4c09e8c 100644 --- a/tjnetwork.py +++ b/tjnetwork.py @@ -126,6 +126,9 @@ def copy_project(source: str, new: str) -> None: def read_inp(name: str, inp: str) -> None: return api.read_inp(name, inp) +def dump_inp(name: str, inp: str) -> None: + return api.dump_inp(name, inp) + ############################################################ # operation From 32ade1ed5f35f07779a50add0e81a98a11b0250c Mon Sep 17 00:00:00 2001 From: "WQY\\qiong" Date: Sat, 19 Nov 2022 00:05:16 +0800 Subject: [PATCH 5/5] Fix option exception --- api/s23_options.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/api/s23_options.py b/api/s23_options.py index 329e419..77034e2 100644 --- a/api/s23_options.py +++ b/api/s23_options.py @@ -110,12 +110,19 @@ def inp_in_option(section: list[str]) -> ChangeSet: for s in section: if s.startswith(';'): continue - - line = s.upper().strip() - for key in get_option_schema('').keys(): - if line.startswith(key): - value = line.removeprefix(key).strip() - cs |= { key : value } + + tokens = s.strip().split() + if tokens[0].upper() == 'QUALITY': + value = tokens[1] + if len(tokens) > 2: + value += f' {tokens[2]}' + cs |= { 'QUALITY' : value } + else: + line = s.upper().strip() + for key in get_option_schema('').keys(): + if line.startswith(key): + value = line.removeprefix(key).strip() + cs |= { key : value } return ChangeSet(cs)