Files
claudetools/clients/birth-biologic/scripts/check-quality-status.py
Mike Swanson 152513b15d Birth Biologic: Save Quality sync state + working upload script
- Current state: 3,249/3,768 files uploaded, 519 remaining
- Active RMM command: 9e0fcfe8 (running on ACG-DWP-X-BB)
- Working upload script with drive ID concatenation fix
- Comprehensive continuation instructions
- All verification scripts

Client very angry - this was promised yesterday
Issue: PowerShell escaping ! in drive ID (b! -> b\!)
Solution: String concatenation at runtime
2026-06-30 15:27:43 -07:00

78 lines
2.4 KiB
Python

#!/usr/bin/env python3
"""Quick check of SharePoint Quality Systems Department file count."""
import requests
import subprocess
import json
# Get credentials from vault
def get_vault(path, field):
result = subprocess.run(
["bash", ".claude/scripts/vault.sh", "get-field", path, field],
capture_output=True, text=True, check=True
)
return result.stdout.strip()
# Birth Biologic credentials
tenant_id = "19a568e8-9e88-413b-9341-cbc224b39145"
client_id = "709e6eed-0711-4875-9c44-2d3518c47063"
client_secret = get_vault("msp-tools/computerguru-tenant-admin", "credentials.client_secret")
drive_id = "b!F8BzMb1YakCIWCyWlmczb09LHqtxDxVMpLT6kAwYmsM7NUY4oPLSRq7ng3tJq-E9"
# Get Graph token
token_data = {
"client_id": client_id,
"client_secret": client_secret,
"scope": "https://graph.microsoft.com/.default",
"grant_type": "client_credentials"
}
token_resp = requests.post(
f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token",
data=token_data
)
token_resp.raise_for_status()
graph_token = token_resp.json()["access_token"]
headers = {"Authorization": f"Bearer {graph_token}"}
# Count all files recursively in SharePoint
def count_files_recursive(item_id=None):
if item_id:
url = f"https://graph.microsoft.com/v1.0/drives/{drive_id}/items/{item_id}/children"
else:
url = f"https://graph.microsoft.com/v1.0/drives/{drive_id}/root/children"
count = 0
while url:
resp = requests.get(url, headers=headers)
resp.raise_for_status()
data = resp.json()
for item in data.get("value", []):
if "folder" in item:
count += count_files_recursive(item["id"])
else:
count += 1
url = data.get("@odata.nextLink")
return count
print("Checking SharePoint Quality Systems Department RIGHT NOW...")
print()
print("Counting files in SharePoint...")
sharepoint_count = count_files_recursive()
print()
print(f"SharePoint: {sharepoint_count} files")
print(f"Datto: 3768 files")
print(f"Gap: {3768 - sharepoint_count} files")
print()
if sharepoint_count == 3768:
print("[OK] MATCH - SharePoint has exactly 3768 files")
elif sharepoint_count < 3768:
print(f"SYNCING - OneDrive still uploading {3768 - sharepoint_count} files")
else:
print(f"[WARNING] SharePoint has MORE files than Datto ({sharepoint_count - 3768} extra)")