rich-transient 0.1.0__py3-none-any.whl → 0.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rich_transient/__init__.py +172 -2
- {rich_transient-0.1.0.dist-info → rich_transient-0.1.1.dist-info}/METADATA +116 -12
- rich_transient-0.1.1.dist-info/RECORD +5 -0
- rich_transient-0.1.0.dist-info/RECORD +0 -5
- {rich_transient-0.1.0.dist-info → rich_transient-0.1.1.dist-info}/WHEEL +0 -0
- {rich_transient-0.1.0.dist-info → rich_transient-0.1.1.dist-info}/licenses/LICENSE +0 -0
rich_transient/__init__.py
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
"""Reusable Rich-based braille spinner
|
|
1
|
+
"""Reusable Rich-based braille spinner, transient live panel, and CLI styling for output.
|
|
2
2
|
|
|
3
3
|
This package can be used by any project that needs:
|
|
4
4
|
- A braille-style status spinner (accessible, compact)
|
|
5
5
|
- A transient live panel that streams output and clears on exit
|
|
6
|
+
- Consistent section headers, separators, and key-value panels (Rule + Panel)
|
|
6
7
|
|
|
7
8
|
Dependencies: rich
|
|
8
9
|
"""
|
|
@@ -14,15 +15,95 @@ import time
|
|
|
14
15
|
from contextlib import contextmanager
|
|
15
16
|
from dataclasses import dataclass, fields, replace
|
|
16
17
|
from types import SimpleNamespace
|
|
17
|
-
from typing import Callable, Literal, TypeVar
|
|
18
|
+
from typing import Callable, Literal, Sequence, TypeVar
|
|
18
19
|
|
|
19
20
|
from rich.console import Console
|
|
20
21
|
from rich.live import Live
|
|
21
22
|
from rich.panel import Panel
|
|
23
|
+
from rich.rule import Rule
|
|
22
24
|
from rich.text import Text
|
|
25
|
+
from rich.theme import Theme
|
|
23
26
|
|
|
24
27
|
T = TypeVar("T")
|
|
25
28
|
|
|
29
|
+
# --- Semantic style names (raw colors; use with Rule/Panel when not using a theme) ---
|
|
30
|
+
STYLE_SECTION: str = "blue"
|
|
31
|
+
STYLE_SUCCESS: str = "green"
|
|
32
|
+
STYLE_WARNING: str = "yellow"
|
|
33
|
+
STYLE_DIM: str = "dim"
|
|
34
|
+
|
|
35
|
+
# --- Theme style keys: use these with Console(theme=get_theme(...)) then style="section" etc. ---
|
|
36
|
+
THEME_STYLE_SECTION: str = "section"
|
|
37
|
+
THEME_STYLE_SUCCESS: str = "success"
|
|
38
|
+
THEME_STYLE_WARNING: str = "warning"
|
|
39
|
+
THEME_STYLE_DIM: str = "dim"
|
|
40
|
+
|
|
41
|
+
# --- Built-in themes (same keys, different palettes); use with Console(theme=get_theme("name")) ---
|
|
42
|
+
THEMES: dict[str, Theme] = {
|
|
43
|
+
"default": Theme({
|
|
44
|
+
THEME_STYLE_SECTION: "blue",
|
|
45
|
+
THEME_STYLE_SUCCESS: "green",
|
|
46
|
+
THEME_STYLE_WARNING: "yellow",
|
|
47
|
+
THEME_STYLE_DIM: "dim",
|
|
48
|
+
}),
|
|
49
|
+
"ngate": Theme({
|
|
50
|
+
THEME_STYLE_SECTION: "blue",
|
|
51
|
+
THEME_STYLE_SUCCESS: "green",
|
|
52
|
+
THEME_STYLE_WARNING: "yellow",
|
|
53
|
+
THEME_STYLE_DIM: "dim",
|
|
54
|
+
}),
|
|
55
|
+
"muted": Theme({
|
|
56
|
+
THEME_STYLE_SECTION: "dim blue",
|
|
57
|
+
THEME_STYLE_SUCCESS: "dim green",
|
|
58
|
+
THEME_STYLE_WARNING: "dim yellow",
|
|
59
|
+
THEME_STYLE_DIM: "dim",
|
|
60
|
+
}),
|
|
61
|
+
"high_contrast": Theme({
|
|
62
|
+
THEME_STYLE_SECTION: "bold bright_blue",
|
|
63
|
+
THEME_STYLE_SUCCESS: "bold bright_green",
|
|
64
|
+
THEME_STYLE_WARNING: "bold bright_yellow",
|
|
65
|
+
THEME_STYLE_DIM: "dim",
|
|
66
|
+
}),
|
|
67
|
+
"mono": Theme({
|
|
68
|
+
THEME_STYLE_SECTION: "bold",
|
|
69
|
+
THEME_STYLE_SUCCESS: "bold",
|
|
70
|
+
THEME_STYLE_WARNING: "italic",
|
|
71
|
+
THEME_STYLE_DIM: "dim",
|
|
72
|
+
}),
|
|
73
|
+
"nord": Theme({
|
|
74
|
+
THEME_STYLE_SECTION: "#5e81ac",
|
|
75
|
+
THEME_STYLE_SUCCESS: "#a3be8c",
|
|
76
|
+
THEME_STYLE_WARNING: "#ebcb8b",
|
|
77
|
+
THEME_STYLE_DIM: "dim",
|
|
78
|
+
}),
|
|
79
|
+
"dracula": Theme({
|
|
80
|
+
THEME_STYLE_SECTION: "#bd93f9",
|
|
81
|
+
THEME_STYLE_SUCCESS: "#50fa7b",
|
|
82
|
+
THEME_STYLE_WARNING: "#f1fa8c",
|
|
83
|
+
THEME_STYLE_DIM: "dim",
|
|
84
|
+
}),
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def get_theme(name: str) -> Theme:
|
|
89
|
+
"""Return a built-in theme by name. Use with Console(theme=get_theme(\"muted\")).
|
|
90
|
+
|
|
91
|
+
Available names: default, ngate, muted, high_contrast, mono, nord, dracula.
|
|
92
|
+
Falls back to \"default\" if name is unknown.
|
|
93
|
+
"""
|
|
94
|
+
return THEMES.get(name, THEMES["default"])
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def themed_console(theme_name: str = "default", **console_kwargs: object) -> Console:
|
|
98
|
+
"""Return a Console using a built-in theme. Use theme style names in helpers (e.g. style=\"section\").
|
|
99
|
+
|
|
100
|
+
Example:
|
|
101
|
+
console = themed_console(\"muted\")
|
|
102
|
+
console.print(section_rule(\"Fetch complete\", style=\"section\"))
|
|
103
|
+
console.print(key_value_panel([...], border_style=\"success\"))
|
|
104
|
+
"""
|
|
105
|
+
return Console(theme=get_theme(theme_name), **console_kwargs)
|
|
106
|
+
|
|
26
107
|
# Braille spinner frames (one per refresh) so the status line visibly animates.
|
|
27
108
|
SPINNER_BRAILLE: tuple[str, ...] = ("⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏")
|
|
28
109
|
|
|
@@ -96,6 +177,81 @@ TRANSIENT_PANEL_PRESETS: dict[str, TransientPanelConfig] = {
|
|
|
96
177
|
}
|
|
97
178
|
|
|
98
179
|
|
|
180
|
+
# --- CLI styling helpers (section rules, key-value panels) ---
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
def section_rule(
|
|
184
|
+
title: str,
|
|
185
|
+
*,
|
|
186
|
+
style: str = STYLE_SECTION,
|
|
187
|
+
) -> Rule:
|
|
188
|
+
"""Return a Rule with a bold section title (e.g. for command headers or stage labels).
|
|
189
|
+
|
|
190
|
+
Example:
|
|
191
|
+
console.print(section_rule("FETCH (THE FEED)"))
|
|
192
|
+
console.print(section_rule("Finding top source categories", style=STYLE_SECTION))
|
|
193
|
+
"""
|
|
194
|
+
return Rule(f"[bold {style}]{title}[/]", style=style)
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
def dim_rule() -> Rule:
|
|
198
|
+
"""Return a dim Rule for a subtle separator between sections."""
|
|
199
|
+
return Rule(style=STYLE_DIM)
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
def key_value_panel(
|
|
203
|
+
lines: Sequence[tuple[str, str | None]] | Sequence[str],
|
|
204
|
+
*,
|
|
205
|
+
title: str | None = None,
|
|
206
|
+
border_style: str = STYLE_SECTION,
|
|
207
|
+
padding: tuple[int, int] = (0, 1),
|
|
208
|
+
label_markup: str = "[bold]",
|
|
209
|
+
skip_none: bool = True,
|
|
210
|
+
) -> Panel:
|
|
211
|
+
"""Build a Panel from key-value pairs or preformatted lines.
|
|
212
|
+
|
|
213
|
+
Args:
|
|
214
|
+
lines: Either (label, value) pairs (values shown as plain; use markup in label)
|
|
215
|
+
or a sequence of already-marked-up line strings.
|
|
216
|
+
title: Optional panel title (e.g. "[bold blue]Top source[/]").
|
|
217
|
+
border_style: Panel border color (STYLE_SECTION, STYLE_SUCCESS, etc.).
|
|
218
|
+
padding: Panel padding (default (0, 1) for compact layout).
|
|
219
|
+
label_markup: Markup for labels when lines are (label, value) pairs.
|
|
220
|
+
skip_none: When True, omit pairs whose value is None.
|
|
221
|
+
|
|
222
|
+
Example (key-value pairs):
|
|
223
|
+
key_value_panel([
|
|
224
|
+
("Backend", "sumologic"),
|
|
225
|
+
("Hours Back", "24"),
|
|
226
|
+
("Limit", "10000"),
|
|
227
|
+
], title="[bold blue]Run settings[/]")
|
|
228
|
+
|
|
229
|
+
Example (preformatted lines):
|
|
230
|
+
key_value_panel([
|
|
231
|
+
" [bold]Size[/] [white]1,234[/]",
|
|
232
|
+
" [bold]Rate[/] [cyan]0.5 GB/hour[/]",
|
|
233
|
+
], border_style=STYLE_SUCCESS)
|
|
234
|
+
"""
|
|
235
|
+
if not lines:
|
|
236
|
+
content = ""
|
|
237
|
+
elif isinstance(lines[0], str):
|
|
238
|
+
content = "\n".join(lines)
|
|
239
|
+
else:
|
|
240
|
+
parts = []
|
|
241
|
+
for item in lines:
|
|
242
|
+
label, value = item[0], item[1]
|
|
243
|
+
if skip_none and value is None:
|
|
244
|
+
continue
|
|
245
|
+
parts.append(f" {label_markup}{label}:[/] {value}")
|
|
246
|
+
content = "\n".join(parts)
|
|
247
|
+
return Panel(
|
|
248
|
+
content,
|
|
249
|
+
title=title,
|
|
250
|
+
border_style=border_style,
|
|
251
|
+
padding=padding,
|
|
252
|
+
)
|
|
253
|
+
|
|
254
|
+
|
|
99
255
|
def _resolve_panel_config(
|
|
100
256
|
preset: Literal["default", "streaming"] | None = None,
|
|
101
257
|
config: TransientPanelConfig | None = None,
|
|
@@ -221,10 +377,24 @@ def transient_live_panel(
|
|
|
221
377
|
__all__ = [
|
|
222
378
|
"SPINNER_BRAILLE",
|
|
223
379
|
"LIVE_REFRESH_PER_SECOND",
|
|
380
|
+
"STYLE_DIM",
|
|
381
|
+
"STYLE_SECTION",
|
|
382
|
+
"STYLE_SUCCESS",
|
|
383
|
+
"STYLE_WARNING",
|
|
384
|
+
"THEMES",
|
|
385
|
+
"THEME_STYLE_DIM",
|
|
386
|
+
"THEME_STYLE_SECTION",
|
|
387
|
+
"THEME_STYLE_SUCCESS",
|
|
388
|
+
"THEME_STYLE_WARNING",
|
|
224
389
|
"TransientPanelConfig",
|
|
225
390
|
"TRANSIENT_PANEL_PRESETS",
|
|
226
391
|
"braille_spinner_for_status",
|
|
392
|
+
"dim_rule",
|
|
227
393
|
"get_braille_frame",
|
|
394
|
+
"get_theme",
|
|
395
|
+
"key_value_panel",
|
|
228
396
|
"register_braille_spinner",
|
|
397
|
+
"section_rule",
|
|
398
|
+
"themed_console",
|
|
229
399
|
"transient_live_panel",
|
|
230
400
|
]
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rich-transient
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.1
|
|
4
4
|
Summary: Reusable Rich-based braille spinner and transient live panel for CLI output
|
|
5
|
-
Project-URL: Homepage, https://github.com/
|
|
6
|
-
Project-URL: Repository, https://github.com/
|
|
7
|
-
Project-URL: Documentation, https://github.com/
|
|
5
|
+
Project-URL: Homepage, https://github.com/maravedi/rich-transient
|
|
6
|
+
Project-URL: Repository, https://github.com/maravedi/rich-transient
|
|
7
|
+
Project-URL: Documentation, https://github.com/maravedi/rich-transient#readme
|
|
8
|
+
Author: David Frazer <david.frazer336@gmail.com>
|
|
8
9
|
License-Expression: MIT
|
|
9
10
|
License-File: LICENSE
|
|
10
11
|
Keywords: cli,live,panel,progress,rich,spinner,terminal
|
|
@@ -17,7 +18,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
17
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
18
19
|
Classifier: Programming Language :: Python :: 3.13
|
|
19
20
|
Classifier: Topic :: Software Development :: User Interfaces
|
|
20
|
-
Requires-Python: >=3.
|
|
21
|
+
Requires-Python: >=3.12
|
|
21
22
|
Requires-Dist: rich>=13.7.1
|
|
22
23
|
Description-Content-Type: text/markdown
|
|
23
24
|
|
|
@@ -38,13 +39,7 @@ pip install rich-transient
|
|
|
38
39
|
|
|
39
40
|
**Standalone (from this repo):**
|
|
40
41
|
```bash
|
|
41
|
-
pip install -e
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
**As part of AutoIaC:**
|
|
45
|
-
```bash
|
|
46
|
-
pip install -e /path/to/AutoIaC
|
|
47
|
-
# installs both auto_iac and rich_transient
|
|
42
|
+
pip install -e ./rich_transient
|
|
48
43
|
```
|
|
49
44
|
|
|
50
45
|
---
|
|
@@ -231,15 +226,124 @@ with transient_live_panel("Custom", config=custom) as panel:
|
|
|
231
226
|
|
|
232
227
|
---
|
|
233
228
|
|
|
229
|
+
## CLI styling helpers (section rules and key-value panels)
|
|
230
|
+
|
|
231
|
+
For consistent command headers and summary blocks (e.g. run settings, completion messages), use semantic style constants and helpers so all commands share the same look.
|
|
232
|
+
|
|
233
|
+
**Semantic style constants** (use with `border_style=` or `style=`):
|
|
234
|
+
|
|
235
|
+
- `STYLE_SECTION` — `"blue"` (section headers, info panels)
|
|
236
|
+
- `STYLE_SUCCESS` — `"green"` (completion, success panels)
|
|
237
|
+
- `STYLE_WARNING` — `"yellow"` (warnings)
|
|
238
|
+
- `STYLE_DIM` — `"dim"` (separators)
|
|
239
|
+
|
|
240
|
+
**Section header (Rule):**
|
|
241
|
+
|
|
242
|
+
```python
|
|
243
|
+
from rich.console import Console
|
|
244
|
+
from rich_transient import section_rule, dim_rule, STYLE_SUCCESS
|
|
245
|
+
|
|
246
|
+
console = Console()
|
|
247
|
+
|
|
248
|
+
console.print(section_rule("FETCH (THE FEED)"))
|
|
249
|
+
# ... content ...
|
|
250
|
+
console.print(dim_rule())
|
|
251
|
+
|
|
252
|
+
console.print(section_rule("Fetch complete", style=STYLE_SUCCESS))
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
**Key-value panel** (static summary box with consistent padding and border):
|
|
256
|
+
|
|
257
|
+
```python
|
|
258
|
+
from rich_transient import key_value_panel, STYLE_SECTION, STYLE_SUCCESS
|
|
259
|
+
|
|
260
|
+
# From (label, value) pairs
|
|
261
|
+
console.print(key_value_panel([
|
|
262
|
+
("Backend", "sumologic"),
|
|
263
|
+
("Hours Back", "24"),
|
|
264
|
+
("Limit", "10000"),
|
|
265
|
+
], title="[bold blue]Run settings[/]", border_style=STYLE_SECTION))
|
|
266
|
+
|
|
267
|
+
# Preformatted lines (full markup control)
|
|
268
|
+
console.print(key_value_panel([
|
|
269
|
+
" [bold]Logs saved to:[/] [cyan]/path/to/logs[/]",
|
|
270
|
+
" [bold]Next steps:[/]",
|
|
271
|
+
" [dim]# Run analysis:[/]",
|
|
272
|
+
" [cyan]ngate analyze /path/to/logs/[/]",
|
|
273
|
+
], border_style=STYLE_SUCCESS))
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
Use these with `transient_live_panel` so that after the transient panel clears, your final summary uses the same `STYLE_SUCCESS` and `key_value_panel` for a consistent “done” block.
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## Themes
|
|
281
|
+
|
|
282
|
+
The module provides **themes** so you can keep the same semantic roles (section, success, warning, dim) but switch palettes. Use a themed console and pass **theme style names** (`"section"`, `"success"`, `"warning"`, `"dim"`) to `section_rule`, `key_value_panel`, and `Panel`/`Rule`; the theme maps those names to colors.
|
|
283
|
+
|
|
284
|
+
**Built-in themes:**
|
|
285
|
+
|
|
286
|
+
| Theme name | Description |
|
|
287
|
+
|------------------|-------------|
|
|
288
|
+
| `default` / `ngate` | Blue sections, green success, yellow warning (current nGate-style). |
|
|
289
|
+
| `muted` | Softer dim blue/green/yellow; good for low-contrast terminals. |
|
|
290
|
+
| `high_contrast` | Bold bright blue/green/yellow for accessibility. |
|
|
291
|
+
| `mono` | No color: bold for section/success, italic for warning, dim for separator. |
|
|
292
|
+
| `nord` | [Nord](https://www.nordtheme.com/) palette (blue, green, yellow). |
|
|
293
|
+
| `dracula` | [Dracula](https://draculatheme.com/) palette (purple, green, yellow). |
|
|
294
|
+
|
|
295
|
+
**Using a theme:**
|
|
296
|
+
|
|
297
|
+
```python
|
|
298
|
+
from rich_transient import (
|
|
299
|
+
themed_console,
|
|
300
|
+
get_theme,
|
|
301
|
+
section_rule,
|
|
302
|
+
key_value_panel,
|
|
303
|
+
THEME_STYLE_SECTION,
|
|
304
|
+
THEME_STYLE_SUCCESS,
|
|
305
|
+
)
|
|
306
|
+
|
|
307
|
+
# Option 1: themed_console (one-liner)
|
|
308
|
+
console = themed_console("muted")
|
|
309
|
+
console.print(section_rule("Fetch complete", style=THEME_STYLE_SECTION))
|
|
310
|
+
console.print(key_value_panel([("Output", "/path/to/logs")], border_style=THEME_STYLE_SUCCESS))
|
|
311
|
+
|
|
312
|
+
# Option 2: get_theme with your own Console
|
|
313
|
+
from rich.console import Console
|
|
314
|
+
console = Console(theme=get_theme("nord"))
|
|
315
|
+
console.print(section_rule("Running", style="section"))
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
**Theme style name constants:** `THEME_STYLE_SECTION`, `THEME_STYLE_SUCCESS`, `THEME_STYLE_WARNING`, `THEME_STYLE_DIM` — use these (or the strings `"section"`, `"success"`, etc.) when printing with a themed console so the theme supplies the actual color.
|
|
319
|
+
|
|
320
|
+
**Without a theme:** you can still pass raw colors to the helpers, e.g. `section_rule("Title", style=STYLE_SECTION)` (or `style="blue"`). That works with any Console.
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
234
324
|
## API summary
|
|
235
325
|
|
|
236
326
|
| Export | Type | Description |
|
|
237
327
|
|--------|------|-------------|
|
|
238
328
|
| `SPINNER_BRAILLE` | `tuple[str, ...]` | Braille spinner frames. |
|
|
239
329
|
| `LIVE_REFRESH_PER_SECOND` | `float` | Default refresh rate for live displays. |
|
|
330
|
+
| `STYLE_SECTION` | `str` | `"blue"` for section headers and info panels. |
|
|
331
|
+
| `STYLE_SUCCESS` | `str` | `"green"` for completion/success. |
|
|
332
|
+
| `STYLE_WARNING` | `str` | `"yellow"` for warnings. |
|
|
333
|
+
| `STYLE_DIM` | `str` | `"dim"` for separators. |
|
|
334
|
+
| `THEMES` | `dict[str, Theme]` | Built-in themes: default, ngate, muted, high_contrast, mono, nord, dracula. |
|
|
335
|
+
| `THEME_STYLE_SECTION` | `str` | Theme key `"section"` for section headers/panels. |
|
|
336
|
+
| `THEME_STYLE_SUCCESS` | `str` | Theme key `"success"` for completion/success. |
|
|
337
|
+
| `THEME_STYLE_WARNING` | `str` | Theme key `"warning"` for warnings. |
|
|
338
|
+
| `THEME_STYLE_DIM` | `str` | Theme key `"dim"` for separators. |
|
|
339
|
+
| `get_theme(name)` | `(str) -> Theme` | Return a built-in theme by name. |
|
|
340
|
+
| `themed_console(theme_name, **kwargs)` | `() -> Console` | Console using a built-in theme. |
|
|
240
341
|
| `get_braille_frame()` | `() -> int` | Current animation frame index for use with `SPINNER_BRAILLE`. |
|
|
241
342
|
| `braille_spinner_for_status()` | `() -> str` | Registers braille spinner with Rich and returns `"braille"` for `console.status(spinner=...)`. |
|
|
242
343
|
| `register_braille_spinner()` | `() -> None` | Idempotent registration of braille spinner in Rich's SPINNERS. |
|
|
344
|
+
| `section_rule(title, style=...)` | `() -> Rule` | Rule with bold section title. |
|
|
345
|
+
| `dim_rule()` | `() -> Rule` | Dim Rule separator. |
|
|
346
|
+
| `key_value_panel(lines, ...)` | `() -> Panel` | Panel from (label, value) pairs or preformatted lines; optional title, border_style, padding. |
|
|
243
347
|
| `TransientPanelConfig` | dataclass | Panel configuration (max_lines, display_lines, border_style, etc.). |
|
|
244
348
|
| `TRANSIENT_PANEL_PRESETS` | `dict[str, TransientPanelConfig]` | `"default"` and `"streaming"` presets. |
|
|
245
349
|
| `transient_live_panel(...)` | context manager | Yields an object with `append`, `set_status`, `run_task`. |
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
rich_transient/__init__.py,sha256=lkYJVgetzboXM5neeGXq8r2V4cc3BubBc4e1OgrJXSY,13092
|
|
2
|
+
rich_transient-0.1.1.dist-info/METADATA,sha256=Tx8-bFA94sJfKRZKTC-aMDgK4hXImaAA_DIpbNFJJDs,12254
|
|
3
|
+
rich_transient-0.1.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
4
|
+
rich_transient-0.1.1.dist-info/licenses/LICENSE,sha256=Btzdu2kIoMbdSp6OyCLupB1aRgpTCJ_szMimgEnpkkE,1056
|
|
5
|
+
rich_transient-0.1.1.dist-info/RECORD,,
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
rich_transient/__init__.py,sha256=LZo3iGwMpg1FAB7jushlI9QVcMa3tNC5CM_ovtD8fyY,7619
|
|
2
|
-
rich_transient-0.1.0.dist-info/METADATA,sha256=vg78FBOkmw_lu3v1mmXXjVDkwfYP_IElKMQSqgVU4WQ,7538
|
|
3
|
-
rich_transient-0.1.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
4
|
-
rich_transient-0.1.0.dist-info/licenses/LICENSE,sha256=Btzdu2kIoMbdSp6OyCLupB1aRgpTCJ_szMimgEnpkkE,1056
|
|
5
|
-
rich_transient-0.1.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|