Add owner field to connection instances

This commit is contained in:
Marko Durkovic 2022-04-13 11:09:30 +02:00
parent d32742b904
commit 657032ce9f
8 changed files with 78 additions and 13 deletions

View File

@ -68,6 +68,7 @@ def upgrade_connection(rconn: Connection) -> Connection:
'cdr', 'cdr',
LATCH if rconn.ext.latching else '', LATCH if rconn.ext.latching else '',
), ),
None,
) )
@ -94,6 +95,7 @@ def downgrade_connection(rconn: Connection) -> Connection:
None, None,
int('durability: 1' in rconn.ext.offered_qos_profiles), int('durability: 1' in rconn.ext.offered_qos_profiles),
), ),
None,
) )

View File

@ -34,6 +34,7 @@ class Connection(NamedTuple):
md5sum: str md5sum: str
msgcount: int msgcount: int
ext: Union[ConnectionExtRosbag1, ConnectionExtRosbag2] ext: Union[ConnectionExtRosbag1, ConnectionExtRosbag2]
owner: object
class TopicInfo(NamedTuple): class TopicInfo(NamedTuple):

View File

@ -408,7 +408,7 @@ class Reader:
self.connections[cid] = Connection( self.connections[cid] = Connection(
*connection[0:5], *connection[0:5],
len(self.indexes[cid]), len(self.indexes[cid]),
connection[6], *connection[6:],
) )
except ReaderError: except ReaderError:
self.close() self.close()
@ -488,6 +488,7 @@ class Reader:
callerid, callerid,
latching, latching,
), ),
self,
) )
def read_chunk_info(self) -> ChunkInfo: def read_chunk_info(self) -> ChunkInfo:

View File

@ -255,6 +255,7 @@ class Writer:
callerid, callerid,
latching, latching,
), ),
self,
) )
if any(x[1:] == connection[1:] for x in self.connections.values()): if any(x[1:] == connection[1:] for x in self.connections.values()):

View File

@ -148,6 +148,7 @@ class Reader:
serialization_format=x['topic_metadata']['serialization_format'], serialization_format=x['topic_metadata']['serialization_format'],
offered_qos_profiles=x['topic_metadata'].get('offered_qos_profiles', ''), offered_qos_profiles=x['topic_metadata'].get('offered_qos_profiles', ''),
), ),
owner=self,
) for idx, x in enumerate(self.metadata['topics_with_message_count']) ) for idx, x in enumerate(self.metadata['topics_with_message_count'])
} }
noncdr = { noncdr = {

View File

@ -162,6 +162,7 @@ class Writer: # pylint: disable=too-many-instance-attributes
serialization_format=serialization_format, serialization_format=serialization_format,
offered_qos_profiles=offered_qos_profiles, offered_qos_profiles=offered_qos_profiles,
), ),
owner=self,
) )
for conn in self.connections.values(): for conn in self.connections.values():
if ( if (

View File

@ -125,16 +125,25 @@ def test_convert_1to2(tmp_path: Path) -> None:
writerinst = writer.return_value.__enter__.return_value writerinst = writer.return_value.__enter__.return_value
connections = [ connections = [
Connection(1, '/topic', 'typ', 'def', '', -1, ConnectionExtRosbag1(None, False)), Connection(1, '/topic', 'typ', 'def', '', -1, ConnectionExtRosbag1(None, False), None),
Connection(2, '/topic', 'typ', 'def', '', -1, ConnectionExtRosbag1(None, True)), Connection(2, '/topic', 'typ', 'def', '', -1, ConnectionExtRosbag1(None, True), None),
Connection(3, '/other', 'typ', 'def', '', -1, ConnectionExtRosbag1(None, False)), Connection(3, '/other', 'typ', 'def', '', -1, ConnectionExtRosbag1(None, False), None),
Connection(4, '/other', 'typ', 'def', '', -1, ConnectionExtRosbag1('caller', False)), Connection(
4,
'/other',
'typ',
'def',
'',
-1,
ConnectionExtRosbag1('caller', False),
None,
),
] ]
wconnections = [ wconnections = [
Connection(1, '/topic', 'typ', '', '', -1, ConnectionExtRosbag2('cdr', '')), Connection(1, '/topic', 'typ', '', '', -1, ConnectionExtRosbag2('cdr', ''), None),
Connection(2, '/topic', 'typ', '', '', -1, ConnectionExtRosbag2('cdr', LATCH)), Connection(2, '/topic', 'typ', '', '', -1, ConnectionExtRosbag2('cdr', LATCH), None),
Connection(3, '/other', 'typ', '', '', -1, ConnectionExtRosbag2('cdr', '')), Connection(3, '/other', 'typ', '', '', -1, ConnectionExtRosbag2('cdr', ''), None),
] ]
readerinst.connections = { readerinst.connections = {
@ -227,7 +236,16 @@ def test_convert_2to1(tmp_path: Path) -> None:
writerinst = writer.return_value.__enter__.return_value writerinst = writer.return_value.__enter__.return_value
connections = [ connections = [
Connection(1, '/topic', 'std_msgs/msg/Bool', '', '', -1, ConnectionExtRosbag2('', '')), Connection(
1,
'/topic',
'std_msgs/msg/Bool',
'',
'',
-1,
ConnectionExtRosbag2('', ''),
None,
),
Connection( Connection(
2, 2,
'/topic', '/topic',
@ -236,9 +254,28 @@ def test_convert_2to1(tmp_path: Path) -> None:
'', '',
-1, -1,
ConnectionExtRosbag2('', LATCH), ConnectionExtRosbag2('', LATCH),
None,
),
Connection(
3,
'/other',
'std_msgs/msg/Bool',
'',
'',
-1,
ConnectionExtRosbag2('', ''),
None,
),
Connection(
4,
'/other',
'std_msgs/msg/Bool',
'',
'',
-1,
ConnectionExtRosbag2('', '0'),
None,
), ),
Connection(3, '/other', 'std_msgs/msg/Bool', '', '', -1, ConnectionExtRosbag2('', '')),
Connection(4, '/other', 'std_msgs/msg/Bool', '', '', -1, ConnectionExtRosbag2('', '0')),
] ]
wconnections = [ wconnections = [
@ -250,6 +287,7 @@ def test_convert_2to1(tmp_path: Path) -> None:
'8b94c1b53db61fb6aed406028ad6332a', '8b94c1b53db61fb6aed406028ad6332a',
-1, -1,
ConnectionExtRosbag1(None, False), ConnectionExtRosbag1(None, False),
None,
), ),
Connection( Connection(
2, 2,
@ -259,6 +297,7 @@ def test_convert_2to1(tmp_path: Path) -> None:
'8b94c1b53db61fb6aed406028ad6332a', '8b94c1b53db61fb6aed406028ad6332a',
-1, -1,
ConnectionExtRosbag1(None, True), ConnectionExtRosbag1(None, True),
None,
), ),
Connection( Connection(
3, 3,
@ -268,6 +307,7 @@ def test_convert_2to1(tmp_path: Path) -> None:
'8b94c1b53db61fb6aed406028ad6332a', '8b94c1b53db61fb6aed406028ad6332a',
-1, -1,
ConnectionExtRosbag1(None, False), ConnectionExtRosbag1(None, False),
None,
), ),
] ]

View File

@ -82,7 +82,16 @@ def test_failure_cases(tmp_path: Path) -> None:
bag = Writer(tmp_path / 'write') bag = Writer(tmp_path / 'write')
with pytest.raises(WriterError, match='was not opened'): with pytest.raises(WriterError, match='was not opened'):
bag.write( bag.write(
Connection(1, '/tf', 'tf_msgs/msg/tf2', '', '', 0, ConnectionExtRosbag2('cdr', '')), Connection(
1,
'/tf',
'tf_msgs/msg/tf2',
'',
'',
0,
ConnectionExtRosbag2('cdr', ''),
None,
),
0, 0,
b'', b'',
) )
@ -95,6 +104,15 @@ def test_failure_cases(tmp_path: Path) -> None:
bag = Writer(tmp_path / 'notopic') bag = Writer(tmp_path / 'notopic')
bag.open() bag.open()
connection = Connection(1, '/tf', 'tf_msgs/msg/tf2', '', '', 0, ConnectionExtRosbag2('cdr', '')) connection = Connection(
1,
'/tf',
'tf_msgs/msg/tf2',
'',
'',
0,
ConnectionExtRosbag2('cdr', ''),
None,
)
with pytest.raises(WriterError, match='unknown connection'): with pytest.raises(WriterError, match='unknown connection'):
bag.write(connection, 42, b'\x00') bag.write(connection, 42, b'\x00')