Skip to main content

Google Docs tabs to Markdown CLI sync tool

Project description

DocSync

doc is a Python CLI that syncs one Google Doc's tabs to local Markdown files and back using incremental Google Docs API patches.

Current feature scope

  • doc pull: materialize tabs as Markdown files and store sync metadata in .docsync_state.json.
  • doc push: strict mode, aborts if remote revision changed since last pull.
  • doc push -f: best-effort mode with a safe rebase policy; aborts on unsafe overlap.
  • doc push -f --dry-run: preview operations and conflicts without writing.

Safety model

  • Strict mode never writes when revision drift is detected.
  • Force mode only applies minimal incremental edits (no full-document replacement).
  • Force mode aborts with conflict reports for overlapping/unsafe edits.

Assumptions for v1

  • Tabs are textual and representable by the implemented Markdown subset.
  • Simultaneous edits are uncommon; strict mode is default.
  • Authentication uses Application Default Credentials (ADC).

Google authentication

The CLI uses the standard Google ADC flow from google-auth.

You have two common options:

  1. User OAuth (great for local development):

    Important for now: to request Docs/Drive scopes, you need your own OAuth client ID file. The default gcloud auth application-default login client can be blocked for non-Cloud scopes. See Google's ADC troubleshooting guidance: https://docs.cloud.google.com/docs/authentication/troubleshoot-adc#access_blocked_when_using_scopes

    Steps:

    • Create an OAuth client in Google Cloud Console (Desktop app client is fine for local dev).

    • Download the client JSON file.

    • Run:

      gcloud auth application-default login \
        --client-id-file=/absolute/path/to/client_secret.json \
        --scopes="https://www.googleapis.com/auth/documents,https://www.googleapis.com/auth/drive.readonly,openid,https://www.googleapis.com/auth/userinfo.email"
      

    This is a temporary setup requirement until the project is reviewed/published and can use a simpler default flow.

  2. Service account key (great for automation/CI):

    • Create a service account and JSON key in Google Cloud.
    • Share the target Google Doc with that service account email.
    • Point ADC to the key file via GOOGLE_APPLICATION_CREDENTIALS.

You can export that variable in your shell:

export GOOGLE_APPLICATION_CREDENTIALS="/absolute/path/to/service-account.json"

Or use a local .env file (loaded automatically by the CLI):

GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/service-account.json

Required scope used by this tool: https://www.googleapis.com/auth/documents.

Quickstart

  1. Install:

    poetry install
    
  2. Authenticate with Google APIs (Application Default Credentials).

  3. Pull:

    poetry run doc pull <DOC_ID> --workspace .
    
  4. Edit generated .md files.

  5. Push:

    poetry run doc push <DOC_ID> --workspace .
    

Force mode:

poetry run doc push <DOC_ID> --workspace . -f

PyPI and pipx

After publishing to PyPI, users can install globally with:

pipx install docsync

For maintainers, build and verify locally before upload:

poetry check
poetry build
poetry run python -m twine check dist/*

Publishing auth options:

  • Preferred: PyPI Trusted Publishing (OIDC in CI; no local token needed).

  • Alternative: PyPI API token (pypi-...) configured for Poetry:

    poetry config pypi-token.pypi <YOUR_PYPI_TOKEN>
    poetry publish
    

Do not upload credential files (.env, OAuth client secrets, service account keys).

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

docsync-0.1.282050.tar.gz (10.6 kB view details)

Uploaded Source

Built Distribution

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

docsync-0.1.282050-py3-none-any.whl (12.0 kB view details)

Uploaded Python 3

File details

Details for the file docsync-0.1.282050.tar.gz.

File metadata

  • Download URL: docsync-0.1.282050.tar.gz
  • Upload date:
  • Size: 10.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for docsync-0.1.282050.tar.gz
Algorithm Hash digest
SHA256 86b4474f8fe2984b0e14fa0a80f8256e294920e76c10cecf15a063ca02356920
MD5 cfcbde63a055b235c69ed068ba313fd1
BLAKE2b-256 a5bdf786d146deee8b270394bb5552968089632b7d513f21ddc3db94fdfad817

See more details on using hashes here.

Provenance

The following attestation bundles were made for docsync-0.1.282050.tar.gz:

Publisher: publish-pypi.yml on Telofy/DocSync

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

File details

Details for the file docsync-0.1.282050-py3-none-any.whl.

File metadata

  • Download URL: docsync-0.1.282050-py3-none-any.whl
  • Upload date:
  • Size: 12.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for docsync-0.1.282050-py3-none-any.whl
Algorithm Hash digest
SHA256 38d2131e610b7fd9e6a6ffb68f053eb49164707433d8d77de10fdfe25e757c89
MD5 73973bd29901d07340528183dcf327e1
BLAKE2b-256 0cf5395f12389444bdf210d7148594e9504522911e76c5b27a584a68b10c413d

See more details on using hashes here.

Provenance

The following attestation bundles were made for docsync-0.1.282050-py3-none-any.whl:

Publisher: publish-pypi.yml on Telofy/DocSync

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