importargparseimportjsonimportuuidfromoffice365.runtime.client_value_collectionimportClientValueCollectionfromoffice365.sharepoint.client_contextimportClientContextfromoffice365.sharepoint.sitedesigns.creation_infoimportSiteDesignCreationInfofromoffice365.sharepoint.sitescripts.utilityimportSiteScriptUtilityfromtests.settingsimportclient_id,password,site_url,tenant,usernamedefmain():parser=argparse.ArgumentParser(description="Create a site design from an existing web")parser.add_argument("--script-title",default="Exported from web",help="site script title")parser.add_argument("--design-title",default="Design from web",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)# Export current web configuration as a site scriptserialized=ctx.web.get_site_script().execute_query()assertserialized.value.JSONisnotNoneprint(f"Generated site script ({len(serialized.value.JSON)} chars)")# Create the site script from the exported JSONscript_result=SiteScriptUtility.create_site_script(ctx,args.script_title,"Auto-exported site script",json.loads(serialized.value.JSON)).execute_query()# Create a site design that uses this scriptdesign_info=SiteDesignCreationInfo(Title=args.design_title,Description="Created from an existing site export",WebTemplate="64",SiteScriptIds=ClientValueCollection(uuid.UUID,[uuid.UUID(script_result.value.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()