Refine pump schema
This commit is contained in:
@@ -5,7 +5,11 @@ from .s0_base import *
|
||||
def get_pump_schema(name: str) -> dict[str, dict[str, Any]]:
|
||||
return { 'id' : {'type': 'str' , 'optional': False , 'readonly': True },
|
||||
'node1' : {'type': 'str' , 'optional': False , 'readonly': False},
|
||||
'node2' : {'type': 'str' , 'optional': False , 'readonly': False} }
|
||||
'node2' : {'type': 'str' , 'optional': False , 'readonly': False},
|
||||
'power' : {'type': 'float' , 'optional': True , 'readonly': False},
|
||||
'head' : {'type': 'str' , 'optional': True , 'readonly': False},
|
||||
'speed' : {'type': 'float' , 'optional': True , 'readonly': False},
|
||||
'pattern' : {'type': 'str' , 'optional': True , 'readonly': False} }
|
||||
|
||||
|
||||
def get_pump(name: str, id: str) -> dict[str, Any]:
|
||||
@@ -14,6 +18,10 @@ def get_pump(name: str, id: str) -> dict[str, Any]:
|
||||
d['id'] = str(p['id'])
|
||||
d['node1'] = str(p['node1'])
|
||||
d['node2'] = str(p['node2'])
|
||||
d['power'] = float(p['power']) if p['power'] != None else None
|
||||
d['head'] = str(p['head']) if p['head'] != None else None
|
||||
d['speed'] = float(p['speed']) if p['speed'] != None else None
|
||||
d['pattern'] = str(p['pattern']) if p['pattern'] != None else None
|
||||
return d
|
||||
|
||||
|
||||
@@ -23,14 +31,22 @@ class Pump(object):
|
||||
self.id = str(input['id'])
|
||||
self.node1 = str(input['node1'])
|
||||
self.node2 = str(input['node2'])
|
||||
self.power = float(input['power']) if 'power' in input and input['power'] != None else None
|
||||
self.head = str(input['head']) if 'head' in input and input['head'] != None else None
|
||||
self.speed = float(input['speed']) if 'speed' in input and input['speed'] != None else None
|
||||
self.pattern = str(input['pattern']) if 'pattern' in input and input['pattern'] != None else None
|
||||
|
||||
self.f_type = f"'{self.type}'"
|
||||
self.f_id = f"'{self.id}'"
|
||||
self.f_node1 = f"'{self.node1}'"
|
||||
self.f_node2 = f"'{self.node2}'"
|
||||
self.f_power = self.power if self.power != None else 'null'
|
||||
self.f_head = f"'{self.head}'" if self.head != None else 'null'
|
||||
self.f_speed = self.speed if self.speed != None else 'null'
|
||||
self.f_pattern = f"'{self.pattern}'" if self.pattern != None else 'null'
|
||||
|
||||
def as_dict(self) -> dict[str, Any]:
|
||||
return { 'type': self.type, 'id': self.id, 'node1': self.node1, 'node2': self.node2 }
|
||||
return { 'type': self.type, 'id': self.id, 'node1': self.node1, 'node2': self.node2, 'power': self.power, 'head': self.head, 'speed': self.speed, 'pattern': self.pattern }
|
||||
|
||||
def as_id_dict(self) -> dict[str, Any]:
|
||||
return { 'type': self.type, 'id': self.id }
|
||||
@@ -47,8 +63,8 @@ def set_pump(name: str, cs: ChangeSet) -> ChangeSet:
|
||||
raw_new[key] = new_dict[key]
|
||||
new = Pump(raw_new)
|
||||
|
||||
redo_sql = f"update pumps set node1 = {new.f_node1}, node2 = {new.f_node2} where id = {new.f_id};"
|
||||
undo_sql = f"update pumps set node1 = {old.f_node1}, node2 = {old.f_node2} where id = {old.f_id};"
|
||||
redo_sql = f"update pumps set node1 = {new.f_node1}, node2 = {new.f_node2}, power = {new.f_power}, head = {new.f_head}, speed = {new.f_speed}, pattern = {new.f_pattern} where id = {new.f_id};"
|
||||
undo_sql = f"update pumps set node1 = {old.f_node1}, node2 = {old.f_node2}, power = {old.f_power}, head = {old.f_head}, speed = {old.f_speed}, pattern = {old.f_pattern} where id = {old.f_id};"
|
||||
|
||||
redo_cs = g_update_prefix | new.as_dict()
|
||||
undo_cs = g_update_prefix | old.as_dict()
|
||||
@@ -60,7 +76,7 @@ def add_pump(name: str, cs: ChangeSet) -> ChangeSet:
|
||||
new = Pump(cs.operations[0])
|
||||
|
||||
redo_sql = f"insert into _link (id, type) values ({new.f_id}, {new.f_type});"
|
||||
redo_sql += f"\ninsert into pumps (id, node1, node2) values ({new.f_id}, {new.f_node1}, {new.f_node2});"
|
||||
redo_sql += f"\ninsert into pumps (id, node1, node2, power, head, speed, pattern) values ({new.f_id}, {new.f_node1}, {new.f_node2}, {new.f_power}, {new.f_head}, {new.f_speed}, {new.f_pattern});"
|
||||
|
||||
undo_sql = f"delete from pumps where id = {new.f_id};"
|
||||
undo_sql += f"\ndelete from _link where id = {new.f_id};"
|
||||
@@ -78,7 +94,7 @@ def delete_pump(name: str, cs: ChangeSet) -> ChangeSet:
|
||||
redo_sql += f"\ndelete from _link where id = {old.f_id};"
|
||||
|
||||
undo_sql = f"insert into _link (id, type) values ({old.f_id}, {old.f_type});"
|
||||
undo_sql += f"\ninsert into pumps (id, node1, node2) values ({old.f_id}, {old.f_node1}, {old.f_node2});"
|
||||
undo_sql += f"\ninsert into pumps (id, node1, node2, power, head, speed, pattern) values ({old.f_id}, {old.f_node1}, {old.f_node2}, {old.f_power}, {old.f_head}, {old.f_speed}, {old.f_pattern});"
|
||||
|
||||
redo_cs = g_delete_prefix | old.as_id_dict()
|
||||
undo_cs = g_add_prefix | old.as_dict()
|
||||
|
||||
@@ -5,28 +5,9 @@ create table pumps
|
||||
id varchar(32) primary key references _link(id)
|
||||
, node1 varchar(32) references _node(id) not null
|
||||
, node2 varchar(32) references _node(id) not null
|
||||
);
|
||||
|
||||
create table pumps_property_power
|
||||
(
|
||||
id varchar primary key references pumps(id)
|
||||
, value varchar(32) not null
|
||||
);
|
||||
|
||||
create table pumps_property_speed
|
||||
(
|
||||
id varchar primary key references pumps(id)
|
||||
, value varchar(32) not null
|
||||
);
|
||||
|
||||
create table pumps_property_head
|
||||
(
|
||||
id varchar primary key references pumps(id)
|
||||
, head varchar(32) references _curve(id) not null
|
||||
);
|
||||
|
||||
create table pumps_property_pattern
|
||||
(
|
||||
id varchar primary key references pumps(id)
|
||||
, pattern varchar(32) references _pattern(id) not null
|
||||
, power numeric
|
||||
, head varchar(32) references _curve(id)
|
||||
, speed numeric
|
||||
, pattern varchar(32) references _pattern(id)
|
||||
, check (power is not null or head is not null)
|
||||
);
|
||||
|
||||
@@ -165,7 +165,7 @@ class TestApi:
|
||||
add_junction(p, ChangeSet({'id': 'j2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
||||
add_junction(p, ChangeSet({'id': 'j3', 'x': 0.0, 'y': 10.0, 'elevation': 20.0}))
|
||||
add_pipe(p, ChangeSet({'id': 'p1', 'node1': 'j1', 'node2': 'j2', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
||||
add_pump(p, ChangeSet({'id': 'p2', 'node1': 'j1', 'node2': 'j2'}))
|
||||
add_pump(p, ChangeSet({'id': 'p2', 'node1': 'j1', 'node2': 'j2', 'power': 0.0}))
|
||||
add_valve(p, ChangeSet({'id': 'v1', 'node1': 'j2', 'node2': 'j3', 'diameter': 10.0, 'v_type': VALVES_TYPE_FCV, 'setting': 0.1, 'minor_loss': 0.5 }))
|
||||
assert get_junction(p, 'j1')['links'] == ['p1', 'p2']
|
||||
assert get_junction(p, 'j2')['links'] == ['p1', 'p2', 'v1']
|
||||
@@ -322,7 +322,7 @@ class TestApi:
|
||||
add_reservoir(p, ChangeSet({'id': 'r2', 'x': 0.0, 'y': 10.0, 'head': 20.0}))
|
||||
add_reservoir(p, ChangeSet({'id': 'r3', 'x': 0.0, 'y': 10.0, 'head': 20.0}))
|
||||
add_pipe(p, ChangeSet({'id': 'p1', 'node1': 'r1', 'node2': 'r2', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
||||
add_pump(p, ChangeSet({'id': 'p2', 'node1': 'r1', 'node2': 'r2'}))
|
||||
add_pump(p, ChangeSet({'id': 'p2', 'node1': 'r1', 'node2': 'r2', 'power': 0.0}))
|
||||
add_valve(p, ChangeSet({'id': 'v1', 'node1': 'r2', 'node2': 'r3', 'diameter': 10.0, 'v_type': VALVES_TYPE_FCV, 'setting': 0.1, 'minor_loss': 0.5 }))
|
||||
assert get_reservoir(p, 'r1')['links'] == ['p1', 'p2']
|
||||
assert get_reservoir(p, 'r2')['links'] == ['p1', 'p2', 'v1']
|
||||
@@ -497,7 +497,7 @@ class TestApi:
|
||||
add_tank(p, ChangeSet({'id': 't2', 'x': 0.0, 'y': 10.0, 'elevation': 20.0, 'init_level': 1.0, 'min_level': 0.0, 'max_level': 2.0, 'diameter': 10.0, 'min_vol': 100.0, 'vol_curve': None, 'overflow': OVERFLOW_NO}))
|
||||
add_tank(p, ChangeSet({'id': 't3', 'x': 0.0, 'y': 10.0, 'elevation': 20.0, 'init_level': 1.0, 'min_level': 0.0, 'max_level': 2.0, 'diameter': 10.0, 'min_vol': 100.0, 'vol_curve': None, 'overflow': OVERFLOW_NO}))
|
||||
add_pipe(p, ChangeSet({'id': 'p1', 'node1': 't1', 'node2': 't2', 'length': 100.0, 'diameter': 10.0, 'roughness': 0.1, 'minor_loss': 0.5, 'status': PIPE_STATUS_OPEN }))
|
||||
add_pump(p, ChangeSet({'id': 'p2', 'node1': 't1', 'node2': 't2'}))
|
||||
add_pump(p, ChangeSet({'id': 'p2', 'node1': 't1', 'node2': 't2', 'power': 0.0}))
|
||||
add_valve(p, ChangeSet({'id': 'v1', 'node1': 't2', 'node2': 't3', 'diameter': 10.0, 'v_type': VALVES_TYPE_FCV, 'setting': 0.1, 'minor_loss': 0.5 }))
|
||||
assert get_tank(p, 't1')['links'] == ['p1', 'p2']
|
||||
assert get_tank(p, 't2')['links'] == ['p1', 'p2', 'v1']
|
||||
@@ -846,17 +846,25 @@ class TestApi:
|
||||
assert is_junction(p, 'j3')
|
||||
assert is_junction(p, 'j4')
|
||||
|
||||
add_pump(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2'}))
|
||||
add_pump(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2', 'power': 0.0}))
|
||||
p0 = get_pump(p, 'p0')
|
||||
assert p0['node1'] == 'j1'
|
||||
assert p0['node2'] == 'j2'
|
||||
assert p0['power'] == 0.0
|
||||
assert p0['head'] == None
|
||||
assert p0['speed'] == None
|
||||
assert p0['pattern'] == None
|
||||
|
||||
set_pump(p, ChangeSet({'id': 'p0', 'node1': 'j3', 'node2': 'j4'}))
|
||||
p0 = get_pump(p, 'p0')
|
||||
assert p0['node1'] == 'j3'
|
||||
assert p0['node2'] == 'j4'
|
||||
|
||||
add_pump(p, ChangeSet({'id': 'p1', 'node1': 'j1', 'node2': 'j2'}))
|
||||
set_pump(p, ChangeSet({'id': 'p0', 'power': 100.0}))
|
||||
p0 = get_pump(p, 'p0')
|
||||
assert p0['power'] == 100.0
|
||||
|
||||
add_pump(p, ChangeSet({'id': 'p1', 'node1': 'j1', 'node2': 'j2', 'power': 0.0}))
|
||||
links = get_links(p)
|
||||
assert len(links) == 2
|
||||
assert links[0] == 'p0'
|
||||
@@ -889,12 +897,13 @@ class TestApi:
|
||||
assert is_junction(p, 'j3')
|
||||
assert is_junction(p, 'j4')
|
||||
|
||||
cs = add_pump(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2'})).operations[0]
|
||||
cs = add_pump(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2', 'power': 0.0})).operations[0]
|
||||
assert cs['operation'] == 'add'
|
||||
assert cs['type'] == PUMP
|
||||
assert cs['id'] == 'p0'
|
||||
assert cs['node1'] == 'j1'
|
||||
assert cs['node2'] == 'j2'
|
||||
assert cs['power'] == 0.0
|
||||
|
||||
cs = execute_undo(p).operations[0]
|
||||
assert cs['operation'] == 'delete'
|
||||
@@ -919,7 +928,7 @@ class TestApi:
|
||||
links = get_links(p)
|
||||
assert len(links) == 0
|
||||
|
||||
add_pump(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2'}))
|
||||
add_pump(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2', 'power': 0.0}))
|
||||
|
||||
links = get_links(p)
|
||||
assert len(links) == 1
|
||||
@@ -968,6 +977,18 @@ class TestApi:
|
||||
assert cs['node1'] == 'j1'
|
||||
assert cs['node2'] == 'j2'
|
||||
|
||||
cs = set_pump(p, ChangeSet({'id': 'p0', 'power': 100.0})).operations[0]
|
||||
assert cs['operation'] == 'update'
|
||||
assert cs['type'] == PUMP
|
||||
assert cs['id'] == 'p0'
|
||||
assert cs['power'] == 100.0
|
||||
|
||||
cs = execute_undo(p).operations[0]
|
||||
assert cs['operation'] == 'update'
|
||||
assert cs['type'] == PUMP
|
||||
assert cs['id'] == 'p0'
|
||||
assert cs['power'] == 0.0
|
||||
|
||||
self.leave(p)
|
||||
|
||||
|
||||
|
||||
@@ -261,7 +261,7 @@ def get_pump(name: str, id: str) -> dict[str, Any]:
|
||||
def set_pump(name: str, cs: ChangeSet) -> ChangeSet:
|
||||
return api.set_pump(name, cs)
|
||||
|
||||
# example: add_pump(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2'}))
|
||||
# example: add_pump(p, ChangeSet({'id': 'p0', 'node1': 'j1', 'node2': 'j2', 'power': 0}))
|
||||
def add_pump(name: str, cs: ChangeSet) -> ChangeSet:
|
||||
return api.add_pump(name, cs)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user