Code view:

A painting is a person's account of this edit as text, recorded independently of the node mapping - a rendering often has several equally defensible answers where the mapping has one. Deletions and insertions carry no position on the opposite side in a painting, so that panel draws no caret for them.

Before

…lines 1–18 unchanged (18 lines)
19 """Get the BYOR key from the database for a user."""
20 user = await UserStore.get_user_by_id(user_id)
21 if not user:
22 return None
23
24 current_org_id = user.current_org_id
25 current_org_member: OrgMember = None
26 for org_member in user.org_members:
27 if org_member.org_id == current_org_id:
28 current_org_member = org_member
29 break
30 if not current_org_member:
31 return None
…lines 32–37 unchanged (6 lines)
38 """Store the BYOR key in the database for a user."""
39 user = await UserStore.get_user_by_id(user_id)
40 if not user:
41 return None
42
43 current_org_id = user.current_org_id
44 current_org_member: OrgMember = None
45 for org_member in user.org_members:
46 if org_member.org_id == current_org_id:
47 current_org_member = org_member
48 break
49 if not current_org_member:
50 return None
…lines 51–426 unchanged (376 lines)

After

…lines 1–18 unchanged (18 lines)
19 """Get the BYOR key from the database for a user."""
20 user = await UserStore.get_user_by_id(user_id)
21 if not user:
22 return None
23
24 current_org_id = user.current_org_id
25 current_org_member: OrgMember | None = None
26 for org_member in user.org_members:
27 if org_member.org_id == current_org_id:
28 current_org_member = org_member
29 break
30 if not current_org_member:
31 return None
…lines 32–37 unchanged (6 lines)
38 """Store the BYOR key in the database for a user."""
39 user = await UserStore.get_user_by_id(user_id)
40 if not user:
41 return None
42
43 current_org_id = user.current_org_id
44 current_org_member: OrgMember | None = None
45 for org_member in user.org_members:
46 if org_member.org_id == current_org_id:
47 current_org_member = org_member
48 break
49 if not current_org_member:
50 return None
…lines 51–426 unchanged (376 lines)

Before

module
import_from_statement
from "from"
dotted_name
identifier "datetime"
import "import"
dotted_name
identifier "UTC"
, ","
dotted_name
identifier "datetime"
import_from_statement
from "from"
dotted_name
identifier "fastapi"
import "import"
dotted_name
identifier "APIRouter"
, ","
dotted_name
identifier "Depends"
, ","
dotted_name
identifier "HTTPException"
, ","
dotted_name
identifier "status"
import_from_statement
from "from"
dotted_name
identifier "pydantic"
import "import"
dotted_name
identifier "BaseModel"
, ","
dotted_name
identifier "field_validator"
import_from_statement
from "from"
dotted_name
identifier "storage"
. "."
identifier "api_key"
import "import"
dotted_name
identifier "ApiKey"
import_from_statement
from "from"
dotted_name
identifier "storage"
. "."
identifier "api_key_store"
import "import"
dotted_name
identifier "ApiKeyStore"
import_from_statement
from "from"
dotted_name
identifier "storage"
. "."
identifier "lite_llm_manager"
import "import"
dotted_name
identifier "LiteLlmManager"
import_from_statement
from "from"
dotted_name
identifier "storage"
. "."
identifier "org_member"
import "import"
dotted_name
identifier "OrgMember"
import_from_statement
from "from"
dotted_name
identifier "storage"
. "."
identifier "org_member_store"
import "import"
dotted_name
identifier "OrgMemberStore"
import_from_statement
from "from"
dotted_name
identifier "storage"
. "."
identifier "org_service"
import "import"
dotted_name
identifier "OrgService"
import_from_statement
from "from"
dotted_name
identifier "storage"
. "."
identifier "user_store"
import "import"
dotted_name
identifier "UserStore"
import_from_statement
from "from"
dotted_name
identifier "openhands"
. "."
identifier "core"
. "."
identifier "logger"
import "import"
aliased_import
dotted_name
identifier "openhands_logger"
as "as"
identifier "logger"
import_from_statement
from "from"
dotted_name
identifier "openhands"
. "."
identifier "server"
. "."
identifier "user_auth"
import "import"
dotted_name
identifier "get_user_id"
comment "# Helper functions for BYOR API key management"
function_definition
async "async"
def "def"
identifier "get_byor_key_from_db"
parameters
( "("
typed_parameter
identifier "user_id"
: ":"
type
identifier "str"
) ")"
-> "->"
type
binary_operator
identifier "str"
| "|"
none "None"
: ":"
block
expression_statement
string
string_start "\"\"\""
string_content "Get the BYOR key from the database for a user."
string_end "\"\"\""
expression_statement
assignment
identifier "user"
= "="
await
await "await"
call
attribute
identifier "UserStore"
. "."
identifier "get_user_by_id"
argument_list
( "("
identifier "user_id"
) ")"
if_statement
if "if"
not_operator
not "not"
identifier "user"
: ":"
block
return_statement
return "return"
none "None"
expression_statement
assignment
identifier "current_org_id"
= "="
attribute
identifier "user"
. "."
identifier "current_org_id"
expression_statement
assignment
identifier "current_org_member"
: ":"
type
identifier "OrgMember"
= "="
none "None"
for_statement (+28 nodes collapsed)
if_statement
if "if"
not_operator
not "not"
identifier "current_org_member"
: ":"
block
return_statement
return "return"
none "None"
if_statement (+21 nodes collapsed)
return_statement
return "return"
none "None"
function_definition
async "async"
def "def"
identifier "store_byor_key_in_db"
parameters
( "("
typed_parameter
identifier "user_id"
: ":"
type
identifier "str"
, ","
typed_parameter
identifier "key"
: ":"
type
identifier "str"
) ")"
-> "->"
type
none "None"
: ":"
block
expression_statement
string
string_start "\"\"\""
string_content "Store the BYOR key in the database for a user."
string_end "\"\"\""
expression_statement
assignment
identifier "user"
= "="
await
await "await"
call
attribute
identifier "UserStore"
. "."
identifier "get_user_by_id"
argument_list
( "("
identifier "user_id"
) ")"
if_statement
if "if"
not_operator
not "not"
identifier "user"
: ":"
block
return_statement
return "return"
none "None"
expression_statement
assignment
identifier "current_org_id"
= "="
attribute
identifier "user"
. "."
identifier "current_org_id"
expression_statement
assignment
identifier "current_org_member"
: ":"
type
identifier "OrgMember"
= "="
none "None"
for_statement (+28 nodes collapsed)
if_statement
if "if"
not_operator
not "not"
identifier "current_org_member"
: ":"
block
return_statement
return "return"
none "None"
expression_statement
assignment
attribute
identifier "current_org_member"
. "."
identifier "llm_api_key_for_byor"
= "="
identifier "key"
expression_statement
await
await "await"
call
attribute
identifier "OrgMemberStore"
. "."
identifier "update_org_member"
argument_list
( "("
identifier "current_org_member"
) ")"
function_definition (+292 nodes collapsed)
function_definition (+185 nodes collapsed)
comment "# Initialize API router and key store"
expression_statement
assignment
identifier "api_router"
= "="
call
identifier "APIRouter"
argument_list
( "("
keyword_argument
identifier "prefix"
= "="
string
string_start "'"
string_content "/api/keys"
string_end "'"
) ")"
expression_statement
assignment
identifier "api_key_store"
= "="
call
attribute
identifier "ApiKeyStore"
. "."
identifier "get_instance"
argument_list
( "("
) ")"
class_definition (+87 nodes collapsed)
class_definition (+54 nodes collapsed)
class_definition
class "class"
identifier "ApiKeyCreateResponse"
argument_list
( "("
identifier "ApiKeyResponse"
) ")"
: ":"
block
expression_statement
assignment
identifier "key"
: ":"
type
identifier "str"
class_definition
class "class"
identifier "LlmApiKeyResponse"
argument_list
( "("
identifier "BaseModel"
) ")"
: ":"
block
expression_statement
assignment
identifier "key"
: ":"
type
binary_operator
identifier "str"
| "|"
none "None"
class_definition
class "class"
identifier "ByorPermittedResponse"
argument_list
( "("
identifier "BaseModel"
) ")"
: ":"
block
expression_statement
assignment
identifier "permitted"
: ":"
type
identifier "bool"
class_definition
class "class"
identifier "MessageResponse"
argument_list
( "("
identifier "BaseModel"
) ")"
: ":"
block
expression_statement
assignment
identifier "message"
: ":"
type
identifier "str"
function_definition (+68 nodes collapsed)
decorated_definition (+150 nodes collapsed)
decorated_definition (+219 nodes collapsed)
decorated_definition (+136 nodes collapsed)
decorated_definition (+249 nodes collapsed)
decorated_definition (+429 nodes collapsed)
decorated_definition (+518 nodes collapsed)

After

module
import_from_statement
from "from"
dotted_name
identifier "datetime"
import "import"
dotted_name
identifier "UTC"
, ","
dotted_name
identifier "datetime"
import_from_statement
from "from"
dotted_name
identifier "fastapi"
import "import"
dotted_name
identifier "APIRouter"
, ","
dotted_name
identifier "Depends"
, ","
dotted_name
identifier "HTTPException"
, ","
dotted_name
identifier "status"
import_from_statement
from "from"
dotted_name
identifier "pydantic"
import "import"
dotted_name
identifier "BaseModel"
, ","
dotted_name
identifier "field_validator"
import_from_statement
from "from"
dotted_name
identifier "storage"
. "."
identifier "api_key"
import "import"
dotted_name
identifier "ApiKey"
import_from_statement
from "from"
dotted_name
identifier "storage"
. "."
identifier "api_key_store"
import "import"
dotted_name
identifier "ApiKeyStore"
import_from_statement
from "from"
dotted_name
identifier "storage"
. "."
identifier "lite_llm_manager"
import "import"
dotted_name
identifier "LiteLlmManager"
import_from_statement
from "from"
dotted_name
identifier "storage"
. "."
identifier "org_member"
import "import"
dotted_name
identifier "OrgMember"
import_from_statement
from "from"
dotted_name
identifier "storage"
. "."
identifier "org_member_store"
import "import"
dotted_name
identifier "OrgMemberStore"
import_from_statement
from "from"
dotted_name
identifier "storage"
. "."
identifier "org_service"
import "import"
dotted_name
identifier "OrgService"
import_from_statement
from "from"
dotted_name
identifier "storage"
. "."
identifier "user_store"
import "import"
dotted_name
identifier "UserStore"
import_from_statement
from "from"
dotted_name
identifier "openhands"
. "."
identifier "core"
. "."
identifier "logger"
import "import"
aliased_import
dotted_name
identifier "openhands_logger"
as "as"
identifier "logger"
import_from_statement
from "from"
dotted_name
identifier "openhands"
. "."
identifier "server"
. "."
identifier "user_auth"
import "import"
dotted_name
identifier "get_user_id"
comment "# Helper functions for BYOR API key management"
function_definition
async "async"
def "def"
identifier "get_byor_key_from_db"
parameters
( "("
typed_parameter
identifier "user_id"
: ":"
type
identifier "str"
) ")"
-> "->"
type
binary_operator
identifier "str"
| "|"
none "None"
: ":"
block
expression_statement
string
string_start "\"\"\""
string_content "Get the BYOR key from the database for a user."
string_end "\"\"\""
expression_statement
assignment
identifier "user"
= "="
await
await "await"
call
attribute
identifier "UserStore"
. "."
identifier "get_user_by_id"
argument_list
( "("
identifier "user_id"
) ")"
if_statement
if "if"
not_operator
not "not"
identifier "user"
: ":"
block
return_statement
return "return"
none "None"
expression_statement
assignment
identifier "current_org_id"
= "="
attribute
identifier "user"
. "."
identifier "current_org_id"
expression_statement
assignment
identifier "current_org_member"
: ":"
type
binary_operator
identifier "OrgMember"
| "|"
none "None"
= "="
none "None"
for_statement (+28 nodes collapsed)
if_statement
if "if"
not_operator
not "not"
identifier "current_org_member"
: ":"
block
return_statement
return "return"
none "None"
if_statement (+21 nodes collapsed)
return_statement
return "return"
none "None"
function_definition
async "async"
def "def"
identifier "store_byor_key_in_db"
parameters
( "("
typed_parameter
identifier "user_id"
: ":"
type
identifier "str"
, ","
typed_parameter
identifier "key"
: ":"
type
identifier "str"
) ")"
-> "->"
type
none "None"
: ":"
block
expression_statement
string
string_start "\"\"\""
string_content "Store the BYOR key in the database for a user."
string_end "\"\"\""
expression_statement
assignment
identifier "user"
= "="
await
await "await"
call
attribute
identifier "UserStore"
. "."
identifier "get_user_by_id"
argument_list
( "("
identifier "user_id"
) ")"
if_statement
if "if"
not_operator
not "not"
identifier "user"
: ":"
block
return_statement
return "return"
none "None"
expression_statement
assignment
identifier "current_org_id"
= "="
attribute
identifier "user"
. "."
identifier "current_org_id"
expression_statement
assignment
identifier "current_org_member"
: ":"
type
binary_operator
identifier "OrgMember"
| "|"
none "None"
= "="
none "None"
for_statement (+28 nodes collapsed)
if_statement
if "if"
not_operator
not "not"
identifier "current_org_member"
: ":"
block
return_statement
return "return"
none "None"
expression_statement
assignment
attribute
identifier "current_org_member"
. "."
identifier "llm_api_key_for_byor"
= "="
identifier "key"
expression_statement
await
await "await"
call
attribute
identifier "OrgMemberStore"
. "."
identifier "update_org_member"
argument_list
( "("
identifier "current_org_member"
) ")"
function_definition (+292 nodes collapsed)
function_definition (+185 nodes collapsed)
comment "# Initialize API router and key store"
expression_statement
assignment
identifier "api_router"
= "="
call
identifier "APIRouter"
argument_list
( "("
keyword_argument
identifier "prefix"
= "="
string
string_start "'"
string_content "/api/keys"
string_end "'"
) ")"
expression_statement
assignment
identifier "api_key_store"
= "="
call
attribute
identifier "ApiKeyStore"
. "."
identifier "get_instance"
argument_list
( "("
) ")"
class_definition (+87 nodes collapsed)
class_definition (+54 nodes collapsed)
class_definition
class "class"
identifier "ApiKeyCreateResponse"
argument_list
( "("
identifier "ApiKeyResponse"
) ")"
: ":"
block
expression_statement
assignment
identifier "key"
: ":"
type
identifier "str"
class_definition
class "class"
identifier "LlmApiKeyResponse"
argument_list
( "("
identifier "BaseModel"
) ")"
: ":"
block
expression_statement
assignment
identifier "key"
: ":"
type
binary_operator
identifier "str"
| "|"
none "None"
class_definition
class "class"
identifier "ByorPermittedResponse"
argument_list
( "("
identifier "BaseModel"
) ")"
: ":"
block
expression_statement
assignment
identifier "permitted"
: ":"
type
identifier "bool"
class_definition
class "class"
identifier "MessageResponse"
argument_list
( "("
identifier "BaseModel"
) ")"
: ":"
block
expression_statement
assignment
identifier "message"
: ":"
type
identifier "str"
function_definition (+68 nodes collapsed)
decorated_definition (+150 nodes collapsed)
decorated_definition (+219 nodes collapsed)
decorated_definition (+136 nodes collapsed)
decorated_definition (+249 nodes collapsed)
decorated_definition (+429 nodes collapsed)
decorated_definition (+518 nodes collapsed)