Skip to main content

Unofficial Python API client (SDK) for Reactive Resume v4

Project description

Reactive Resume Python SDK (rxresume-python)

Python Version Pydantic v2 HTTPX

An unofficial modern, type-safe Python API Client (SDK) for Reactive Resume v4.

It supports both synchronous (httpx.Client) and asynchronous (httpx.AsyncClient) clients, ensures fully typed request/response schemas using Pydantic v2, and maps API errors to clean, descriptive Python exceptions.


Features

  • Dual client modes: Support for both sync and async APIs.
  • Full API coverage: Integrated modules for Resume management, Auth, Job Tracker (Applications), AI Agent prompts, AI Providers configurations, Statistics, and Storage uploads.
  • Type safety: Fully typed models for all entities using Pydantic V2.
  • Robust error handling: Raw API status errors are automatically parsed into specific exceptions (AuthenticationError, NotFoundError, etc.).
  • Developer Experience (DX): Code-completion ready with clear typing and docstrings.

Installation

Install the package via pip or your favorite package manager:

pip install rxresume-python

Quick Start

1. Asynchronous Client (FastAPI / Asynchronous Code)

import asyncio
from reactive_resume import AsyncRxResumeClient
from reactive_resume.models import ResumeImportData, Basics

async def main():
    # Initialize the async client
    async with AsyncRxResumeClient(base_url="https://rxresu.me", api_key="your_api_key") as client:
        # Create a new resume
        import_data = ResumeImportData(
            title="Ata Can Yaymacı - Backend Engineer",
            basics=Basics(
                name="Ata Can Yaymacı",
                headline="Backend Engineer",
                email="ata@example.com",
                phone="+905555555555",
                website="https://example.com"
            ),
            sections={}
        )

        try:
            # Import/Create a new resume
            new_resume = await client.resumes.import_resume(import_data)
            print(f"Created resume: {new_resume.name} (ID: {new_resume.id})")

            # Fetch the generated PDF URL
            pdf_url = await client.resumes.get_pdf_url(new_resume.id)
            print(f"PDF URL: {pdf_url}")

        except Exception as e:
            print(f"An error occurred: {e}")

if __name__ == "__main__":
    asyncio.run(main())

2. Synchronous Client

from reactive_resume import RxResumeClient
from reactive_resume.models import ResumeImportData

with RxResumeClient(base_url="https://rxresu.me", api_key="your_api_key") as client:
    resumes = client.resumes.list()
    for resume in resumes:
        print(f"Resume: {resume.name} (Slug: {resume.slug})")

3. Advanced Features (AI Agent, Storage, Statistics, Applications)

with RxResumeClient(base_url="https://rxresu.me", api_key="your_api_key") as client:
    # 1. Ask the AI agent to optimize a resume summary
    ai_response = client.agent.chat("resume_id_here", "Suggest a professional summary for a software developer.")
    print(f"AI Suggestion: {ai_response.response}")

    # 2. Upload a profile image to storage
    with open("avatar.png", "rb") as f:
        file_metadata = client.storage.upload_file(f.read(), "avatar.png")
    print(f"Uploaded Image URL: {file_metadata.url}")

    # 3. Retrieve resume metrics
    stats = client.statistics.get("resume_id_here")
    print(f"Views: {stats.views}, Downloads: {stats.downloads}")

    # 4. Log a new job application
    from reactive_resume.models import ApplicationCreate
    app = client.applications.create(ApplicationCreate(
        company="Google",
        position="Senior Backend Engineer",
        stage="Interviewing"
    ))
    print(f"Logged Application ID: {app.id}")

Error Handling

All client API calls map HTTP errors to specific exception classes:

from reactive_resume import RxResumeClient, AuthenticationError, NotFoundError

try:
    with RxResumeClient(base_url="https://rxresu.me", api_key="wrong_key") as client:
        client.resumes.list()
except AuthenticationError as e:
    print(f"Auth error (Status {e.status_code}): {e}")
except NotFoundError as e:
    print(f"Not found: {e}")
except Exception as e:
    print(f"Generic error: {e}")

Development & Testing

  1. Clone the repository:

    git clone https://github.com/your-username/reactive-resume-api-client-py.git
    cd reactive-resume-api-client-py
    
  2. Install dependencies:

    python3 -m venv .venv
    source .venv/bin/activate
    pip install -e ".[dev]"
    
  3. Run the tests:

    pytest
    

License

This project is licensed under the MIT License - see the LICENSE file for details.

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

rxresume_python-0.3.0.tar.gz (13.6 kB view details)

Uploaded Source

Built Distribution

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

rxresume_python-0.3.0-py3-none-any.whl (18.6 kB view details)

Uploaded Python 3

File details

Details for the file rxresume_python-0.3.0.tar.gz.

File metadata

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

File hashes

Hashes for rxresume_python-0.3.0.tar.gz
Algorithm Hash digest
SHA256 f21f0358c1204599545d2038b8c9918248d6a43a89a9431f4eca560c6e637887
MD5 70134f312e60cadd270f4e3983bef2aa
BLAKE2b-256 0bbca55bd1a86a6725e1f093df048afff73971fdd720f1bc268eb065b755c052

See more details on using hashes here.

Provenance

The following attestation bundles were made for rxresume_python-0.3.0.tar.gz:

Publisher: release-please.yml on AtaCanYmc/reactive-resume-api-client-py

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

File details

Details for the file rxresume_python-0.3.0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for rxresume_python-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 81e1183dd0d5ded62a92f033cbfd96e8c278b7ea637800c423396d37942e20b8
MD5 26d6ce3d043411accffad818bd291faf
BLAKE2b-256 69c6d2de7fdf8ac01cd0db458b3d30e3c4de5feb877bda2a3f6bab246b6e9ec3

See more details on using hashes here.

Provenance

The following attestation bundles were made for rxresume_python-0.3.0-py3-none-any.whl:

Publisher: release-please.yml on AtaCanYmc/reactive-resume-api-client-py

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