OneDrive & SharePoint (Files)¶
Examples for working with OneDrive and SharePoint files via the Graph API — files, folders, sharing, sites, lists, pages, term store, and Excel.
Prerequisites¶
| Permission | Description | Reference |
|---|---|---|
Files.ReadWrite |
Upload, download, copy, move files and folders | Files permissions |
Sites.ReadWrite.All |
Create and manage sites, lists, pages, term store | Sites permissions |
Analytics.Read |
Read file activity stats and analytics | Analytics permissions |
How OneDrive works¶
flowchart LR
A[OneDrive / Site] --> B[Drive]
B --> C[Folders]
C --> D[Files]
D --> E[Versions]
D --> F[Thumbnails]
D --> G[Sharing links]
B --> H[Lists]
H --> I[Items]
H --> J[Columns]
A --> K[Term store]
K --> L[Groups → Sets → Terms]
A --> M[Site pages]
Basic usage¶
| Scenario | File | Permission |
|---|---|---|
| Upload and download a file | files/upload_download.py |
Files.ReadWrite |
See
files/README.mdfor the full set of file examples (upload, download, manage, lifecycle, recycle bin, sharing, search, delta, analytics).
Patterns¶
Files¶
| Scenario | File | Permission |
|---|---|---|
| Upload and download a file (round-trip) | files/upload_download.py |
Files.ReadWrite |
| Ensure a file exists (idempotent get-or-upload) | files/ensure_file.py |
Files.ReadWrite |
| Upload a large file (resumable session) | files/upload_large.py |
Files.ReadWrite |
| Download and read a JSON file | files/download_json.py |
Files.ReadWrite |
| Copy, rename, move, versions, delete | files/manage.py |
Files.ReadWrite |
| Check out, edit, check in (versioning) | files/lifecycle.py |
Files.ReadWrite |
| Sharing links and invitations | files/sharing.py |
Files.ReadWrite |
| Recycle bin — restore and purge | files/recycle_bin.py |
Files.ReadWrite.All |
| Search files by keyword | files/search.py |
Files.Read |
| Delta query with resume token | files/delta_query.py |
Files.Read |
| Largest files report | files/largest_files.py |
Files.Read |
| Sharing audit — files with links | files/find_shared.py |
Files.Read.All |
| File analytics and activity | files/analytics.py |
Files.Read, Analytics.Read |
Folders¶
| Scenario | File | Permission |
|---|---|---|
| Create folders, navigate hierarchy | folders/manage.py |
Files.ReadWrite |
| Create a nested folder structure | folders/create_nested.py |
Files.ReadWrite |
| Recursively list all files/folders | folders/list_recursive.py |
Files.Read |
| Upload a local folder tree | folders/upload_folder.py |
Files.ReadWrite |
| Download a folder as a zip | folders/download_folder.py |
Files.ReadWrite |
| Rename, move, delete folders | folders/move_delete.py |
Files.ReadWrite |
Drives¶
| Scenario | File | Permission |
|---|---|---|
| Recent items, shared with me, followed sites | drives/explore.py |
Files.Read, Sites.Read.All |
| Search a keyword across all drives | drives/search_all.py |
Files.Read.All, Sites.Read.All |
| Tenant-wide storage report (quota) | drives/storage_report.py |
Files.Read.All, Sites.Read.All |
| A user's drive and quota | drives/user_drive.py |
Files.Read.All, Sites.Read.All |
Sites — administration, governance, reporting¶
| Scenario | File | Permission |
|---|---|---|
| Get site by URL / root site | sites/get_site.py |
Sites.Read.All |
| Get site by server-relative path | sites/get_site_by_path.py |
Sites.Read.All |
| List all sites (paged) | sites/list_all.py |
Sites.Read.All |
| List subsites of a site collection | sites/subsites.py |
Sites.Read.All |
| Search sites, follow/unfollow | sites/search_and_follow.py |
Sites.ReadWrite.All |
| Storage report per site | sites/storage_report.py |
Sites.Read.All |
| Site analytics — most active sites | sites/analytics_report.py |
Sites.Read.All |
| Site activities over a window | sites/site_activities.py |
Sites.Read.All |
| Find stale sites (no activity) | sites/find_stale.py |
Sites.Read.All |
| Export sites to CSV | sites/export_csv.py |
Sites.Read.All |
| Site permissions — who has access | sites/site_permissions.py |
Sites.Read.All |
| Grant / revoke site access | sites/grant_permission.py, sites/revoke_permission.py |
Sites.ReadWrite.All |
| Add / remove site owner | sites/add_admin.py, sites/remove_admin.py |
Sites.ReadWrite.All |
| Sharing link for a site | sites/share_site_link.py |
Sites.ReadWrite.All |
| External sharing audit | sites/external_sharing.py |
Sites.Read.All |
| Site content types & columns inventory | sites/site_governance.py |
Sites.Read.All |
| Stale site lifecycle (owners → delete) | sites/stale_lifecycle.py |
Sites.ReadWrite.All |
| Unfollow a site | sites/unfollow_site.py |
Sites.ReadWrite.All |
Lists¶
| Scenario | File | Permission |
|---|---|---|
| Create list with custom columns | lists/create_list.py |
Sites.ReadWrite.All |
| Manage list items (CRUD) | lists/manage_items.py |
Sites.ReadWrite.All |
| Query items (filter/select/order) | lists/query_items.py |
Sites.Read.All |
| Document library as a drive | lists/library.py |
Sites.ReadWrite.All |
| Bulk import / export items | lists/import_export.py |
Sites.ReadWrite.All |
| Manage columns (incl. lookup) | lists/columns.py |
Sites.ReadWrite.All |
Site pages¶
| Scenario | File | Permission |
|---|---|---|
| Page lifecycle (create/update/publish/delete) | sitepages/manage.py |
Sites.ReadWrite.All |
| List pages with publishing state | sitepages/list_pages.py |
Sites.Read.All |
| Check in and publish workflow | sitepages/publish_flow.py |
Sites.ReadWrite.All |
| Inspect web parts and positions | sitepages/webparts.py |
Sites.Read.All |
Term store¶
| Scenario | File | Permission |
|---|---|---|
| Create groups, sets, terms | termstore/create_terms.py |
Sites.ReadWrite.All |
| Search the store by term label | termstore/search_term.py |
Sites.ReadWrite.All |
| Export the full hierarchy | termstore/export_store.py |
TermStore.Read.All |
| Import a hierarchy from JSON | termstore/import_store.py |
TermStore.ReadWrite.All |
| Delete groups (clean up taxonomy) | termstore/clear_store.py |
Sites.ReadWrite.All |
Excel (workbooks)¶
| Scenario | File | Permission |
|---|---|---|
| Read workbook tables and data | excel/read_table.py |
Files.ReadWrite |
| Workbook sessions (create/refresh/close) | excel/workbook_sessions.py |
Files.ReadWrite |
| Manage tables (add, rows, sort) | excel/tables.py |
Files.ReadWrite |
| Worksheets (add, protect, delete) | excel/worksheets.py |
Files.ReadWrite |
| Ranges and named items | excel/ranges.py |
Files.ReadWrite |
| Excel functions (ABS, POWER, DAYS) | excel/formulas.py |
Files.ReadWrite |
Each folder has its own README with prerequisites, a flow diagram, and API references:
files/,folders/,drives/,sites/,lists/,sitepages/,termstore/,excel/.
Quick start¶
from office365.graph_client import GraphClient
client = GraphClient(tenant="contoso.onmicrosoft.com").with_client_secret(
"client_id", "client_secret"
)
uploaded = client.me.drive.root.upload("hello.txt", b"Hello!").execute_query()
print(f"Uploaded: {uploaded.name}")