Skip to main content

Thin Python SDK for the officecli resident pipe — forwards officecli commands to a running resident, no per-command process spawn.

Project description

officecli — Python SDK

A thin Python SDK for the officecli resident pipe. It does one thing: forward an officecli command to a running resident over its named pipe and hand back the response — no per-command process spawn, so a loop of edits is ~hundreds of times faster than shelling out to the CLI per command.

"Thin" is the point: there is no second vocabulary to learn. A command is the same dict you'd put in an officecli batch list; the SDK just carries it over the pipe. Anything a doc.set_cell(...) / doc.add_paragraph(...) method would do is fully supported — you just spell it doc.send({"command": "set", ...}), with the exact same effect. One uniform verb instead of dozens of per-element named methods: same power, nothing extra to memorize, and new officecli features work the day they ship without an SDK update.

Requirement: the officecli CLI must be installed

pip install officecli-sdk installs only this SDK (the Python library). It shells out to the officecli binary, which must be installed separately and on your PATH. If officecli --version works in your shell you're set; otherwise the SDK raises a clear error pointing here (never a cryptic FileNotFoundError).

Install the CLI once:

python -m officecli install      # runs officecli's official installer
# …or directly:
curl -fsSL https://raw.githubusercontent.com/iOfficeAI/OfficeCLI/main/install.sh | bash

officecli.install() does the same from Python. Installation is always explicit — the SDK never auto-downloads the binary behind your back. (Not on Windows: grab it from GitHub Releases.)

Install

pip install officecli-sdk            # once published — note: import name is `officecli`
# or, from a checkout of this repo:
pip install ./sdk/python

The pip/distribution name is officecli-sdk, but you import officecli (distribution name ≠ import name, like pip install pillowimport PIL).

Zero third-party dependencies (standard library only).

Quickstart

import officecli

# create() makes a new file and returns a live session handle;
# open() does the same for an existing file. Both return a Document.
with officecli.create("report.xlsx", "--force") as doc:
    doc.send({"command": "set", "path": "/Sheet1/A1",
              "props": {"text": "Region", "bold": "true"}})
    doc.send({"command": "set", "path": "/Sheet1/B1", "props": {"formula": "=SUM(B2:B9)"}})

    # read one back (returns the parsed JSON envelope)
    node = doc.send({"command": "get", "path": "/Sheet1/A1"})
    print(node["data"]["results"][0]["text"])     # -> Region

    # many edits in ONE pipe round-trip
    doc.batch([
        {"command": "set", "path": "/Sheet1/A2", "props": {"text": "North"}},
        {"command": "set", "path": "/Sheet1/A3", "props": {"text": "South"}},
    ])

    doc.send({"command": "save"})
# leaving `with` closes the resident (which flushes to disk)

# borrow an already-running resident without owning it: skip `with`/close()
d = officecli.open("report.xlsx")
print(d.send({"command": "view", "mode": "stats"}, as_json=False))

See demo.py for a fuller example.

The command dict

send(item) and batch([item, ...]) take the officecli batch-item shape:

{ "command": "set",            // or "op"; picks the officecli command
  "path": "/Sheet1/A1",        // every key except command/op/props is forwarded
  "props": { "text": "hi" } }  // verbatim as a command argument

Keys are officecli's own batch fields (command/op, path, parent, type, index, after, before, to, selector, mode, depth, part, xpath, action, xml) plus a nested props. The client maintains no field list of its own — run officecli help (or see the batch docs) for the full reference.

send(..., as_json=False) requests plain-text output (e.g. view / raw / dump), mirroring the CLI's --json toggle.

Errors & resilience

  • Transport/process failures raise officecli.OfficeCliError (.code carries the exit code). Business outcomes (e.g. validate failing, a bad path) are not exceptions — they live in the returned envelope's success field, same as the CLI's exit code.
  • If the resident has gone (crash, idle-timeout, missing pipe), send/batch transparently restart it and retry once. If it's alive but the pipe is unresponsive (busy), they raise rather than risk racing the live resident.

Versioning

This client derives the resident's pipe address from the document path the same way officecli does. That derivation is the one piece coupled to officecli internals, so keep the client version compatible with your installed officecli.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

officecli_sdk-0.1.4.tar.gz (15.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

officecli_sdk-0.1.4-py3-none-any.whl (13.8 kB view details)

Uploaded Python 3

File details

Details for the file officecli_sdk-0.1.4.tar.gz.

File metadata

  • Download URL: officecli_sdk-0.1.4.tar.gz
  • Upload date:
  • Size: 15.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for officecli_sdk-0.1.4.tar.gz
Algorithm Hash digest
SHA256 4ec8512f1476a0b0063fbac95f7f6de9d1a7b0f75b6a5703319cc4022b792e6d
MD5 95bcf3250faf069ea5365e0950e85158
BLAKE2b-256 fe829e8406f9fdf660bcdc83cb9950ce2465f8c9aaf88f6863491cc65f680e34

See more details on using hashes here.

Provenance

The following attestation bundles were made for officecli_sdk-0.1.4.tar.gz:

Publisher: publish-pypi.yml on iOfficeAI/OfficeCLI

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file officecli_sdk-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: officecli_sdk-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 13.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for officecli_sdk-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 ffaec7701955717d877534c93ff290648f5660329f291dad3b9349ab9e48ff83
MD5 71fad10c39d0f10016df83d5c26237b0
BLAKE2b-256 b0b826c0250de3feb196296a107b7ac5be81c08ad9166a601ce3117a1c4ecb9e

See more details on using hashes here.

Provenance

The following attestation bundles were made for officecli_sdk-0.1.4-py3-none-any.whl:

Publisher: publish-pypi.yml on iOfficeAI/OfficeCLI

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page