Skip to content

Create a site design that bundles site scripts for applying customizations.

Reference

View source

import argparse
import uuid

from office365.runtime.client_value_collection import ClientValueCollection
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.sitedesigns.creation_info import SiteDesignCreationInfo
from office365.sharepoint.sitescripts.utility import SiteScriptUtility
from tests.settings import client_id, password, site_url, tenant, username


def main():
    parser = argparse.ArgumentParser(description="Create a site design")
    parser.add_argument("--script-title", default="Contoso theme script", help="site script title")
    parser.add_argument("--design-title", default="Contoso site", help="site design title")
    args = parser.parse_args()

    ctx = ClientContext(site_url).with_username_and_password(
        tenant=tenant, client_id=client_id, username=username, password=password
    )

    # First create a site script
    site_script = {
        "$schema": "schema.json",
        "actions": [{"verb": "applyTheme", "themeName": "Contoso Theme"}],
        "bindata": {},
        "version": 1,
    }
    script_result = SiteScriptUtility.create_site_script(
        ctx, args.script_title, "Applies the Contoso branding theme", site_script
    ).execute_query()
    script_id = script_result.value.Id

    # Bundle it into a site design
    design_info = SiteDesignCreationInfo(
        Title=args.design_title,
        Description="Standard Contoso team site with branding",
        WebTemplate="64",  # 64 = team site, 68 = communication site
        SiteScriptIds=ClientValueCollection(uuid.UUID, [uuid.UUID(script_id)]),
    )
    design = SiteScriptUtility.create_site_design(ctx, design_info).execute_query()
    print(f"Site design created: {design.value.Title} (ID: {design.value.Id})")


if __name__ == "__main__":
    main()

← Back to Site Designs