Repository files navigation

Orbita Python

orbita-python is a synchronous Python client for Orbita. It connects to one load-balanced endpoint and leaves partition routing to the server, which is the same complete non-transactional posture supported by Orbita's generated stubs.

The package is pinned to the wire contract at orbita 0.2.0-dev@cb11cf03575e2c6e370fb83500038de45bd55e69. Generated code changes only when this repository deliberately advances that source pin.

Install

python -m pip install orbita-python

Use

fromdatetimeimporttimedeltaimportorbitawithorbita.Client(
"http://127.0.0.1:7100",
credential="tenant-secret",
) asclient:
catalog=client.keyspace("default")
created=catalog.set(
b"catalog/current",
b"manifest-42",
if_not_present=True,
ttl=timedelta(minutes=5),
)
ifnotcreated.applied:
print(f"already exists at version {created.current_version}")

Use an explicit http:// endpoint for plaintext h2c. Use https:// for TLS; pass tls_credentials=grpc.ssl_channel_credentials(...) when the endpoint needs custom trust roots or a client certificate.

The operator-facing API is separate:

fromorbita.adminimportAdminClientfromorbita.v1importadmin_pb2withAdminClient(
"http://127.0.0.1:7100",
root_credential="root-secret",
) asadmin:
admin.create_keyspace(admin_pb2.CreateKeyspaceRequest(name="payments"))

API

Client.keyspace(name) returns a Keyspace with get, get_entry, set, delete, list_page, and pages. Keys and values are bytes. get returns None for a missing key, which keeps absence distinct from a stored b"".

Mutation conditions are keyword-only. set accepts if_not_present, if_version, and a datetime.timedelta TTL. delete accepts if_version. list_page returns one page, while pages carries the opaque cursor until the scan completes. Generated protobuf and gRPC modules live under orbita.v1.

Client.readiness() checks the connected node. An unready node is a successful response with ready=False, not an RPC error.

Failure Semantics

The clients retry only read-only calls that return UNAVAILABLE. They never retry a mutation because a lost reply can mean the mutation committed. In that case they raise AmbiguousMutationError; reconcile with a linearizable read before deciding whether to try again. The original grpc.RpcError is available as error.rpc_error.

A failed write condition is not an RPC error. Check applied and, when present, current_version.

Each list page is a consistent snapshot of one partition range. A multi-page scan is not a point-in-time snapshot. Versions are opaque compare-and-swap tokens, not per-key counters, and should not be compared across keys.

Compatibility

This prerelease supports the pinned KV, Health, and Admin contracts. It does not add watch, transactions, or client-side routing that the current server does not provide.

Development

python -m venv .venv
.venv/bin/pip install -e '.[dev]'
.venv/bin/ruff check .
.venv/bin/ruff format --check .
.venv/bin/mypy
.venv/bin/pytest

Regenerate the committed API from the pinned Orbita revision with:

PATH="$PWD/.venv/bin:$PATH" ./scripts/generate.sh

About

Python client for Orbita

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Orbita Python

orbita-python is a synchronous Python client for Orbita. It connects to one load-balanced endpoint and leaves partition routing to the server, which is the same complete non-transactional posture supported by Orbita's generated stubs.

The package is pinned to the wire contract at orbita 0.2.0-dev@cb11cf03575e2c6e370fb83500038de45bd55e69. Generated code changes only when this repository deliberately advances that source pin.

Install

python -m pip install orbita-python

Use

fromdatetimeimporttimedeltaimportorbitawithorbita.Client(
"http://127.0.0.1:7100",
credential="tenant-secret",
) asclient:
catalog=client.keyspace("default")
created=catalog.set(
b"catalog/current",
b"manifest-42",
if_not_present=True,
ttl=timedelta(minutes=5),
)
ifnotcreated.applied:
print(f"already exists at version {created.current_version}")

Use an explicit http:// endpoint for plaintext h2c. Use https:// for TLS; pass tls_credentials=grpc.ssl_channel_credentials(...) when the endpoint needs custom trust roots or a client certificate.

The operator-facing API is separate:

fromorbita.adminimportAdminClientfromorbita.v1importadmin_pb2withAdminClient(
"http://127.0.0.1:7100",
root_credential="root-secret",
) asadmin:
admin.create_keyspace(admin_pb2.CreateKeyspaceRequest(name="payments"))

API

Client.keyspace(name) returns a Keyspace with get, get_entry, set, delete, list_page, and pages. Keys and values are bytes. get returns None for a missing key, which keeps absence distinct from a stored b"".

Mutation conditions are keyword-only. set accepts if_not_present, if_version, and a datetime.timedelta TTL. delete accepts if_version. list_page returns one page, while pages carries the opaque cursor until the scan completes. Generated protobuf and gRPC modules live under orbita.v1.

Client.readiness() checks the connected node. An unready node is a successful response with ready=False, not an RPC error.

Failure Semantics

The clients retry only read-only calls that return UNAVAILABLE. They never retry a mutation because a lost reply can mean the mutation committed. In that case they raise AmbiguousMutationError; reconcile with a linearizable read before deciding whether to try again. The original grpc.RpcError is available as error.rpc_error.

A failed write condition is not an RPC error. Check applied and, when present, current_version.

Each list page is a consistent snapshot of one partition range. A multi-page scan is not a point-in-time snapshot. Versions are opaque compare-and-swap tokens, not per-key counters, and should not be compared across keys.

Compatibility

This prerelease supports the pinned KV, Health, and Admin contracts. It does not add watch, transactions, or client-side routing that the current server does not provide.

Development

python -m venv .venv
.venv/bin/pip install -e '.[dev]'
.venv/bin/ruff check .
.venv/bin/ruff format --check .
.venv/bin/mypy
.venv/bin/pytest

Regenerate the committed API from the pinned Orbita revision with:

PATH="$PWD/.venv/bin:$PATH" ./scripts/generate.sh

About

Python client for Orbita

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Orbita Python

orbita-python is a synchronous Python client for Orbita. It connects to one load-balanced endpoint and leaves partition routing to the server, which is the same complete non-transactional posture supported by Orbita's generated stubs.

The package is pinned to the wire contract at orbita 0.2.0-dev@cb11cf03575e2c6e370fb83500038de45bd55e69. Generated code changes only when this repository deliberately advances that source pin.

Install

python -m pip install orbita-python

Use

fromdatetimeimporttimedeltaimportorbitawithorbita.Client(
"http://127.0.0.1:7100",
credential="tenant-secret",
) asclient:
catalog=client.keyspace("default")
created=catalog.set(
b"catalog/current",
b"manifest-42",
if_not_present=True,
ttl=timedelta(minutes=5),
)
ifnotcreated.applied:
print(f"already exists at version {created.current_version}")

Use an explicit http:// endpoint for plaintext h2c. Use https:// for TLS; pass tls_credentials=grpc.ssl_channel_credentials(...) when the endpoint needs custom trust roots or a client certificate.

The operator-facing API is separate:

fromorbita.adminimportAdminClientfromorbita.v1importadmin_pb2withAdminClient(
"http://127.0.0.1:7100",
root_credential="root-secret",
) asadmin:
admin.create_keyspace(admin_pb2.CreateKeyspaceRequest(name="payments"))

API

Client.keyspace(name) returns a Keyspace with get, get_entry, set, delete, list_page, and pages. Keys and values are bytes. get returns None for a missing key, which keeps absence distinct from a stored b"".

Mutation conditions are keyword-only. set accepts if_not_present, if_version, and a datetime.timedelta TTL. delete accepts if_version. list_page returns one page, while pages carries the opaque cursor until the scan completes. Generated protobuf and gRPC modules live under orbita.v1.

Client.readiness() checks the connected node. An unready node is a successful response with ready=False, not an RPC error.

Failure Semantics

The clients retry only read-only calls that return UNAVAILABLE. They never retry a mutation because a lost reply can mean the mutation committed. In that case they raise AmbiguousMutationError; reconcile with a linearizable read before deciding whether to try again. The original grpc.RpcError is available as error.rpc_error.

A failed write condition is not an RPC error. Check applied and, when present, current_version.

Each list page is a consistent snapshot of one partition range. A multi-page scan is not a point-in-time snapshot. Versions are opaque compare-and-swap tokens, not per-key counters, and should not be compared across keys.

Compatibility

This prerelease supports the pinned KV, Health, and Admin contracts. It does not add watch, transactions, or client-side routing that the current server does not provide.

Development

python -m venv .venv
.venv/bin/pip install -e '.[dev]'
.venv/bin/ruff check .
.venv/bin/ruff format --check .
.venv/bin/mypy
.venv/bin/pytest

Regenerate the committed API from the pinned Orbita revision with:

PATH="$PWD/.venv/bin:$PATH" ./scripts/generate.sh

About

Python client for Orbita

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Orbita Python

orbita-python is a synchronous Python client for Orbita. It connects to one load-balanced endpoint and leaves partition routing to the server, which is the same complete non-transactional posture supported by Orbita's generated stubs.

The package is pinned to the wire contract at orbita 0.2.0-dev@cb11cf03575e2c6e370fb83500038de45bd55e69. Generated code changes only when this repository deliberately advances that source pin.

Install

python -m pip install orbita-python

Use

fromdatetimeimporttimedeltaimportorbitawithorbita.Client(
"http://127.0.0.1:7100",
credential="tenant-secret",
) asclient:
catalog=client.keyspace("default")
created=catalog.set(
b"catalog/current",
b"manifest-42",
if_not_present=True,
ttl=timedelta(minutes=5),
)
ifnotcreated.applied:
print(f"already exists at version {created.current_version}")

Use an explicit http:// endpoint for plaintext h2c. Use https:// for TLS; pass tls_credentials=grpc.ssl_channel_credentials(...) when the endpoint needs custom trust roots or a client certificate.

The operator-facing API is separate:

fromorbita.adminimportAdminClientfromorbita.v1importadmin_pb2withAdminClient(
"http://127.0.0.1:7100",
root_credential="root-secret",
) asadmin:
admin.create_keyspace(admin_pb2.CreateKeyspaceRequest(name="payments"))

API

Client.keyspace(name) returns a Keyspace with get, get_entry, set, delete, list_page, and pages. Keys and values are bytes. get returns None for a missing key, which keeps absence distinct from a stored b"".

Mutation conditions are keyword-only. set accepts if_not_present, if_version, and a datetime.timedelta TTL. delete accepts if_version. list_page returns one page, while pages carries the opaque cursor until the scan completes. Generated protobuf and gRPC modules live under orbita.v1.

Client.readiness() checks the connected node. An unready node is a successful response with ready=False, not an RPC error.

Failure Semantics

The clients retry only read-only calls that return UNAVAILABLE. They never retry a mutation because a lost reply can mean the mutation committed. In that case they raise AmbiguousMutationError; reconcile with a linearizable read before deciding whether to try again. The original grpc.RpcError is available as error.rpc_error.

A failed write condition is not an RPC error. Check applied and, when present, current_version.

Each list page is a consistent snapshot of one partition range. A multi-page scan is not a point-in-time snapshot. Versions are opaque compare-and-swap tokens, not per-key counters, and should not be compared across keys.

Compatibility

This prerelease supports the pinned KV, Health, and Admin contracts. It does not add watch, transactions, or client-side routing that the current server does not provide.

Development

python -m venv .venv
.venv/bin/pip install -e '.[dev]'
.venv/bin/ruff check .
.venv/bin/ruff format --check .
.venv/bin/mypy
.venv/bin/pytest

Regenerate the committed API from the pinned Orbita revision with:

PATH="$PWD/.venv/bin:$PATH" ./scripts/generate.sh

About

Python client for Orbita

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Orbita Python

orbita-python is a synchronous Python client for Orbita. It connects to one load-balanced endpoint and leaves partition routing to the server, which is the same complete non-transactional posture supported by Orbita's generated stubs.

The package is pinned to the wire contract at orbita 0.2.0-dev@cb11cf03575e2c6e370fb83500038de45bd55e69. Generated code changes only when this repository deliberately advances that source pin.

Install

python -m pip install orbita-python

Use

fromdatetimeimporttimedeltaimportorbitawithorbita.Client(
"http://127.0.0.1:7100",
credential="tenant-secret",
) asclient:
catalog=client.keyspace("default")
created=catalog.set(
b"catalog/current",
b"manifest-42",
if_not_present=True,
ttl=timedelta(minutes=5),
)
ifnotcreated.applied:
print(f"already exists at version {created.current_version}")

Use an explicit http:// endpoint for plaintext h2c. Use https:// for TLS; pass tls_credentials=grpc.ssl_channel_credentials(...) when the endpoint needs custom trust roots or a client certificate.

The operator-facing API is separate:

fromorbita.adminimportAdminClientfromorbita.v1importadmin_pb2withAdminClient(
"http://127.0.0.1:7100",
root_credential="root-secret",
) asadmin:
admin.create_keyspace(admin_pb2.CreateKeyspaceRequest(name="payments"))

API

Client.keyspace(name) returns a Keyspace with get, get_entry, set, delete, list_page, and pages. Keys and values are bytes. get returns None for a missing key, which keeps absence distinct from a stored b"".

Mutation conditions are keyword-only. set accepts if_not_present, if_version, and a datetime.timedelta TTL. delete accepts if_version. list_page returns one page, while pages carries the opaque cursor until the scan completes. Generated protobuf and gRPC modules live under orbita.v1.

Client.readiness() checks the connected node. An unready node is a successful response with ready=False, not an RPC error.

Failure Semantics

The clients retry only read-only calls that return UNAVAILABLE. They never retry a mutation because a lost reply can mean the mutation committed. In that case they raise AmbiguousMutationError; reconcile with a linearizable read before deciding whether to try again. The original grpc.RpcError is available as error.rpc_error.

A failed write condition is not an RPC error. Check applied and, when present, current_version.

Each list page is a consistent snapshot of one partition range. A multi-page scan is not a point-in-time snapshot. Versions are opaque compare-and-swap tokens, not per-key counters, and should not be compared across keys.

Compatibility

This prerelease supports the pinned KV, Health, and Admin contracts. It does not add watch, transactions, or client-side routing that the current server does not provide.

Development

python -m venv .venv
.venv/bin/pip install -e '.[dev]'
.venv/bin/ruff check .
.venv/bin/ruff format --check .
.venv/bin/mypy
.venv/bin/pytest

Regenerate the committed API from the pinned Orbita revision with:

PATH="$PWD/.venv/bin:$PATH" ./scripts/generate.sh

About

Python client for Orbita

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Orbita Python

orbita-python is a synchronous Python client for Orbita. It connects to one load-balanced endpoint and leaves partition routing to the server, which is the same complete non-transactional posture supported by Orbita's generated stubs.

The package is pinned to the wire contract at orbita 0.2.0-dev@cb11cf03575e2c6e370fb83500038de45bd55e69. Generated code changes only when this repository deliberately advances that source pin.

Install

python -m pip install orbita-python

Use

fromdatetimeimporttimedeltaimportorbitawithorbita.Client(
"http://127.0.0.1:7100",
credential="tenant-secret",
) asclient:
catalog=client.keyspace("default")
created=catalog.set(
b"catalog/current",
b"manifest-42",
if_not_present=True,
ttl=timedelta(minutes=5),
)
ifnotcreated.applied:
print(f"already exists at version {created.current_version}")

Use an explicit http:// endpoint for plaintext h2c. Use https:// for TLS; pass tls_credentials=grpc.ssl_channel_credentials(...) when the endpoint needs custom trust roots or a client certificate.

The operator-facing API is separate:

fromorbita.adminimportAdminClientfromorbita.v1importadmin_pb2withAdminClient(
"http://127.0.0.1:7100",
root_credential="root-secret",
) asadmin:
admin.create_keyspace(admin_pb2.CreateKeyspaceRequest(name="payments"))

API

Client.keyspace(name) returns a Keyspace with get, get_entry, set, delete, list_page, and pages. Keys and values are bytes. get returns None for a missing key, which keeps absence distinct from a stored b"".

Mutation conditions are keyword-only. set accepts if_not_present, if_version, and a datetime.timedelta TTL. delete accepts if_version. list_page returns one page, while pages carries the opaque cursor until the scan completes. Generated protobuf and gRPC modules live under orbita.v1.

Client.readiness() checks the connected node. An unready node is a successful response with ready=False, not an RPC error.

Failure Semantics

The clients retry only read-only calls that return UNAVAILABLE. They never retry a mutation because a lost reply can mean the mutation committed. In that case they raise AmbiguousMutationError; reconcile with a linearizable read before deciding whether to try again. The original grpc.RpcError is available as error.rpc_error.

A failed write condition is not an RPC error. Check applied and, when present, current_version.

Each list page is a consistent snapshot of one partition range. A multi-page scan is not a point-in-time snapshot. Versions are opaque compare-and-swap tokens, not per-key counters, and should not be compared across keys.

Compatibility

This prerelease supports the pinned KV, Health, and Admin contracts. It does not add watch, transactions, or client-side routing that the current server does not provide.

Development

python -m venv .venv
.venv/bin/pip install -e '.[dev]'
.venv/bin/ruff check .
.venv/bin/ruff format --check .
.venv/bin/mypy
.venv/bin/pytest

Regenerate the committed API from the pinned Orbita revision with:

PATH="$PWD/.venv/bin:$PATH" ./scripts/generate.sh

About

Python client for Orbita

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Orbita Python

orbita-python is a synchronous Python client for Orbita. It connects to one load-balanced endpoint and leaves partition routing to the server, which is the same complete non-transactional posture supported by Orbita's generated stubs.

The package is pinned to the wire contract at orbita 0.2.0-dev@cb11cf03575e2c6e370fb83500038de45bd55e69. Generated code changes only when this repository deliberately advances that source pin.

Install

python -m pip install orbita-python

Use

fromdatetimeimporttimedeltaimportorbitawithorbita.Client(
"http://127.0.0.1:7100",
credential="tenant-secret",
) asclient:
catalog=client.keyspace("default")
created=catalog.set(
b"catalog/current",
b"manifest-42",
if_not_present=True,
ttl=timedelta(minutes=5),
)
ifnotcreated.applied:
print(f"already exists at version {created.current_version}")

Use an explicit http:// endpoint for plaintext h2c. Use https:// for TLS; pass tls_credentials=grpc.ssl_channel_credentials(...) when the endpoint needs custom trust roots or a client certificate.

The operator-facing API is separate:

fromorbita.adminimportAdminClientfromorbita.v1importadmin_pb2withAdminClient(
"http://127.0.0.1:7100",
root_credential="root-secret",
) asadmin:
admin.create_keyspace(admin_pb2.CreateKeyspaceRequest(name="payments"))

API

Client.keyspace(name) returns a Keyspace with get, get_entry, set, delete, list_page, and pages. Keys and values are bytes. get returns None for a missing key, which keeps absence distinct from a stored b"".

Mutation conditions are keyword-only. set accepts if_not_present, if_version, and a datetime.timedelta TTL. delete accepts if_version. list_page returns one page, while pages carries the opaque cursor until the scan completes. Generated protobuf and gRPC modules live under orbita.v1.

Client.readiness() checks the connected node. An unready node is a successful response with ready=False, not an RPC error.

Failure Semantics

The clients retry only read-only calls that return UNAVAILABLE. They never retry a mutation because a lost reply can mean the mutation committed. In that case they raise AmbiguousMutationError; reconcile with a linearizable read before deciding whether to try again. The original grpc.RpcError is available as error.rpc_error.

A failed write condition is not an RPC error. Check applied and, when present, current_version.

Each list page is a consistent snapshot of one partition range. A multi-page scan is not a point-in-time snapshot. Versions are opaque compare-and-swap tokens, not per-key counters, and should not be compared across keys.

Compatibility

This prerelease supports the pinned KV, Health, and Admin contracts. It does not add watch, transactions, or client-side routing that the current server does not provide.

Development

python -m venv .venv
.venv/bin/pip install -e '.[dev]'
.venv/bin/ruff check .
.venv/bin/ruff format --check .
.venv/bin/mypy
.venv/bin/pytest

Regenerate the committed API from the pinned Orbita revision with:

PATH="$PWD/.venv/bin:$PATH" ./scripts/generate.sh

About

Python client for Orbita

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Orbita Python

orbita-python is a synchronous Python client for Orbita. It connects to one load-balanced endpoint and leaves partition routing to the server, which is the same complete non-transactional posture supported by Orbita's generated stubs.

The package is pinned to the wire contract at orbita 0.2.0-dev@cb11cf03575e2c6e370fb83500038de45bd55e69. Generated code changes only when this repository deliberately advances that source pin.

Install

python -m pip install orbita-python

Use

fromdatetimeimporttimedeltaimportorbitawithorbita.Client(
"http://127.0.0.1:7100",
credential="tenant-secret",
) asclient:
catalog=client.keyspace("default")
created=catalog.set(
b"catalog/current",
b"manifest-42",
if_not_present=True,
ttl=timedelta(minutes=5),
)
ifnotcreated.applied:
print(f"already exists at version {created.current_version}")

Use an explicit http:// endpoint for plaintext h2c. Use https:// for TLS; pass tls_credentials=grpc.ssl_channel_credentials(...) when the endpoint needs custom trust roots or a client certificate.

The operator-facing API is separate:

fromorbita.adminimportAdminClientfromorbita.v1importadmin_pb2withAdminClient(
"http://127.0.0.1:7100",
root_credential="root-secret",
) asadmin:
admin.create_keyspace(admin_pb2.CreateKeyspaceRequest(name="payments"))

API

Client.keyspace(name) returns a Keyspace with get, get_entry, set, delete, list_page, and pages. Keys and values are bytes. get returns None for a missing key, which keeps absence distinct from a stored b"".

Mutation conditions are keyword-only. set accepts if_not_present, if_version, and a datetime.timedelta TTL. delete accepts if_version. list_page returns one page, while pages carries the opaque cursor until the scan completes. Generated protobuf and gRPC modules live under orbita.v1.

Client.readiness() checks the connected node. An unready node is a successful response with ready=False, not an RPC error.

Failure Semantics

The clients retry only read-only calls that return UNAVAILABLE. They never retry a mutation because a lost reply can mean the mutation committed. In that case they raise AmbiguousMutationError; reconcile with a linearizable read before deciding whether to try again. The original grpc.RpcError is available as error.rpc_error.

A failed write condition is not an RPC error. Check applied and, when present, current_version.

Each list page is a consistent snapshot of one partition range. A multi-page scan is not a point-in-time snapshot. Versions are opaque compare-and-swap tokens, not per-key counters, and should not be compared across keys.

Compatibility

This prerelease supports the pinned KV, Health, and Admin contracts. It does not add watch, transactions, or client-side routing that the current server does not provide.

Development

python -m venv .venv
.venv/bin/pip install -e '.[dev]'
.venv/bin/ruff check .
.venv/bin/ruff format --check .
.venv/bin/mypy
.venv/bin/pytest

Regenerate the committed API from the pinned Orbita revision with:

PATH="$PWD/.venv/bin:$PATH" ./scripts/generate.sh

About

Python client for Orbita

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages