From d73b90c20a9354c77d63c55508496b52ce70beac Mon Sep 17 00:00:00 2001 From: "WQY\\qiong" Date: Fri, 18 Nov 2022 23:47:35 +0800 Subject: [PATCH] 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