Skip to content

Commit b9966ab

Browse files
authored
Merge branch 'dagster-io:master' into add_asset_key_prefix
2 parents 962c33a + 5b7838b commit b9966ab

12 files changed

Lines changed: 1114 additions & 4 deletions

File tree

CHANGES.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
# Changelog
22

3+
## 1.13.13 (core) / 0.29.13 (libraries)
4+
5+
### New
6+
7+
- [ui] The asset launch dialog now automatically expands the warnings section when alerts are present.
8+
9+
### Bugfixes
10+
11+
- Fixed an issue where a fresh installation of `dagster` could resolve an incompatible version of `grpcio-health-checking`, breaking code server imports due to a `protobuf` version conflict.
12+
- [ui] Fixed an error that occurred when viewing tick details for declarative automation runs.
13+
314
## 1.13.12 (core) / 0.29.12 (libraries)
415

516
### New
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
"""Inspect registered serdes types."""
2+
3+
import tempfile
4+
import webbrowser
5+
6+
import click
7+
from dagster_shared.serdes.serdes import _WHITELIST_MAP
8+
9+
from automation.serdes.format_html import format_html
10+
from automation.serdes.format_json import format_json
11+
from automation.serdes.format_text import format_detail, format_details, format_simple_list
12+
from automation.serdes.registry import list_descendants, scan_registry
13+
from automation.serdes.scanner import discover_and_import_serdes_modules
14+
15+
16+
@click.group(name="serdes")
17+
@click.option(
18+
"--scan",
19+
multiple=True,
20+
metavar="PACKAGE",
21+
help="Scan and import serdes types from package (can be specified multiple times)",
22+
)
23+
@click.option("--verbose", "-v", is_flag=True, help="Show verbose output during scanning")
24+
@click.pass_context
25+
def serdes(ctx, scan, verbose):
26+
"""Inspect registered serdes types."""
27+
ctx.ensure_object(dict)
28+
ctx.obj["scan"] = scan
29+
ctx.obj["verbose"] = verbose
30+
31+
32+
@serdes.command(name="list")
33+
@click.option("--detailed", is_flag=True, help="Show detailed information")
34+
@click.option("--json", "output_json", is_flag=True, help="Output as JSON")
35+
@click.option("--html", is_flag=True, help="Output as HTML")
36+
@click.pass_context
37+
def list_types(ctx, detailed, output_json, html):
38+
"""List all registered types.
39+
40+
Examples:
41+
dagster-dev serdes --scan dagster list
42+
dagster-dev serdes --scan dagster list --detailed
43+
dagster-dev serdes --scan dagster list --json
44+
"""
45+
scan_packages = ctx.obj["scan"]
46+
verbose = ctx.obj["verbose"]
47+
48+
for package_name in scan_packages:
49+
discover_and_import_serdes_modules(package_name, verbose=verbose)
50+
51+
registry = scan_registry(_WHITELIST_MAP)
52+
53+
if output_json:
54+
click.echo(format_json(registry))
55+
elif html:
56+
html_content = format_html(registry)
57+
with tempfile.NamedTemporaryFile(
58+
mode="w", suffix=".html", delete=False, encoding="utf-8"
59+
) as f:
60+
f.write(html_content)
61+
html_path = f.name
62+
click.echo(f"Opening {html_path} in browser...", err=True)
63+
webbrowser.open(f"file://{html_path}")
64+
elif detailed:
65+
all_items = (
66+
list(registry.types.values())
67+
+ list(registry.enums.values())
68+
+ list(registry.unions.values())
69+
)
70+
click.echo(format_details(all_items))
71+
else:
72+
all_items = (
73+
list(registry.types.values())
74+
+ list(registry.enums.values())
75+
+ list(registry.unions.values())
76+
)
77+
click.echo(format_simple_list(all_items))
78+
79+
80+
@serdes.command()
81+
@click.argument("typename")
82+
@click.pass_context
83+
def show(ctx, typename):
84+
"""Show detailed info for a specific type.
85+
86+
Examples:
87+
dagster-dev serdes --scan dagster show AssetKey
88+
dagster-dev serdes --scan dagster show DagsterRunStatus
89+
"""
90+
scan_packages = ctx.obj["scan"]
91+
verbose = ctx.obj["verbose"]
92+
93+
for package_name in scan_packages:
94+
discover_and_import_serdes_modules(package_name, verbose=verbose)
95+
96+
registry = scan_registry(_WHITELIST_MAP)
97+
defn = registry.get(typename)
98+
if defn is None:
99+
raise click.ClickException(f"{typename} not found")
100+
click.echo(format_detail(defn))
101+
102+
103+
@serdes.command()
104+
@click.argument("typename")
105+
@click.option("--html", is_flag=True, help="Output as HTML")
106+
@click.pass_context
107+
def tree(ctx, typename, html):
108+
"""Show type and all types it references recursively.
109+
110+
Examples:
111+
dagster-dev serdes --scan dagster tree AssetKey
112+
dagster-dev serdes --scan dagster_cloud tree AgentHeartbeat
113+
"""
114+
scan_packages = ctx.obj["scan"]
115+
verbose = ctx.obj["verbose"]
116+
117+
for package_name in scan_packages:
118+
discover_and_import_serdes_modules(package_name, verbose=verbose)
119+
120+
registry = scan_registry(_WHITELIST_MAP)
121+
defn = registry.get(typename)
122+
if defn is None:
123+
raise click.ClickException(f"{typename} not found")
124+
125+
tree_registry = list_descendants(defn.typename, registry)
126+
127+
if html:
128+
html_content = format_html(tree_registry)
129+
with tempfile.NamedTemporaryFile(
130+
mode="w", suffix=".html", delete=False, encoding="utf-8"
131+
) as f:
132+
f.write(html_content)
133+
html_path = f.name
134+
click.echo(f"Opening {html_path} in browser...", err=True)
135+
webbrowser.open(f"file://{html_path}")
136+
else:
137+
all_items = (
138+
list(tree_registry.types.values())
139+
+ list(tree_registry.enums.values())
140+
+ list(tree_registry.unions.values())
141+
)
142+
click.echo(format_details(all_items))

python_modules/automation/automation/serdes/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)