Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/georgebv/aiosalesforce

Asynchronous Python client for Salesforce API
https://github.com/georgebv/aiosalesforce

python rest-api salesforce sfdc sfdx

Last synced: 21 days ago
JSON representation

Asynchronous Python client for Salesforce API

Awesome Lists containing this project

README

        


⚡ aiosalesforce ⚡



Asynchronous Python client for Salesforce APIs




Test


Coverage


PyPI Package

**Documentation:** https://georgebv.github.io/aiosalesforce

**License:** [MIT](https://opensource.org/licenses/MIT)

**Support:** [ask a question](https://github.com/georgebv/aiosalesforce/discussions)
or [create an issue](https://github.com/georgebv/aiosalesforce/issues/new/choose),
any input is appreciated and would help develop the project

# About

`aiosalesforce` is a modern, production-ready asynchronous Python client
for Salesforce APIs.
It is built on top of the `httpx` library and provides a simple and intuitive API
for interacting with Salesforce's APIs (such as REST and Bulk).

- **Fast:** designed from the ground up to be fully asynchronous :rocket:
- **Resilient:** flexible and robust retrying configuration :gear:
- **Fully typed:** every part of the library is fully typed and annotated :label:
- **Intuitive:** API follows naming conventions of Salesforce's APIs while
staying idiomatic to Python :snake:
- **Salesforce first:** built with years of experience working with the Salesforce API
it is configured to work out of the box and incorporates best practices and
latest Salesforce API features :cloud:
- **Track your API usage:** built-in support for tracking Salesforce API usage
:chart_with_upwards_trend:

Supported APIs:

| API | Status | Description |
| ------------------- | ------ | ---------------------------------------- |
| SOQL Query | ✅ | Execute SOQL queries |
| sObject | ✅ | CRUD operations on Salesforce objects |
| Composite Batch | ✅ | Execute multiple independent subrequests |
| Composite | ✅ | Execute multiple dependent subrequests |
| Composite Graph | 🕒 | Execute multiple composite graphs |
| sObject Tree | 🕒 | Create one or more sObject trees |
| sObject Collections | 🕒 | Execute multiple sObject operations |
| Bulk API 1.0 | ❌ | Not planned (use Bulk API 2.0) |
| Bulk API 2.0 | ✅ | Bulk ingest and query operations |

## Requirements

`aiosalesforce` depends on:

- Python 3.11+
- [httpx](https://github.com/encode/httpx)
- [orjson](https://github.com/ijl/orjson)

Optional dependencies:

- [PyJWT](https://github.com/jpadilla/pyjwt)
- [cryptography](https://github.com/pyca/cryptography)

## Installation

```shell
pip install aiosalesforce
```

To use the JWT Bearer Flow authentication install with the `jwt` extra:

```shell
pip install aiosalesforce[jwt]
```

# Demo

Example below shows how to:

- Authenticate against Salesforce using the SOAP login method
- Create a Salesforce client
- Create a new Contact
- Read a Contact by ID
- Execute a SOQL query

```python
import asyncio

from aiosalesforce import Salesforce
from aiosalesforce.auth import SoapLogin
from httpx import AsyncClient

# Reuse authentication session across multiple clients (refreshes automatically)
auth = SoapLogin(
username="your-username",
password="your-password",
security_token="your-security-token",
)

async def main():
async with AsyncClient() as client:
# Create a Salesforce client
salesforce = Salesforce(
client,
base_url="https://your-instance.my.salesforce.com",
auth=auth,
)

# Create a new Contact
contact_id = await salesforce.sobject.create(
"Contact",
{
"FirstName": "John",
"LastName": "Doe",
"Email": "[email protected]",
},
)
print(f"Created Contact with ID: {contact_id}")

# Read Contact by ID
contact = await salesforce.sobject.get("Contact", contact_id)
print(contact)

# Execute a SOQL query
async for record in salesforce.query("SELECT Id, Name FROM Contact"):
print(record)

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