{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# JAQuel Query Examples - Interactive Execution\n\nThis notebook demonstrates how to execute JAQuel queries using the odsbox library.\nEach query from the test files is executed using `con_i.query_data()`.\n\n**Note:** You need to configure the connection parameters (URL, auth) for your ODS server." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from odsbox import ConI\n\ncon_i = ConI(url=\"SERVERURL\", auth=(\"USER\", \"PASSWORD\"))" ] }, { "cell_type": "markdown", "metadata": {}, "source": "## Access Instances" }, { "cell_type": "markdown", "metadata": {}, "source": "### Basic access" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Add some of the related physical dimension" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Add some of the related physical dimension\ncon_i.query_data({\n \"Unit\": {},\n \"$attributes\": {\n \"name\": 1,\n \"factor\": 1,\n \"offset\": 1,\n \"phys_dimension.name\": 1,\n \"phys_dimension.length_exp\": 1,\n \"phys_dimension.mass_exp\": 1\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Do access only few attributes" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Do access only few attributes\ncon_i.query_data({\n \"Unit\": {},\n \"$attributes\": {\n \"name\": 1,\n \"factor\": 1,\n \"offset\": 1\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Lets query for units with base entity name" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Lets query for units with base entity name\ncon_i.query_data({\n \"AoUnit\": {}\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Lets query for units with entity name" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Lets query for units with entity name\ncon_i.query_data({\n \"Unit\": {}\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Retrieve all attributes using asterisk" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Retrieve all attributes using asterisk\ncon_i.query_data({\n \"Unit\": {},\n \"$attributes\": {\n \"name\": 1,\n \"factor\": 1,\n \"offset\": 1,\n \"phys_dimension.*\": 1\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Simplify attribute definition" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Simplify attribute definition\ncon_i.query_data({\n \"Unit\": {},\n \"$attributes\": {\n \"name\": 1,\n \"factor\": 1,\n \"offset\": 1,\n \"phys_dimension\": {\n \"name\": 1,\n \"length_exp\": 1,\n \"mass_exp\": 1\n }\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "### Order results by an attribute" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Order results by name" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Order results by name\ncon_i.query_data({\n \"AoUnit\": {},\n \"$attributes\": {\n \"id\": 1,\n \"name\": 1\n },\n \"$orderby\": {\n \"name\": 1\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "### Limit the amounts of results" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Retrieve only 5 result rows" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Retrieve only 5 result rows\ncon_i.query_data({\n \"AoUnit\": {},\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "### Query Instance by id" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Query the unit with the id 3" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Query the unit with the id 3\ncon_i.query_data({\n \"AoUnit\": {\n \"id\": 3\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Query the unit with the id 3 full" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Query the unit with the id 3 full\ncon_i.query_data({\n \"AoUnit\": {\n \"id\": {\n \"$eq\": 3\n }\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Query the unit with the id 3 simplified" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Query the unit with the id 3 simplified\ncon_i.query_data({\n \"AoUnit\": 3\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Query the units with the ids in 1 , 2 and 3" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Query the units with the ids in 1 , 2 and 3\ncon_i.query_data({\n \"AoUnit\": {\n \"id\": {\n \"$in\": [\n 1,\n 2,\n 3\n ]\n }\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "### Query Instance by name" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Query the unit with the name equal s" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Query the unit with the name equal s\ncon_i.query_data({\n \"AoUnit\": {\n \"name\": \"s\"\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Query the unit with the name equal s case insensitive" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Query the unit with the name equal s case insensitive\ncon_i.query_data({\n \"AoUnit\": {\n \"name\": \"s\",\n \"$options\": \"i\"\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Query the unit with the name equal s case insensitive full" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Query the unit with the name equal s case insensitive full\ncon_i.query_data({\n \"AoUnit\": {\n \"name\": {\n \"$eq\": \"s\"\n },\n \"$options\": \"i\"\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Query the unit with the name like k" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Query the unit with the name like k\ncon_i.query_data({\n \"AoUnit\": {\n \"name\": {\n \"$like\": \"k*\"\n }\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Query the unit with the name like k case insensitive" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Query the unit with the name like k case insensitive\ncon_i.query_data({\n \"AoUnit\": {\n \"name\": {\n \"$like\": \"k*\"\n },\n \"$options\": \"i\"\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "### And conjunctions $and and $or" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Search speed based Units" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Search speed based Units\ncon_i.query_data({\n \"AoUnit\": {\n \"phys_dimension\": {\n \"length_exp\": 1,\n \"mass_exp\": 0,\n \"time_exp\": -1,\n \"current_exp\": 0,\n \"temperature_exp\": 0,\n \"molar_amount_exp\": 0,\n \"luminous_intensity_exp\": 0\n }\n },\n \"$attributes\": {\n \"name\": 1,\n \"factor\": 1,\n \"offset\": 1,\n \"phys_dimension.name\": 1\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Search speed based Units with explicit $and conjunction" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Search speed based Units with explicit $and conjunction\ncon_i.query_data({\n \"AoUnit\": {\n \"phys_dimension\": {\n \"$and\": [\n {\n \"length_exp\": 1\n },\n {\n \"mass_exp\": 0\n },\n {\n \"time_exp\": -1\n },\n {\n \"current_exp\": 0\n },\n {\n \"temperature_exp\": 0\n },\n {\n \"molar_amount_exp\": 0\n },\n {\n \"luminous_intensity_exp\": 0\n }\n ]\n }\n },\n \"$attributes\": {\n \"name\": 1,\n \"factor\": 1,\n \"offset\": 1,\n \"phys_dimension.name\": 1\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Search speed or time based Units" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Search speed or time based Units\ncon_i.query_data({\n \"AoUnit\": {\n \"phys_dimension\": {\n \"$or\": [\n {\n \"length_exp\": 1,\n \"mass_exp\": 0,\n \"time_exp\": -1,\n \"current_exp\": 0,\n \"temperature_exp\": 0,\n \"molar_amount_exp\": 0,\n \"luminous_intensity_exp\": 0\n },\n {\n \"length_exp\": 0,\n \"mass_exp\": 0,\n \"time_exp\": 1,\n \"current_exp\": 0,\n \"temperature_exp\": 0,\n \"molar_amount_exp\": 0,\n \"luminous_intensity_exp\": 0\n }\n ]\n }\n },\n \"$attributes\": {\n \"name\": 1,\n \"factor\": 1,\n \"offset\": 1,\n \"phys_dimension.name\": 1\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Search time based Units" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Search time based Units\ncon_i.query_data({\n \"AoUnit\": {\n \"phys_dimension\": {\n \"length_exp\": 0,\n \"mass_exp\": 0,\n \"time_exp\": 1,\n \"current_exp\": 0,\n \"temperature_exp\": 0,\n \"molar_amount_exp\": 0,\n \"luminous_intensity_exp\": 0\n }\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "### Use $between operator" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get measurements that started in a time interval" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get measurements that started in a time interval\ncon_i.query_data({\n \"AoMeasurement\": {\n \"measurement_begin\": {\n \"$between\": [\n \"2000-04-22T00:00:00.001Z\",\n \"2024-04-23T00:00:00.002Z\"\n ]\n }\n },\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get measurements that started in a time interval, ODS time" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get measurements that started in a time interval, ODS time\ncon_i.query_data({\n \"AoMeasurement\": {\n \"measurement_begin\": {\n \"$between\": [\n \"20001223000000\",\n \"20241224000000\"\n ]\n }\n },\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "### Use aggregates $min , $max , $dcount , and $distinct" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get the distincted count of Unit description" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get the distincted count of Unit description\ncon_i.query_data({\n \"AoUnit\": {},\n \"$attributes\": {\n \"description\": {\n \"$dcount\": 1\n }\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get the distincted values of Unit description" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get the distincted values of Unit description\ncon_i.query_data({\n \"AoUnit\": {},\n \"$attributes\": {\n \"description\": {\n \"$distinct\": 1\n }\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get the min and max of unit factor" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get the min and max of unit factor\ncon_i.query_data({\n \"AoUnit\": {},\n \"$attributes\": {\n \"factor\": {\n \"$max\": 1,\n \"$min\": 1\n }\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get the min and max of unit factor and offset" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get the min and max of unit factor and offset\ncon_i.query_data({\n \"AoUnit\": {},\n \"$attributes\": {\n \"factor\": {\n \"$max\": 1,\n \"$min\": 1\n },\n \"offset\": {\n \"$max\": 1,\n \"$min\": 1\n }\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "### Inner and outer joins" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Use inner join" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Use inner join\ncon_i.query_data({\n \"AoMeasurementQuantity\": {},\n \"$attributes\": {\n \"name\": 1,\n \"unit.name\": 1,\n \"quantity.name\": 1\n },\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Use outer join" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Use outer join\ncon_i.query_data({\n \"AoMeasurementQuantity\": {},\n \"$attributes\": {\n \"name\": 1,\n \"unit:OUTER.name\": 1,\n \"quantity:OUTER.name\": 1\n },\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "### Use $groupby" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Use a $groupby on two attributes" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Use a $groupby on two attributes\ncon_i.query_data({\n \"AoMeasurement\": {},\n \"$attributes\": {\n \"name\": 1,\n \"description\": 1\n },\n \"$orderby\": {\n \"name\": 1\n },\n \"$groupby\": {\n \"name\": 1,\n \"description\": 1\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "## Access OpenMDM content" }, { "cell_type": "markdown", "metadata": {}, "source": "### Access hierarchy elements" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get AoTest instances" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get AoTest instances\ncon_i.query_data({\n \"AoTest\": {},\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get MeaQuantity instances" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get MeaQuantity instances\ncon_i.query_data({\n \"MeaResult\": {},\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get MeaResult instances" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get MeaResult instances\ncon_i.query_data({\n \"MeaResult\": {},\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get Project instances" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get Project instances\ncon_i.query_data({\n \"Project\": {},\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get StructureLevel instances" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get StructureLevel instances\ncon_i.query_data({\n \"StructureLevel\": {},\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get Test instances" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get Test instances\ncon_i.query_data({\n \"Test\": {},\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get TestStep instances" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get TestStep instances\ncon_i.query_data({\n \"TestStep\": {},\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "### Browse ODS tree" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get MeaResult from TestStep with id equal 4" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get MeaResult from TestStep with id equal 4\ncon_i.query_data({\n \"TestStep\": 4,\n \"$attributes\": {\n \"children\": {\n \"name\": 1,\n \"id\": 1\n }\n },\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get MeaResult with test with id equal 4" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get MeaResult with test with id equal 4\ncon_i.query_data({\n \"MeaResult\": {\n \"test\": 4\n },\n \"$attributes\": {\n \"name\": 1,\n \"id\": 1\n },\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get StructureLevel from Project with id equal 3" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get StructureLevel from Project with id equal 3\ncon_i.query_data({\n \"Project\": 3,\n \"$attributes\": {\n \"children\": {\n \"name\": 1,\n \"id\": 1\n }\n },\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get StructureLevel with parent_test with id equal 3" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get StructureLevel with parent_test with id equal 3\ncon_i.query_data({\n \"StructureLevel\": {\n \"parent_test\": 3\n },\n \"$attributes\": {\n \"name\": 1,\n \"id\": 1\n },\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "### Access descriptive meta" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get some meta of related AoUnitUnderTestPart instances" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get some meta of related AoUnitUnderTestPart instances\ncon_i.query_data({\n \"MeaResult\": {},\n \"$attributes\": {\n \"id\": 1,\n \"name\": 1,\n \"units_under_test\": {\n \"id\": 1,\n \"vehicle.model\": 1,\n \"engine.type\": 1,\n \"gearbox.transmission\": 1\n }\n },\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "### Access parameter sets" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get name value pairs attached to MeaResult" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get name value pairs attached to MeaResult\ncon_i.query_data({\n \"ResultParameter\": {\n \"parameter_set.MeaResult.Name\": {\n \"$like\": \"APS*\"\n }\n },\n \"$attributes\": {\n \"Name\": 1,\n \"Value\": 1,\n \"DataType\": 1,\n \"parameter_set\": {\n \"name\": 1,\n \"MeaResult.id\": 1\n }\n },\n \"$options\": {\n \"$rowlimit\": 20\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "## Access Bulk" }, { "cell_type": "markdown", "metadata": {}, "source": "### Read data from Measurement" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get AoMeasurementQuantity from AoMeasurement with id equal 153" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get AoMeasurementQuantity from AoMeasurement with id equal 153\ncon_i.query_data({\n \"AoMeasurement\": 153,\n \"$attributes\": {\n \"measurement_quantities\": {\n \"name\": 1,\n \"id\": 1\n }\n },\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get AoMeasurementQuantity with measurement with id equal 153" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get AoMeasurementQuantity with measurement with id equal 153\ncon_i.query_data({\n \"AoMeasurementQuantity\": {\n \"measurement\": 153\n },\n \"$attributes\": {\n \"name\": 1,\n \"id\": 1\n },\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get AoSubmatrix with measurement with id equal 153" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get AoSubmatrix with measurement with id equal 153\ncon_i.query_data({\n \"AoSubmatrix\": {\n \"measurement\": 153\n },\n \"$attributes\": {\n \"name\": 1,\n \"id\": 1,\n \"number_of_rows\": 1\n },\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get bulk of AoLocalColumn with submatrix.measurement with id equal 153" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get bulk of AoLocalColumn with submatrix.measurement with id equal 153\ncon_i.query_data({\n \"AoLocalColumn\": {\n \"submatrix.measurement\": 153\n },\n \"$attributes\": {\n \"id\": 1,\n \"flags\": 1,\n \"generation_parameters\": 1,\n \"values\": 1\n },\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "#### Get meta of AoLocalColumn with submatrix.measurement with id equal 153" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Get meta of AoLocalColumn with submatrix.measurement with id equal 153\ncon_i.query_data({\n \"AoLocalColumn\": {\n \"submatrix.measurement\": 153\n },\n \"$attributes\": {\n \"name\": 1,\n \"id\": 1,\n \"sequence_representation\": 1,\n \"independent\": 1,\n \"global_flag\": 1\n },\n \"$options\": {\n \"$rowlimit\": 5\n }\n})" }, { "cell_type": "markdown", "metadata": {}, "source": "## Cleanup\n\nDon't forget to logout when finished:" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Logout and cleanup\ncon_i.logout()\nprint(\"Logged out successfully.\")" } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "name": "python", "version": "3.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }