espocrm-client


Nameespocrm-client JSON
Version 0.1.0 PyPI version JSON
download
home_pageNone
SummaryModern, type-safe and comprehensive EspoCRM API client library for Python
upload_time2025-07-10 21:49:54
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT
keywords espocrm api client crm rest api-client customer-relationship-management business-automation sales-management lead-management contact-management opportunity-management type-safe pydantic structured-logging
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # EspoCRM Python Client

[![PyPI version](https://badge.fury.io/py/espocrm-client.svg)](https://badge.fury.io/py/espocrm-client)
[![Python versions](https://img.shields.io/pypi/pyversions/espocrm-client.svg)](https://pypi.org/project/espocrm-client/)
[![License](https://img.shields.io/pypi/l/espocrm-client.svg)](https://github.com/espocrm/espocrm-client/blob/main/LICENSE)
[![Tests](https://github.com/espocrm/espocrm-client/workflows/Tests/badge.svg)](https://github.com/espocrm/espocrm-client/actions)
[![Documentation](https://img.shields.io/badge/docs-available-brightgreen.svg)](https://espocrm-client.readthedocs.io)
[![Coverage](https://codecov.io/gh/espocrm/espocrm-client/branch/main/graph/badge.svg)](https://codecov.io/gh/espocrm/espocrm-client)

Modern, type-safe and comprehensive EspoCRM API client library for Python.

## ✨ Features

- **🔒 Type Safety**: Full type hints with Pydantic v2 validation
- **🏗️ Modern Architecture**: SOLID principles, modular design
- **📊 Structured Logging**: JSON-formatted professional logging
- **🌐 Comprehensive API**: Complete EspoCRM API coverage
- **🔐 Multiple Auth Methods**: API Key, HMAC, and Basic authentication
- **⚡ Async Support**: Optional async/await support
- **🐍 Python 3.8+**: Optimized for modern Python versions
- **🧪 Well Tested**: High test coverage with comprehensive test suite
- **📚 Well Documented**: Complete documentation with examples
- **🛠️ CLI Tool**: Command-line interface for common operations

## 📦 Installation

Install from PyPI using pip:

```bash
pip install espocrm-client
```

### Optional Dependencies

```bash
# For async support
pip install espocrm-client[async]

# For development
pip install espocrm-client[dev]

# For documentation
pip install espocrm-client[docs]

# Install all optional dependencies
pip install espocrm-client[async,dev,docs]
```

### Development Installation

```bash
git clone https://github.com/espocrm/espocrm-client.git
cd espocrm-client
pip install -e ".[dev]"
```

## 🚀 Quick Start

```python
from espocrm import EspoCRMClient
from espocrm.auth import APIKeyAuth

# Client'ı başlat
auth = APIKeyAuth("your-api-key")
client = EspoCRMClient("https://your-espocrm.com", auth)

# Kayıt oluştur
lead_data = {
    "firstName": "John",
    "lastName": "Doe", 
    "emailAddress": "john.doe@example.com"
}
lead = client.crud.create("Lead", lead_data)
print(f"Yeni Lead oluşturuldu: {lead.id}")

# Kayıtları listele
leads = client.crud.list("Lead", limit=10)
for lead in leads.records:
    print(f"Lead: {lead.firstName} {lead.lastName}")

# Kayıt güncelle
client.crud.update("Lead", lead.id, {"status": "Qualified"})

# Kayıt sil
client.crud.delete("Lead", lead.id)
```

## 🔐 Authentication

### API Key Authentication
```python
from espocrm.auth import APIKeyAuth

auth = APIKeyAuth("your-api-key")
client = EspoCRMClient("https://your-espocrm.com", auth)
```

### HMAC Authentication
```python
from espocrm.auth import HMACAuth

auth = HMACAuth("your-api-key", "your-secret-key")
client = EspoCRMClient("https://your-espocrm.com", auth)
```

### Basic Authentication
```python
from espocrm.auth import BasicAuth

auth = BasicAuth("username", "password")
client = EspoCRMClient("https://your-espocrm.com", auth)
```

## 📚 API Modülleri

### CRUD İşlemleri
```python
# Kayıt oluştur
record = client.crud.create("Account", data)

# Kayıt oku
record = client.crud.get("Account", record_id)

# Kayıtları listele
records = client.crud.list("Account", limit=20)

# Kayıt güncelle
client.crud.update("Account", record_id, updates)

# Kayıt sil
client.crud.delete("Account", record_id)
```

### İlişki Yönetimi
```python
# İlişkili kayıtları listele
contacts = client.relationships.list("Account", account_id, "contacts")

# İlişki oluştur
client.relationships.relate("Account", account_id, "contacts", contact_id)

# İlişki kaldır
client.relationships.unrelate("Account", account_id, "contacts", contact_id)
```

### Stream İşlemleri
```python
# Stream kayıtlarını al
stream = client.stream.get_user_stream()

# Kayıt stream'ini al
record_stream = client.stream.get_record_stream("Account", account_id)

# Stream'e post yap
client.stream.post("Account", account_id, "Yeni bir not eklendi")
```

### Dosya Yönetimi
```python
# Dosya yükle
with open("document.pdf", "rb") as f:
    attachment = client.attachments.upload(f, "document.pdf")

# Dosya indir
file_data = client.attachments.download(attachment_id)
```

### Metadata İşlemleri
```python
# Uygulama metadata'sını al
metadata = client.metadata.get_app_metadata()

# Entity metadata'sını al
entity_metadata = client.metadata.get_entity_metadata("Account")
```

## 🔍 Gelişmiş Arama

```python
from espocrm.models import SearchParams, WhereClause

# Gelişmiş arama parametreleri
search_params = SearchParams(
    where=[
        WhereClause(
            type="equals",
            attribute="status",
            value="New"
        ),
        WhereClause(
            type="contains",
            attribute="name",
            value="Tech"
        )
    ],
    order_by="createdAt",
    order="desc",
    limit=50,
    select=["id", "name", "status", "createdAt"]
)

results = client.crud.search("Lead", search_params)
```

## 📊 Logging ve Monitoring

```python
from espocrm.logging import get_logger

# Structured logger kullan
logger = get_logger("my_app")

# JSON formatında log
logger.info(
    "Lead oluşturuldu",
    extra={
        "lead_id": lead.id,
        "user_id": "user_123",
        "execution_time_ms": 245
    }
)
```

## 🧪 Test Fixtures

The following are examples of how to use the test fixtures provided within the testing suite:

### Mock Server

```python
import pytest

def test_example(mock_server):
    # Use mock server to simulate HTTP responses
    mock_server.reset()  # Reset server state
```

### Test Data

```python
import pytest

def test_example(sample_account, sample_contact):
    # Use ready-made test entities
    assert sample_account.get("name") == "Test Company"
```

### Authentication Fixtures

```python
import pytest

def test_example(api_key_auth, hmac_auth, basic_auth):
    # Test different authentication methods
```

### Performance Testing

```python
import pytest

def test_example(performance_timer):
    performance_timer.start()
    # Test code
    performance_timer.stop()
    assert performance_timer.elapsed < 1.0
```

### HTTP Mocking

```python
import pytest
import responses

@responses.activate

def test_http_request():
    responses.add(
        responses.GET,
        "https://test.espocrm.com/api/v1/Account/123",
        json={"id": "123", "name": "Test"},
        status=200
    )
```

### Error Simulation

```python
import pytest

def test_error_handling(error_simulator):
    # Network error
    error_simulator.network_error()
    # HTTP error
    error_simulator.http_error(404, "Not Found")
    # Rate limit error
    error_simulator.rate_limit_error()
```

## 🧪 Test

```bash
# Tüm testleri çalıştır
pytest

# Coverage ile test
pytest --cov=espocrm

# Sadece unit testler
pytest -m unit

# Sadece integration testler  
pytest -m integration
```

## 🛠️ Geliştirme

```bash
# Geliştirme ortamını hazırla
pip install -e ".[dev]"

# Pre-commit hooks'ları kur
pre-commit install

# Code formatting
black espocrm tests
isort espocrm tests

# Type checking
mypy espocrm

# Linting
flake8 espocrm tests

# Security scan
bandit -r espocrm
```

## 📄 Lisans

Bu proje MIT lisansı altında lisanslanmıştır. Detaylar için [LICENSE](LICENSE) dosyasına bakın.

## 🤝 Katkıda Bulunma

Katkılarınızı memnuniyetle karşılıyoruz! Lütfen katkıda bulunmadan önce [CONTRIBUTING.md](CONTRIBUTING.md) dosyasını okuyun.

## 📞 Destek

- **Dokümantasyon**: [https://espocrm-client.readthedocs.io](https://espocrm-client.readthedocs.io)
- **Issues**: [GitHub Issues](https://github.com/espocrm/espocrm-client/issues)
- **Discussions**: [GitHub Discussions](https://github.com/espocrm/espocrm-client/discussions)

## 🔗 Links

- [EspoCRM Official Website](https://www.espocrm.com/)
- [EspoCRM API Documentation](https://docs.espocrm.com/development/api/)
- [PyPI Package](https://pypi.org/project/espocrm-client/)
- [GitHub Repository](https://github.com/espocrm/espocrm-client)
- [Documentation](https://espocrm-client.readthedocs.io)
- [Changelog](https://github.com/espocrm/espocrm-client/blob/main/CHANGELOG.md)

## 📈 Project Status

- **Development Status**: Beta
- **Stability**: Stable API
- **Maintenance**: Actively maintained
- **Python Support**: 3.8, 3.9, 3.10, 3.11, 3.12
- **Platform Support**: Windows, macOS, Linux

## 🏆 Why Choose EspoCRM Python Client?

- **Production Ready**: Used in production environments
- **Type Safe**: Catch errors at development time, not runtime
- **Well Tested**: Comprehensive test suite with high coverage
- **Modern Python**: Built for Python 3.8+ with modern features
- **Excellent Documentation**: Complete guides and API reference
- **Active Community**: Regular updates and community support
- **Enterprise Ready**: Suitable for enterprise applications

## 📊 Statistics

- **Downloads**: [![Downloads](https://pepy.tech/badge/espocrm-client)](https://pepy.tech/project/espocrm-client)
- **GitHub Stars**: [![GitHub stars](https://img.shields.io/github/stars/espocrm/espocrm-client.svg?style=social&label=Star)](https://github.com/espocrm/espocrm-client)
- **Code Quality**: [![Code Quality](https://img.shields.io/codacy/grade/your-project-id.svg)](https://www.codacy.com/app/espocrm/espocrm-client)

## 🤝 Contributing

We welcome contributions! Here's how you can help:

1. **Report Bugs**: [Create an issue](https://github.com/espocrm/espocrm-client/issues/new?template=bug_report.md)
2. **Request Features**: [Create a feature request](https://github.com/espocrm/espocrm-client/issues/new?template=feature_request.md)
3. **Submit Pull Requests**: [Contributing Guidelines](https://github.com/espocrm/espocrm-client/blob/main/CONTRIBUTING.md)
4. **Improve Documentation**: Help us improve our docs
5. **Share**: Star the project and share with others

### Development Setup

```bash
# Clone the repository
git clone https://github.com/espocrm/espocrm-client.git
cd espocrm-client

# Install development dependencies
pip install -e ".[dev]"

# Install pre-commit hooks
pre-commit install

# Run tests
pytest

# Run linting
black espocrm tests
isort espocrm tests
mypy espocrm
flake8 espocrm tests
```

## 📝 Changelog

See [CHANGELOG.md](https://github.com/espocrm/espocrm-client/blob/main/CHANGELOG.md) for a detailed history of changes.

## 🆘 Support

- **Documentation**: [Complete documentation](https://espocrm-client.readthedocs.io)
- **Issues**: [GitHub Issues](https://github.com/espocrm/espocrm-client/issues)
- **Discussions**: [GitHub Discussions](https://github.com/espocrm/espocrm-client/discussions)
- **Email**: [support@espocrm-client.com](mailto:support@espocrm-client.com)

## 📄 License

This project is licensed under the MIT License - see the [LICENSE](https://github.com/espocrm/espocrm-client/blob/main/LICENSE) file for details.

## 🙏 Acknowledgments

- [EspoCRM Team](https://www.espocrm.com/) for creating an excellent CRM system
- [Pydantic](https://pydantic-docs.helpmanual.io/) for data validation
- [Requests](https://requests.readthedocs.io/) for HTTP functionality
- [Structlog](https://www.structlog.org/) for structured logging
- All [contributors](https://github.com/espocrm/espocrm-client/graphs/contributors) who help improve this project

---

<div align="center">

**Made with ❤️ for the EspoCRM community**

[⭐ Star us on GitHub](https://github.com/espocrm/espocrm-client) • [📦 Install from PyPI](https://pypi.org/project/espocrm-client/) • [📚 Read the Docs](https://espocrm-client.readthedocs.io)

</div>

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "espocrm-client",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "EspoCRM Python Client Team <support@espocrm-python-client.com>",
    "keywords": "espocrm, api, client, crm, rest, api-client, customer-relationship-management, business-automation, sales-management, lead-management, contact-management, opportunity-management, type-safe, pydantic, structured-logging",
    "author": null,
    "author_email": "EspoCRM Python Client Team <support@espocrm-python-client.com>",
    "download_url": "https://files.pythonhosted.org/packages/57/ce/02903e9956988e9c01f9bfcfb84ecaef55502d39599f29c7621ed54b41f8/espocrm_client-0.1.0.tar.gz",
    "platform": null,
    "description": "# EspoCRM Python Client\n\n[![PyPI version](https://badge.fury.io/py/espocrm-client.svg)](https://badge.fury.io/py/espocrm-client)\n[![Python versions](https://img.shields.io/pypi/pyversions/espocrm-client.svg)](https://pypi.org/project/espocrm-client/)\n[![License](https://img.shields.io/pypi/l/espocrm-client.svg)](https://github.com/espocrm/espocrm-client/blob/main/LICENSE)\n[![Tests](https://github.com/espocrm/espocrm-client/workflows/Tests/badge.svg)](https://github.com/espocrm/espocrm-client/actions)\n[![Documentation](https://img.shields.io/badge/docs-available-brightgreen.svg)](https://espocrm-client.readthedocs.io)\n[![Coverage](https://codecov.io/gh/espocrm/espocrm-client/branch/main/graph/badge.svg)](https://codecov.io/gh/espocrm/espocrm-client)\n\nModern, type-safe and comprehensive EspoCRM API client library for Python.\n\n## \u2728 Features\n\n- **\ud83d\udd12 Type Safety**: Full type hints with Pydantic v2 validation\n- **\ud83c\udfd7\ufe0f Modern Architecture**: SOLID principles, modular design\n- **\ud83d\udcca Structured Logging**: JSON-formatted professional logging\n- **\ud83c\udf10 Comprehensive API**: Complete EspoCRM API coverage\n- **\ud83d\udd10 Multiple Auth Methods**: API Key, HMAC, and Basic authentication\n- **\u26a1 Async Support**: Optional async/await support\n- **\ud83d\udc0d Python 3.8+**: Optimized for modern Python versions\n- **\ud83e\uddea Well Tested**: High test coverage with comprehensive test suite\n- **\ud83d\udcda Well Documented**: Complete documentation with examples\n- **\ud83d\udee0\ufe0f CLI Tool**: Command-line interface for common operations\n\n## \ud83d\udce6 Installation\n\nInstall from PyPI using pip:\n\n```bash\npip install espocrm-client\n```\n\n### Optional Dependencies\n\n```bash\n# For async support\npip install espocrm-client[async]\n\n# For development\npip install espocrm-client[dev]\n\n# For documentation\npip install espocrm-client[docs]\n\n# Install all optional dependencies\npip install espocrm-client[async,dev,docs]\n```\n\n### Development Installation\n\n```bash\ngit clone https://github.com/espocrm/espocrm-client.git\ncd espocrm-client\npip install -e \".[dev]\"\n```\n\n## \ud83d\ude80 Quick Start\n\n```python\nfrom espocrm import EspoCRMClient\nfrom espocrm.auth import APIKeyAuth\n\n# Client'\u0131 ba\u015flat\nauth = APIKeyAuth(\"your-api-key\")\nclient = EspoCRMClient(\"https://your-espocrm.com\", auth)\n\n# Kay\u0131t olu\u015ftur\nlead_data = {\n    \"firstName\": \"John\",\n    \"lastName\": \"Doe\", \n    \"emailAddress\": \"john.doe@example.com\"\n}\nlead = client.crud.create(\"Lead\", lead_data)\nprint(f\"Yeni Lead olu\u015fturuldu: {lead.id}\")\n\n# Kay\u0131tlar\u0131 listele\nleads = client.crud.list(\"Lead\", limit=10)\nfor lead in leads.records:\n    print(f\"Lead: {lead.firstName} {lead.lastName}\")\n\n# Kay\u0131t g\u00fcncelle\nclient.crud.update(\"Lead\", lead.id, {\"status\": \"Qualified\"})\n\n# Kay\u0131t sil\nclient.crud.delete(\"Lead\", lead.id)\n```\n\n## \ud83d\udd10 Authentication\n\n### API Key Authentication\n```python\nfrom espocrm.auth import APIKeyAuth\n\nauth = APIKeyAuth(\"your-api-key\")\nclient = EspoCRMClient(\"https://your-espocrm.com\", auth)\n```\n\n### HMAC Authentication\n```python\nfrom espocrm.auth import HMACAuth\n\nauth = HMACAuth(\"your-api-key\", \"your-secret-key\")\nclient = EspoCRMClient(\"https://your-espocrm.com\", auth)\n```\n\n### Basic Authentication\n```python\nfrom espocrm.auth import BasicAuth\n\nauth = BasicAuth(\"username\", \"password\")\nclient = EspoCRMClient(\"https://your-espocrm.com\", auth)\n```\n\n## \ud83d\udcda API Mod\u00fclleri\n\n### CRUD \u0130\u015flemleri\n```python\n# Kay\u0131t olu\u015ftur\nrecord = client.crud.create(\"Account\", data)\n\n# Kay\u0131t oku\nrecord = client.crud.get(\"Account\", record_id)\n\n# Kay\u0131tlar\u0131 listele\nrecords = client.crud.list(\"Account\", limit=20)\n\n# Kay\u0131t g\u00fcncelle\nclient.crud.update(\"Account\", record_id, updates)\n\n# Kay\u0131t sil\nclient.crud.delete(\"Account\", record_id)\n```\n\n### \u0130li\u015fki Y\u00f6netimi\n```python\n# \u0130li\u015fkili kay\u0131tlar\u0131 listele\ncontacts = client.relationships.list(\"Account\", account_id, \"contacts\")\n\n# \u0130li\u015fki olu\u015ftur\nclient.relationships.relate(\"Account\", account_id, \"contacts\", contact_id)\n\n# \u0130li\u015fki kald\u0131r\nclient.relationships.unrelate(\"Account\", account_id, \"contacts\", contact_id)\n```\n\n### Stream \u0130\u015flemleri\n```python\n# Stream kay\u0131tlar\u0131n\u0131 al\nstream = client.stream.get_user_stream()\n\n# Kay\u0131t stream'ini al\nrecord_stream = client.stream.get_record_stream(\"Account\", account_id)\n\n# Stream'e post yap\nclient.stream.post(\"Account\", account_id, \"Yeni bir not eklendi\")\n```\n\n### Dosya Y\u00f6netimi\n```python\n# Dosya y\u00fckle\nwith open(\"document.pdf\", \"rb\") as f:\n    attachment = client.attachments.upload(f, \"document.pdf\")\n\n# Dosya indir\nfile_data = client.attachments.download(attachment_id)\n```\n\n### Metadata \u0130\u015flemleri\n```python\n# Uygulama metadata's\u0131n\u0131 al\nmetadata = client.metadata.get_app_metadata()\n\n# Entity metadata's\u0131n\u0131 al\nentity_metadata = client.metadata.get_entity_metadata(\"Account\")\n```\n\n## \ud83d\udd0d Geli\u015fmi\u015f Arama\n\n```python\nfrom espocrm.models import SearchParams, WhereClause\n\n# Geli\u015fmi\u015f arama parametreleri\nsearch_params = SearchParams(\n    where=[\n        WhereClause(\n            type=\"equals\",\n            attribute=\"status\",\n            value=\"New\"\n        ),\n        WhereClause(\n            type=\"contains\",\n            attribute=\"name\",\n            value=\"Tech\"\n        )\n    ],\n    order_by=\"createdAt\",\n    order=\"desc\",\n    limit=50,\n    select=[\"id\", \"name\", \"status\", \"createdAt\"]\n)\n\nresults = client.crud.search(\"Lead\", search_params)\n```\n\n## \ud83d\udcca Logging ve Monitoring\n\n```python\nfrom espocrm.logging import get_logger\n\n# Structured logger kullan\nlogger = get_logger(\"my_app\")\n\n# JSON format\u0131nda log\nlogger.info(\n    \"Lead olu\u015fturuldu\",\n    extra={\n        \"lead_id\": lead.id,\n        \"user_id\": \"user_123\",\n        \"execution_time_ms\": 245\n    }\n)\n```\n\n## \ud83e\uddea Test Fixtures\n\nThe following are examples of how to use the test fixtures provided within the testing suite:\n\n### Mock Server\n\n```python\nimport pytest\n\ndef test_example(mock_server):\n    # Use mock server to simulate HTTP responses\n    mock_server.reset()  # Reset server state\n```\n\n### Test Data\n\n```python\nimport pytest\n\ndef test_example(sample_account, sample_contact):\n    # Use ready-made test entities\n    assert sample_account.get(\"name\") == \"Test Company\"\n```\n\n### Authentication Fixtures\n\n```python\nimport pytest\n\ndef test_example(api_key_auth, hmac_auth, basic_auth):\n    # Test different authentication methods\n```\n\n### Performance Testing\n\n```python\nimport pytest\n\ndef test_example(performance_timer):\n    performance_timer.start()\n    # Test code\n    performance_timer.stop()\n    assert performance_timer.elapsed < 1.0\n```\n\n### HTTP Mocking\n\n```python\nimport pytest\nimport responses\n\n@responses.activate\n\ndef test_http_request():\n    responses.add(\n        responses.GET,\n        \"https://test.espocrm.com/api/v1/Account/123\",\n        json={\"id\": \"123\", \"name\": \"Test\"},\n        status=200\n    )\n```\n\n### Error Simulation\n\n```python\nimport pytest\n\ndef test_error_handling(error_simulator):\n    # Network error\n    error_simulator.network_error()\n    # HTTP error\n    error_simulator.http_error(404, \"Not Found\")\n    # Rate limit error\n    error_simulator.rate_limit_error()\n```\n\n## \ud83e\uddea Test\n\n```bash\n# T\u00fcm testleri \u00e7al\u0131\u015ft\u0131r\npytest\n\n# Coverage ile test\npytest --cov=espocrm\n\n# Sadece unit testler\npytest -m unit\n\n# Sadece integration testler  \npytest -m integration\n```\n\n## \ud83d\udee0\ufe0f Geli\u015ftirme\n\n```bash\n# Geli\u015ftirme ortam\u0131n\u0131 haz\u0131rla\npip install -e \".[dev]\"\n\n# Pre-commit hooks'lar\u0131 kur\npre-commit install\n\n# Code formatting\nblack espocrm tests\nisort espocrm tests\n\n# Type checking\nmypy espocrm\n\n# Linting\nflake8 espocrm tests\n\n# Security scan\nbandit -r espocrm\n```\n\n## \ud83d\udcc4 Lisans\n\nBu proje MIT lisans\u0131 alt\u0131nda lisanslanm\u0131\u015ft\u0131r. Detaylar i\u00e7in [LICENSE](LICENSE) dosyas\u0131na bak\u0131n.\n\n## \ud83e\udd1d Katk\u0131da Bulunma\n\nKatk\u0131lar\u0131n\u0131z\u0131 memnuniyetle kar\u015f\u0131l\u0131yoruz! L\u00fctfen katk\u0131da bulunmadan \u00f6nce [CONTRIBUTING.md](CONTRIBUTING.md) dosyas\u0131n\u0131 okuyun.\n\n## \ud83d\udcde Destek\n\n- **Dok\u00fcmantasyon**: [https://espocrm-client.readthedocs.io](https://espocrm-client.readthedocs.io)\n- **Issues**: [GitHub Issues](https://github.com/espocrm/espocrm-client/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/espocrm/espocrm-client/discussions)\n\n## \ud83d\udd17 Links\n\n- [EspoCRM Official Website](https://www.espocrm.com/)\n- [EspoCRM API Documentation](https://docs.espocrm.com/development/api/)\n- [PyPI Package](https://pypi.org/project/espocrm-client/)\n- [GitHub Repository](https://github.com/espocrm/espocrm-client)\n- [Documentation](https://espocrm-client.readthedocs.io)\n- [Changelog](https://github.com/espocrm/espocrm-client/blob/main/CHANGELOG.md)\n\n## \ud83d\udcc8 Project Status\n\n- **Development Status**: Beta\n- **Stability**: Stable API\n- **Maintenance**: Actively maintained\n- **Python Support**: 3.8, 3.9, 3.10, 3.11, 3.12\n- **Platform Support**: Windows, macOS, Linux\n\n## \ud83c\udfc6 Why Choose EspoCRM Python Client?\n\n- **Production Ready**: Used in production environments\n- **Type Safe**: Catch errors at development time, not runtime\n- **Well Tested**: Comprehensive test suite with high coverage\n- **Modern Python**: Built for Python 3.8+ with modern features\n- **Excellent Documentation**: Complete guides and API reference\n- **Active Community**: Regular updates and community support\n- **Enterprise Ready**: Suitable for enterprise applications\n\n## \ud83d\udcca Statistics\n\n- **Downloads**: [![Downloads](https://pepy.tech/badge/espocrm-client)](https://pepy.tech/project/espocrm-client)\n- **GitHub Stars**: [![GitHub stars](https://img.shields.io/github/stars/espocrm/espocrm-client.svg?style=social&label=Star)](https://github.com/espocrm/espocrm-client)\n- **Code Quality**: [![Code Quality](https://img.shields.io/codacy/grade/your-project-id.svg)](https://www.codacy.com/app/espocrm/espocrm-client)\n\n## \ud83e\udd1d Contributing\n\nWe welcome contributions! Here's how you can help:\n\n1. **Report Bugs**: [Create an issue](https://github.com/espocrm/espocrm-client/issues/new?template=bug_report.md)\n2. **Request Features**: [Create a feature request](https://github.com/espocrm/espocrm-client/issues/new?template=feature_request.md)\n3. **Submit Pull Requests**: [Contributing Guidelines](https://github.com/espocrm/espocrm-client/blob/main/CONTRIBUTING.md)\n4. **Improve Documentation**: Help us improve our docs\n5. **Share**: Star the project and share with others\n\n### Development Setup\n\n```bash\n# Clone the repository\ngit clone https://github.com/espocrm/espocrm-client.git\ncd espocrm-client\n\n# Install development dependencies\npip install -e \".[dev]\"\n\n# Install pre-commit hooks\npre-commit install\n\n# Run tests\npytest\n\n# Run linting\nblack espocrm tests\nisort espocrm tests\nmypy espocrm\nflake8 espocrm tests\n```\n\n## \ud83d\udcdd Changelog\n\nSee [CHANGELOG.md](https://github.com/espocrm/espocrm-client/blob/main/CHANGELOG.md) for a detailed history of changes.\n\n## \ud83c\udd98 Support\n\n- **Documentation**: [Complete documentation](https://espocrm-client.readthedocs.io)\n- **Issues**: [GitHub Issues](https://github.com/espocrm/espocrm-client/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/espocrm/espocrm-client/discussions)\n- **Email**: [support@espocrm-client.com](mailto:support@espocrm-client.com)\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the MIT License - see the [LICENSE](https://github.com/espocrm/espocrm-client/blob/main/LICENSE) file for details.\n\n## \ud83d\ude4f Acknowledgments\n\n- [EspoCRM Team](https://www.espocrm.com/) for creating an excellent CRM system\n- [Pydantic](https://pydantic-docs.helpmanual.io/) for data validation\n- [Requests](https://requests.readthedocs.io/) for HTTP functionality\n- [Structlog](https://www.structlog.org/) for structured logging\n- All [contributors](https://github.com/espocrm/espocrm-client/graphs/contributors) who help improve this project\n\n---\n\n<div align=\"center\">\n\n**Made with \u2764\ufe0f for the EspoCRM community**\n\n[\u2b50 Star us on GitHub](https://github.com/espocrm/espocrm-client) \u2022 [\ud83d\udce6 Install from PyPI](https://pypi.org/project/espocrm-client/) \u2022 [\ud83d\udcda Read the Docs](https://espocrm-client.readthedocs.io)\n\n</div>\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Modern, type-safe and comprehensive EspoCRM API client library for Python",
    "version": "0.1.0",
    "project_urls": {
        "Bug Reports": "https://github.com/espocrm/espocrm-client/issues",
        "Changelog": "https://github.com/espocrm/espocrm-client/blob/main/CHANGELOG.md",
        "Documentation": "https://espocrm-client.readthedocs.io",
        "Download": "https://pypi.org/project/espocrm-client/",
        "Feature Requests": "https://github.com/espocrm/espocrm-client/issues/new?template=feature_request.md",
        "Funding": "https://github.com/sponsors/espocrm",
        "Homepage": "https://github.com/espocrm/espocrm-client",
        "Issues": "https://github.com/espocrm/espocrm-client/issues",
        "Repository": "https://github.com/espocrm/espocrm-client.git",
        "Source Code": "https://github.com/espocrm/espocrm-client"
    },
    "split_keywords": [
        "espocrm",
        " api",
        " client",
        " crm",
        " rest",
        " api-client",
        " customer-relationship-management",
        " business-automation",
        " sales-management",
        " lead-management",
        " contact-management",
        " opportunity-management",
        " type-safe",
        " pydantic",
        " structured-logging"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5a3a30c2ff8dc544cf3c54656e241eb6e92b1c590331463a1238c04d8bc3b02e",
                "md5": "d7261a54b3589d7e4c6a5289be8a94c5",
                "sha256": "ce2b6facdc1153ee52b85a6565c97df7d3a4697587389bf48355cbca2d129c10"
            },
            "downloads": -1,
            "filename": "espocrm_client-0.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "d7261a54b3589d7e4c6a5289be8a94c5",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 148982,
            "upload_time": "2025-07-10T21:49:51",
            "upload_time_iso_8601": "2025-07-10T21:49:51.467276Z",
            "url": "https://files.pythonhosted.org/packages/5a/3a/30c2ff8dc544cf3c54656e241eb6e92b1c590331463a1238c04d8bc3b02e/espocrm_client-0.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "57ce02903e9956988e9c01f9bfcfb84ecaef55502d39599f29c7621ed54b41f8",
                "md5": "e0ee4dbca085b435de5e44ab9791b430",
                "sha256": "ea1a34a99906f0b3173fedec5ab79ef37e388c5f5234fbcf1ff6fc2492923c3a"
            },
            "downloads": -1,
            "filename": "espocrm_client-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "e0ee4dbca085b435de5e44ab9791b430",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 247415,
            "upload_time": "2025-07-10T21:49:54",
            "upload_time_iso_8601": "2025-07-10T21:49:54.463605Z",
            "url": "https://files.pythonhosted.org/packages/57/ce/02903e9956988e9c01f9bfcfb84ecaef55502d39599f29c7621ed54b41f8/espocrm_client-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-10 21:49:54",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "espocrm",
    "github_project": "espocrm-client",
    "github_not_found": true,
    "lcname": "espocrm-client"
}
        
Elapsed time: 0.50968s