https://github.com/mrthearman/dynamics-client
Client for making Web API request from a Microsoft Dynamics 365 Database
https://github.com/mrthearman/dynamics-client
dynamics dynamics-365 dynamics-crm odata python webapi
Last synced: 7 months ago
JSON representation
Client for making Web API request from a Microsoft Dynamics 365 Database
- Host: GitHub
- URL: https://github.com/mrthearman/dynamics-client
- Owner: MrThearMan
- License: mit
- Created: 2021-05-09T17:53:52.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2024-11-18T21:41:42.000Z (7 months ago)
- Last Synced: 2024-11-18T21:53:00.340Z (7 months ago)
- Topics: dynamics, dynamics-365, dynamics-crm, odata, python, webapi
- Language: Python
- Homepage: https://pypi.org/project/dynamics-client/
- Size: 3.52 MB
- Stars: 10
- Watchers: 1
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Dynamics Web API Client
[![Coverage Status][coverage-badge]][coverage]
[![GitHub Workflow Status][status-badge]][status]
[![PyPI][pypi-badge]][pypi]
[![GitHub][licence-badge]][licence]
[![GitHub Last Commit][repo-badge]][repo]
[![GitHub Issues][issues-badge]][issues]
[![Downloads][downloads-badge]][pypi]
[![Python Version][version-badge]][pypi]```shell
pip install dynamics-client
```---
**Documentation**: [https://mrthearman.github.io/dynamics-client/](https://mrthearman.github.io/dynamics-client/)
**Source Code**: [https://github.com/MrThearMan/dynamics-client/](https://github.com/MrThearMan/dynamics-client/)
**Contributing**: [https://github.com/MrThearMan/dynamics-client/blob/main/CONTRIBUTING.md](https://github.com/MrThearMan/dynamics-client/blob/main/CONTRIBUTING.md)
---
Client for making Web API request from a Microsoft Dynamics 365 Database.
You should also read the [Dynamics Web API Reference Docs][ref-docs]:
## Basic usage:
```python
from dynamics import DynamicsClient, ftr# Init the client:
client = DynamicsClient(...)### Example GET request:
client.table = "accounts"
# Get only these columns for the account.
client.select = ["accountid", "name"]# Filter to only the accounts that have been created on or after the
# given ISO date string, AND that have 200 or more employees.
client.filter = [
ftr.on_or_after("createdon", "2020-01-01T00:00:00Z"),
ftr.ge("numberofemployees", 200),
]# Expand to the contacts (collection-values navigation property)
# on the account that have 'gmail.com' in their email address 1 OR 2.
# Get only the 'firstname', 'lastname' and 'mobilephone' columns for these contacts.
# Also expand the primary contact (single-valued navigation property).
# Get only the 'emailaddress1' column for the primary contact.
client.expand = {
"contact_customer_accounts": {
"select": ["firstname", "lastname", "mobilephone"],
"filter": {
ftr.contains("emailaddress1", "gmail.com"),
ftr.contains("emailaddress2", "gmail.com"),
}
},
"primarycontactid": {
"select": ["emailaddress1"],
},
}result = client.get()
print(result.data)
# [
# {
# "accountid": ...,
# "name": ...,
# "contact_customer_accounts": [
# {
# "contactid": ..., # id field is always given
# "firstname": ...,
# "lastname": ...,
# "mobilephone": ...
# },
# ...
# ],
# "primarycontactid": {
# "contactid": ...,
# "emailaddress1": ...
# }
# },
# ...
# ]### Example POST request
# IMPORTANT!!!
client.reset_query()client.table = "contacts"
# Get only these columns from the created contact
client.select = ["firstname", "lastname", "emailaddress1"]# The data to create the contact with. '@odata.bind' is used to link
# the contact to the given navigation property.
accountid = ...
data = {
"firstname": ...,
"lastname": ...,
"emailaddress1": ...,
"[email protected]": f"/accounts({accountid})"
}result = client.post(data=data)
print(result.data)
# {
# "contactid": ...,
# "firstname": ...,
# "lastname": ...,
# "emailaddress1": ...
# }### Example PATCH request
client.reset_query()
client.table = "contacts"
client.row_id = result["contactid"]data = {
"firstname": ...,
"lastname": ...,
}result = client.patch(data=data)
print(result.data)
# Return all rows on the updated contact,
# since no select statement was given
#
# {
# ...
# "contactid": ...,
# "firstname": ...,
# "lastname": ...,
# ...
# }### Example DELETE request
client.reset_query()
client.table = "contacts"
client.row_id = result["contactid"]client.delete()
```[ref-docs]: https://docs.microsoft.com/en-us/powerapps/developer/data-platform/webapi/query-data-web-api
[coverage-badge]: https://coveralls.io/repos/github/MrThearMan/dynamics-client/badge.svg?branch=main
[status-badge]: https://img.shields.io/github/actions/workflow/status/MrThearMan/dynamics-client/test.yml?branch=main
[pypi-badge]: https://img.shields.io/pypi/v/dynamics-client
[licence-badge]: https://img.shields.io/github/license/MrThearMan/dynamics-client
[repo-badge]: https://img.shields.io/github/last-commit/MrThearMan/dynamics-client
[issues-badge]: https://img.shields.io/github/issues-raw/MrThearMan/dynamics-client
[version-badge]: https://img.shields.io/pypi/pyversions/dynamics-client
[downloads-badge]: https://img.shields.io/pypi/dm/dynamics-client[coverage]: https://coveralls.io/github/MrThearMan/dynamics-client?branch=main
[status]: https://github.com/MrThearMan/dynamics-client/actions/workflows/test.yml
[pypi]: https://pypi.org/project/dynamics-client
[licence]: https://github.com/MrThearMan/dynamics-client/blob/main/LICENSE
[repo]: https://github.com/MrThearMan/dynamics-client/commits/main
[issues]: https://github.com/MrThearMan/dynamics-client/issues