Skip to main content

API wrapper for Dynamics365CRM written in Python

Project description

dynamics365crm-python

Dynamics365CRM API wrapper for Dynamics 365 written in Python. This library works for API version: v9.0

Installing

pip install dynamics365crm-python

Usage

This library provides a client that is initialized with the following arguments

  • domain: the dynamics 365 tenant domain (yours or someone else's)
  • access_token: the retrieved token after authentication

Arguments for OAuth2 flow

  • client_id: your Azure AD application client id
  • client_secret: your Azure AD application client secret
from dynamics365crm.client import Client

## Normal use to make calls to the api
client = Client("https://tenant_name.crmX.dynamics.com", access_token="access_token")

## OAuth2 configuration required arguments
client = Client(
    "https://tenant_name.crmX.dynamics.com",
    client_id=CLIENT_ID,
    client_secret=CLIENT_SECRET,
)

OAuth2 Protocol

Get authorization url

This will return a MSAL valid authorization url, the following are required:

  • tenant_id: someone else's Azure AD tenant_id
    • Ask the dynamics tenant owner to go to the Azure Portal and retrieve the Tenant ID from the Azure Active Directory/Overview
    • If your app is configured as multi-tenant (for any enterprise or personal account to use) you could pass "common" instead od the Tenant ID
      • However microsoft azure app configuration is a mess so the Tenant ID is preferable
  • redirect_uri: your service callback url
  • state: your unique generated state to identify the requester
    • you could also initiate an oauth flow with msal manually with initiate_auth_code_flow method, check the official example
authorization_url = client.build_authorization_url("tenant_id", "redirect_uri", "state")

>>> "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=XXXX&response_type=code&redirect_uri=https%3A%2F%your_domain/%2Fcallback%2F&scope=https%3A%2F%2tenant_name.crmX.dynamics.com%2Fuser_impersonation+offline_access+openid+profile&state=XXXX&prompt=consent"

Exchange the callback code for an access token

To finish the oauth protocol microsoft will redirect to your callback endpoint with a temporal code in the url query params to be exchanged for the full-fledged token (a json with the access_token, refresh_token, expires_in, etc.)

Again the (tenant_id or "common") and redirect_uri are required, the third argument is the code sent by microsoft

token = client.exchange_code("tenant_id", "redirect_uri", "code")

Refresh token

If the access token expires you could get a new access_token exchanging the long-lived refresh_token

Again the tenant_id or "common" is required

token = client.refresh_access_token("tenant_id", "refresh_token")

Set access token

You could pass the access_token in the constructor or set it with

client.set_access_token("access_token")

Dynamics Web API

Contacts

Get Contacts

can receive orderby, filter, select, top, expand

list_contacts = client.get_contacts()

Create Contact

create_contact = client.create_contact(firstname="FIRSTNAME", lastname="LASTNAME", middlename="MIDDLENAME", emailaddress1="EMAILADDRESS")

Delete Contact

delete_contact = client.delete_contact('ID')

Update Contact

update_contact = client.update_contact('ID', firstname="FIRSTNAME", lastname="LASTNAME", middlename="MIDDLENAME", emailaddress1="EMAILADDRESS")

Accounts

Get Accounts

can receive orderby, filter, select, top, expand

get_accounts = client.get_accounts()

Create Account

create_account = client.create_account(name="NAME", websiteurl="WWW.WEBSITE.COM")

Delete Account

create_account = client.delete_account('ID')

Update Account

update_account = client.update_account(id="ID", name="NAME")

Opportunities

Get Opportunities

can receive orderby, filter, select, top, expand

list_opportunities = client.get_opportunities()

Create Opportunities

create_opportunities = client.create_opportunity(name="OPPORTUNITY NAME")

Delete Opportunities

delete_opportunities = client.delete_opportunity(id="OPPORTUNITY ID")

Update Opportunities

update_opportunities = client.update_opportunity(id="OPPORTUNITY ID", name="OPPORTUNITY NAME", description="SOME DESCRIPTION")

Leads

Get Leads

can receive orderby, filter, select, top, expand

list_leads = client.get_leads()

Create Lead

create_leads = client.create_lead(fullname="LEAD NAME", subject="LEAD SUBJECT", mobilephone="123456", websiteurl="WWW.WEBSITE.COM", middlename="MIDDLE LEAD NAME")

Delete Lead

delete_leads = client.delete_lead("ID")

Update Lead

update_leads = client.update_lead(fullname="LEAD NAME", subject="LEAD SUBJECT", mobilephone="123456", websiteurl="WWW.WEBSITE.COM", middlename="MIDDLE LEAD NAME")

Campaigns

Get Campaigns

can receive orderby, filter, select, top, expand

list_campaigns = client.get_campaigns()

Create Campaign

create_campaign = client.create_campaign(name="CAMPAIGN NAME", description="SOME DESCRIPTION")

Delete Campaign

delete_campaign = client.delete_campaign(id="ID")

Update Campaign

update_campaign = client.update_campaign(id="ID", name="CAMPAIGN NAME", description="SOME DESCRIPTION")

Requirements

  • requests
  • msal

Contributing

We are always grateful for any kind of contribution including but not limited to bug reports, code enhancements, bug fixes, and even functionality suggestions.

You can report any bug you find or suggest new functionality with a new issue.

If you want to add yourself some functionality to the wrapper:

  1. Fork it ( https://github.com/GearPlug/dynamics365crm-python )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Adds my new feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

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

dynamics365crm_python-1.0.1.tar.gz (6.9 kB view details)

Uploaded Source

Built Distribution

dynamics365crm_python-1.0.1-py3-none-any.whl (7.9 kB view details)

Uploaded Python 3

File details

Details for the file dynamics365crm_python-1.0.1.tar.gz.

File metadata

  • Download URL: dynamics365crm_python-1.0.1.tar.gz
  • Upload date:
  • Size: 6.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for dynamics365crm_python-1.0.1.tar.gz
Algorithm Hash digest
SHA256 ad5e8e6d5145fac41118bcfdd721073343692d12b59fe4f39467beb5bb193484
MD5 8fca7547c34867dee3ac3e2d81257c6f
BLAKE2b-256 cdc47c2ad1c2bcf41e35d12523c6429723e250ba16a3cfb2880d736baceefcca

See more details on using hashes here.

File details

Details for the file dynamics365crm_python-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for dynamics365crm_python-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f8a02351db0446d821ad34cf9b39a47f7699908ec3cc066aaf832a58c616ebb0
MD5 43e6a069ecc8d031eeb4de5d7aaa484e
BLAKE2b-256 73321cc092e9b509a5d65a29c367e3526f3a04b8f655f5d8bd4fea2e725ef3bb

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page