[Python] How to get/list my SharePoint site with the "Sites" APIs using the Python SDK

Discussão em 'Python' iniciado por Stack, Dezembro 19, 2024.

  1. Stack

    Stack Membro Participativo

    I need some help understanding how can I manage the storage library of my SharePoint site.

    Given I have the URL of my site as "https://mycompanyname.sharepoint.com/sites/mysitename" I first want to "access" the site in order to get its id, in order later to get the drives under the site and manages the storage library. The problem I want to solve here is to get the Site in order to access its metadata and its id.

    So far I tried, without success:

    import os
    import jwt
    from typing import Optional, Literal
    from azure.identity.aio import ClientSecretCredential
    from msgraph import GraphServiceClient
    from msgraph.generated.models.drive_item import DriveItem
    from msgraph.generated.models.folder import Folder
    from msgraph.generated.drives.item.items.item.content.content_request_builder import ContentRequestBuilder
    from kiota_abstractions.base_request_configuration import RequestConfiguration
    from msgraph.generated.models.o_data_errors.o_data_error import ODataError
    from src.config.loader import CONFIG
    import aiofiles
    from src.utils.logger import get_logger

    logger = get_logger(CONFIG.logging.name, CONFIG.logging.level)

    class GraphClientSingleton():
    _client = None
    _credentials = None

    @classmethod
    def get_client(cls):
    if cls._client is None:
    # cls._authority = 'login.microsoftonline.com'
    cls._credentials = ClientSecretCredential(
    tenant_id = CONFIG.msgraph.tenant_id_sharepoint,
    client_id = CONFIG.msgraph.client_id_sharepoint,
    client_secret = CONFIG.msgraph.client_secret_sharepoint,
    )
    cls._scopes = ['https://graph.microsoft.com/.default']

    cls._client = GraphServiceClient(credentials=cls._credentials, scopes=cls._scopes)
    return cls._client

    @classmethod
    async def decode_token(cls):
    token = await cls.get_access_token()
    decoded_token = jwt.decode(token, options={"verify_signature": False})
    return decoded_token

    @classmethod
    async def get_access_token(cls):
    if cls._credentials is None:
    cls.get_client()

    token = await cls._credentials.get_token(*cls._scopes)
    return token.token

    class SharePointDAO:
    def __init__(self):
    self.client = GraphClientSingleton.get_client()

    if __name__ == "__main__":
    async def test_api():
    token = await GraphClientSingleton.decode_token()
    sp_dao = SharePointDAO()
    # Example 1
    from msgraph.generated.sites.sites_request_builder import SitesRequestBuilder
    from kiota_abstractions.base_request_configuration import RequestConfiguration
    # To initialize your graph_client, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
    query_params = SitesRequestBuilder.SitesRequestBuilderGetQueryParameters(
    select = ["siteCollection", "webUrl"],
    filter = "siteCollection/root ne null",
    )
    request_configuration = RequestConfiguration(
    query_parameters = query_params,
    )
    sites = await sp_dao.client.sites.get(request_configuration = request_configuration)
    # Example 2 (not sure how to map the "real" URL with the needed url here)
    site_request_builder = sp_dao.client.sites.with_url(
    "https://graph.microsoft.com/v1.0/sites/mycompanyname.sharepoint.com:/mysitename"
    )
    site = await site_request_builder.get()
    # Example 3 (return empty list under "value")
    sites = await sp_dao.client.sites.get()
    # Example 4 (return 403 error "Access Denied")
    sites = await sp_dao.client.sites.get_all_sites.get()
    logger.info(sites)
    import asyncio
    asyncio.run(test_api())

    Continue reading...

Compartilhe esta Página