devalerts 0.2.2__tar.gz → 0.2.3__tar.gz

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devalerts
3
- Version: 0.2.2
3
+ Version: 0.2.3
4
4
  Summary: Send unhandled Python exceptions straight to a Telegram chat. No backend, no account, no database — just your own bot token.
5
5
  Keywords: telegram,error-tracking,exception-monitoring,alerts,logging,monitoring,asgi
6
6
  Author: sslinNn
@@ -51,6 +51,8 @@ That's the whole setup. Two minutes with [@BotFather](https://t.me/BotFather)
51
51
  and every unhandled crash — including ones raised in threads — lands in your
52
52
  chat instead of a log file nobody's watching.
53
53
 
54
+ ![devalerts demo](https://raw.githubusercontent.com/sslinNn/devalerts/main/docs/demo.gif)
55
+
54
56
  ## Why devalerts
55
57
 
56
58
  - **Zero infrastructure.** No SaaS signup, no ingestion server, no API key
@@ -24,6 +24,8 @@ That's the whole setup. Two minutes with [@BotFather](https://t.me/BotFather)
24
24
  and every unhandled crash — including ones raised in threads — lands in your
25
25
  chat instead of a log file nobody's watching.
26
26
 
27
+ ![devalerts demo](https://raw.githubusercontent.com/sslinNn/devalerts/main/docs/demo.gif)
28
+
27
29
  ## Why devalerts
28
30
 
29
31
  - **Zero infrastructure.** No SaaS signup, no ingestion server, no API key
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "devalerts"
3
- version = "0.2.2"
3
+ version = "0.2.3"
4
4
  description = "Send unhandled Python exceptions straight to a Telegram chat. No backend, no account, no database — just your own bot token."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -27,7 +27,7 @@ _LOCATION_WIDTH = 34
27
27
  def _supports_unicode() -> bool:
28
28
  encoding = getattr(sys.stdout, "encoding", None) or ""
29
29
  try:
30
- "─●…".encode(encoding)
30
+ "─●…×".encode(encoding)
31
31
  return True
32
32
  except (LookupError, UnicodeEncodeError, TypeError):
33
33
  return False
@@ -153,6 +153,7 @@ def _dashboard(as_json: bool = False) -> int:
153
153
  sep_char = "─" if unicode_ok else "-"
154
154
  dot_char = "●" if unicode_ok else "*"
155
155
  ellipsis = "…" if unicode_ok else "..."
156
+ times_char = "×" if unicode_ok else "x"
156
157
 
157
158
  style = _Style(_color_enabled())
158
159
  type_width = max(len("TYPE"), *(len(r[1]) for r in rows))
@@ -178,7 +179,9 @@ def _dashboard(as_json: bool = False) -> int:
178
179
  muted,
179
180
  backoff_multiplier,
180
181
  ) in rows:
181
- backoff_suffix = f" ×{backoff_multiplier}" if backoff_multiplier > 1 else ""
182
+ backoff_suffix = (
183
+ f" {times_char}{backoff_multiplier}" if backoff_multiplier > 1 else ""
184
+ )
182
185
  if muted:
183
186
  muted_count += 1
184
187
  status = style.dim(f"{dot_char} muted")
File without changes