Skip to content

Commit 1462ab8

Browse files
committed
Version 0.6.0: Staving Stack Traces
1 parent 8c687e4 commit 1462ab8

34 files changed

+2309
-675
lines changed

conda/raffiot/meta.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{% set name = "raffiot" %}
2-
{% set version = "0.5.2" %}
2+
{% set version = "0.6.0" %}
33

44
package:
55
name: "{{ name|lower }}"

docs/api/index.html

Lines changed: 312 additions & 76 deletions
Large diffs are not rendered by default.

docs/api/io.html

Lines changed: 77 additions & 53 deletions
Large diffs are not rendered by default.

docs/api/resource.html

Lines changed: 46 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ <h1 class="title">Module <code>raffiot.resource</code></h1>
3838

3939
from collections import abc
4040
from dataclasses import dataclass
41-
from typing import TypeVar, Generic, Callable, Any, Tuple, List, Iterable, Union
41+
from typing import TypeVar, Generic, Callable, Any, Tuple, List, Iterable
4242

4343
from typing_extensions import final
4444

@@ -48,7 +48,7 @@ <h1 class="title">Module <code>raffiot.resource</code></h1>
4848
from raffiot._internal import IOTag
4949
from raffiot.io import IO
5050
from raffiot.result import Result, Ok, Errors, Panic
51-
from raffiot.utils import ComputationStatus, MatchError
51+
from raffiot.utils import ComputationStatus, MatchError, TracedException
5252

5353
__all__ = [
5454
&#34;Resource&#34;,
@@ -178,7 +178,11 @@ <h1 class="title">Module <code>raffiot.resource</code></h1>
178178
return io.pure((f(a), close))
179179
except Exception as exception:
180180
return close_and_merge_failure(
181-
close, Panic(exceptions=[exception], errors=[])
181+
close,
182+
Panic(
183+
exceptions=[TracedException.in_except_clause(exception)],
184+
errors=[],
185+
),
182186
)
183187

184188
return Resource(self.create.flat_map(safe_map))
@@ -307,7 +311,7 @@ <h1 class="title">Module <code>raffiot.resource</code></h1>
307311
# Panic
308312

309313
def recover(
310-
self, handler: Callable[[List[Exception], List[E]], Resource[R, E, A]]
314+
self, handler: Callable[[List[TracedException], List[E]], Resource[R, E, A]]
311315
) -&gt; Resource[R, E, A]:
312316
&#34;&#34;&#34;
313317
React to panics (the except part of a try-except).
@@ -316,7 +320,9 @@ <h1 class="title">Module <code>raffiot.resource</code></h1>
316320
&#34;&#34;&#34;
317321
return Resource(self.create.recover(lambda p, e: handler(p, e).create))
318322

319-
def map_panic(self, f: Callable[[Exception], Exception]) -&gt; Resource[R, E, A]:
323+
def map_panic(
324+
self, f: Callable[[TracedException], TracedException]
325+
) -&gt; Resource[R, E, A]:
320326
&#34;&#34;&#34;
321327
Transform the exceptions stored if the computation fails on a panic.
322328
Do nothing otherwise.
@@ -474,7 +480,7 @@ <h1 class="title">Module <code>raffiot.resource</code></h1>
474480
return Resource(io.error(err))
475481

476482

477-
def errors(*errs: Union[E, Iterable[E]]) -&gt; Resource[R, E, A]:
483+
def errors(*errs: E) -&gt; Resource[R, E, A]:
478484
&#34;&#34;&#34;
479485
Resource creation that always fails on the errors err.
480486
&#34;&#34;&#34;
@@ -487,9 +493,7 @@ <h1 class="title">Module <code>raffiot.resource</code></h1>
487493
return Resource(io.errors(errs))
488494

489495

490-
def panic(
491-
*exceptions: Union[Exception, Iterable[Exception]], errors: List[E] = None
492-
) -&gt; Resource[R, E, A]:
496+
def panic(*exceptions: TracedException, errors: List[E] = None) -&gt; Resource[R, E, A]:
493497
&#34;&#34;&#34;
494498
Resource creation that always fails with the panic exceptions.
495499
&#34;&#34;&#34;
@@ -515,7 +519,9 @@ <h1 class="title">Module <code>raffiot.resource</code></h1>
515519
return errors(r.errors)
516520
if isinstance(r, Panic):
517521
return panic(r.exceptions, errors=r.errors)
518-
return panic(MatchError(f&#34;{r} should be a Result&#34;))
522+
return panic(
523+
TracedException.with_stack_trace(MatchError(f&#34;{r} should be a Result&#34;))
524+
)
519525

520526

521527
def from_io_resource(mio: IO[R, E, Resource[R, E, A]]) -&gt; Resource[R, E, A]:
@@ -568,9 +574,7 @@ <h1 class="title">Module <code>raffiot.resource</code></h1>
568574
return Resource(the_io.map(manager_handler))
569575

570576

571-
def zip(
572-
*rs: Union[Resource[R, E, A], Iterable[Resource[R, E, A]]]
573-
) -&gt; Resource[R, E, List[A]]:
577+
def zip(*rs: Resource[R, E, A]) -&gt; Resource[R, E, List[A]]:
574578
&#34;&#34;&#34;
575579
Transform a list of Resource into a Resource creating a list
576580
of all resources.
@@ -1004,15 +1008,15 @@ <h2 class="section-title" id="header-functions">Functions</h2>
10041008
</details>
10051009
</dd>
10061010
<dt id="raffiot.resource.errors"><code class="name flex">
1007-
<span>def <span class="ident">errors</span></span>(<span>*errs: Union[E, Iterable[E]]) ‑> <a title="raffiot.resource.Resource" href="#raffiot.resource.Resource">Resource</a>[~R, ~E, ~A]</span>
1011+
<span>def <span class="ident">errors</span></span>(<span>*errs: E) ‑> <a title="raffiot.resource.Resource" href="#raffiot.resource.Resource">Resource</a>[~R, ~E, ~A]</span>
10081012
</code></dt>
10091013
<dd>
10101014
<div class="desc"><p>Resource creation that always fails on the errors err.</p></div>
10111015
<details class="source">
10121016
<summary>
10131017
<span>Expand source code</span>
10141018
</summary>
1015-
<pre><code class="python">def errors(*errs: Union[E, Iterable[E]]) -&gt; Resource[R, E, A]:
1019+
<pre><code class="python">def errors(*errs: E) -&gt; Resource[R, E, A]:
10161020
&#34;&#34;&#34;
10171021
Resource creation that always fails on the errors err.
10181022
&#34;&#34;&#34;
@@ -1104,7 +1108,9 @@ <h2 class="section-title" id="header-functions">Functions</h2>
11041108
return errors(r.errors)
11051109
if isinstance(r, Panic):
11061110
return panic(r.exceptions, errors=r.errors)
1107-
return panic(MatchError(f&#34;{r} should be a Result&#34;))</code></pre>
1111+
return panic(
1112+
TracedException.with_stack_trace(MatchError(f&#34;{r} should be a Result&#34;))
1113+
)</code></pre>
11081114
</details>
11091115
</dd>
11101116
<dt id="raffiot.resource.from_with"><code class="name flex">
@@ -1183,17 +1189,15 @@ <h2 class="section-title" id="header-functions">Functions</h2>
11831189
</details>
11841190
</dd>
11851191
<dt id="raffiot.resource.panic"><code class="name flex">
1186-
<span>def <span class="ident">panic</span></span>(<span>*exceptions: Union[Exception, Iterable[Exception]], errors: List[E] = None) ‑> <a title="raffiot.resource.Resource" href="#raffiot.resource.Resource">Resource</a>[~R, ~E, ~A]</span>
1192+
<span>def <span class="ident">panic</span></span>(<span>*exceptions: TracedException, errors: List[E] = None) ‑> <a title="raffiot.resource.Resource" href="#raffiot.resource.Resource">Resource</a>[~R, ~E, ~A]</span>
11871193
</code></dt>
11881194
<dd>
11891195
<div class="desc"><p>Resource creation that always fails with the panic exceptions.</p></div>
11901196
<details class="source">
11911197
<summary>
11921198
<span>Expand source code</span>
11931199
</summary>
1194-
<pre><code class="python">def panic(
1195-
*exceptions: Union[Exception, Iterable[Exception]], errors: List[E] = None
1196-
) -&gt; Resource[R, E, A]:
1200+
<pre><code class="python">def panic(*exceptions: TracedException, errors: List[E] = None) -&gt; Resource[R, E, A]:
11971201
&#34;&#34;&#34;
11981202
Resource creation that always fails with the panic exceptions.
11991203
&#34;&#34;&#34;
@@ -1341,7 +1345,7 @@ <h2 class="section-title" id="header-functions">Functions</h2>
13411345
</details>
13421346
</dd>
13431347
<dt id="raffiot.resource.zip"><code class="name flex">
1344-
<span>def <span class="ident">zip</span></span>(<span>*rs: Union[<a title="raffiot.resource.Resource" href="#raffiot.resource.Resource">Resource</a>[R, E, A], Iterable[<a title="raffiot.resource.Resource" href="#raffiot.resource.Resource">Resource</a>[R, E, A]]]) ‑> <a title="raffiot.resource.Resource" href="#raffiot.resource.Resource">Resource</a>[~R, ~E, typing.List[~A]]</span>
1348+
<span>def <span class="ident">zip</span></span>(<span>*rs: <a title="raffiot.resource.Resource" href="#raffiot.resource.Resource">Resource</a>[R, E, A]) ‑> <a title="raffiot.resource.Resource" href="#raffiot.resource.Resource">Resource</a>[~R, ~E, typing.List[~A]]</span>
13451349
</code></dt>
13461350
<dd>
13471351
<div class="desc"><p>Transform a list of Resource into a Resource creating a list
@@ -1354,9 +1358,7 @@ <h2 class="section-title" id="header-functions">Functions</h2>
13541358
<summary>
13551359
<span>Expand source code</span>
13561360
</summary>
1357-
<pre><code class="python">def zip(
1358-
*rs: Union[Resource[R, E, A], Iterable[Resource[R, E, A]]]
1359-
) -&gt; Resource[R, E, List[A]]:
1361+
<pre><code class="python">def zip(*rs: Resource[R, E, A]) -&gt; Resource[R, E, List[A]]:
13601362
&#34;&#34;&#34;
13611363
Transform a list of Resource into a Resource creating a list
13621364
of all resources.
@@ -1543,7 +1545,11 @@ <h2 class="section-title" id="header-classes">Classes</h2>
15431545
return io.pure((f(a), close))
15441546
except Exception as exception:
15451547
return close_and_merge_failure(
1546-
close, Panic(exceptions=[exception], errors=[])
1548+
close,
1549+
Panic(
1550+
exceptions=[TracedException.in_except_clause(exception)],
1551+
errors=[],
1552+
),
15471553
)
15481554

15491555
return Resource(self.create.flat_map(safe_map))
@@ -1672,7 +1678,7 @@ <h2 class="section-title" id="header-classes">Classes</h2>
16721678
# Panic
16731679

16741680
def recover(
1675-
self, handler: Callable[[List[Exception], List[E]], Resource[R, E, A]]
1681+
self, handler: Callable[[List[TracedException], List[E]], Resource[R, E, A]]
16761682
) -&gt; Resource[R, E, A]:
16771683
&#34;&#34;&#34;
16781684
React to panics (the except part of a try-except).
@@ -1681,7 +1687,9 @@ <h2 class="section-title" id="header-classes">Classes</h2>
16811687
&#34;&#34;&#34;
16821688
return Resource(self.create.recover(lambda p, e: handler(p, e).create))
16831689

1684-
def map_panic(self, f: Callable[[Exception], Exception]) -&gt; Resource[R, E, A]:
1690+
def map_panic(
1691+
self, f: Callable[[TracedException], TracedException]
1692+
) -&gt; Resource[R, E, A]:
16851693
&#34;&#34;&#34;
16861694
Transform the exceptions stored if the computation fails on a panic.
16871695
Do nothing otherwise.
@@ -2011,7 +2019,11 @@ <h3>Methods</h3>
20112019
return io.pure((f(a), close))
20122020
except Exception as exception:
20132021
return close_and_merge_failure(
2014-
close, Panic(exceptions=[exception], errors=[])
2022+
close,
2023+
Panic(
2024+
exceptions=[TracedException.in_except_clause(exception)],
2025+
errors=[],
2026+
),
20152027
)
20162028

20172029
return Resource(self.create.flat_map(safe_map))</code></pre>
@@ -2040,7 +2052,7 @@ <h3>Methods</h3>
20402052
</details>
20412053
</dd>
20422054
<dt id="raffiot.resource.Resource.map_panic"><code class="name flex">
2043-
<span>def <span class="ident">map_panic</span></span>(<span>self, f: Callable[[Exception], Exception]) ‑> <a title="raffiot.resource.Resource" href="#raffiot.resource.Resource">Resource</a>[~R, ~E, ~A]</span>
2055+
<span>def <span class="ident">map_panic</span></span>(<span>self, f: Callable[[TracedException], TracedException]) ‑> <a title="raffiot.resource.Resource" href="#raffiot.resource.Resource">Resource</a>[~R, ~E, ~A]</span>
20442056
</code></dt>
20452057
<dd>
20462058
<div class="desc"><p>Transform the exceptions stored if the computation fails on a panic.
@@ -2049,7 +2061,9 @@ <h3>Methods</h3>
20492061
<summary>
20502062
<span>Expand source code</span>
20512063
</summary>
2052-
<pre><code class="python">def map_panic(self, f: Callable[[Exception], Exception]) -&gt; Resource[R, E, A]:
2064+
<pre><code class="python">def map_panic(
2065+
self, f: Callable[[TracedException], TracedException]
2066+
) -&gt; Resource[R, E, A]:
20532067
&#34;&#34;&#34;
20542068
Transform the exceptions stored if the computation fails on a panic.
20552069
Do nothing otherwise.
@@ -2099,7 +2113,7 @@ <h3>Methods</h3>
20992113
</details>
21002114
</dd>
21012115
<dt id="raffiot.resource.Resource.recover"><code class="name flex">
2102-
<span>def <span class="ident">recover</span></span>(<span>self, handler: Callable[[List[Exception], List[E]], <a title="raffiot.resource.Resource" href="#raffiot.resource.Resource">Resource</a>[R, E, A]]) ‑> <a title="raffiot.resource.Resource" href="#raffiot.resource.Resource">Resource</a>[~R, ~E, ~A]</span>
2116+
<span>def <span class="ident">recover</span></span>(<span>self, handler: Callable[[List[TracedException], List[E]], <a title="raffiot.resource.Resource" href="#raffiot.resource.Resource">Resource</a>[R, E, A]]) ‑> <a title="raffiot.resource.Resource" href="#raffiot.resource.Resource">Resource</a>[~R, ~E, ~A]</span>
21032117
</code></dt>
21042118
<dd>
21052119
<div class="desc"><p>React to panics (the except part of a try-except).</p>
@@ -2109,7 +2123,7 @@ <h3>Methods</h3>
21092123
<span>Expand source code</span>
21102124
</summary>
21112125
<pre><code class="python">def recover(
2112-
self, handler: Callable[[List[Exception], List[E]], Resource[R, E, A]]
2126+
self, handler: Callable[[List[TracedException], List[E]], Resource[R, E, A]]
21132127
) -&gt; Resource[R, E, A]:
21142128
&#34;&#34;&#34;
21152129
React to panics (the except part of a try-except).

0 commit comments

Comments
 (0)