Skip to main content

Async, typed Python client for DocGes REST API

Project description

docges-api-py

Async, typed Python client for the DocGes REST API.

Work in progress — bootstrapped via SDD (Spec-Driven Development).
Phase 1-4 completed: async client with auth, retry, token refresh, and tests. Phase 5 completed: All core endpoints implemented.

Features

  • ✅ Async HTTP client using httpx
  • ✅ Typed request/response models with Pydantic v2
  • ✅ Configurable retries and timeouts
  • ✅ Session-based auth using loginResponse passed to Content endpoints
  • ✅ Full test coverage (pytest + respx)
  • ✅ Complete DocGes API client (upload, download, search, categories)

Implemented endpoints

Auth

  • auth() — authenticate against /Auth/Login

Content Tree

  • get_initial_cats() — load initial categories via /Content/LoadIniCats
  • get_cat_info(sid) — load category children via /Content/LoadChilds

Document Operations

  • upload_file(category_sid, file_path) — upload via /Content/UploadExtended
  • download_content(sid) — download via /Content/Download (returns ResFileDownload)
  • get_document(sid) — deprecated wrapper (calls download_content())

Search

  • search_content(field_values, date_values) — search via /Content/SearchContent

Category Management

  • create_category(parent_sid, name) — create via /Content/CreateCategory
  • rename_category(sid, new_name) — rename via /Content/RenameCategory
  • delete_category(sid) — delete via /Content/DeleteCategory

Document Management

  • remove_document(sid) — remove via /Content/RemoveDocument
  • move_content(content_sid, destination_sid) — move via /Content/Move
  • update_content(sid, erp_relation, erp_property) — update via /Content/Update

Quick start

pip install -e ".[dev]"
import asyncio
from docges_api_py import AsyncDocGes


async def main():
    async with AsyncDocGes(
        "https://docges.example.com", "user", "password", "appid"
    ) as client:
        # Auth
        auth_resp = await client.auth()
        # The API is session-based: auth_resp contains user_info and ware_house_info
        print(f"User: {auth_resp.user_info.get('Nombre')}")
        print(f"Warehouse: {auth_resp.ware_house_info.get('Nombre')}")

        # Load initial categories (the client injects loginResponse automatically)
        cats = await client.get_initial_cats()
        print(f"Initial categories: {len(cats.CategoriasHijas)}")

        # Search documents
        results = await client.search_content(
            field_values=[{"field": "name", "mode": "contains", "text": "invoice"}]
        )
        print(f"Search results: {len(results.results)}")


asyncio.run(main())

See docs/quickstart.md or examples/quickstart.py for a more complete example.

Development

pip install -e ".[dev]"
ruff check src/ tests/
mypy src/
pytest --cov=docges_api_py

Migration

The library is being migrated from a sync requests-based client (see wm-sync reference code). See docs/MIGRATION.md for details.

Key changes:

  • Replaced requests (sync) with httpx.AsyncClient
  • Replaced raw __dict__ serialization with Pydantic v2 models
  • Replaced silent return None with typed exceptions (AuthenticationError, RequestError)
  • Added configurable retries with exponential backoff

Project structure

docges-api-py/
├── src/docges_api_py/
│   ├── __init__.py          # Exports AsyncDocGes, models (ResCat, ResFileDownload, etc.)
│   ├── client.py            # AsyncDocGes client (auth + all endpoints)
│   └── models/
│       ├── auth.py           # AuthRequest, AuthResponse
│       ├── document.py      # Document
│       ├── requests.py      # Request models (ReqUpload, ReqSearchContent, etc.)
│       ├── responses.py     # Response models (ResCat, ResFileDownload, etc.)
│       └── __init__.py      # Model exports
├── tests/
│   ├── conftest.py
│   ├── test_client_auth.py
│   ├── test_initial_cats.py
│   ├── test_content_methods.py
│   ├── test_remaining_methods.py
│   ├── test_models_requests.py
│   ├── test_models_responses.py
│   ├── test_models_init.py
│   ├── test_endpoints.py
│   ├── test_retry.py
│   └── test_token_refresh.py
├── examples/
│   └── quickstart.py
├── docs/
│   └── MIGRATION.md
├── pyproject.toml
├── ruff.toml
├── mypy.ini
└── README.md

Contributing

See CONTRIBUTING.md for guidelines.

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

docges_api_py-0.1.1.tar.gz (17.7 kB view details)

Uploaded Source

Built Distribution

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

docges_api_py-0.1.1-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

Details for the file docges_api_py-0.1.1.tar.gz.

File metadata

  • Download URL: docges_api_py-0.1.1.tar.gz
  • Upload date:
  • Size: 17.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.0 CPython/3.12.10

File hashes

Hashes for docges_api_py-0.1.1.tar.gz
Algorithm Hash digest
SHA256 cd3dff9b84066b511e42bf12d155170dbb6f68ec97710cf40b50f017fa6f9808
MD5 c995cc12675c36bc9566a8a16fcfba6f
BLAKE2b-256 4e8fad697bf8720251eb4728e38cf00e737fe423af94dfba2e197f00567a1a41

See more details on using hashes here.

File details

Details for the file docges_api_py-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: docges_api_py-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 11.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.0 CPython/3.12.10

File hashes

Hashes for docges_api_py-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cee6a9ce6769ab5424c6a78a93f8e149c29ecd9e4ea2a21e9967ccd67f525dde
MD5 c42596b33c93496cd17ed3f660967fc9
BLAKE2b-256 2c7d4e4aa11855302318c44ddbff1871fb512247017e2aada798c81b95985c88

See more details on using hashes here.

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