[{"data":1,"prerenderedAt":4014},["ShallowReactive",2],{"navigation":3,"\u002Fsync-api\u002Fexamples\u002Fmicrosoft-entra-id-python":99,"\u002Fsync-api\u002Fexamples\u002Fmicrosoft-entra-id-python-surround":4013},[4,16,52,71,91],{"title":5,"path":6,"stem":7,"children":8,"icon":15},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,11],{"title":10,"path":6,"stem":7},"Introduction",{"title":12,"path":13,"stem":14},"Authentication","\u002Fgetting-started\u002Fauthentication","1.getting-started\u002F2.authentication","i-tabler-rocket",{"title":17,"path":18,"stem":19,"children":20,"icon":51},"GraphQL API","\u002Fgraphql-api","2.graphql-api\u002F1.index",[21,23,27,31,35,39,43,47],{"title":22,"path":18,"stem":19},"API Overview",{"title":24,"path":25,"stem":26},"Querying Patterns","\u002Fgraphql-api\u002Fquerying","2.graphql-api\u002F2.querying",{"title":28,"path":29,"stem":30},"Mutation Patterns","\u002Fgraphql-api\u002Fmutations","2.graphql-api\u002F3.mutations",{"title":32,"path":33,"stem":34},"List SaaS Applications","\u002Fgraphql-api\u002Fguides\u002Flist-applications","2.graphql-api\u002F4.guides\u002F1.list-applications",{"title":36,"path":37,"stem":38},"Find Unused Licenses","\u002Fgraphql-api\u002Fguides\u002Ffind-unused-licenses","2.graphql-api\u002F4.guides\u002F2.find-unused-licenses",{"title":40,"path":41,"stem":42},"Retrieve Upcoming Renewals","\u002Fgraphql-api\u002Fguides\u002Fupcoming-renewals","2.graphql-api\u002F4.guides\u002F3.upcoming-renewals",{"title":44,"path":45,"stem":46},"Handle GraphQL Errors","\u002Fgraphql-api\u002Fguides\u002Fhandle-errors","2.graphql-api\u002F4.guides\u002F4.handle-errors",{"title":48,"path":49,"icon":50},"API Reference","\u002Fgql-schema-reference","i-tabler-file-code","i-tabler-braces",{"title":53,"path":54,"stem":55,"children":56,"icon":70},"Sync API","\u002Fsync-api","3.sync-api\u002F1.index",[57,59,63,67],{"title":58,"path":54,"stem":55},"Viio Sync API",{"title":60,"path":61,"stem":62},"Quickstart","\u002Fsync-api\u002Fquickstart","3.sync-api\u002F2.quickstart",{"title":64,"path":65,"icon":66},"Examples","\u002Fsync-api\u002Fexamples","i-tabler-code",{"title":68,"path":69,"icon":50},"SDK Reference","\u002Fsync-api\u002Fapi-reference","i-tabler-refresh",{"title":72,"path":73,"stem":74,"children":75,"icon":90},"MCP Server","\u002Fmcp-server","4.mcp-server\u002F1.index",[76,78,82,86],{"title":77,"path":73,"stem":74},"Viio MCP Server",{"title":79,"path":80,"stem":81},"Setup","\u002Fmcp-server\u002Fsetup","4.mcp-server\u002F2.setup",{"title":83,"path":84,"stem":85},"Available Tools","\u002Fmcp-server\u002Ftools","4.mcp-server\u002F3.tools",{"title":87,"path":88,"stem":89},"SaaS Analysis Use Cases","\u002Fmcp-server\u002Fuse-cases","4.mcp-server\u002F4.use-cases","i-tabler-robot",{"title":92,"path":93,"stem":94,"children":95,"icon":98},"AI Integration","\u002Fai","5.ai\u002F1.index",[96],{"title":97,"path":93,"stem":94},"llms.txt","i-tabler-sparkles",{"id":100,"title":101,"body":102,"dateModified":4001,"datePublished":4001,"description":4002,"extension":4003,"links":4004,"meta":4005,"navigation":4006,"path":4007,"seo":4008,"stem":4011,"__hash__":4012},"docs\u002F3.sync-api\u002F6.examples\u002F2.microsoft-entra-id-python.md","Microsoft Entra ID",{"type":103,"value":104,"toc":3996},"minimark",[105,114,123,131,136,179,183,190,3921,3927,3936,3940,3943,3960,3963,3975,3983,3988,3992],[106,107,108,109,113],"p",{},"This example reads every Microsoft Entra ID user from Microsoft Graph and maps each one to ",[110,111,112],"code",{},"MicrosoftEmployeeDetails",". It sends the complete employee snapshot to Viio, which keeps your employee directory current and detects employees removed from Entra ID.",[106,115,116,117,122],{},"For SDK installation and environment variables, see ",[118,119,121],"a",{"href":120},"\u002Fsync-api\u002Fexamples#shared-setup","Shared Setup",".",[124,125,128],"callout",{"color":126,"icon":127},"amber","i-tabler-alert-triangle",[106,129,130],{},"The script must process every Microsoft Graph page before it completes the batch. Completing a partial employee snapshot marks valid employees as removed.",[132,133,135],"h2",{"id":134},"microsoft-graph-permissions","Microsoft Graph Permissions",[137,138,139,155],"table",{},[140,141,142],"thead",{},[143,144,145,149,152],"tr",{},[146,147,148],"th",{},"Endpoint",[146,150,151],{},"Data",[146,153,154],{},"Application permission",[156,157,158],"tbody",{},[143,159,160,171,174],{},[161,162,163],"td",{},[118,164,168],{"href":165,"rel":166},"https:\u002F\u002Flearn.microsoft.com\u002Fgraph\u002Fapi\u002Fuser-list",[167],"nofollow",[110,169,170],{},"GET \u002Fusers",[161,172,173],{},"Users, their status, and their organization data",[161,175,176],{},[110,177,178],{},"User.Read.All",[132,180,182],{"id":181},"script","Script",[106,184,185,186,189],{},"Create ",[110,187,188],{},"entra_employees.py",":",[191,192,197],"pre",{"className":193,"code":194,"language":195,"meta":196,"style":196},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import argparse\nimport asyncio\nimport json\nimport logging\nimport os\nfrom collections.abc import Awaitable, Callable\nfrom typing import Any\nfrom urllib.parse import urlencode, urlsplit\nfrom urllib.request import Request, urlopen\n\nfrom google.protobuf.json_format import MessageToJson\nfrom google.protobuf.timestamp_pb2 import Timestamp\nfrom viio_sync_api import SyncApiAuthentication, SyncApiClient, SyncApiClientOptions\nfrom viio_sync_api.v1 import (\n    Employee,\n    EmployeeRecords,\n    MicrosoftEmployeeDetails,\n    MicrosoftEmployeeOrgData,\n    SyncRecordsRequest,\n)\n\nWrite = Callable[[SyncRecordsRequest], Awaitable[None]]\n\nGRAPH_USERS_URL = \"https:\u002F\u002Fgraph.microsoft.com\u002Fv1.0\u002Fusers?\" + urlencode(\n    {\n        \"$select\": \",\".join(\n            (\n                \"id\",\n                \"displayName\",\n                \"givenName\",\n                \"surname\",\n                \"mail\",\n                \"userPrincipalName\",\n                \"department\",\n                \"accountEnabled\",\n                \"createdDateTime\",\n                \"deletedDateTime\",\n                \"jobTitle\",\n                \"userType\",\n                \"country\",\n                \"employeeOrgData\",\n            )\n        ),\n        \"$top\": \"999\",\n    }\n)\n\nlogger = logging.getLogger(\"entra_employees\")\n\n\ndef request_json(request: Request) -> dict[str, Any]:\n    with urlopen(request, timeout=30) as response:\n        payload = json.load(response)\n    if not isinstance(payload, dict):\n        raise RuntimeError(\"Remote service returned an invalid JSON response\")\n    return payload\n\n\ndef request_graph_token() -> str:\n    tenant_id = os.environ[\"MICROSOFT_TENANT_ID\"]\n    allowed_characters = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-\"\n    if not tenant_id or any(character not in allowed_characters for character in tenant_id):\n        raise ValueError(\"MICROSOFT_TENANT_ID must be a tenant ID or verified domain name\")\n\n    request = Request(\n        f\"https:\u002F\u002Flogin.microsoftonline.com\u002F{tenant_id}\u002Foauth2\u002Fv2.0\u002Ftoken\",\n        data=urlencode(\n            {\n                \"grant_type\": \"client_credentials\",\n                \"client_id\": os.environ[\"MICROSOFT_CLIENT_ID\"],\n                \"client_secret\": os.environ[\"MICROSOFT_CLIENT_SECRET\"],\n                \"scope\": \"https:\u002F\u002Fgraph.microsoft.com\u002F.default\",\n            }\n        ).encode(),\n        headers={\"Content-Type\": \"application\u002Fx-www-form-urlencoded\"},\n        method=\"POST\",\n    )\n    token = request_json(request).get(\"access_token\")\n    if not isinstance(token, str) or not token:\n        raise RuntimeError(\"Microsoft identity platform returned no access token\")\n    return token\n\n\ndef request_graph_page(url: str, access_token: str) -> tuple[list[dict[str, Any]], str | None]:\n    parsed_url = urlsplit(url)\n    if parsed_url.scheme != \"https\" or parsed_url.hostname != \"graph.microsoft.com\":\n        raise RuntimeError(\"Microsoft Graph returned an invalid pagination URL\")\n\n    payload = request_json(\n        Request(\n            url,\n            headers={\n                \"Accept\": \"application\u002Fjson\",\n                \"Authorization\": f\"Bearer {access_token}\",\n            },\n        )\n    )\n    items = payload.get(\"value\")\n    if not isinstance(items, list) or not all(isinstance(item, dict) for item in items):\n        raise RuntimeError(\"Microsoft Graph returned an invalid collection response\")\n\n    next_url = payload.get(\"@odata.nextLink\")\n    if next_url is not None and not isinstance(next_url, str):\n        raise RuntimeError(\"Microsoft Graph returned an invalid pagination URL\")\n    return items, next_url\n\n\ndef required_string(source: dict[str, Any], field: str) -> str:\n    value = source.get(field)\n    if not isinstance(value, str) or not value:\n        raise RuntimeError(f\"Microsoft Graph returned an object without {field}\")\n    return value\n\n\ndef optional_string(source: dict[str, Any], field: str) -> str | None:\n    value = source.get(field)\n    return value if isinstance(value, str) and value else None\n\n\ndef optional_bool(source: dict[str, Any], field: str) -> bool | None:\n    value = source.get(field)\n    return value if isinstance(value, bool) else None\n\n\ndef optional_timestamp(source: dict[str, Any], field: str) -> Timestamp | None:\n    value = optional_string(source, field)\n    if value is None:\n        return None\n    timestamp = Timestamp()\n    timestamp.FromJsonString(value)\n    return timestamp\n\n\ndef employee_org_data(user: dict[str, Any]) -> MicrosoftEmployeeOrgData | None:\n    org_data = user.get(\"employeeOrgData\")\n    if not isinstance(org_data, dict):\n        return None\n\n    division = optional_string(org_data, \"division\")\n    cost_center = optional_string(org_data, \"costCenter\")\n    if division is None and cost_center is None:\n        return None\n    return MicrosoftEmployeeOrgData(division=division, cost_center=cost_center)\n\n\ndef employee_from_graph_user(user: dict[str, Any]) -> Employee:\n    return Employee(\n        microsoft=MicrosoftEmployeeDetails(\n            id=required_string(user, \"id\"),\n            display_name=required_string(user, \"displayName\"),\n            user_principal_name=required_string(user, \"userPrincipalName\"),\n            given_name=optional_string(user, \"givenName\"),\n            surname=optional_string(user, \"surname\"),\n            mail=optional_string(user, \"mail\"),\n            department=optional_string(user, \"department\"),\n            account_enabled=optional_bool(user, \"accountEnabled\"),\n            created_date_time=optional_timestamp(user, \"createdDateTime\"),\n            deleted_date_time=optional_timestamp(user, \"deletedDateTime\"),\n            job_title=optional_string(user, \"jobTitle\"),\n            user_type=optional_string(user, \"userType\"),\n            country=optional_string(user, \"country\"),\n            employee_org_data=employee_org_data(user),\n        )\n    )\n\n\nasync def sync_employees(write: Write) -> dict[str, int]:\n    access_token = await asyncio.to_thread(request_graph_token)\n    employee_count = 0\n    next_url: str | None = GRAPH_USERS_URL\n    while next_url is not None:\n        users, next_url = await asyncio.to_thread(request_graph_page, next_url, access_token)\n        if users:\n            employees = [employee_from_graph_user(user) for user in users]\n            await write(SyncRecordsRequest(employees=EmployeeRecords(records=employees)))\n            employee_count += len(employees)\n\n    if employee_count == 0:\n        await write(SyncRecordsRequest(employees=EmployeeRecords()))\n    return {\"employees\": employee_count}\n\n\nasync def run_batch(sync: Callable[[Write], Awaitable[dict[str, int]]]) -> dict[str, int]:\n    options = SyncApiClientOptions(\n        endpoint=os.environ[\"VIIO_SYNC_API_ENDPOINT\"],\n        authentication=SyncApiAuthentication.api_key(os.environ[\"VIIO_SYNC_API_KEY\"]),\n    )\n\n    async with SyncApiClient(options) as client:\n        batch = await client.start_batch(os.environ[\"VIIO_DIRECT_INTEGRATION_INSTALLATION_ID\"])\n        try:\n            counts = await sync(batch.write)\n            await batch.complete()\n        except BaseException:\n            await batch.abort()\n            raise\n    return counts\n\n\nasync def print_request(request: SyncRecordsRequest) -> None:\n    print(MessageToJson(request))\n\n\nasync def main() -> None:\n    parser = argparse.ArgumentParser(description=\"Sync Microsoft Entra ID employees to Viio\")\n    parser.add_argument(\"--dry-run\", action=\"store_true\", help=\"print the records instead of sending them\")\n    arguments = parser.parse_args()\n\n    counts = await (sync_employees(print_request) if arguments.dry_run else run_batch(sync_employees))\n    logger.info(\"Synced %s\", counts)\n\n\nif __name__ == \"__main__\":\n    logging.basicConfig(level=logging.INFO)\n    asyncio.run(main())\n","python","",[110,198,199,212,220,228,236,244,270,283,306,328,335,358,379,402,420,429,437,445,453,461,467,472,498,503,530,536,562,568,581,593,605,617,629,641,653,665,677,689,701,713,725,737,743,749,770,776,781,786,814,819,824,868,903,926,950,970,979,984,989,1007,1036,1052,1096,1115,1120,1132,1155,1168,1174,1195,1225,1254,1275,1281,1293,1321,1338,1344,1375,1405,1423,1431,1436,1441,1503,1520,1563,1581,1586,1598,1606,1614,1623,1644,1672,1678,1684,1689,1715,1772,1790,1795,1820,1854,1871,1883,1888,1893,1935,1957,1985,2010,2018,2023,2028,2071,2090,2123,2128,2133,2176,2195,2221,2226,2231,2275,2294,2305,2313,2327,2344,2352,2357,2362,2399,2424,2444,2451,2456,2481,2506,2527,2534,2562,2567,2572,2605,2614,2626,2652,2676,2700,2725,2749,2773,2797,2822,2847,2871,2895,2919,2943,2960,2965,2970,2975,2980,3019,3045,3056,3076,3090,3126,3137,3168,3203,3221,3226,3242,3265,3287,3292,3297,3354,3367,3393,3429,3434,3439,3464,3501,3509,3533,3548,3559,3573,3579,3587,3592,3597,3622,3640,3645,3650,3666,3698,3748,3766,3771,3815,3845,3850,3855,3874,3902],{"__ignoreMap":196},[200,201,204,208],"span",{"class":202,"line":203},"line",1,[200,205,207],{"class":206},"s7zQu","import",[200,209,211],{"class":210},"sTEyZ"," argparse\n",[200,213,215,217],{"class":202,"line":214},2,[200,216,207],{"class":206},[200,218,219],{"class":210}," asyncio\n",[200,221,223,225],{"class":202,"line":222},3,[200,224,207],{"class":206},[200,226,227],{"class":210}," json\n",[200,229,231,233],{"class":202,"line":230},4,[200,232,207],{"class":206},[200,234,235],{"class":210}," logging\n",[200,237,239,241],{"class":202,"line":238},5,[200,240,207],{"class":206},[200,242,243],{"class":210}," os\n",[200,245,247,250,253,256,259,261,264,267],{"class":202,"line":246},6,[200,248,249],{"class":206},"from",[200,251,252],{"class":210}," collections",[200,254,122],{"class":255},"sMK4o",[200,257,258],{"class":210},"abc ",[200,260,207],{"class":206},[200,262,263],{"class":210}," Awaitable",[200,265,266],{"class":255},",",[200,268,269],{"class":210}," Callable\n",[200,271,273,275,278,280],{"class":202,"line":272},7,[200,274,249],{"class":206},[200,276,277],{"class":210}," typing ",[200,279,207],{"class":206},[200,281,282],{"class":210}," Any\n",[200,284,286,288,291,293,296,298,301,303],{"class":202,"line":285},8,[200,287,249],{"class":206},[200,289,290],{"class":210}," urllib",[200,292,122],{"class":255},[200,294,295],{"class":210},"parse ",[200,297,207],{"class":206},[200,299,300],{"class":210}," urlencode",[200,302,266],{"class":255},[200,304,305],{"class":210}," urlsplit\n",[200,307,309,311,313,315,318,320,323,325],{"class":202,"line":308},9,[200,310,249],{"class":206},[200,312,290],{"class":210},[200,314,122],{"class":255},[200,316,317],{"class":210},"request ",[200,319,207],{"class":206},[200,321,322],{"class":210}," Request",[200,324,266],{"class":255},[200,326,327],{"class":210}," urlopen\n",[200,329,331],{"class":202,"line":330},10,[200,332,334],{"emptyLinePlaceholder":333},true,"\n",[200,336,338,340,343,345,348,350,353,355],{"class":202,"line":337},11,[200,339,249],{"class":206},[200,341,342],{"class":210}," google",[200,344,122],{"class":255},[200,346,347],{"class":210},"protobuf",[200,349,122],{"class":255},[200,351,352],{"class":210},"json_format ",[200,354,207],{"class":206},[200,356,357],{"class":210}," MessageToJson\n",[200,359,361,363,365,367,369,371,374,376],{"class":202,"line":360},12,[200,362,249],{"class":206},[200,364,342],{"class":210},[200,366,122],{"class":255},[200,368,347],{"class":210},[200,370,122],{"class":255},[200,372,373],{"class":210},"timestamp_pb2 ",[200,375,207],{"class":206},[200,377,378],{"class":210}," Timestamp\n",[200,380,382,384,387,389,392,394,397,399],{"class":202,"line":381},13,[200,383,249],{"class":206},[200,385,386],{"class":210}," viio_sync_api ",[200,388,207],{"class":206},[200,390,391],{"class":210}," SyncApiAuthentication",[200,393,266],{"class":255},[200,395,396],{"class":210}," SyncApiClient",[200,398,266],{"class":255},[200,400,401],{"class":210}," SyncApiClientOptions\n",[200,403,405,407,410,412,415,417],{"class":202,"line":404},14,[200,406,249],{"class":206},[200,408,409],{"class":210}," viio_sync_api",[200,411,122],{"class":255},[200,413,414],{"class":210},"v1 ",[200,416,207],{"class":206},[200,418,419],{"class":255}," (\n",[200,421,423,426],{"class":202,"line":422},15,[200,424,425],{"class":210},"    Employee",[200,427,428],{"class":255},",\n",[200,430,432,435],{"class":202,"line":431},16,[200,433,434],{"class":210},"    EmployeeRecords",[200,436,428],{"class":255},[200,438,440,443],{"class":202,"line":439},17,[200,441,442],{"class":210},"    MicrosoftEmployeeDetails",[200,444,428],{"class":255},[200,446,448,451],{"class":202,"line":447},18,[200,449,450],{"class":210},"    MicrosoftEmployeeOrgData",[200,452,428],{"class":255},[200,454,456,459],{"class":202,"line":455},19,[200,457,458],{"class":210},"    SyncRecordsRequest",[200,460,428],{"class":255},[200,462,464],{"class":202,"line":463},20,[200,465,466],{"class":255},")\n",[200,468,470],{"class":202,"line":469},21,[200,471,334],{"emptyLinePlaceholder":333},[200,473,475,478,481,484,487,490,493,495],{"class":202,"line":474},22,[200,476,477],{"class":210},"Write ",[200,479,480],{"class":255},"=",[200,482,483],{"class":210}," Callable",[200,485,486],{"class":255},"[[",[200,488,489],{"class":210},"SyncRecordsRequest",[200,491,492],{"class":255},"],",[200,494,263],{"class":210},[200,496,497],{"class":255},"[None]]\n",[200,499,501],{"class":202,"line":500},23,[200,502,334],{"emptyLinePlaceholder":333},[200,504,506,509,511,514,518,521,524,527],{"class":202,"line":505},24,[200,507,508],{"class":210},"GRAPH_USERS_URL ",[200,510,480],{"class":255},[200,512,513],{"class":255}," \"",[200,515,517],{"class":516},"sfazB","https:\u002F\u002Fgraph.microsoft.com\u002Fv1.0\u002Fusers?",[200,519,520],{"class":255},"\"",[200,522,523],{"class":255}," +",[200,525,300],{"class":526},"s2Zo4",[200,528,529],{"class":255},"(\n",[200,531,533],{"class":202,"line":532},25,[200,534,535],{"class":255},"    {\n",[200,537,539,542,545,547,549,551,553,555,557,560],{"class":202,"line":538},26,[200,540,541],{"class":255},"        \"",[200,543,544],{"class":516},"$select",[200,546,520],{"class":255},[200,548,189],{"class":255},[200,550,513],{"class":255},[200,552,266],{"class":516},[200,554,520],{"class":255},[200,556,122],{"class":255},[200,558,559],{"class":526},"join",[200,561,529],{"class":255},[200,563,565],{"class":202,"line":564},27,[200,566,567],{"class":255},"            (\n",[200,569,571,574,577,579],{"class":202,"line":570},28,[200,572,573],{"class":255},"                \"",[200,575,576],{"class":516},"id",[200,578,520],{"class":255},[200,580,428],{"class":255},[200,582,584,586,589,591],{"class":202,"line":583},29,[200,585,573],{"class":255},[200,587,588],{"class":516},"displayName",[200,590,520],{"class":255},[200,592,428],{"class":255},[200,594,596,598,601,603],{"class":202,"line":595},30,[200,597,573],{"class":255},[200,599,600],{"class":516},"givenName",[200,602,520],{"class":255},[200,604,428],{"class":255},[200,606,608,610,613,615],{"class":202,"line":607},31,[200,609,573],{"class":255},[200,611,612],{"class":516},"surname",[200,614,520],{"class":255},[200,616,428],{"class":255},[200,618,620,622,625,627],{"class":202,"line":619},32,[200,621,573],{"class":255},[200,623,624],{"class":516},"mail",[200,626,520],{"class":255},[200,628,428],{"class":255},[200,630,632,634,637,639],{"class":202,"line":631},33,[200,633,573],{"class":255},[200,635,636],{"class":516},"userPrincipalName",[200,638,520],{"class":255},[200,640,428],{"class":255},[200,642,644,646,649,651],{"class":202,"line":643},34,[200,645,573],{"class":255},[200,647,648],{"class":516},"department",[200,650,520],{"class":255},[200,652,428],{"class":255},[200,654,656,658,661,663],{"class":202,"line":655},35,[200,657,573],{"class":255},[200,659,660],{"class":516},"accountEnabled",[200,662,520],{"class":255},[200,664,428],{"class":255},[200,666,668,670,673,675],{"class":202,"line":667},36,[200,669,573],{"class":255},[200,671,672],{"class":516},"createdDateTime",[200,674,520],{"class":255},[200,676,428],{"class":255},[200,678,680,682,685,687],{"class":202,"line":679},37,[200,681,573],{"class":255},[200,683,684],{"class":516},"deletedDateTime",[200,686,520],{"class":255},[200,688,428],{"class":255},[200,690,692,694,697,699],{"class":202,"line":691},38,[200,693,573],{"class":255},[200,695,696],{"class":516},"jobTitle",[200,698,520],{"class":255},[200,700,428],{"class":255},[200,702,704,706,709,711],{"class":202,"line":703},39,[200,705,573],{"class":255},[200,707,708],{"class":516},"userType",[200,710,520],{"class":255},[200,712,428],{"class":255},[200,714,716,718,721,723],{"class":202,"line":715},40,[200,717,573],{"class":255},[200,719,720],{"class":516},"country",[200,722,520],{"class":255},[200,724,428],{"class":255},[200,726,728,730,733,735],{"class":202,"line":727},41,[200,729,573],{"class":255},[200,731,732],{"class":516},"employeeOrgData",[200,734,520],{"class":255},[200,736,428],{"class":255},[200,738,740],{"class":202,"line":739},42,[200,741,742],{"class":255},"            )\n",[200,744,746],{"class":202,"line":745},43,[200,747,748],{"class":255},"        ),\n",[200,750,752,754,757,759,761,763,766,768],{"class":202,"line":751},44,[200,753,541],{"class":255},[200,755,756],{"class":516},"$top",[200,758,520],{"class":255},[200,760,189],{"class":255},[200,762,513],{"class":255},[200,764,765],{"class":516},"999",[200,767,520],{"class":255},[200,769,428],{"class":255},[200,771,773],{"class":202,"line":772},45,[200,774,775],{"class":255},"    }\n",[200,777,779],{"class":202,"line":778},46,[200,780,466],{"class":255},[200,782,784],{"class":202,"line":783},47,[200,785,334],{"emptyLinePlaceholder":333},[200,787,789,792,794,797,799,802,805,807,810,812],{"class":202,"line":788},48,[200,790,791],{"class":210},"logger ",[200,793,480],{"class":255},[200,795,796],{"class":210}," logging",[200,798,122],{"class":255},[200,800,801],{"class":526},"getLogger",[200,803,804],{"class":255},"(",[200,806,520],{"class":255},[200,808,809],{"class":516},"entra_employees",[200,811,520],{"class":255},[200,813,466],{"class":255},[200,815,817],{"class":202,"line":816},49,[200,818,334],{"emptyLinePlaceholder":333},[200,820,822],{"class":202,"line":821},50,[200,823,334],{"emptyLinePlaceholder":333},[200,825,827,831,834,836,840,842,844,847,850,853,856,860,862,865],{"class":202,"line":826},51,[200,828,830],{"class":829},"spNyl","def",[200,832,833],{"class":526}," request_json",[200,835,804],{"class":255},[200,837,839],{"class":838},"sHdIc","request",[200,841,189],{"class":255},[200,843,322],{"class":210},[200,845,846],{"class":255},")",[200,848,849],{"class":255}," ->",[200,851,852],{"class":210}," dict",[200,854,855],{"class":255},"[",[200,857,859],{"class":858},"sBMFI","str",[200,861,266],{"class":255},[200,863,864],{"class":210}," Any",[200,866,867],{"class":255},"]:\n",[200,869,871,874,877,879,881,883,886,888,892,894,897,900],{"class":202,"line":870},52,[200,872,873],{"class":206},"    with",[200,875,876],{"class":526}," urlopen",[200,878,804],{"class":255},[200,880,839],{"class":526},[200,882,266],{"class":255},[200,884,885],{"class":838}," timeout",[200,887,480],{"class":255},[200,889,891],{"class":890},"sbssI","30",[200,893,846],{"class":255},[200,895,896],{"class":206}," as",[200,898,899],{"class":210}," response",[200,901,902],{"class":255},":\n",[200,904,906,909,911,914,916,919,921,924],{"class":202,"line":905},53,[200,907,908],{"class":210},"        payload ",[200,910,480],{"class":255},[200,912,913],{"class":210}," json",[200,915,122],{"class":255},[200,917,918],{"class":526},"load",[200,920,804],{"class":255},[200,922,923],{"class":526},"response",[200,925,466],{"class":255},[200,927,929,932,935,938,940,943,945,947],{"class":202,"line":928},54,[200,930,931],{"class":206},"    if",[200,933,934],{"class":255}," not",[200,936,937],{"class":526}," isinstance",[200,939,804],{"class":255},[200,941,942],{"class":526},"payload",[200,944,266],{"class":255},[200,946,852],{"class":858},[200,948,949],{"class":255},"):\n",[200,951,953,956,959,961,963,966,968],{"class":202,"line":952},55,[200,954,955],{"class":206},"        raise",[200,957,958],{"class":858}," RuntimeError",[200,960,804],{"class":255},[200,962,520],{"class":255},[200,964,965],{"class":516},"Remote service returned an invalid JSON response",[200,967,520],{"class":255},[200,969,466],{"class":255},[200,971,973,976],{"class":202,"line":972},56,[200,974,975],{"class":206},"    return",[200,977,978],{"class":210}," payload\n",[200,980,982],{"class":202,"line":981},57,[200,983,334],{"emptyLinePlaceholder":333},[200,985,987],{"class":202,"line":986},58,[200,988,334],{"emptyLinePlaceholder":333},[200,990,992,994,997,1000,1002,1005],{"class":202,"line":991},59,[200,993,830],{"class":829},[200,995,996],{"class":526}," request_graph_token",[200,998,999],{"class":255},"()",[200,1001,849],{"class":255},[200,1003,1004],{"class":858}," str",[200,1006,902],{"class":255},[200,1008,1010,1013,1015,1018,1020,1024,1026,1028,1031,1033],{"class":202,"line":1009},60,[200,1011,1012],{"class":210},"    tenant_id ",[200,1014,480],{"class":255},[200,1016,1017],{"class":210}," os",[200,1019,122],{"class":255},[200,1021,1023],{"class":1022},"swJcz","environ",[200,1025,855],{"class":255},[200,1027,520],{"class":255},[200,1029,1030],{"class":516},"MICROSOFT_TENANT_ID",[200,1032,520],{"class":255},[200,1034,1035],{"class":255},"]\n",[200,1037,1039,1042,1044,1046,1049],{"class":202,"line":1038},61,[200,1040,1041],{"class":210},"    allowed_characters ",[200,1043,480],{"class":255},[200,1045,513],{"class":255},[200,1047,1048],{"class":516},"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-",[200,1050,1051],{"class":255},"\"\n",[200,1053,1055,1057,1059,1062,1065,1068,1070,1073,1076,1079,1082,1085,1088,1091,1094],{"class":202,"line":1054},62,[200,1056,931],{"class":206},[200,1058,934],{"class":255},[200,1060,1061],{"class":210}," tenant_id ",[200,1063,1064],{"class":255},"or",[200,1066,1067],{"class":526}," any",[200,1069,804],{"class":255},[200,1071,1072],{"class":526},"character ",[200,1074,1075],{"class":206},"not",[200,1077,1078],{"class":206}," in",[200,1080,1081],{"class":526}," allowed_characters ",[200,1083,1084],{"class":206},"for",[200,1086,1087],{"class":526}," character ",[200,1089,1090],{"class":206},"in",[200,1092,1093],{"class":526}," tenant_id",[200,1095,949],{"class":255},[200,1097,1099,1101,1104,1106,1108,1111,1113],{"class":202,"line":1098},63,[200,1100,955],{"class":206},[200,1102,1103],{"class":858}," ValueError",[200,1105,804],{"class":255},[200,1107,520],{"class":255},[200,1109,1110],{"class":516},"MICROSOFT_TENANT_ID must be a tenant ID or verified domain name",[200,1112,520],{"class":255},[200,1114,466],{"class":255},[200,1116,1118],{"class":202,"line":1117},64,[200,1119,334],{"emptyLinePlaceholder":333},[200,1121,1123,1126,1128,1130],{"class":202,"line":1122},65,[200,1124,1125],{"class":210},"    request ",[200,1127,480],{"class":255},[200,1129,322],{"class":526},[200,1131,529],{"class":255},[200,1133,1135,1138,1141,1144,1147,1150,1153],{"class":202,"line":1134},66,[200,1136,1137],{"class":829},"        f",[200,1139,1140],{"class":516},"\"https:\u002F\u002Flogin.microsoftonline.com\u002F",[200,1142,1143],{"class":890},"{",[200,1145,1146],{"class":526},"tenant_id",[200,1148,1149],{"class":890},"}",[200,1151,1152],{"class":516},"\u002Foauth2\u002Fv2.0\u002Ftoken\"",[200,1154,428],{"class":255},[200,1156,1158,1161,1163,1166],{"class":202,"line":1157},67,[200,1159,1160],{"class":838},"        data",[200,1162,480],{"class":255},[200,1164,1165],{"class":526},"urlencode",[200,1167,529],{"class":255},[200,1169,1171],{"class":202,"line":1170},68,[200,1172,1173],{"class":255},"            {\n",[200,1175,1177,1179,1182,1184,1186,1188,1191,1193],{"class":202,"line":1176},69,[200,1178,573],{"class":255},[200,1180,1181],{"class":516},"grant_type",[200,1183,520],{"class":255},[200,1185,189],{"class":255},[200,1187,513],{"class":255},[200,1189,1190],{"class":516},"client_credentials",[200,1192,520],{"class":255},[200,1194,428],{"class":255},[200,1196,1198,1200,1203,1205,1207,1209,1211,1213,1215,1217,1220,1222],{"class":202,"line":1197},70,[200,1199,573],{"class":255},[200,1201,1202],{"class":516},"client_id",[200,1204,520],{"class":255},[200,1206,189],{"class":255},[200,1208,1017],{"class":526},[200,1210,122],{"class":255},[200,1212,1023],{"class":1022},[200,1214,855],{"class":255},[200,1216,520],{"class":255},[200,1218,1219],{"class":516},"MICROSOFT_CLIENT_ID",[200,1221,520],{"class":255},[200,1223,1224],{"class":255},"],\n",[200,1226,1228,1230,1233,1235,1237,1239,1241,1243,1245,1247,1250,1252],{"class":202,"line":1227},71,[200,1229,573],{"class":255},[200,1231,1232],{"class":516},"client_secret",[200,1234,520],{"class":255},[200,1236,189],{"class":255},[200,1238,1017],{"class":526},[200,1240,122],{"class":255},[200,1242,1023],{"class":1022},[200,1244,855],{"class":255},[200,1246,520],{"class":255},[200,1248,1249],{"class":516},"MICROSOFT_CLIENT_SECRET",[200,1251,520],{"class":255},[200,1253,1224],{"class":255},[200,1255,1257,1259,1262,1264,1266,1268,1271,1273],{"class":202,"line":1256},72,[200,1258,573],{"class":255},[200,1260,1261],{"class":516},"scope",[200,1263,520],{"class":255},[200,1265,189],{"class":255},[200,1267,513],{"class":255},[200,1269,1270],{"class":516},"https:\u002F\u002Fgraph.microsoft.com\u002F.default",[200,1272,520],{"class":255},[200,1274,428],{"class":255},[200,1276,1278],{"class":202,"line":1277},73,[200,1279,1280],{"class":255},"            }\n",[200,1282,1284,1287,1290],{"class":202,"line":1283},74,[200,1285,1286],{"class":255},"        ).",[200,1288,1289],{"class":526},"encode",[200,1291,1292],{"class":255},"(),\n",[200,1294,1296,1299,1302,1304,1307,1309,1311,1313,1316,1318],{"class":202,"line":1295},75,[200,1297,1298],{"class":838},"        headers",[200,1300,1301],{"class":255},"={",[200,1303,520],{"class":255},[200,1305,1306],{"class":516},"Content-Type",[200,1308,520],{"class":255},[200,1310,189],{"class":255},[200,1312,513],{"class":255},[200,1314,1315],{"class":516},"application\u002Fx-www-form-urlencoded",[200,1317,520],{"class":255},[200,1319,1320],{"class":255},"},\n",[200,1322,1324,1327,1329,1331,1334,1336],{"class":202,"line":1323},76,[200,1325,1326],{"class":838},"        method",[200,1328,480],{"class":255},[200,1330,520],{"class":255},[200,1332,1333],{"class":516},"POST",[200,1335,520],{"class":255},[200,1337,428],{"class":255},[200,1339,1341],{"class":202,"line":1340},77,[200,1342,1343],{"class":255},"    )\n",[200,1345,1347,1350,1352,1354,1356,1358,1361,1364,1366,1368,1371,1373],{"class":202,"line":1346},78,[200,1348,1349],{"class":210},"    token ",[200,1351,480],{"class":255},[200,1353,833],{"class":526},[200,1355,804],{"class":255},[200,1357,839],{"class":526},[200,1359,1360],{"class":255},").",[200,1362,1363],{"class":526},"get",[200,1365,804],{"class":255},[200,1367,520],{"class":255},[200,1369,1370],{"class":516},"access_token",[200,1372,520],{"class":255},[200,1374,466],{"class":255},[200,1376,1378,1380,1382,1384,1386,1389,1391,1393,1395,1398,1400,1403],{"class":202,"line":1377},79,[200,1379,931],{"class":206},[200,1381,934],{"class":255},[200,1383,937],{"class":526},[200,1385,804],{"class":255},[200,1387,1388],{"class":526},"token",[200,1390,266],{"class":255},[200,1392,1004],{"class":858},[200,1394,846],{"class":255},[200,1396,1397],{"class":255}," or",[200,1399,934],{"class":255},[200,1401,1402],{"class":210}," token",[200,1404,902],{"class":255},[200,1406,1408,1410,1412,1414,1416,1419,1421],{"class":202,"line":1407},80,[200,1409,955],{"class":206},[200,1411,958],{"class":858},[200,1413,804],{"class":255},[200,1415,520],{"class":255},[200,1417,1418],{"class":516},"Microsoft identity platform returned no access token",[200,1420,520],{"class":255},[200,1422,466],{"class":255},[200,1424,1426,1428],{"class":202,"line":1425},81,[200,1427,975],{"class":206},[200,1429,1430],{"class":210}," token\n",[200,1432,1434],{"class":202,"line":1433},82,[200,1435,334],{"emptyLinePlaceholder":333},[200,1437,1439],{"class":202,"line":1438},83,[200,1440,334],{"emptyLinePlaceholder":333},[200,1442,1444,1446,1449,1451,1454,1456,1458,1460,1463,1465,1467,1469,1471,1474,1476,1479,1481,1484,1486,1488,1490,1492,1495,1497,1500],{"class":202,"line":1443},84,[200,1445,830],{"class":829},[200,1447,1448],{"class":526}," request_graph_page",[200,1450,804],{"class":255},[200,1452,1453],{"class":838},"url",[200,1455,189],{"class":255},[200,1457,1004],{"class":858},[200,1459,266],{"class":255},[200,1461,1462],{"class":838}," access_token",[200,1464,189],{"class":255},[200,1466,1004],{"class":858},[200,1468,846],{"class":255},[200,1470,849],{"class":255},[200,1472,1473],{"class":210}," tuple",[200,1475,855],{"class":255},[200,1477,1478],{"class":210},"list",[200,1480,855],{"class":255},[200,1482,1483],{"class":210},"dict",[200,1485,855],{"class":255},[200,1487,859],{"class":858},[200,1489,266],{"class":255},[200,1491,864],{"class":210},[200,1493,1494],{"class":255},"]],",[200,1496,1004],{"class":858},[200,1498,1499],{"class":255}," |",[200,1501,1502],{"class":255}," None]:\n",[200,1504,1506,1509,1511,1514,1516,1518],{"class":202,"line":1505},85,[200,1507,1508],{"class":210},"    parsed_url ",[200,1510,480],{"class":255},[200,1512,1513],{"class":526}," urlsplit",[200,1515,804],{"class":255},[200,1517,1453],{"class":526},[200,1519,466],{"class":255},[200,1521,1523,1525,1528,1530,1533,1536,1538,1541,1543,1545,1547,1549,1552,1554,1556,1559,1561],{"class":202,"line":1522},86,[200,1524,931],{"class":206},[200,1526,1527],{"class":210}," parsed_url",[200,1529,122],{"class":255},[200,1531,1532],{"class":1022},"scheme",[200,1534,1535],{"class":255}," !=",[200,1537,513],{"class":255},[200,1539,1540],{"class":516},"https",[200,1542,520],{"class":255},[200,1544,1397],{"class":255},[200,1546,1527],{"class":210},[200,1548,122],{"class":255},[200,1550,1551],{"class":1022},"hostname",[200,1553,1535],{"class":255},[200,1555,513],{"class":255},[200,1557,1558],{"class":516},"graph.microsoft.com",[200,1560,520],{"class":255},[200,1562,902],{"class":255},[200,1564,1566,1568,1570,1572,1574,1577,1579],{"class":202,"line":1565},87,[200,1567,955],{"class":206},[200,1569,958],{"class":858},[200,1571,804],{"class":255},[200,1573,520],{"class":255},[200,1575,1576],{"class":516},"Microsoft Graph returned an invalid pagination URL",[200,1578,520],{"class":255},[200,1580,466],{"class":255},[200,1582,1584],{"class":202,"line":1583},88,[200,1585,334],{"emptyLinePlaceholder":333},[200,1587,1589,1592,1594,1596],{"class":202,"line":1588},89,[200,1590,1591],{"class":210},"    payload ",[200,1593,480],{"class":255},[200,1595,833],{"class":526},[200,1597,529],{"class":255},[200,1599,1601,1604],{"class":202,"line":1600},90,[200,1602,1603],{"class":526},"        Request",[200,1605,529],{"class":255},[200,1607,1609,1612],{"class":202,"line":1608},91,[200,1610,1611],{"class":526},"            url",[200,1613,428],{"class":255},[200,1615,1617,1620],{"class":202,"line":1616},92,[200,1618,1619],{"class":838},"            headers",[200,1621,1622],{"class":255},"={\n",[200,1624,1626,1628,1631,1633,1635,1637,1640,1642],{"class":202,"line":1625},93,[200,1627,573],{"class":255},[200,1629,1630],{"class":516},"Accept",[200,1632,520],{"class":255},[200,1634,189],{"class":255},[200,1636,513],{"class":255},[200,1638,1639],{"class":516},"application\u002Fjson",[200,1641,520],{"class":255},[200,1643,428],{"class":255},[200,1645,1647,1649,1652,1654,1656,1659,1662,1664,1666,1668,1670],{"class":202,"line":1646},94,[200,1648,573],{"class":255},[200,1650,1651],{"class":516},"Authorization",[200,1653,520],{"class":255},[200,1655,189],{"class":255},[200,1657,1658],{"class":829}," f",[200,1660,1661],{"class":516},"\"Bearer ",[200,1663,1143],{"class":890},[200,1665,1370],{"class":526},[200,1667,1149],{"class":890},[200,1669,520],{"class":516},[200,1671,428],{"class":255},[200,1673,1675],{"class":202,"line":1674},95,[200,1676,1677],{"class":255},"            },\n",[200,1679,1681],{"class":202,"line":1680},96,[200,1682,1683],{"class":255},"        )\n",[200,1685,1687],{"class":202,"line":1686},97,[200,1688,1343],{"class":255},[200,1690,1692,1695,1697,1700,1702,1704,1706,1708,1711,1713],{"class":202,"line":1691},98,[200,1693,1694],{"class":210},"    items ",[200,1696,480],{"class":255},[200,1698,1699],{"class":210}," payload",[200,1701,122],{"class":255},[200,1703,1363],{"class":526},[200,1705,804],{"class":255},[200,1707,520],{"class":255},[200,1709,1710],{"class":516},"value",[200,1712,520],{"class":255},[200,1714,466],{"class":255},[200,1716,1718,1720,1722,1724,1726,1729,1731,1734,1736,1738,1740,1743,1745,1748,1750,1753,1755,1757,1759,1762,1765,1767,1770],{"class":202,"line":1717},99,[200,1719,931],{"class":206},[200,1721,934],{"class":255},[200,1723,937],{"class":526},[200,1725,804],{"class":255},[200,1727,1728],{"class":526},"items",[200,1730,266],{"class":255},[200,1732,1733],{"class":858}," list",[200,1735,846],{"class":255},[200,1737,1397],{"class":255},[200,1739,934],{"class":255},[200,1741,1742],{"class":526}," all",[200,1744,804],{"class":255},[200,1746,1747],{"class":526},"isinstance",[200,1749,804],{"class":255},[200,1751,1752],{"class":526},"item",[200,1754,266],{"class":255},[200,1756,852],{"class":858},[200,1758,846],{"class":255},[200,1760,1761],{"class":206}," for",[200,1763,1764],{"class":526}," item ",[200,1766,1090],{"class":206},[200,1768,1769],{"class":526}," items",[200,1771,949],{"class":255},[200,1773,1775,1777,1779,1781,1783,1786,1788],{"class":202,"line":1774},100,[200,1776,955],{"class":206},[200,1778,958],{"class":858},[200,1780,804],{"class":255},[200,1782,520],{"class":255},[200,1784,1785],{"class":516},"Microsoft Graph returned an invalid collection response",[200,1787,520],{"class":255},[200,1789,466],{"class":255},[200,1791,1793],{"class":202,"line":1792},101,[200,1794,334],{"emptyLinePlaceholder":333},[200,1796,1798,1801,1803,1805,1807,1809,1811,1813,1816,1818],{"class":202,"line":1797},102,[200,1799,1800],{"class":210},"    next_url ",[200,1802,480],{"class":255},[200,1804,1699],{"class":210},[200,1806,122],{"class":255},[200,1808,1363],{"class":526},[200,1810,804],{"class":255},[200,1812,520],{"class":255},[200,1814,1815],{"class":516},"@odata.nextLink",[200,1817,520],{"class":255},[200,1819,466],{"class":255},[200,1821,1823,1825,1828,1831,1833,1836,1839,1841,1843,1845,1848,1850,1852],{"class":202,"line":1822},103,[200,1824,931],{"class":206},[200,1826,1827],{"class":210}," next_url ",[200,1829,1830],{"class":255},"is",[200,1832,934],{"class":255},[200,1834,1835],{"class":255}," None",[200,1837,1838],{"class":255}," and",[200,1840,934],{"class":255},[200,1842,937],{"class":526},[200,1844,804],{"class":255},[200,1846,1847],{"class":526},"next_url",[200,1849,266],{"class":255},[200,1851,1004],{"class":858},[200,1853,949],{"class":255},[200,1855,1857,1859,1861,1863,1865,1867,1869],{"class":202,"line":1856},104,[200,1858,955],{"class":206},[200,1860,958],{"class":858},[200,1862,804],{"class":255},[200,1864,520],{"class":255},[200,1866,1576],{"class":516},[200,1868,520],{"class":255},[200,1870,466],{"class":255},[200,1872,1874,1876,1878,1880],{"class":202,"line":1873},105,[200,1875,975],{"class":206},[200,1877,1769],{"class":210},[200,1879,266],{"class":255},[200,1881,1882],{"class":210}," next_url\n",[200,1884,1886],{"class":202,"line":1885},106,[200,1887,334],{"emptyLinePlaceholder":333},[200,1889,1891],{"class":202,"line":1890},107,[200,1892,334],{"emptyLinePlaceholder":333},[200,1894,1896,1898,1901,1903,1906,1908,1910,1912,1914,1916,1918,1920,1923,1925,1927,1929,1931,1933],{"class":202,"line":1895},108,[200,1897,830],{"class":829},[200,1899,1900],{"class":526}," required_string",[200,1902,804],{"class":255},[200,1904,1905],{"class":838},"source",[200,1907,189],{"class":255},[200,1909,852],{"class":210},[200,1911,855],{"class":255},[200,1913,859],{"class":858},[200,1915,266],{"class":255},[200,1917,864],{"class":210},[200,1919,492],{"class":255},[200,1921,1922],{"class":838}," field",[200,1924,189],{"class":255},[200,1926,1004],{"class":858},[200,1928,846],{"class":255},[200,1930,849],{"class":255},[200,1932,1004],{"class":858},[200,1934,902],{"class":255},[200,1936,1938,1941,1943,1946,1948,1950,1952,1955],{"class":202,"line":1937},109,[200,1939,1940],{"class":210},"    value ",[200,1942,480],{"class":255},[200,1944,1945],{"class":210}," source",[200,1947,122],{"class":255},[200,1949,1363],{"class":526},[200,1951,804],{"class":255},[200,1953,1954],{"class":526},"field",[200,1956,466],{"class":255},[200,1958,1960,1962,1964,1966,1968,1970,1972,1974,1976,1978,1980,1983],{"class":202,"line":1959},110,[200,1961,931],{"class":206},[200,1963,934],{"class":255},[200,1965,937],{"class":526},[200,1967,804],{"class":255},[200,1969,1710],{"class":526},[200,1971,266],{"class":255},[200,1973,1004],{"class":858},[200,1975,846],{"class":255},[200,1977,1397],{"class":255},[200,1979,934],{"class":255},[200,1981,1982],{"class":210}," value",[200,1984,902],{"class":255},[200,1986,1988,1990,1992,1994,1997,2000,2002,2004,2006,2008],{"class":202,"line":1987},111,[200,1989,955],{"class":206},[200,1991,958],{"class":858},[200,1993,804],{"class":255},[200,1995,1996],{"class":829},"f",[200,1998,1999],{"class":516},"\"Microsoft Graph returned an object without ",[200,2001,1143],{"class":890},[200,2003,1954],{"class":526},[200,2005,1149],{"class":890},[200,2007,520],{"class":516},[200,2009,466],{"class":255},[200,2011,2013,2015],{"class":202,"line":2012},112,[200,2014,975],{"class":206},[200,2016,2017],{"class":210}," value\n",[200,2019,2021],{"class":202,"line":2020},113,[200,2022,334],{"emptyLinePlaceholder":333},[200,2024,2026],{"class":202,"line":2025},114,[200,2027,334],{"emptyLinePlaceholder":333},[200,2029,2031,2033,2036,2038,2040,2042,2044,2046,2048,2050,2052,2054,2056,2058,2060,2062,2064,2066,2068],{"class":202,"line":2030},115,[200,2032,830],{"class":829},[200,2034,2035],{"class":526}," optional_string",[200,2037,804],{"class":255},[200,2039,1905],{"class":838},[200,2041,189],{"class":255},[200,2043,852],{"class":210},[200,2045,855],{"class":255},[200,2047,859],{"class":858},[200,2049,266],{"class":255},[200,2051,864],{"class":210},[200,2053,492],{"class":255},[200,2055,1922],{"class":838},[200,2057,189],{"class":255},[200,2059,1004],{"class":858},[200,2061,846],{"class":255},[200,2063,849],{"class":255},[200,2065,1004],{"class":858},[200,2067,1499],{"class":255},[200,2069,2070],{"class":255}," None:\n",[200,2072,2074,2076,2078,2080,2082,2084,2086,2088],{"class":202,"line":2073},116,[200,2075,1940],{"class":210},[200,2077,480],{"class":255},[200,2079,1945],{"class":210},[200,2081,122],{"class":255},[200,2083,1363],{"class":526},[200,2085,804],{"class":255},[200,2087,1954],{"class":526},[200,2089,466],{"class":255},[200,2091,2093,2095,2098,2101,2103,2105,2107,2109,2111,2113,2115,2117,2120],{"class":202,"line":2092},117,[200,2094,975],{"class":206},[200,2096,2097],{"class":210}," value ",[200,2099,2100],{"class":206},"if",[200,2102,937],{"class":526},[200,2104,804],{"class":255},[200,2106,1710],{"class":526},[200,2108,266],{"class":255},[200,2110,1004],{"class":858},[200,2112,846],{"class":255},[200,2114,1838],{"class":255},[200,2116,2097],{"class":210},[200,2118,2119],{"class":206},"else",[200,2121,2122],{"class":255}," None\n",[200,2124,2126],{"class":202,"line":2125},118,[200,2127,334],{"emptyLinePlaceholder":333},[200,2129,2131],{"class":202,"line":2130},119,[200,2132,334],{"emptyLinePlaceholder":333},[200,2134,2136,2138,2141,2143,2145,2147,2149,2151,2153,2155,2157,2159,2161,2163,2165,2167,2169,2172,2174],{"class":202,"line":2135},120,[200,2137,830],{"class":829},[200,2139,2140],{"class":526}," optional_bool",[200,2142,804],{"class":255},[200,2144,1905],{"class":838},[200,2146,189],{"class":255},[200,2148,852],{"class":210},[200,2150,855],{"class":255},[200,2152,859],{"class":858},[200,2154,266],{"class":255},[200,2156,864],{"class":210},[200,2158,492],{"class":255},[200,2160,1922],{"class":838},[200,2162,189],{"class":255},[200,2164,1004],{"class":858},[200,2166,846],{"class":255},[200,2168,849],{"class":255},[200,2170,2171],{"class":858}," bool",[200,2173,1499],{"class":255},[200,2175,2070],{"class":255},[200,2177,2179,2181,2183,2185,2187,2189,2191,2193],{"class":202,"line":2178},121,[200,2180,1940],{"class":210},[200,2182,480],{"class":255},[200,2184,1945],{"class":210},[200,2186,122],{"class":255},[200,2188,1363],{"class":526},[200,2190,804],{"class":255},[200,2192,1954],{"class":526},[200,2194,466],{"class":255},[200,2196,2198,2200,2202,2204,2206,2208,2210,2212,2214,2216,2219],{"class":202,"line":2197},122,[200,2199,975],{"class":206},[200,2201,2097],{"class":210},[200,2203,2100],{"class":206},[200,2205,937],{"class":526},[200,2207,804],{"class":255},[200,2209,1710],{"class":526},[200,2211,266],{"class":255},[200,2213,2171],{"class":858},[200,2215,846],{"class":255},[200,2217,2218],{"class":206}," else",[200,2220,2122],{"class":255},[200,2222,2224],{"class":202,"line":2223},123,[200,2225,334],{"emptyLinePlaceholder":333},[200,2227,2229],{"class":202,"line":2228},124,[200,2230,334],{"emptyLinePlaceholder":333},[200,2232,2234,2236,2239,2241,2243,2245,2247,2249,2251,2253,2255,2257,2259,2261,2263,2265,2267,2270,2273],{"class":202,"line":2233},125,[200,2235,830],{"class":829},[200,2237,2238],{"class":526}," optional_timestamp",[200,2240,804],{"class":255},[200,2242,1905],{"class":838},[200,2244,189],{"class":255},[200,2246,852],{"class":210},[200,2248,855],{"class":255},[200,2250,859],{"class":858},[200,2252,266],{"class":255},[200,2254,864],{"class":210},[200,2256,492],{"class":255},[200,2258,1922],{"class":838},[200,2260,189],{"class":255},[200,2262,1004],{"class":858},[200,2264,846],{"class":255},[200,2266,849],{"class":255},[200,2268,2269],{"class":210}," Timestamp ",[200,2271,2272],{"class":255},"|",[200,2274,2070],{"class":255},[200,2276,2278,2280,2282,2284,2286,2288,2290,2292],{"class":202,"line":2277},126,[200,2279,1940],{"class":210},[200,2281,480],{"class":255},[200,2283,2035],{"class":526},[200,2285,804],{"class":255},[200,2287,1905],{"class":526},[200,2289,266],{"class":255},[200,2291,1922],{"class":526},[200,2293,466],{"class":255},[200,2295,2297,2299,2301,2303],{"class":202,"line":2296},127,[200,2298,931],{"class":206},[200,2300,2097],{"class":210},[200,2302,1830],{"class":255},[200,2304,2070],{"class":255},[200,2306,2308,2311],{"class":202,"line":2307},128,[200,2309,2310],{"class":206},"        return",[200,2312,2122],{"class":255},[200,2314,2316,2319,2321,2324],{"class":202,"line":2315},129,[200,2317,2318],{"class":210},"    timestamp ",[200,2320,480],{"class":255},[200,2322,2323],{"class":526}," Timestamp",[200,2325,2326],{"class":255},"()\n",[200,2328,2330,2333,2335,2338,2340,2342],{"class":202,"line":2329},130,[200,2331,2332],{"class":210},"    timestamp",[200,2334,122],{"class":255},[200,2336,2337],{"class":526},"FromJsonString",[200,2339,804],{"class":255},[200,2341,1710],{"class":526},[200,2343,466],{"class":255},[200,2345,2347,2349],{"class":202,"line":2346},131,[200,2348,975],{"class":206},[200,2350,2351],{"class":210}," timestamp\n",[200,2353,2355],{"class":202,"line":2354},132,[200,2356,334],{"emptyLinePlaceholder":333},[200,2358,2360],{"class":202,"line":2359},133,[200,2361,334],{"emptyLinePlaceholder":333},[200,2363,2365,2367,2370,2372,2375,2377,2379,2381,2383,2385,2387,2390,2392,2395,2397],{"class":202,"line":2364},134,[200,2366,830],{"class":829},[200,2368,2369],{"class":526}," employee_org_data",[200,2371,804],{"class":255},[200,2373,2374],{"class":838},"user",[200,2376,189],{"class":255},[200,2378,852],{"class":210},[200,2380,855],{"class":255},[200,2382,859],{"class":858},[200,2384,266],{"class":255},[200,2386,864],{"class":210},[200,2388,2389],{"class":255},"])",[200,2391,849],{"class":255},[200,2393,2394],{"class":210}," MicrosoftEmployeeOrgData ",[200,2396,2272],{"class":255},[200,2398,2070],{"class":255},[200,2400,2402,2405,2407,2410,2412,2414,2416,2418,2420,2422],{"class":202,"line":2401},135,[200,2403,2404],{"class":210},"    org_data ",[200,2406,480],{"class":255},[200,2408,2409],{"class":210}," user",[200,2411,122],{"class":255},[200,2413,1363],{"class":526},[200,2415,804],{"class":255},[200,2417,520],{"class":255},[200,2419,732],{"class":516},[200,2421,520],{"class":255},[200,2423,466],{"class":255},[200,2425,2427,2429,2431,2433,2435,2438,2440,2442],{"class":202,"line":2426},136,[200,2428,931],{"class":206},[200,2430,934],{"class":255},[200,2432,937],{"class":526},[200,2434,804],{"class":255},[200,2436,2437],{"class":526},"org_data",[200,2439,266],{"class":255},[200,2441,852],{"class":858},[200,2443,949],{"class":255},[200,2445,2447,2449],{"class":202,"line":2446},137,[200,2448,2310],{"class":206},[200,2450,2122],{"class":255},[200,2452,2454],{"class":202,"line":2453},138,[200,2455,334],{"emptyLinePlaceholder":333},[200,2457,2459,2462,2464,2466,2468,2470,2472,2474,2477,2479],{"class":202,"line":2458},139,[200,2460,2461],{"class":210},"    division ",[200,2463,480],{"class":255},[200,2465,2035],{"class":526},[200,2467,804],{"class":255},[200,2469,2437],{"class":526},[200,2471,266],{"class":255},[200,2473,513],{"class":255},[200,2475,2476],{"class":516},"division",[200,2478,520],{"class":255},[200,2480,466],{"class":255},[200,2482,2484,2487,2489,2491,2493,2495,2497,2499,2502,2504],{"class":202,"line":2483},140,[200,2485,2486],{"class":210},"    cost_center ",[200,2488,480],{"class":255},[200,2490,2035],{"class":526},[200,2492,804],{"class":255},[200,2494,2437],{"class":526},[200,2496,266],{"class":255},[200,2498,513],{"class":255},[200,2500,2501],{"class":516},"costCenter",[200,2503,520],{"class":255},[200,2505,466],{"class":255},[200,2507,2509,2511,2514,2516,2518,2520,2523,2525],{"class":202,"line":2508},141,[200,2510,931],{"class":206},[200,2512,2513],{"class":210}," division ",[200,2515,1830],{"class":255},[200,2517,1835],{"class":255},[200,2519,1838],{"class":255},[200,2521,2522],{"class":210}," cost_center ",[200,2524,1830],{"class":255},[200,2526,2070],{"class":255},[200,2528,2530,2532],{"class":202,"line":2529},142,[200,2531,2310],{"class":206},[200,2533,2122],{"class":255},[200,2535,2537,2539,2542,2544,2546,2548,2550,2552,2555,2557,2560],{"class":202,"line":2536},143,[200,2538,975],{"class":206},[200,2540,2541],{"class":526}," MicrosoftEmployeeOrgData",[200,2543,804],{"class":255},[200,2545,2476],{"class":838},[200,2547,480],{"class":255},[200,2549,2476],{"class":526},[200,2551,266],{"class":255},[200,2553,2554],{"class":838}," cost_center",[200,2556,480],{"class":255},[200,2558,2559],{"class":526},"cost_center",[200,2561,466],{"class":255},[200,2563,2565],{"class":202,"line":2564},144,[200,2566,334],{"emptyLinePlaceholder":333},[200,2568,2570],{"class":202,"line":2569},145,[200,2571,334],{"emptyLinePlaceholder":333},[200,2573,2575,2577,2580,2582,2584,2586,2588,2590,2592,2594,2596,2598,2600,2603],{"class":202,"line":2574},146,[200,2576,830],{"class":829},[200,2578,2579],{"class":526}," employee_from_graph_user",[200,2581,804],{"class":255},[200,2583,2374],{"class":838},[200,2585,189],{"class":255},[200,2587,852],{"class":210},[200,2589,855],{"class":255},[200,2591,859],{"class":858},[200,2593,266],{"class":255},[200,2595,864],{"class":210},[200,2597,2389],{"class":255},[200,2599,849],{"class":255},[200,2601,2602],{"class":210}," Employee",[200,2604,902],{"class":255},[200,2606,2608,2610,2612],{"class":202,"line":2607},147,[200,2609,975],{"class":206},[200,2611,2602],{"class":526},[200,2613,529],{"class":255},[200,2615,2617,2620,2622,2624],{"class":202,"line":2616},148,[200,2618,2619],{"class":838},"        microsoft",[200,2621,480],{"class":255},[200,2623,112],{"class":526},[200,2625,529],{"class":255},[200,2627,2629,2632,2634,2637,2639,2641,2643,2645,2647,2649],{"class":202,"line":2628},149,[200,2630,2631],{"class":838},"            id",[200,2633,480],{"class":255},[200,2635,2636],{"class":526},"required_string",[200,2638,804],{"class":255},[200,2640,2374],{"class":526},[200,2642,266],{"class":255},[200,2644,513],{"class":255},[200,2646,576],{"class":516},[200,2648,520],{"class":255},[200,2650,2651],{"class":255},"),\n",[200,2653,2655,2658,2660,2662,2664,2666,2668,2670,2672,2674],{"class":202,"line":2654},150,[200,2656,2657],{"class":838},"            display_name",[200,2659,480],{"class":255},[200,2661,2636],{"class":526},[200,2663,804],{"class":255},[200,2665,2374],{"class":526},[200,2667,266],{"class":255},[200,2669,513],{"class":255},[200,2671,588],{"class":516},[200,2673,520],{"class":255},[200,2675,2651],{"class":255},[200,2677,2679,2682,2684,2686,2688,2690,2692,2694,2696,2698],{"class":202,"line":2678},151,[200,2680,2681],{"class":838},"            user_principal_name",[200,2683,480],{"class":255},[200,2685,2636],{"class":526},[200,2687,804],{"class":255},[200,2689,2374],{"class":526},[200,2691,266],{"class":255},[200,2693,513],{"class":255},[200,2695,636],{"class":516},[200,2697,520],{"class":255},[200,2699,2651],{"class":255},[200,2701,2703,2706,2708,2711,2713,2715,2717,2719,2721,2723],{"class":202,"line":2702},152,[200,2704,2705],{"class":838},"            given_name",[200,2707,480],{"class":255},[200,2709,2710],{"class":526},"optional_string",[200,2712,804],{"class":255},[200,2714,2374],{"class":526},[200,2716,266],{"class":255},[200,2718,513],{"class":255},[200,2720,600],{"class":516},[200,2722,520],{"class":255},[200,2724,2651],{"class":255},[200,2726,2728,2731,2733,2735,2737,2739,2741,2743,2745,2747],{"class":202,"line":2727},153,[200,2729,2730],{"class":838},"            surname",[200,2732,480],{"class":255},[200,2734,2710],{"class":526},[200,2736,804],{"class":255},[200,2738,2374],{"class":526},[200,2740,266],{"class":255},[200,2742,513],{"class":255},[200,2744,612],{"class":516},[200,2746,520],{"class":255},[200,2748,2651],{"class":255},[200,2750,2752,2755,2757,2759,2761,2763,2765,2767,2769,2771],{"class":202,"line":2751},154,[200,2753,2754],{"class":838},"            mail",[200,2756,480],{"class":255},[200,2758,2710],{"class":526},[200,2760,804],{"class":255},[200,2762,2374],{"class":526},[200,2764,266],{"class":255},[200,2766,513],{"class":255},[200,2768,624],{"class":516},[200,2770,520],{"class":255},[200,2772,2651],{"class":255},[200,2774,2776,2779,2781,2783,2785,2787,2789,2791,2793,2795],{"class":202,"line":2775},155,[200,2777,2778],{"class":838},"            department",[200,2780,480],{"class":255},[200,2782,2710],{"class":526},[200,2784,804],{"class":255},[200,2786,2374],{"class":526},[200,2788,266],{"class":255},[200,2790,513],{"class":255},[200,2792,648],{"class":516},[200,2794,520],{"class":255},[200,2796,2651],{"class":255},[200,2798,2800,2803,2805,2808,2810,2812,2814,2816,2818,2820],{"class":202,"line":2799},156,[200,2801,2802],{"class":838},"            account_enabled",[200,2804,480],{"class":255},[200,2806,2807],{"class":526},"optional_bool",[200,2809,804],{"class":255},[200,2811,2374],{"class":526},[200,2813,266],{"class":255},[200,2815,513],{"class":255},[200,2817,660],{"class":516},[200,2819,520],{"class":255},[200,2821,2651],{"class":255},[200,2823,2825,2828,2830,2833,2835,2837,2839,2841,2843,2845],{"class":202,"line":2824},157,[200,2826,2827],{"class":838},"            created_date_time",[200,2829,480],{"class":255},[200,2831,2832],{"class":526},"optional_timestamp",[200,2834,804],{"class":255},[200,2836,2374],{"class":526},[200,2838,266],{"class":255},[200,2840,513],{"class":255},[200,2842,672],{"class":516},[200,2844,520],{"class":255},[200,2846,2651],{"class":255},[200,2848,2850,2853,2855,2857,2859,2861,2863,2865,2867,2869],{"class":202,"line":2849},158,[200,2851,2852],{"class":838},"            deleted_date_time",[200,2854,480],{"class":255},[200,2856,2832],{"class":526},[200,2858,804],{"class":255},[200,2860,2374],{"class":526},[200,2862,266],{"class":255},[200,2864,513],{"class":255},[200,2866,684],{"class":516},[200,2868,520],{"class":255},[200,2870,2651],{"class":255},[200,2872,2874,2877,2879,2881,2883,2885,2887,2889,2891,2893],{"class":202,"line":2873},159,[200,2875,2876],{"class":838},"            job_title",[200,2878,480],{"class":255},[200,2880,2710],{"class":526},[200,2882,804],{"class":255},[200,2884,2374],{"class":526},[200,2886,266],{"class":255},[200,2888,513],{"class":255},[200,2890,696],{"class":516},[200,2892,520],{"class":255},[200,2894,2651],{"class":255},[200,2896,2898,2901,2903,2905,2907,2909,2911,2913,2915,2917],{"class":202,"line":2897},160,[200,2899,2900],{"class":838},"            user_type",[200,2902,480],{"class":255},[200,2904,2710],{"class":526},[200,2906,804],{"class":255},[200,2908,2374],{"class":526},[200,2910,266],{"class":255},[200,2912,513],{"class":255},[200,2914,708],{"class":516},[200,2916,520],{"class":255},[200,2918,2651],{"class":255},[200,2920,2922,2925,2927,2929,2931,2933,2935,2937,2939,2941],{"class":202,"line":2921},161,[200,2923,2924],{"class":838},"            country",[200,2926,480],{"class":255},[200,2928,2710],{"class":526},[200,2930,804],{"class":255},[200,2932,2374],{"class":526},[200,2934,266],{"class":255},[200,2936,513],{"class":255},[200,2938,720],{"class":516},[200,2940,520],{"class":255},[200,2942,2651],{"class":255},[200,2944,2946,2949,2951,2954,2956,2958],{"class":202,"line":2945},162,[200,2947,2948],{"class":838},"            employee_org_data",[200,2950,480],{"class":255},[200,2952,2953],{"class":526},"employee_org_data",[200,2955,804],{"class":255},[200,2957,2374],{"class":526},[200,2959,2651],{"class":255},[200,2961,2963],{"class":202,"line":2962},163,[200,2964,1683],{"class":255},[200,2966,2968],{"class":202,"line":2967},164,[200,2969,1343],{"class":255},[200,2971,2973],{"class":202,"line":2972},165,[200,2974,334],{"emptyLinePlaceholder":333},[200,2976,2978],{"class":202,"line":2977},166,[200,2979,334],{"emptyLinePlaceholder":333},[200,2981,2983,2986,2989,2992,2994,2997,2999,3002,3004,3006,3008,3010,3012,3014,3017],{"class":202,"line":2982},167,[200,2984,2985],{"class":829},"async",[200,2987,2988],{"class":829}," def",[200,2990,2991],{"class":526}," sync_employees",[200,2993,804],{"class":255},[200,2995,2996],{"class":838},"write",[200,2998,189],{"class":255},[200,3000,3001],{"class":210}," Write",[200,3003,846],{"class":255},[200,3005,849],{"class":255},[200,3007,852],{"class":210},[200,3009,855],{"class":255},[200,3011,859],{"class":858},[200,3013,266],{"class":255},[200,3015,3016],{"class":858}," int",[200,3018,867],{"class":255},[200,3020,3022,3025,3027,3030,3033,3035,3038,3040,3043],{"class":202,"line":3021},168,[200,3023,3024],{"class":210},"    access_token ",[200,3026,480],{"class":255},[200,3028,3029],{"class":206}," await",[200,3031,3032],{"class":210}," asyncio",[200,3034,122],{"class":255},[200,3036,3037],{"class":526},"to_thread",[200,3039,804],{"class":255},[200,3041,3042],{"class":526},"request_graph_token",[200,3044,466],{"class":255},[200,3046,3048,3051,3053],{"class":202,"line":3047},169,[200,3049,3050],{"class":210},"    employee_count ",[200,3052,480],{"class":255},[200,3054,3055],{"class":890}," 0\n",[200,3057,3059,3062,3064,3066,3068,3070,3073],{"class":202,"line":3058},170,[200,3060,3061],{"class":210},"    next_url",[200,3063,189],{"class":255},[200,3065,1004],{"class":858},[200,3067,1499],{"class":255},[200,3069,1835],{"class":255},[200,3071,3072],{"class":255}," =",[200,3074,3075],{"class":210}," GRAPH_USERS_URL\n",[200,3077,3079,3082,3084,3086,3088],{"class":202,"line":3078},171,[200,3080,3081],{"class":206},"    while",[200,3083,1827],{"class":210},[200,3085,1830],{"class":255},[200,3087,934],{"class":255},[200,3089,2070],{"class":255},[200,3091,3093,3096,3098,3100,3102,3104,3106,3108,3110,3112,3115,3117,3120,3122,3124],{"class":202,"line":3092},172,[200,3094,3095],{"class":210},"        users",[200,3097,266],{"class":255},[200,3099,1827],{"class":210},[200,3101,480],{"class":255},[200,3103,3029],{"class":206},[200,3105,3032],{"class":210},[200,3107,122],{"class":255},[200,3109,3037],{"class":526},[200,3111,804],{"class":255},[200,3113,3114],{"class":526},"request_graph_page",[200,3116,266],{"class":255},[200,3118,3119],{"class":526}," next_url",[200,3121,266],{"class":255},[200,3123,1462],{"class":526},[200,3125,466],{"class":255},[200,3127,3129,3132,3135],{"class":202,"line":3128},173,[200,3130,3131],{"class":206},"        if",[200,3133,3134],{"class":210}," users",[200,3136,902],{"class":255},[200,3138,3140,3143,3145,3148,3151,3153,3155,3157,3159,3162,3164,3166],{"class":202,"line":3139},174,[200,3141,3142],{"class":210},"            employees ",[200,3144,480],{"class":255},[200,3146,3147],{"class":255}," [",[200,3149,3150],{"class":526},"employee_from_graph_user",[200,3152,804],{"class":255},[200,3154,2374],{"class":526},[200,3156,846],{"class":255},[200,3158,1761],{"class":206},[200,3160,3161],{"class":210}," user ",[200,3163,1090],{"class":206},[200,3165,3134],{"class":210},[200,3167,1035],{"class":255},[200,3169,3171,3174,3177,3179,3181,3183,3186,3188,3191,3193,3196,3198,3200],{"class":202,"line":3170},175,[200,3172,3173],{"class":206},"            await",[200,3175,3176],{"class":526}," write",[200,3178,804],{"class":255},[200,3180,489],{"class":526},[200,3182,804],{"class":255},[200,3184,3185],{"class":838},"employees",[200,3187,480],{"class":255},[200,3189,3190],{"class":526},"EmployeeRecords",[200,3192,804],{"class":255},[200,3194,3195],{"class":838},"records",[200,3197,480],{"class":255},[200,3199,3185],{"class":526},[200,3201,3202],{"class":255},")))\n",[200,3204,3206,3209,3212,3215,3217,3219],{"class":202,"line":3205},176,[200,3207,3208],{"class":210},"            employee_count ",[200,3210,3211],{"class":255},"+=",[200,3213,3214],{"class":526}," len",[200,3216,804],{"class":255},[200,3218,3185],{"class":526},[200,3220,466],{"class":255},[200,3222,3224],{"class":202,"line":3223},177,[200,3225,334],{"emptyLinePlaceholder":333},[200,3227,3229,3231,3234,3237,3240],{"class":202,"line":3228},178,[200,3230,931],{"class":206},[200,3232,3233],{"class":210}," employee_count ",[200,3235,3236],{"class":255},"==",[200,3238,3239],{"class":890}," 0",[200,3241,902],{"class":255},[200,3243,3245,3248,3250,3252,3254,3256,3258,3260,3262],{"class":202,"line":3244},179,[200,3246,3247],{"class":206},"        await",[200,3249,3176],{"class":526},[200,3251,804],{"class":255},[200,3253,489],{"class":526},[200,3255,804],{"class":255},[200,3257,3185],{"class":838},[200,3259,480],{"class":255},[200,3261,3190],{"class":526},[200,3263,3264],{"class":255},"()))\n",[200,3266,3268,3270,3273,3275,3277,3279,3281,3284],{"class":202,"line":3267},180,[200,3269,975],{"class":206},[200,3271,3272],{"class":255}," {",[200,3274,520],{"class":255},[200,3276,3185],{"class":516},[200,3278,520],{"class":255},[200,3280,189],{"class":255},[200,3282,3283],{"class":210}," employee_count",[200,3285,3286],{"class":255},"}\n",[200,3288,3290],{"class":202,"line":3289},181,[200,3291,334],{"emptyLinePlaceholder":333},[200,3293,3295],{"class":202,"line":3294},182,[200,3296,334],{"emptyLinePlaceholder":333},[200,3298,3300,3302,3304,3307,3309,3312,3314,3316,3318,3321,3323,3325,3327,3329,3331,3333,3335,3337,3340,3342,3344,3346,3348,3350,3352],{"class":202,"line":3299},183,[200,3301,2985],{"class":829},[200,3303,2988],{"class":829},[200,3305,3306],{"class":526}," run_batch",[200,3308,804],{"class":255},[200,3310,3311],{"class":838},"sync",[200,3313,189],{"class":255},[200,3315,483],{"class":210},[200,3317,486],{"class":255},[200,3319,3320],{"class":210},"Write",[200,3322,492],{"class":255},[200,3324,263],{"class":210},[200,3326,855],{"class":255},[200,3328,1483],{"class":210},[200,3330,855],{"class":255},[200,3332,859],{"class":858},[200,3334,266],{"class":255},[200,3336,3016],{"class":858},[200,3338,3339],{"class":255},"]]])",[200,3341,849],{"class":255},[200,3343,852],{"class":210},[200,3345,855],{"class":255},[200,3347,859],{"class":858},[200,3349,266],{"class":255},[200,3351,3016],{"class":858},[200,3353,867],{"class":255},[200,3355,3357,3360,3362,3365],{"class":202,"line":3356},184,[200,3358,3359],{"class":210},"    options ",[200,3361,480],{"class":255},[200,3363,3364],{"class":526}," SyncApiClientOptions",[200,3366,529],{"class":255},[200,3368,3370,3373,3375,3378,3380,3382,3384,3386,3389,3391],{"class":202,"line":3369},185,[200,3371,3372],{"class":838},"        endpoint",[200,3374,480],{"class":255},[200,3376,3377],{"class":526},"os",[200,3379,122],{"class":255},[200,3381,1023],{"class":1022},[200,3383,855],{"class":255},[200,3385,520],{"class":255},[200,3387,3388],{"class":516},"VIIO_SYNC_API_ENDPOINT",[200,3390,520],{"class":255},[200,3392,1224],{"class":255},[200,3394,3396,3399,3401,3404,3406,3409,3411,3413,3415,3417,3419,3421,3424,3426],{"class":202,"line":3395},186,[200,3397,3398],{"class":838},"        authentication",[200,3400,480],{"class":255},[200,3402,3403],{"class":526},"SyncApiAuthentication",[200,3405,122],{"class":255},[200,3407,3408],{"class":526},"api_key",[200,3410,804],{"class":255},[200,3412,3377],{"class":526},[200,3414,122],{"class":255},[200,3416,1023],{"class":1022},[200,3418,855],{"class":255},[200,3420,520],{"class":255},[200,3422,3423],{"class":516},"VIIO_SYNC_API_KEY",[200,3425,520],{"class":255},[200,3427,3428],{"class":255},"]),\n",[200,3430,3432],{"class":202,"line":3431},187,[200,3433,1343],{"class":255},[200,3435,3437],{"class":202,"line":3436},188,[200,3438,334],{"emptyLinePlaceholder":333},[200,3440,3442,3445,3448,3450,3452,3455,3457,3459,3462],{"class":202,"line":3441},189,[200,3443,3444],{"class":206},"    async",[200,3446,3447],{"class":206}," with",[200,3449,396],{"class":526},[200,3451,804],{"class":255},[200,3453,3454],{"class":526},"options",[200,3456,846],{"class":255},[200,3458,896],{"class":206},[200,3460,3461],{"class":210}," client",[200,3463,902],{"class":255},[200,3465,3467,3470,3472,3474,3476,3478,3481,3483,3485,3487,3489,3491,3493,3496,3498],{"class":202,"line":3466},190,[200,3468,3469],{"class":210},"        batch ",[200,3471,480],{"class":255},[200,3473,3029],{"class":206},[200,3475,3461],{"class":210},[200,3477,122],{"class":255},[200,3479,3480],{"class":526},"start_batch",[200,3482,804],{"class":255},[200,3484,3377],{"class":526},[200,3486,122],{"class":255},[200,3488,1023],{"class":1022},[200,3490,855],{"class":255},[200,3492,520],{"class":255},[200,3494,3495],{"class":516},"VIIO_DIRECT_INTEGRATION_INSTALLATION_ID",[200,3497,520],{"class":255},[200,3499,3500],{"class":255},"])\n",[200,3502,3504,3507],{"class":202,"line":3503},191,[200,3505,3506],{"class":206},"        try",[200,3508,902],{"class":255},[200,3510,3512,3515,3517,3519,3522,3524,3527,3529,3531],{"class":202,"line":3511},192,[200,3513,3514],{"class":210},"            counts ",[200,3516,480],{"class":255},[200,3518,3029],{"class":206},[200,3520,3521],{"class":526}," sync",[200,3523,804],{"class":255},[200,3525,3526],{"class":526},"batch",[200,3528,122],{"class":255},[200,3530,2996],{"class":1022},[200,3532,466],{"class":255},[200,3534,3536,3538,3541,3543,3546],{"class":202,"line":3535},193,[200,3537,3173],{"class":206},[200,3539,3540],{"class":210}," batch",[200,3542,122],{"class":255},[200,3544,3545],{"class":526},"complete",[200,3547,2326],{"class":255},[200,3549,3551,3554,3557],{"class":202,"line":3550},194,[200,3552,3553],{"class":206},"        except",[200,3555,3556],{"class":858}," BaseException",[200,3558,902],{"class":255},[200,3560,3562,3564,3566,3568,3571],{"class":202,"line":3561},195,[200,3563,3173],{"class":206},[200,3565,3540],{"class":210},[200,3567,122],{"class":255},[200,3569,3570],{"class":526},"abort",[200,3572,2326],{"class":255},[200,3574,3576],{"class":202,"line":3575},196,[200,3577,3578],{"class":206},"            raise\n",[200,3580,3582,3584],{"class":202,"line":3581},197,[200,3583,975],{"class":206},[200,3585,3586],{"class":210}," counts\n",[200,3588,3590],{"class":202,"line":3589},198,[200,3591,334],{"emptyLinePlaceholder":333},[200,3593,3595],{"class":202,"line":3594},199,[200,3596,334],{"emptyLinePlaceholder":333},[200,3598,3600,3602,3604,3607,3609,3611,3613,3616,3618,3620],{"class":202,"line":3599},200,[200,3601,2985],{"class":829},[200,3603,2988],{"class":829},[200,3605,3606],{"class":526}," print_request",[200,3608,804],{"class":255},[200,3610,839],{"class":838},[200,3612,189],{"class":255},[200,3614,3615],{"class":210}," SyncRecordsRequest",[200,3617,846],{"class":255},[200,3619,849],{"class":255},[200,3621,2070],{"class":255},[200,3623,3625,3628,3630,3633,3635,3637],{"class":202,"line":3624},201,[200,3626,3627],{"class":526},"    print",[200,3629,804],{"class":255},[200,3631,3632],{"class":526},"MessageToJson",[200,3634,804],{"class":255},[200,3636,839],{"class":526},[200,3638,3639],{"class":255},"))\n",[200,3641,3643],{"class":202,"line":3642},202,[200,3644,334],{"emptyLinePlaceholder":333},[200,3646,3648],{"class":202,"line":3647},203,[200,3649,334],{"emptyLinePlaceholder":333},[200,3651,3653,3655,3657,3660,3662,3664],{"class":202,"line":3652},204,[200,3654,2985],{"class":829},[200,3656,2988],{"class":829},[200,3658,3659],{"class":526}," main",[200,3661,999],{"class":255},[200,3663,849],{"class":255},[200,3665,2070],{"class":255},[200,3667,3669,3672,3674,3677,3679,3682,3684,3687,3689,3691,3694,3696],{"class":202,"line":3668},205,[200,3670,3671],{"class":210},"    parser ",[200,3673,480],{"class":255},[200,3675,3676],{"class":210}," argparse",[200,3678,122],{"class":255},[200,3680,3681],{"class":526},"ArgumentParser",[200,3683,804],{"class":255},[200,3685,3686],{"class":838},"description",[200,3688,480],{"class":255},[200,3690,520],{"class":255},[200,3692,3693],{"class":516},"Sync Microsoft Entra ID employees to Viio",[200,3695,520],{"class":255},[200,3697,466],{"class":255},[200,3699,3701,3704,3706,3709,3711,3713,3716,3718,3720,3723,3725,3727,3730,3732,3734,3737,3739,3741,3744,3746],{"class":202,"line":3700},206,[200,3702,3703],{"class":210},"    parser",[200,3705,122],{"class":255},[200,3707,3708],{"class":526},"add_argument",[200,3710,804],{"class":255},[200,3712,520],{"class":255},[200,3714,3715],{"class":516},"--dry-run",[200,3717,520],{"class":255},[200,3719,266],{"class":255},[200,3721,3722],{"class":838}," action",[200,3724,480],{"class":255},[200,3726,520],{"class":255},[200,3728,3729],{"class":516},"store_true",[200,3731,520],{"class":255},[200,3733,266],{"class":255},[200,3735,3736],{"class":838}," help",[200,3738,480],{"class":255},[200,3740,520],{"class":255},[200,3742,3743],{"class":516},"print the records instead of sending them",[200,3745,520],{"class":255},[200,3747,466],{"class":255},[200,3749,3751,3754,3756,3759,3761,3764],{"class":202,"line":3750},207,[200,3752,3753],{"class":210},"    arguments ",[200,3755,480],{"class":255},[200,3757,3758],{"class":210}," parser",[200,3760,122],{"class":255},[200,3762,3763],{"class":526},"parse_args",[200,3765,2326],{"class":255},[200,3767,3769],{"class":202,"line":3768},208,[200,3770,334],{"emptyLinePlaceholder":333},[200,3772,3774,3777,3779,3781,3784,3787,3789,3792,3794,3797,3800,3802,3805,3807,3809,3811,3813],{"class":202,"line":3773},209,[200,3775,3776],{"class":210},"    counts ",[200,3778,480],{"class":255},[200,3780,3029],{"class":206},[200,3782,3783],{"class":255}," (",[200,3785,3786],{"class":526},"sync_employees",[200,3788,804],{"class":255},[200,3790,3791],{"class":526},"print_request",[200,3793,846],{"class":255},[200,3795,3796],{"class":206}," if",[200,3798,3799],{"class":210}," arguments",[200,3801,122],{"class":255},[200,3803,3804],{"class":1022},"dry_run",[200,3806,2218],{"class":206},[200,3808,3306],{"class":526},[200,3810,804],{"class":255},[200,3812,3786],{"class":526},[200,3814,3639],{"class":255},[200,3816,3818,3821,3823,3826,3828,3830,3833,3836,3838,3840,3843],{"class":202,"line":3817},210,[200,3819,3820],{"class":210},"    logger",[200,3822,122],{"class":255},[200,3824,3825],{"class":526},"info",[200,3827,804],{"class":255},[200,3829,520],{"class":255},[200,3831,3832],{"class":516},"Synced ",[200,3834,3835],{"class":890},"%s",[200,3837,520],{"class":255},[200,3839,266],{"class":255},[200,3841,3842],{"class":526}," counts",[200,3844,466],{"class":255},[200,3846,3848],{"class":202,"line":3847},211,[200,3849,334],{"emptyLinePlaceholder":333},[200,3851,3853],{"class":202,"line":3852},212,[200,3854,334],{"emptyLinePlaceholder":333},[200,3856,3858,3860,3863,3865,3867,3870,3872],{"class":202,"line":3857},213,[200,3859,2100],{"class":206},[200,3861,3862],{"class":210}," __name__ ",[200,3864,3236],{"class":255},[200,3866,513],{"class":255},[200,3868,3869],{"class":516},"__main__",[200,3871,520],{"class":255},[200,3873,902],{"class":255},[200,3875,3877,3880,3882,3885,3887,3890,3892,3895,3897,3900],{"class":202,"line":3876},214,[200,3878,3879],{"class":210},"    logging",[200,3881,122],{"class":255},[200,3883,3884],{"class":526},"basicConfig",[200,3886,804],{"class":255},[200,3888,3889],{"class":838},"level",[200,3891,480],{"class":255},[200,3893,3894],{"class":526},"logging",[200,3896,122],{"class":255},[200,3898,3899],{"class":1022},"INFO",[200,3901,466],{"class":255},[200,3903,3905,3908,3910,3913,3915,3918],{"class":202,"line":3904},215,[200,3906,3907],{"class":210},"    asyncio",[200,3909,122],{"class":255},[200,3911,3912],{"class":526},"run",[200,3914,804],{"class":255},[200,3916,3917],{"class":526},"main",[200,3919,3920],{"class":255},"())\n",[106,3922,3923,3924,3926],{},"Each Graph page of up to 999 users becomes one write. If Graph returns no users, the script sends an empty ",[110,3925,3190],{}," wrapper, so Viio records an intentionally empty employee snapshot.",[106,3928,3929,3930,3935],{},"The script sends the Microsoft fields unchanged. Viio derives each employee's name, email, status, and organization from them. See ",[118,3931,3933],{"href":3932},"\u002Fsync-api\u002Fapi-reference\u002Fmodels#microsoftemployeedetails",[110,3934,112],{}," for every field.",[132,3937,3939],{"id":3938},"run-the-script","Run the Script",[106,3941,3942],{},"Preview the employee records without contacting Viio:",[191,3944,3948],{"className":3945,"code":3946,"language":3947,"meta":196,"style":196},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","python entra_employees.py --dry-run\n","bash",[110,3949,3950],{"__ignoreMap":196},[200,3951,3952,3954,3957],{"class":202,"line":203},[200,3953,195],{"class":858},[200,3955,3956],{"class":516}," entra_employees.py",[200,3958,3959],{"class":516}," --dry-run\n",[106,3961,3962],{},"Send the snapshot to Viio:",[191,3964,3966],{"className":3945,"code":3965,"language":3947,"meta":196,"style":196},"python entra_employees.py\n",[110,3967,3968],{"__ignoreMap":196},[200,3969,3970,3972],{"class":202,"line":203},[200,3971,195],{"class":858},[200,3973,3974],{"class":516}," entra_employees.py\n",[106,3976,3977,3978,3982],{},"If a Microsoft Graph or Sync API call fails, the script aborts the batch and raises the error. Aborting doesn't remove any employees, because Viio reconciles the snapshot only when a batch completes. See the ",[118,3979,3981],{"href":3980},"\u002Fsync-api\u002Fquickstart#retry-strategy","quickstart"," for the retry sequence.",[3984,3985],"read-more",{"title":3986,"to":3987},"Next: sync Microsoft licenses","\u002Fsync-api\u002Fexamples\u002Fmicrosoft-licenses-python",[3984,3989],{"title":3990,"to":3991},"Browse employee models","\u002Fsync-api\u002Fapi-reference\u002Fmodels#employees",[3993,3994,3995],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":196,"searchDepth":203,"depth":214,"links":3997},[3998,3999,4000],{"id":134,"depth":214,"text":135},{"id":181,"depth":214,"text":182},{"id":3938,"depth":214,"text":3939},"2026-10-06","Send Microsoft Entra ID users to Viio as a complete employee snapshot with the Python SDK.","md",null,{},false,"\u002Fsync-api\u002Fexamples\u002Fmicrosoft-entra-id-python",{"title":4009,"description":4010},"Sync Microsoft Entra ID Employees to Viio with Python","Build a Python job that pages Microsoft Graph users and sends a complete Microsoft Entra ID employee snapshot to Viio.","3.sync-api\u002F6.examples\u002F2.microsoft-entra-id-python","Ztr8wsxsEnmHM4jqHHxFLVEEa1vjuFJACqZI_HcBCto",[4004,4004],1792747809477]