Skip to content

Commit 41e248f

Browse files
committed
feat: correctly display discovery network connections
1 parent f415645 commit 41e248f

File tree

9 files changed

+52
-55
lines changed

9 files changed

+52
-55
lines changed

doc/changelog.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
Changelog
22
=========
33

4+
[0.2.1] - Unreleased
5+
--------------------
6+
7+
Added
8+
^^^^^
9+
- Display server discovery step network connections.
10+
411
[0.2.0] - 2024-12-03
512
--------------------
613

scim2_cli/__init__.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import click
77
from httpx import Client
88
from pydantic import BaseModel
9+
from scim2_client import SCIMClientError
910
from scim2_client.engines.httpx import SyncSCIMClient
1011
from scim2_models import Group
1112
from scim2_models import Resource
@@ -23,6 +24,7 @@
2324
from scim2_cli.test import test_cli
2425
from scim2_cli.utils import DOC_URL
2526
from scim2_cli.utils import HeaderType
27+
from scim2_cli.utils import exception_to_click_error
2628
from scim2_cli.utils import split_headers
2729

2830

@@ -128,11 +130,14 @@ def cli(
128130
resource_types=resource_types_obj,
129131
service_provider_config=spc_obj,
130132
)
131-
scim_client.discover(
132-
schemas=not bool(schemas),
133-
resource_types=not bool(resource_types),
134-
service_provider_config=not bool(service_provider_config),
135-
)
133+
try:
134+
scim_client.discover(
135+
schemas=not bool(schemas),
136+
resource_types=not bool(resource_types),
137+
service_provider_config=not bool(service_provider_config),
138+
)
139+
except SCIMClientError as exc:
140+
raise exception_to_click_error(exc) from exc
136141

137142
ctx.obj["client"] = scim_client
138143
ctx.obj["resource_models"] = {

scim2_cli/create.py

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,23 @@
1-
import sys
2-
31
import click
42
from click import ClickException
53
from pydanclick import from_pydantic
64
from scim2_client import SCIMClientError
75
from scim2_models import Context
86
from sphinx_click.rst_to_ansi_formatter import make_rst_to_ansi_formatter
97

10-
from .utils import DOC_URL
11-
from .utils import ModelCommand
12-
from .utils import formatted_payload
13-
from .utils import unacceptable_fields
8+
from scim2_cli.utils import DOC_URL
9+
from scim2_cli.utils import ModelCommand
10+
from scim2_cli.utils import exception_to_click_error
11+
from scim2_cli.utils import formatted_payload
12+
from scim2_cli.utils import unacceptable_fields
1413

1514

1615
def create_payload(client, payload, indent):
1716
try:
1817
response = client.create(payload, raise_scim_errors=False)
1918

2019
except SCIMClientError as scim_exc:
21-
message = str(scim_exc)
22-
if sys.version_info >= (3, 11) and hasattr(
23-
scim_exc, "__notes__"
24-
): # pragma: no cover
25-
for note in scim_exc.__notes__:
26-
message = f"{message}\n{note}"
27-
raise ClickException(message) from scim_exc
20+
raise exception_to_click_error(scim_exc) from scim_exc
2821

2922
payload = formatted_payload(response.model_dump(), indent)
3023
click.echo(payload)

scim2_cli/delete.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import sys
2-
31
import click
42
from click import ClickException
53
from scim2_client import SCIMClientError
64
from scim2_models import Message
75
from scim2_models import Resource
86
from sphinx_click.rst_to_ansi_formatter import make_rst_to_ansi_formatter
97

8+
from scim2_cli.utils import exception_to_click_error
9+
1010
from .utils import DOC_URL
1111
from .utils import formatted_payload
1212

@@ -40,13 +40,7 @@ def delete_cli(ctx, resource_type, id, indent):
4040
response = ctx.obj["client"].delete(resource_model, id, raise_scim_errors=False)
4141

4242
except SCIMClientError as scim_exc:
43-
message = str(scim_exc)
44-
if sys.version_info >= (3, 11) and hasattr(
45-
scim_exc, "__notes__"
46-
): # pragma: no cover
47-
for note in scim_exc.__notes__:
48-
message = f"{message}\n{note}"
49-
raise ClickException(message) from scim_exc
43+
raise exception_to_click_error(scim_exc) from scim_exc
5044

5145
if response:
5246
payload = (

scim2_cli/query.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import sys
2-
31
import click
42
from click import ClickException
53
from scim2_client import SCIMClientError
@@ -9,6 +7,8 @@
97
from scim2_models import ServiceProviderConfig
108
from sphinx_click.rst_to_ansi_formatter import make_rst_to_ansi_formatter
119

10+
from scim2_cli.utils import exception_to_click_error
11+
1212
from .utils import DOC_URL
1313
from .utils import formatted_payload
1414

@@ -118,13 +118,7 @@ def query_cli(
118118
)
119119

120120
except SCIMClientError as scim_exc:
121-
message = str(scim_exc)
122-
if sys.version_info >= (3, 11) and hasattr(
123-
scim_exc, "__notes__"
124-
): # pragma: no cover
125-
for note in scim_exc.__notes__:
126-
message = f"{message}\n{note}"
127-
raise ClickException(message) from scim_exc
121+
raise exception_to_click_error(scim_exc) from scim_exc
128122

129123
payload = formatted_payload(response.model_dump(), indent)
130124
click.echo(payload)

scim2_cli/replace.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import sys
2-
31
import click
42
from click import ClickException
53
from pydanclick import from_pydantic
64
from scim2_client import SCIMClientError
75
from scim2_models import Context
86
from sphinx_click.rst_to_ansi_formatter import make_rst_to_ansi_formatter
97

8+
from scim2_cli.utils import exception_to_click_error
9+
1010
from .utils import DOC_URL
1111
from .utils import ModelCommand
1212
from .utils import formatted_payload
@@ -18,13 +18,7 @@ def replace_payload(client, payload, indent):
1818
response = client.replace(payload, raise_scim_errors=False)
1919

2020
except SCIMClientError as scim_exc:
21-
message = str(scim_exc)
22-
if sys.version_info >= (3, 11) and hasattr(
23-
scim_exc, "__notes__"
24-
): # pragma: no cover
25-
for note in scim_exc.__notes__:
26-
message = f"{message}\n{note}"
27-
raise ClickException(message) from scim_exc
21+
raise exception_to_click_error(scim_exc) from scim_exc
2822

2923
payload = formatted_payload(response.model_dump(), indent)
3024
click.echo(payload)

scim2_cli/search.py

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
import sys
2-
31
import click
4-
from click import ClickException
52
from scim2_client import SCIMClientError
63
from scim2_models import SearchRequest
74
from sphinx_click.rst_to_ansi_formatter import make_rst_to_ansi_formatter
85

6+
from scim2_cli.utils import exception_to_click_error
7+
98
from .utils import DOC_URL
109
from .utils import formatted_payload
1110

@@ -93,13 +92,7 @@ def search_cli(
9392
)
9493

9594
except SCIMClientError as scim_exc:
96-
message = str(scim_exc)
97-
if sys.version_info >= (3, 11) and hasattr(
98-
scim_exc, "__notes__"
99-
): # pragma: no cover
100-
for note in scim_exc.__notes__:
101-
message = f"{message}\n{note}"
102-
raise ClickException(message) from scim_exc
95+
raise exception_to_click_error(scim_exc) from scim_exc
10396

10497
payload = formatted_payload(response.model_dump(), indent)
10598
click.echo(payload)

scim2_cli/utils.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import json
2+
import sys
23
from enum import Enum
34

45
import click
@@ -104,3 +105,12 @@ def unacceptable_fields(context, model):
104105
for field_name in model.model_fields
105106
if not is_field_acceptable(context, model, field_name)
106107
]
108+
109+
110+
def exception_to_click_error(exception):
111+
message = str(exception)
112+
if sys.version_info >= (3, 11) and hasattr(
113+
exception, "__notes__"
114+
): # pragma: no cover
115+
message += "\n" + "\n".join(exception.__notes__)
116+
return click.ClickException(message)

tests/test_cli.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@ def test_help(runner):
2727
assert "SCIM application development CLI.\n" in result.output
2828

2929

30+
def test_bad_server(runner):
31+
"""Test that the discovery step display a readable error when a bad server has been passed."""
32+
result = runner.invoke(cli, ["--url", "http://scim.invalid", "query"])
33+
assert result.exit_code == 1
34+
assert "Error: Network error happened during request\n" in result.output
35+
36+
3037
def test_stdin_bad_json(runner, httpserver):
3138
"""Test that invalid JSON stdin raise an error."""
3239
result = runner.invoke(

0 commit comments

Comments
 (0)