This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/burr.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 8d848cf2 Deploy documentation from 
241d6ee0c7467841ab27f905dc26d93f2b9976c2
8d848cf2 is described below

commit 8d848cf237cee2839d7232cc97e8bd57ac03e1e4
Author: GitHub Actions <[email protected]>
AuthorDate: Mon Mar 16 05:22:09 2026 +0000

    Deploy documentation from 241d6ee0c7467841ab27f905dc26d93f2b9976c2
---
 content/_sources/concepts/transitions.rst.txt | 34 +++++++++++++++++++++++++
 content/concepts/transitions/index.html       | 31 +++++++++++++++++++++++
 content/reference/conditions/index.html       | 36 ++++++++++++++++++++++++---
 content/searchindex.js                        |  2 +-
 4 files changed, 98 insertions(+), 5 deletions(-)

diff --git a/content/_sources/concepts/transitions.rst.txt 
b/content/_sources/concepts/transitions.rst.txt
index a3338395..479ee881 100644
--- a/content/_sources/concepts/transitions.rst.txt
+++ b/content/_sources/concepts/transitions.rst.txt
@@ -54,6 +54,40 @@ Conditions have a few APIs, but the most common are the 
three convenience functi
     )
 
 
+``when()`` also supports comparison operators via Django-style ``__`` suffixes:
+
+.. code-block:: python
+
+    from burr.core import when
+    with_transitions(
+        ("check", "adult", when(age__gte=18)),       # age >= 18
+        ("check", "child", when(age__lt=18)),         # age < 18
+        ("check", "valid", when(score__gt=0, score__lte=100)),  # 0 < score <= 
100
+        ("check", "active", when(status__in=["active", "pending"])),  # 
membership
+        ("check", "tagged", when(tags__contains="python")),  # collection 
contains value
+        ("check", "clean", when(status__notin=["banned", "suspended"])),  # 
not in
+        ("check", "changed", when(status__ne="initial")),  # not equal
+        ("check", "missing", when(value__is=None)),  # identity check
+        ("check", "present", when(value__isnot=None)),  # not-identity check
+    )
+
+Available operators:
+
+- ``key=value`` — exact equality (default, unchanged)
+- ``key__eq=value`` — explicit equality
+- ``key__ne=value`` — not equal
+- ``key__gt=value`` — greater than
+- ``key__gte=value`` — greater than or equal
+- ``key__lt=value`` — less than
+- ``key__lte=value`` — less than or equal
+- ``key__in=[values]`` — value is in the given collection
+- ``key__notin=[values]`` — value is not in the given collection
+- ``key__contains=value`` — collection/string in state contains the value
+- ``key__is=value`` — identity check (``is``), useful for 
``None``/``True``/``False``
+- ``key__isnot=value`` — negated identity check (``is not``)
+
+Multiple keyword arguments are ANDed together. For more complex expressions, 
use ``expr()``.
+
 Conditions are evaluated in the order they are specified, and the first one 
that evaluates to True will be the transition that is selected
 when determining which action to run next. If no condition evaluates to 
``True``, the application execution will stop early.
 
diff --git a/content/concepts/transitions/index.html 
b/content/concepts/transitions/index.html
index 78d05ed6..20754ee3 100644
--- a/content/concepts/transitions/index.html
+++ b/content/concepts/transitions/index.html
@@ -425,6 +425,37 @@ You can think of them as edges in a graph.</p>
 <span class="p">)</span>
 </pre></div>
 </div>
+<p><code class="docutils literal notranslate"><span 
class="pre">when()</span></code> also supports comparison operators via 
Django-style <code class="docutils literal notranslate"><span 
class="pre">__</span></code> suffixes:</p>
+<div class="highlight-python notranslate"><div 
class="highlight"><pre><span></span><span class="kn">from</span><span 
class="w"> </span><span class="nn">burr.core</span><span class="w"> 
</span><span class="kn">import</span> <span class="n">when</span>
+<span class="n">with_transitions</span><span class="p">(</span>
+    <span class="p">(</span><span class="s2">&quot;check&quot;</span><span 
class="p">,</span> <span class="s2">&quot;adult&quot;</span><span 
class="p">,</span> <span class="n">when</span><span class="p">(</span><span 
class="n">age__gte</span><span class="o">=</span><span 
class="mi">18</span><span class="p">)),</span>       <span class="c1"># age 
&gt;= 18</span>
+    <span class="p">(</span><span class="s2">&quot;check&quot;</span><span 
class="p">,</span> <span class="s2">&quot;child&quot;</span><span 
class="p">,</span> <span class="n">when</span><span class="p">(</span><span 
class="n">age__lt</span><span class="o">=</span><span class="mi">18</span><span 
class="p">)),</span>         <span class="c1"># age &lt; 18</span>
+    <span class="p">(</span><span class="s2">&quot;check&quot;</span><span 
class="p">,</span> <span class="s2">&quot;valid&quot;</span><span 
class="p">,</span> <span class="n">when</span><span class="p">(</span><span 
class="n">score__gt</span><span class="o">=</span><span 
class="mi">0</span><span class="p">,</span> <span 
class="n">score__lte</span><span class="o">=</span><span 
class="mi">100</span><span class="p">)),</span>  <span class="c1"># 0 &lt; 
score &lt;= 100</span>
+    <span class="p">(</span><span class="s2">&quot;check&quot;</span><span 
class="p">,</span> <span class="s2">&quot;active&quot;</span><span 
class="p">,</span> <span class="n">when</span><span class="p">(</span><span 
class="n">status__in</span><span class="o">=</span><span 
class="p">[</span><span class="s2">&quot;active&quot;</span><span 
class="p">,</span> <span class="s2">&quot;pending&quot;</span><span 
class="p">])),</span>  <span class="c1"># membership</span>
+    <span class="p">(</span><span class="s2">&quot;check&quot;</span><span 
class="p">,</span> <span class="s2">&quot;tagged&quot;</span><span 
class="p">,</span> <span class="n">when</span><span class="p">(</span><span 
class="n">tags__contains</span><span class="o">=</span><span 
class="s2">&quot;python&quot;</span><span class="p">)),</span>  <span 
class="c1"># collection contains value</span>
+    <span class="p">(</span><span class="s2">&quot;check&quot;</span><span 
class="p">,</span> <span class="s2">&quot;clean&quot;</span><span 
class="p">,</span> <span class="n">when</span><span class="p">(</span><span 
class="n">status__notin</span><span class="o">=</span><span 
class="p">[</span><span class="s2">&quot;banned&quot;</span><span 
class="p">,</span> <span class="s2">&quot;suspended&quot;</span><span 
class="p">])),</span>  <span class="c1"># not in</span>
+    <span class="p">(</span><span class="s2">&quot;check&quot;</span><span 
class="p">,</span> <span class="s2">&quot;changed&quot;</span><span 
class="p">,</span> <span class="n">when</span><span class="p">(</span><span 
class="n">status__ne</span><span class="o">=</span><span 
class="s2">&quot;initial&quot;</span><span class="p">)),</span>  <span 
class="c1"># not equal</span>
+    <span class="p">(</span><span class="s2">&quot;check&quot;</span><span 
class="p">,</span> <span class="s2">&quot;missing&quot;</span><span 
class="p">,</span> <span class="n">when</span><span class="p">(</span><span 
class="n">value__is</span><span class="o">=</span><span 
class="kc">None</span><span class="p">)),</span>  <span class="c1"># identity 
check</span>
+    <span class="p">(</span><span class="s2">&quot;check&quot;</span><span 
class="p">,</span> <span class="s2">&quot;present&quot;</span><span 
class="p">,</span> <span class="n">when</span><span class="p">(</span><span 
class="n">value__isnot</span><span class="o">=</span><span 
class="kc">None</span><span class="p">)),</span>  <span class="c1"># 
not-identity check</span>
+<span class="p">)</span>
+</pre></div>
+</div>
+<p>Available operators:</p>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span 
class="pre">key=value</span></code> — exact equality (default, 
unchanged)</p></li>
+<li><p><code class="docutils literal notranslate"><span 
class="pre">key__eq=value</span></code> — explicit equality</p></li>
+<li><p><code class="docutils literal notranslate"><span 
class="pre">key__ne=value</span></code> — not equal</p></li>
+<li><p><code class="docutils literal notranslate"><span 
class="pre">key__gt=value</span></code> — greater than</p></li>
+<li><p><code class="docutils literal notranslate"><span 
class="pre">key__gte=value</span></code> — greater than or equal</p></li>
+<li><p><code class="docutils literal notranslate"><span 
class="pre">key__lt=value</span></code> — less than</p></li>
+<li><p><code class="docutils literal notranslate"><span 
class="pre">key__lte=value</span></code> — less than or equal</p></li>
+<li><p><code class="docutils literal notranslate"><span 
class="pre">key__in=[values]</span></code> — value is in the given 
collection</p></li>
+<li><p><code class="docutils literal notranslate"><span 
class="pre">key__notin=[values]</span></code> — value is not in the given 
collection</p></li>
+<li><p><code class="docutils literal notranslate"><span 
class="pre">key__contains=value</span></code> — collection/string in state 
contains the value</p></li>
+<li><p><code class="docutils literal notranslate"><span 
class="pre">key__is=value</span></code> — identity check (<code class="docutils 
literal notranslate"><span class="pre">is</span></code>), useful for <code 
class="docutils literal notranslate"><span class="pre">None</span></code>/<code 
class="docutils literal notranslate"><span class="pre">True</span></code>/<code 
class="docutils literal notranslate"><span 
class="pre">False</span></code></p></li>
+<li><p><code class="docutils literal notranslate"><span 
class="pre">key__isnot=value</span></code> — negated identity check (<code 
class="docutils literal notranslate"><span class="pre">is</span> <span 
class="pre">not</span></code>)</p></li>
+</ul>
+<p>Multiple keyword arguments are ANDed together. For more complex 
expressions, use <code class="docutils literal notranslate"><span 
class="pre">expr()</span></code>.</p>
 <p>Conditions are evaluated in the order they are specified, and the first one 
that evaluates to True will be the transition that is selected
 when determining which action to run next. If no condition evaluates to <code 
class="docutils literal notranslate"><span class="pre">True</span></code>, the 
application execution will stop early.</p>
 <p>The <code class="docutils literal notranslate"><span 
class="pre">~</span></code> operator will invert a condition. For instance:</p>
diff --git a/content/reference/conditions/index.html 
b/content/reference/conditions/index.html
index 22fca119..04207661 100644
--- a/content/reference/conditions/index.html
+++ b/content/reference/conditions/index.html
@@ -563,15 +563,43 @@ The result is just a key/value dictionary.</p>
 <dl class="py method">
 <dt class="sig sig-object py" id="burr.core.action.Condition.when">
 <em class="property"><span class="k"><span 
class="pre">classmethod</span></span><span class="w"> </span></em><span 
class="sig-name descname"><span class="pre">when</span></span><span 
class="sig-paren">(</span><em class="sig-param"><span class="o"><span 
class="pre">**</span></span><span class="n"><span 
class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a 
class="headerlink" href="#burr.core.action.Condition.when" title="Link to this 
definition">¶</a></dt>
-<dd><p>Returns a condition that checks if the given keys are in the
-state and equal to the given values.</p>
+<dd><p>Returns a condition that checks state values using optional 
operators.</p>
 <p>You can also refer to this as <code class="docutils literal 
notranslate"><span class="pre">from</span> <span class="pre">burr.core</span> 
<span class="pre">import</span> <span class="pre">when</span></code> in the 
API.</p>
+<p>Basic equality (unchanged from original):</p>
+<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="n">when</span><span 
class="p">(</span><span class="n">foo</span><span class="o">=</span><span 
class="s2">&quot;bar&quot;</span><span class="p">)</span>            <span 
class="c1"># state[&quot;foo&quot;] == &quot;bar&quot;</span>
+<span class="n">when</span><span class="p">(</span><span 
class="n">foo</span><span class="o">=</span><span 
class="s2">&quot;bar&quot;</span><span class="p">,</span> <span 
class="n">baz</span><span class="o">=</span><span 
class="s2">&quot;qux&quot;</span><span class="p">)</span> <span class="c1"># 
state[&quot;foo&quot;] == &quot;bar&quot; AND state[&quot;baz&quot;] == 
&quot;qux&quot;</span>
+</pre></div>
+</div>
+<p>Comparison operators via <code class="docutils literal notranslate"><span 
class="pre">__</span></code> suffix:</p>
+<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="n">when</span><span 
class="p">(</span><span class="n">age__gt</span><span class="o">=</span><span 
class="mi">18</span><span class="p">)</span>           <span class="c1"># 
state[&quot;age&quot;] &gt; 18</span>
+<span class="n">when</span><span class="p">(</span><span 
class="n">age__gte</span><span class="o">=</span><span 
class="mi">18</span><span class="p">)</span>          <span class="c1"># 
state[&quot;age&quot;] &gt;= 18</span>
+<span class="n">when</span><span class="p">(</span><span 
class="n">age__lt</span><span class="o">=</span><span class="mi">18</span><span 
class="p">)</span>           <span class="c1"># state[&quot;age&quot;] &lt; 
18</span>
+<span class="n">when</span><span class="p">(</span><span 
class="n">age__lte</span><span class="o">=</span><span 
class="mi">18</span><span class="p">)</span>          <span class="c1"># 
state[&quot;age&quot;] &lt;= 18</span>
+<span class="n">when</span><span class="p">(</span><span 
class="n">age__ne</span><span class="o">=</span><span class="mi">0</span><span 
class="p">)</span>            <span class="c1"># state[&quot;age&quot;] != 
0</span>
+<span class="n">when</span><span class="p">(</span><span 
class="n">age__eq</span><span class="o">=</span><span class="mi">18</span><span 
class="p">)</span>           <span class="c1"># state[&quot;age&quot;] == 18  
(explicit)</span>
+</pre></div>
+</div>
+<p>Membership operators:</p>
+<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="n">when</span><span 
class="p">(</span><span class="n">status__in</span><span 
class="o">=</span><span class="p">[</span><span 
class="s2">&quot;a&quot;</span><span class="p">,</span> <span 
class="s2">&quot;b&quot;</span><span class="p">])</span>     <span class="c1"># 
state[&quot;status&quot;] in [&quot;a&quot;, &quot;b&quot;]</span>
+<span class="n">when</span><span class="p">(</span><span 
class="n">status__notin</span><span class="o">=</span><span 
class="p">[</span><span class="s2">&quot;x&quot;</span><span class="p">,</span> 
<span class="s2">&quot;y&quot;</span><span class="p">])</span>  <span 
class="c1"># state[&quot;status&quot;] not in [&quot;x&quot;, 
&quot;y&quot;]</span>
+<span class="n">when</span><span class="p">(</span><span 
class="n">tags__contains</span><span class="o">=</span><span 
class="s2">&quot;python&quot;</span><span class="p">)</span>   <span 
class="c1"># &quot;python&quot; in state[&quot;tags&quot;]</span>
+</pre></div>
+</div>
+<p>Identity operators:</p>
+<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="n">when</span><span 
class="p">(</span><span class="n">value__is</span><span class="o">=</span><span 
class="kc">None</span><span class="p">)</span>            <span class="c1"># 
state[&quot;value&quot;] is None</span>
+<span class="n">when</span><span class="p">(</span><span 
class="n">value__isnot</span><span class="o">=</span><span 
class="kc">None</span><span class="p">)</span>         <span class="c1"># 
state[&quot;value&quot;] is not None</span>
+</pre></div>
+</div>
+<p>Multiple conditions are ANDed together:</p>
+<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="n">when</span><span 
class="p">(</span><span class="n">age__gte</span><span class="o">=</span><span 
class="mi">18</span><span class="p">,</span> <span class="n">status</span><span 
class="o">=</span><span class="s2">&quot;active&quot;</span><span 
class="p">)</span>  <span class="c1"># age &gt;= 18 AND status == 
&quot;active&quot;</span>
+</pre></div>
+</div>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><p><strong>kwargs</strong> – Keyword arguments of keys 
and values to check – will be an AND condition</p>
+<dd class="field-odd"><p><strong>kwargs</strong> – Keyword arguments with 
optional <code class="docutils literal notranslate"><span 
class="pre">__operator</span></code> suffixes</p>
 </dd>
 <dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>A condition that checks if the given keys are in the 
state and equal to the given values</p>
+<dd class="field-even"><p>A condition that checks all specified constraints 
(AND)</p>
 </dd>
 </dl>
 </dd></dl>
diff --git a/content/searchindex.js b/content/searchindex.js
index 1d0d87e0..1b662cb7 100644
--- a/content/searchindex.js
+++ b/content/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"alltitles":{"1. Agent application is modeled as State + 
Actions \u2013> 
Graph":[[28,"agent-application-is-modeled-as-state-actions-graph"]],"1. Make 
your methods async":[[6,"make-your-methods-async"]],"2. Build application 
\u2013> built in checkpointing & 
tracking":[[28,"build-application-built-in-checkpointing-tracking"]],"2. 
Implement the is_async method":[[6,"implement-the-is-async-method"]],"3. Comes 
with a UI":[[28,"comes-with-a-ui"]],"3. Use async persisters with  [...]
\ No newline at end of file
+Search.setIndex({"alltitles":{"1. Agent application is modeled as State + 
Actions \u2013> 
Graph":[[28,"agent-application-is-modeled-as-state-actions-graph"]],"1. Make 
your methods async":[[6,"make-your-methods-async"]],"2. Build application 
\u2013> built in checkpointing & 
tracking":[[28,"build-application-built-in-checkpointing-tracking"]],"2. 
Implement the is_async method":[[6,"implement-the-is-async-method"]],"3. Comes 
with a UI":[[28,"comes-with-a-ui"]],"3. Use async persisters with  [...]
\ No newline at end of file

Reply via email to