Skip to main content

affliction

welcome to affliction. provides synchronous clients, based on deceit, for interacting with the microsoft graph api and the exchange management rest api. please be mindful that the exchange rest api is (still, as of 2023 after more than three years) in beta, and these apis are not currently published.
this means that the exchange rest api will likely change between the time that this library is published and the time the exchange management rest api is officially released.

powered by angry penguins.

graph client

to use the graph client, you use the affliction.graph_client.SynchronousGraphClient class. there are a few pre-defined endpoints for now for users and subscribedSkus.

from affliction.graph_client import SynchronousGraphClient
client = SynchronousGraphClient(
    tenant_id='01234567-000...',
    client_id='01234567-000...',
    client_secret='secret generated from azure app registration',
)
users = client.get_users(params={
    '$search': '"displayName:alice"',
})

documentation for the users endpoint is available from micrososft. other documents provide a more fulsome description of the available odata parameters

exchange client

to use the exchange client, instantiate affliction.exchange_client.ExchangeClient

use the mailboxes endpoint with $filter or $search odata semantics just like you would with the graph api.

from affliction.exchange_client import ExchangeClient
client = ExchangeClient(
    tenant_id='01234567-00...',
    client_id='01234567-00...',
    client_secret='app secret from azure app registration with Exchange.ManageAsApp permissions'    
)
mailboxes = client.mailboxes(params={
    '$search': '"displayName:catsareawesome"',
})
recipients = client.recipients(params={
    '$filter': 'LitigationHoldEnabled eq True',
})

hat tip to Vasil Michev who got us started down this path:
https://www.michev.info/blog/post/2869/abusing-the-rest-api-endpoints-behind-the-new-exo-cmdlets

to see how to add the required ManageAsApp permission, please feel free to reference this link: https://4sysops.com/archives/connect-to-exchange-online-with-powershell-and-certificate-based-authentication/

Metadata

Release files for affliction 1.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for affliction 1.5
File Size Uploaded Provenance Actions
affliction-1.5.tar.gz 11.3 kB Without provenance Details for affliction-1.5.tar.gz

Release files / affliction-1.5.tar.gz

Download URL affliction-1.5.tar.gz
Size 11.3 kB
Tags Source
SHA-256 checksum
How to use checksums
2be63f702bfbec9c52e63c6919481baf9e279eef614f26576101f0da9d8008b8
BLAKE2b-256 checksum
How to use checksums
1497a194955d7bea11d22f54a732f7f2596ed76cdfa5c3577b16ce12ce2456dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.3

Security for affliction 1.5

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page