Skip to content

Commit b2f065d

Browse files
authored
Revert change to default bind address (#731)
* Revert default bind address change * Remove initialising `T_CONNECT` with an address tuple
1 parent 186e5b6 commit b2f065d

File tree

10 files changed

+84
-37
lines changed

10 files changed

+84
-37
lines changed

.github/workflows/pr-linter.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: pull-request-linter
22

33
on:
44
pull_request:
5-
branches: [ master ]
5+
branches: [ master, 2.0.X ]
66

77
jobs:
88

.github/workflows/pr-pytest-apps.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: pull-request-pytest-apps
22

33
on:
44
pull_request:
5-
branches: [ master ]
5+
branches: [ master, 2.0.X ]
66

77
jobs:
88

.github/workflows/pr-pytest.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: pull-request-pytest
22

33
on:
44
pull_request:
5-
branches: [ master ]
5+
branches: [ master, 2.0.X ]
66

77
jobs:
88

.github/workflows/pr-typing.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: pull-request-typing
22

33
on:
44
pull_request:
5-
branches: [ master ]
5+
branches: [ master, 2.0.X ]
66

77
jobs:
88

docs/changelog/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Release Notes
77
.. toctree::
88
:maxdepth: 1
99

10+
v2.0.1
1011
v2.0.0
1112
v1.5.7
1213
v1.5.6

docs/changelog/v2.0.1.rst

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
.. _v2.0.1:
2+
3+
2.0.1
4+
=====
5+
6+
Changes
7+
.......
8+
9+
* Revert change to default bind address
10+
* Don't allow passing an address tuple to T_CONNECT initialisation

pynetdicom/_globals.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@
9999

100100

101101
# The default address that client sockets are bound to
102-
BIND_ADDRESS = ("127.0.0.1", 0)
102+
BIND_ADDRESS = ("", 0)
103103

104104

105105
OptionalUIDType = Optional[Union[str, bytes, UID]]

pynetdicom/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55

66
# pynetdicom version
7-
__version__ = "2.0.0"
7+
__version__ = "2.0.1"
88

99
# DICOM Standard version used for SOP classes and instances
1010
__dicom_version__: str = "2021e"

pynetdicom/tests/test_transport.py

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -62,27 +62,38 @@ class TestTConnect:
6262
def test_bad_addr_raises(self):
6363
"""Test a bad init parameter raises exception"""
6464
msg = (
65-
r"'address' must be 'Tuple\[str, int\]' or "
66-
r"'pynetdicom.pdu_primitives.A_ASSOCIATE', not 'NoneType'"
65+
r"'request' must be 'pynetdicom.pdu_primitives.A_ASSOCIATE', not 'NoneType'"
6766
)
6867
with pytest.raises(TypeError, match=msg):
6968
T_CONNECT(None)
7069

71-
def test_address_tuple(self):
72-
"""Test init with a tuple"""
73-
conn = T_CONNECT(("123", 12))
74-
assert conn.address == ("123", 12)
75-
assert conn.request is None
76-
assert conn.result == ""
77-
7870
def test_address_request(self):
7971
"""Test init with an A-ASSOCIATE primitive"""
8072
request = A_ASSOCIATE()
8173
request.called_presentation_address = ("123", 12)
8274
conn = T_CONNECT(request)
8375
assert conn.address == ("123", 12)
8476
assert conn.request is request
85-
assert conn.result == ""
77+
78+
msg = r"A connection attempt has not yet been made"
79+
with pytest.raises(ValueError, match=msg):
80+
conn.result
81+
82+
def test_result_setter(self):
83+
"""Test setting the result value."""
84+
request = A_ASSOCIATE()
85+
request.called_presentation_address = ("123", 12)
86+
conn = T_CONNECT(request)
87+
88+
msg = r"Invalid connection result 'foo'"
89+
with pytest.raises(ValueError, match=msg):
90+
conn.result = "foo"
91+
92+
assert conn._result == ""
93+
94+
for result in ("Evt2", "Evt17"):
95+
conn.result = result
96+
assert conn.result == result
8697

8798

8899
class TestAssociationSocket:
@@ -161,7 +172,9 @@ def test_close_connect(self):
161172
sock.close()
162173
assert sock.socket is None
163174
# Tries to connect, sets to None if fails
164-
sock.connect(T_CONNECT(("localhost", 11112)))
175+
request = A_ASSOCIATE()
176+
request.called_presentation_address = ("localhost", 11112)
177+
sock.connect(T_CONNECT(request))
165178
assert sock.event_queue.get() == "Evt17"
166179
assert sock.socket is None
167180

pynetdicom/transport.py

Lines changed: 43 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -52,41 +52,64 @@ class T_CONNECT:
5252
"""A TRANSPORT CONNECTION primitive
5353
5454
.. versionadded:: 2.0
55+
56+
Attributes
57+
----------
58+
request : pynetdicom.pdu_primitives.A_ASSOCIATE
59+
The A-ASSOCIATE (request) primitive that generated the TRANSPORT CONNECTION
60+
primitive.
5561
"""
5662

57-
def __init__(self, address: Union[Tuple[str, int], "A_ASSOCIATE"]) -> None:
63+
def __init__(self, request: "A_ASSOCIATE") -> None:
5864
"""Create a new TRANSPORT CONNECTION primitive.
5965
6066
Parameters
6167
----------
62-
address : Union[Tuple[str, int], pynetdicom.pdu_primitives.A_ASSOCIATE]
63-
The ``(str: IP address, int: port)`` or A-ASSOCIATE (request) primitive to
64-
use when making a connection with a peer.
68+
request : pynetdicom.pdu_primitives.A_ASSOCIATE
69+
The A-ASSOCIATE (request) primitive to use when making a connection with
70+
a peer.
6571
"""
66-
self._request = None
67-
self.result = ""
68-
69-
if isinstance(address, tuple):
70-
self._address = address
71-
elif isinstance(address, A_ASSOCIATE):
72-
self._address = cast(Tuple[str, int], address.called_presentation_address)
73-
self._request = address
74-
else:
72+
self._result = ""
73+
self.request = request
74+
75+
if not isinstance(request, A_ASSOCIATE):
7576
raise TypeError(
76-
f"'address' must be 'Tuple[str, int]' or "
77-
"'pynetdicom.pdu_primitives.A_ASSOCIATE', not "
78-
f"'{address.__class__.__name__}'"
77+
f"'request' must be 'pynetdicom.pdu_primitives.A_ASSOCIATE', not "
78+
f"'{request.__class__.__name__}'"
7979
)
8080

8181
@property
8282
def address(self) -> Tuple[str, int]:
8383
"""Return the peer's ``(str: IP address, int: port)``."""
84-
return self._address
84+
return cast(Tuple[str, int], self.request.called_presentation_address)
8585

8686
@property
87-
def request(self) -> Optional[A_ASSOCIATE]:
88-
"""Return the A-ASSOCIATE (request) primitive, or ``None`` if not available."""
89-
return self._request
87+
def result(self) -> str:
88+
"""Return the result of the connection attempt as :class:`str`.
89+
90+
Parameters
91+
----------
92+
str
93+
The result of the connection attempt, ``"Evt2"`` if the connection
94+
succeeded, ``"Evt17"`` if it failed.
95+
96+
Returns
97+
-------
98+
str
99+
The result of the connection attempt, ``"Evt2"`` if the connection
100+
succeeded, ``"Evt17"`` if it failed.
101+
"""
102+
if self._result == "":
103+
raise ValueError("A connection attempt has not yet been made")
104+
105+
return self._result
106+
107+
@result.setter
108+
def result(self, value: str) -> None:
109+
if value not in ("Evt2", "Evt17"):
110+
raise ValueError(f"Invalid connection result '{value}'")
111+
112+
self._result = value
90113

91114

92115
class AssociationSocket:

0 commit comments

Comments
 (0)