tag:github.com,2008:https://github.com/openfga/python-sdk/releases Release notes from python-sdk 2025-12-08T18:53:40Z tag:github.com,2008:Repository/515628522/v0.9.9 2025-12-08T19:02:06Z v0.9.9 <h3><a href="https://github.com/openfga/python-sdk/compare/v0.9.8...v0.9.9">0.9.9</a> (2025-12-09)</h3> <ul> <li>feat: improve error messaging (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3651324801" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/245" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/245/hovercard" href="https://github.com/openfga/python-sdk/pull/245">#245</a>)</li> </ul> <h2>What's Changed</h2> <ul> <li>feat: improve error messaging by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SoulPancake/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SoulPancake">@SoulPancake</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3651324801" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/245" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/245/hovercard" href="https://github.com/openfga/python-sdk/pull/245">#245</a></li> <li>chore(deps): bump the dependencies group with 4 updates by <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3683661337" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/246" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/246/hovercard" href="https://github.com/openfga/python-sdk/pull/246">#246</a></li> <li>release: v0.9.9 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SoulPancake/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SoulPancake">@SoulPancake</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3707584480" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/247" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/247/hovercard" href="https://github.com/openfga/python-sdk/pull/247">#247</a></li> </ul> <p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/openfga/python-sdk/compare/v0.9.8...v0.9.9"><tt>v0.9.8...v0.9.9</tt></a></p> github-actions[bot] tag:github.com,2008:Repository/515628522/v0.9.8 2025-11-04T22:44:24Z v0.9.8 <h2><a href="https://github.com/openfga/python-sdk/compare/v0.9.7...0.9.8">0.9.8</a> (2025-11-04)</h2> <ul> <li>feat: add support for conflict options for Write operations: (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3501647305" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/235" data-hovercard-type="issue" data-hovercard-url="/openfga/python-sdk/issues/235/hovercard" href="https://github.com/openfga/python-sdk/issues/235">#235</a>)<br> The client now supports setting <code>ConflictOptions</code> on <code>ClientWriteOptions</code> to control behavior when writing duplicate tuples or deleting non-existent tuples. This feature requires OpenFGA server <a href="https://github.com/openfga/openfga/releases/tag/v1.10.0">v1.10.0</a> or later.<br> See <a href="/openfga/python-sdk/blob/v0.9.8/README.md#conflict-options-for-write-operations">Conflict Options for Write Operations</a> for more. <ul> <li><code>on_duplicate</code> for handling duplicate tuple writes (ERROR or IGNORE)</li> <li><code>on_missing</code> for handling deletes of non-existent tuples (ERROR or IGNORE)</li> </ul> </li> </ul> <h2>What's Changed</h2> <ul> <li>chore: reduce generated code by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rhamzeh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rhamzeh">@rhamzeh</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3518635380" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/236" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/236/hovercard" href="https://github.com/openfga/python-sdk/pull/236">#236</a></li> <li>chore: Added a top-level Makefile in python-sdk to simplify running tests and linters by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Abishek-Newar/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Abishek-Newar">@Abishek-Newar</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3552517998" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/241" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/241/hovercard" href="https://github.com/openfga/python-sdk/pull/241">#241</a></li> <li>feat: support write conflicts options by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SoulPancake/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SoulPancake">@SoulPancake</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3520902154" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/237" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/237/hovercard" href="https://github.com/openfga/python-sdk/pull/237">#237</a></li> <li>chore(deps): bump the dependencies group with 5 updates by <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3578526493" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/242" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/242/hovercard" href="https://github.com/openfga/python-sdk/pull/242">#242</a></li> <li>release: v0.9.8 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rhamzeh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rhamzeh">@rhamzeh</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3588299403" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/244" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/244/hovercard" href="https://github.com/openfga/python-sdk/pull/244">#244</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Abishek-Newar/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Abishek-Newar">@Abishek-Newar</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3552517998" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/241" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/241/hovercard" href="https://github.com/openfga/python-sdk/pull/241">#241</a></li> </ul> <p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/openfga/python-sdk/compare/v0.9.7...v0.9.8"><tt>v0.9.7...v0.9.8</tt></a></p> github-actions[bot] tag:github.com,2008:Repository/515628522/v0.9.7 2025-10-06T20:55:27Z v0.9.7 <h3><a href="https://github.com/openfga/python-sdk/compare/v0.9.6...v0.9.7">0.9.7</a> (2025-10-06)</h3> <ul> <li>feat: <code>headers</code> configuration property (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3483082001" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/233" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/233/hovercard" href="https://github.com/openfga/python-sdk/pull/233">#233</a>)</li> <li>fix: per-request custom header precedence (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3482497192" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/230" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/230/hovercard" href="https://github.com/openfga/python-sdk/pull/230">#230</a>)</li> </ul> <p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/openfga/python-sdk/compare/v0.9.6...v0.9.7"><tt>v0.9.6...v0.9.7</tt></a></p> github-actions[bot] tag:github.com,2008:Repository/515628522/v0.9.6 2025-09-16T21:49:19Z v0.9.6 <h3><a href="https://github.com/openfga/python-sdk/compare/v0.9.5...v0.9.6">0.9.6</a> (2025-09-15)</h3> <ul> <li>fix: reuse ssl context in the sync client (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3411828654" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/222" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/222/hovercard" href="https://github.com/openfga/python-sdk/pull/222">#222</a>) - thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wadells/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wadells">@wadells</a>!</li> <li>feat: add OAuth2 scopes parameter support to CredentialConfiguration (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3336899268" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/213" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/213/hovercard" href="https://github.com/openfga/python-sdk/pull/213">#213</a>) - thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SoulPancake/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SoulPancake">@SoulPancake</a></li> <li>chore: modernize packaging - thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/abhiaagarwal/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/abhiaagarwal">@abhiaagarwal</a></li> </ul> <h2>Full Changelog</h2> <ul> <li>chore: update readme import error by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/carlastabile/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/carlastabile">@carlastabile</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3259661325" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/202" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/202/hovercard" href="https://github.com/openfga/python-sdk/pull/202">#202</a></li> <li>Update SECURITY-INSIGHTS by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/aaguiarz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/aaguiarz">@aaguiarz</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3296130937" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/203" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/203/hovercard" href="https://github.com/openfga/python-sdk/pull/203">#203</a></li> <li>Potential fix for code scanning alert no. 1: Workflow does not contain permissions by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/aaguiarz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/aaguiarz">@aaguiarz</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3300655750" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/204" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/204/hovercard" href="https://github.com/openfga/python-sdk/pull/204">#204</a></li> <li>Potential fix for code scanning alert no. 2: Workflow does not contain permissions by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/aaguiarz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/aaguiarz">@aaguiarz</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3300724307" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/205" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/205/hovercard" href="https://github.com/openfga/python-sdk/pull/205">#205</a></li> <li>Potential fix for code scanning alert no. 3: Workflow does not contain permissions by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/aaguiarz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/aaguiarz">@aaguiarz</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3300724837" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/206" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/206/hovercard" href="https://github.com/openfga/python-sdk/pull/206">#206</a></li> <li>chore(ci): remove semgrep workflow by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rhamzeh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rhamzeh">@rhamzeh</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3304926373" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/208" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/208/hovercard" href="https://github.com/openfga/python-sdk/pull/208">#208</a></li> <li>Create scorecard.yml by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/aaguiarz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/aaguiarz">@aaguiarz</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3306783132" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/209" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/209/hovercard" href="https://github.com/openfga/python-sdk/pull/209">#209</a></li> <li>ci: update dependabot config by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/evansims/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/evansims">@evansims</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3320760393" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/211" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/211/hovercard" href="https://github.com/openfga/python-sdk/pull/211">#211</a></li> <li>chore(deps): bump the dependencies group with 3 updates by <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot] in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3320773528" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/212" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/212/hovercard" href="https://github.com/openfga/python-sdk/pull/212">#212</a></li> <li>chore(deps): update dependencies by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/evansims/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/evansims">@evansims</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3319112471" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/210" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/210/hovercard" href="https://github.com/openfga/python-sdk/pull/210">#210</a></li> <li>feat: add OAuth2 scopes parameter support to CredentialConfiguration by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SoulPancake/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SoulPancake">@SoulPancake</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3336899268" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/213" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/213/hovercard" href="https://github.com/openfga/python-sdk/pull/213">#213</a></li> <li>chore: sync sdk generator changes by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rhamzeh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rhamzeh">@rhamzeh</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3411771941" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/221" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/221/hovercard" href="https://github.com/openfga/python-sdk/pull/221">#221</a></li> <li>fix: reuse ssl context in the sync client by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rhamzeh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rhamzeh">@rhamzeh</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3411828654" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/222" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/222/hovercard" href="https://github.com/openfga/python-sdk/pull/222">#222</a></li> <li>chore: move to packaging with pyproject.toml by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rhamzeh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rhamzeh">@rhamzeh</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3411623335" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/220" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/220/hovercard" href="https://github.com/openfga/python-sdk/pull/220">#220</a></li> <li>release: v0.9.6 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rhamzeh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rhamzeh">@rhamzeh</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3412153135" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/223" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/223/hovercard" href="https://github.com/openfga/python-sdk/pull/223">#223</a></li> <li>fix(ci): fix build with uv by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rhamzeh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rhamzeh">@rhamzeh</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3423572194" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/225" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/225/hovercard" href="https://github.com/openfga/python-sdk/pull/225">#225</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/carlastabile/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/carlastabile">@carlastabile</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3259661325" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/202" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/202/hovercard" href="https://github.com/openfga/python-sdk/pull/202">#202</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SoulPancake/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SoulPancake">@SoulPancake</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3336899268" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/213" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/213/hovercard" href="https://github.com/openfga/python-sdk/pull/213">#213</a></li> </ul> <p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/openfga/python-sdk/compare/v0.9.5...v0.9.6"><tt>v0.9.5...v0.9.6</tt></a></p> github-actions[bot] tag:github.com,2008:Repository/515628522/v0.9.5 2025-07-10T00:13:30Z v0.9.5 <h3><a href="https://github.com/openfga/python-sdk/compare/v0.9.4...0.9.5">0.9.5</a> (2025-07-09)</h3> <ul> <li>fix: aiohttp.ClientResponse.data should be awaited (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3122795221" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/197" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/197/hovercard" href="https://github.com/openfga/python-sdk/pull/197">#197</a>) - thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cmbernard333/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cmbernard333">@cmbernard333</a></li> </ul> github-actions[bot] tag:github.com,2008:Repository/515628522/v0.9.4 2025-04-30T18:21:31Z v0.9.4 <h3><a href="https://github.com/openfga/python-sdk/compare/v0.9.3...0.9.4">0.9.4</a> (2025-04-30)</h3> <ul> <li>feat: support List Stores name filter (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2950036567" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/181" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/181/hovercard" href="https://github.com/openfga/python-sdk/pull/181">#181</a>)</li> <li>feat: fix and improve retries and rate limit handling. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2945379620" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/176" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/176/hovercard" href="https://github.com/openfga/python-sdk/pull/176">#176</a>) - thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/GMorris-professional/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/GMorris-professional">@GMorris-professional</a><br> The SDK now respects the rate limit headers (<code>Retry-After</code>) returned by the server and will retry the request after the specified time.<br> If the header is not sent or on network errors, it will fall back to exponential backoff.</li> <li>feat: allow more user customizations for the token issuer (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2967351178" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/186" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/186/hovercard" href="https://github.com/openfga/python-sdk/pull/186">#186</a>) - thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/manuel-lang/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/manuel-lang">@manuel-lang</a></li> <li>fix: ListRelations should not swallow errors (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2950254892" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/183" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/183/hovercard" href="https://github.com/openfga/python-sdk/pull/183">#183</a>)</li> <li>fix: urllib3 compatibility &lt; v2 (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2989712597" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/187" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/187/hovercard" href="https://github.com/openfga/python-sdk/pull/187">#187</a>)</li> </ul> github-actions[bot] tag:github.com,2008:Repository/515628522/v0.9.3 2025-04-04T14:46:01Z v0.9.3 <h3><a href="https://github.com/openfga/python-sdk/compare/v0.9.2...v0.9.3">0.9.3</a> (2025-03-26)</h3> <ul> <li>fix: urllib3 compatibility &lt; v2 (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2949800054" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/179" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/179/hovercard" href="https://github.com/openfga/python-sdk/pull/179">#179</a>)</li> </ul> github-actions[bot] tag:github.com,2008:Repository/515628522/v0.9.2 2025-03-25T15:18:32Z v0.9.2 <h3><a href="https://github.com/openfga/python-sdk/compare/v0.9.1...v0.9.2">0.9.2</a> (2025-03-25)</h3> <p>Fixed:</p> <ul> <li>Resolve some bugs with telemetry attributes and metrics tracking <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2945412280" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/177" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/177/hovercard" href="https://github.com/openfga/python-sdk/pull/177">#177</a></li> <li>Resolved the REST client erroneously closing after a <code>stream</code> request is made <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2854520011" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/172" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/172/hovercard" href="https://github.com/openfga/python-sdk/pull/172">#172</a></li> </ul> github-actions[bot] tag:github.com,2008:Repository/515628522/v0.9.1 2025-01-24T17:47:52Z v0.9.1 <h3><a href="https://github.com/openfga/python-sdk/compare/v0.9.0...v0.9.1">0.9.1</a> (2025-01-23)</h3> <p>Added:</p> <ul> <li>feat: add <code>/streamed-list-objects</code> endpoint support (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2793777217" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/163" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/163/hovercard" href="https://github.com/openfga/python-sdk/pull/163">#163</a>)</li> <li>feat: add <code>contextual_tuples</code> support for <code>/expand</code> endpoint requests (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2807773140" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/164" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/164/hovercard" href="https://github.com/openfga/python-sdk/pull/164">#164</a>)</li> </ul> github-actions[bot] tag:github.com,2008:Repository/515628522/v0.9.0 2024-12-19T17:28:34Z v0.9.0 <h3><a href="https://github.com/openfga/python-sdk/compare/v0.8.1...v0.9.0">0.9.0</a> (2024-12-19)</h3> <p>Added:</p> <ul> <li>feat: add support for <code>start_time</code> parameter in <code>ReadChanges</code> endpoint (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2747452494" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/156" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/156/hovercard" href="https://github.com/openfga/python-sdk/pull/156">#156</a>) - Note, this feature requires v1.8.0 of OpenFGA or newer</li> <li>feat!: add support for <code>BatchCheck</code> API (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2736102399" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/154" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/154/hovercard" href="https://github.com/openfga/python-sdk/pull/154">#154</a>) - Note, this feature requires v1.8.2 of OpenFGA or newer</li> </ul> <p>Changed:</p> <ul> <li>feat: remove client-side validation - thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/GMorris-professional/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/GMorris-professional">@GMorris-professional</a> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2745131579" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/155" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/155/hovercard" href="https://github.com/openfga/python-sdk/pull/155">#155</a>)</li> <li>fix: change default max retry limit to 3 from 15 - thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ovindu-a/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ovindu-a">@ovindu-a</a> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2745131579" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/155" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/155/hovercard" href="https://github.com/openfga/python-sdk/pull/155">#155</a>)</li> </ul> <div class="markdown-alert markdown-alert-warning"><p class="markdown-alert-title"><svg class="octicon octicon-alert mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg>Warning</p> <p>Usage of the existing batch_check should now use client_batch_check instead, additionally the existing<br> BatchCheckResponse has been renamed to ClientBatchCheckClientResponse.</p> <p>Please see below for how to migrate your code, and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2736102399" data-permission-text="Title is private" data-url="https://github.com/openfga/python-sdk/issues/154" data-hovercard-type="pull_request" data-hovercard-url="/openfga/python-sdk/pull/154/hovercard" href="https://github.com/openfga/python-sdk/pull/154">#154</a> for more details on this change.</p> </div> <h3>Migration</h3> <h4>"I want to continue using client side batch check"</h4> <p>Given that this necessitates an upgrade of OpenFGA, it might not be feasible for everyone to switch to the new server based method, if you wish to delay the migration, rename the existing usage to the new method name as shown below.</p> <div class="highlight highlight-source-diff notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="- client.batch_check() + client.client_batch_check()"><pre><span class="pl-md"><span class="pl-md">-</span> client.batch_check()</span> <span class="pl-mi1"><span class="pl-mi1">+</span> client.client_batch_check()</span></pre></div> <h4>"I want to migrate to the new server based batch check"</h4> <p>If you wish to migrate to the new method, whilst the method name remains the same. You will need to alter the way you construct the checks passed.</p> <ul> <li>Previously a list of <code>ClientCheckRequest</code> was constructed and passed directly to <code>batch_check</code>, now you should construct a list of <code>ClientBatchCheckItem</code> and pass a <code>ClientBatchCheckRequest</code> to <code>batch_check</code> with that list as the <code>checks</code> property <ul> <li>The <code>correlation_id</code> on a <code>ClientBatchCheckItem</code> is set for you if you do not provide it.</li> </ul> </li> <li>The <code>result</code> now contains a <code>correlation_id</code> property in addition to the <code>error</code> and <code>request</code> types and has removed the <code>response</code> property. Additionally, the <code>error</code> property is now of a <code>CheckError</code> type, rather than an <code>Exception</code> type.</li> </ul> <div class="highlight highlight-source-diff notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="checks = [ - ClientCheckRequest( + ClientBatchCheckItem( user=&quot;user:1&quot;, relation=&quot;owner&quot;, object=&quot;document:0192ab2a-d83f-756d-9397-c5ed9f3cb69a&quot;, contextual_tuples=[ ClientTuple( user=&quot;user:1&quot;, relation=&quot;owner&quot;, object=&quot;document:0192ab2a-d83f-756d-9397-c5ed9f3cb69a&quot;, ) ] ), - ClientCheckRequest( + ClientBatchCheckItem( user=&quot;use:2&quot;, relation=&quot;owner&quot;, object=&quot;document:0192ab2a-d83f-756d-9397-c5ed9f3cb69a&quot; ) ] - result = fga_client.client_batch_check(checks) + result = fga_client.batch_check(ClientBatchCheckRequest(checks=checks)) # response.result = [{ # allowed: true, # correlation_id: &quot;de3630c2-f9be-4ee5-9441-cb1fbd82ce75&quot;, # generated by the SDK # tuple: { # user: &quot;user:1&quot;, # relation: &quot;viewer&quot;, # object: &quot;document:0192ab2a-d83f-756d-9397-c5ed9f3cb69a&quot;, # contextual_tuples: [{ # user: &quot;user:1&quot;, # relation: &quot;editor&quot;, # object: &quot;document:0192ab2a-d83f-756d-9397-c5ed9f3cb69a&quot; # }] # } # }, { # allowed: false, # correlation_id: &quot;6d7c7129-9607-480e-bfd0-17c16e46b9ec&quot;, # tuple: { # user=&quot;user:2&quot;, # relation=&quot;own&quot;, # object=&quot;document:0192ab2a-d83f-756d-9397-c5ed9f3cb69a&quot; # }, # error: { # input_error: &quot;validation_error&quot;, # message: &quot;type 'doc' not found&quot; # } # }] "><pre>checks = [ <span class="pl-md"><span class="pl-md">-</span> ClientCheckRequest(</span> <span class="pl-mi1"><span class="pl-mi1">+</span> ClientBatchCheckItem(</span> user="user:1", relation="owner", object="document:0192ab2a-d83f-756d-9397-c5ed9f3cb69a", contextual_tuples=[ ClientTuple( user="user:1", relation="owner", object="document:0192ab2a-d83f-756d-9397-c5ed9f3cb69a", ) ] ), <span class="pl-md"><span class="pl-md">-</span> ClientCheckRequest(</span> <span class="pl-mi1"><span class="pl-mi1">+</span> ClientBatchCheckItem(</span> user="use:2", relation="owner", object="document:0192ab2a-d83f-756d-9397-c5ed9f3cb69a" ) ] <span class="pl-md"><span class="pl-md">-</span> result = fga_client.client_batch_check(checks)</span> <span class="pl-mi1"><span class="pl-mi1">+</span> result = fga_client.batch_check(ClientBatchCheckRequest(checks=checks))</span> <span class="pl-c"><span class="pl-c">#</span> response.result = [{</span> <span class="pl-c"><span class="pl-c">#</span> allowed: true,</span> <span class="pl-c"><span class="pl-c">#</span> correlation_id: "de3630c2-f9be-4ee5-9441-cb1fbd82ce75", # generated by the SDK</span> <span class="pl-c"><span class="pl-c">#</span> tuple: {</span> <span class="pl-c"><span class="pl-c">#</span> user: "user:1",</span> <span class="pl-c"><span class="pl-c">#</span> relation: "viewer",</span> <span class="pl-c"><span class="pl-c">#</span> object: "document:0192ab2a-d83f-756d-9397-c5ed9f3cb69a",</span> <span class="pl-c"><span class="pl-c">#</span> contextual_tuples: [{</span> <span class="pl-c"><span class="pl-c">#</span> user: "user:1",</span> <span class="pl-c"><span class="pl-c">#</span> relation: "editor",</span> <span class="pl-c"><span class="pl-c">#</span> object: "document:0192ab2a-d83f-756d-9397-c5ed9f3cb69a"</span> <span class="pl-c"><span class="pl-c">#</span> }]</span> <span class="pl-c"><span class="pl-c">#</span> }</span> <span class="pl-c"><span class="pl-c">#</span> }, {</span> <span class="pl-c"><span class="pl-c">#</span> allowed: false,</span> <span class="pl-c"><span class="pl-c">#</span> correlation_id: "6d7c7129-9607-480e-bfd0-17c16e46b9ec",</span> <span class="pl-c"><span class="pl-c">#</span> tuple: {</span> <span class="pl-c"><span class="pl-c">#</span> user="user:2",</span> <span class="pl-c"><span class="pl-c">#</span> relation="own",</span> <span class="pl-c"><span class="pl-c">#</span> object="document:0192ab2a-d83f-756d-9397-c5ed9f3cb69a"</span> <span class="pl-c"><span class="pl-c">#</span> },</span> <span class="pl-c"><span class="pl-c">#</span> error: {</span> <span class="pl-c"><span class="pl-c">#</span> input_error: "validation_error",</span> <span class="pl-c"><span class="pl-c">#</span> message: "type 'doc' not found"</span> <span class="pl-c"><span class="pl-c">#</span> }</span> <span class="pl-c"><span class="pl-c">#</span> }] </span></pre></div> github-actions[bot]