Spaces:
Sleeping
Sleeping
| import os | |
| import aiofiles | |
| import httpx | |
| class SharepointClient: | |
| def __init__(self): | |
| self.access_token_url = f"https://login.microsoftonline.com/{os.getenv('AZURE_TENANT_ID')}/oauth2/v2.0/token" | |
| self.access_token_data = { | |
| "grant_type": "client_credentials", | |
| "client_id": os.getenv("AZURE_CLIENT_ID"), | |
| "client_secret": os.getenv("AZURE_CLIENT_SECRET"), | |
| "scope": os.getenv("AZURE_SCOPE"), | |
| } | |
| self.token = None | |
| async def __aenter__(self): | |
| async with httpx.AsyncClient() as client: | |
| token_response = await client.post( | |
| self.access_token_url, data=self.access_token_data | |
| ) | |
| self.token = token_response.json()["access_token"] | |
| return self | |
| async def __aexit__(self, exc_type, exc_val, exc_tb): | |
| pass | |
| async def upload_file(self, file_path: str): | |
| async with httpx.AsyncClient() as client: | |
| headers = { | |
| "Authorization": f"Bearer {self.token}", | |
| "Content-Type": "application/json", | |
| } | |
| file_name = os.path.basename(file_path) | |
| async with aiofiles.open(file_path, "rb") as file: | |
| file_data = await file.read() | |
| upload_url = f"https://graph.microsoft.com/v1.0/drives/{os.getenv('AZURE_DRIVE_ID')}/root:/{file_name}:/content" | |
| response = await client.put( | |
| upload_url, headers=headers, content=file_data | |
| ) | |
| uploaded_response = response.json() | |
| web_url = uploaded_response["webUrl"] | |
| return web_url | |
| async def get_files(self): | |
| async with httpx.AsyncClient() as client: | |
| headers = { | |
| "Authorization": f"Bearer {self.token}", | |
| "Content-Type": "application/json", | |
| } | |
| files_url = f"https://graph.microsoft.com/v1.0/drives/{os.getenv('AZURE_DRIVE_ID')}/root/children" | |
| response = await client.get(files_url, headers=headers) | |
| files = response.json() | |
| return files |