From 9ffbf4dd2d374faa524dd797c80913838d6e69aa Mon Sep 17 00:00:00 2001 From: Alfonso Sastre Date: Thu, 26 Feb 2026 14:12:09 +0100 Subject: [PATCH] fix: add default None to optional command schema fields Per OCPI spec, fields like evse_uid, connector_id, and authorization_reference in StartSession and ReserveNow are optional (cardinality ?). Without `= None` default, Pydantic v2 requires them to be present in the request body even if null, causing 422 errors when callers correctly omit them. Made-with: Cursor --- ocpi/modules/commands/v_2_1_1/schemas.py | 4 ++-- ocpi/modules/commands/v_2_2_1/schemas.py | 10 +++++----- ocpi/modules/commands/v_2_3_0/schemas.py | 10 +++++----- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/ocpi/modules/commands/v_2_1_1/schemas.py b/ocpi/modules/commands/v_2_1_1/schemas.py index b3a3f1a..a848812 100644 --- a/ocpi/modules/commands/v_2_1_1/schemas.py +++ b/ocpi/modules/commands/v_2_1_1/schemas.py @@ -23,7 +23,7 @@ class ReserveNow(BaseModel): expiry_date: DateTime reservation_id: int location_id: String(36) # type: ignore - evse_uid: String(39) | None # type: ignore + evse_uid: String(39) | None = None # type: ignore class StartSession(BaseModel): @@ -34,7 +34,7 @@ class StartSession(BaseModel): response_url: URL token: Token location_id: String(39) # type: ignore - evse_uid: String(39) | None # type: ignore + evse_uid: String(39) | None = None # type: ignore class StopSession(BaseModel): diff --git a/ocpi/modules/commands/v_2_2_1/schemas.py b/ocpi/modules/commands/v_2_2_1/schemas.py index 2ad17de..798a692 100644 --- a/ocpi/modules/commands/v_2_2_1/schemas.py +++ b/ocpi/modules/commands/v_2_2_1/schemas.py @@ -46,8 +46,8 @@ class ReserveNow(BaseModel): expiry_date: DateTime reservation_id: CiString(36) # type: ignore location_id: CiString(36) # type: ignore - evse_uid: CiString(36) | None # type: ignore - authorization_reference: CiString(36) | None # type: ignore + evse_uid: CiString(36) | None = None # type: ignore + authorization_reference: CiString(36) | None = None # type: ignore class StartSession(BaseModel): @@ -58,9 +58,9 @@ class StartSession(BaseModel): response_url: URL token: Token location_id: CiString(36) # type: ignore - evse_uid: CiString(36) | None # type: ignore - connector_id: CiString(36) | None # type: ignore - authorization_reference: CiString(36) | None # type: ignore + evse_uid: CiString(36) | None = None # type: ignore + connector_id: CiString(36) | None = None # type: ignore + authorization_reference: CiString(36) | None = None # type: ignore class StopSession(BaseModel): diff --git a/ocpi/modules/commands/v_2_3_0/schemas.py b/ocpi/modules/commands/v_2_3_0/schemas.py index 31a6c93..34f3937 100644 --- a/ocpi/modules/commands/v_2_3_0/schemas.py +++ b/ocpi/modules/commands/v_2_3_0/schemas.py @@ -46,8 +46,8 @@ class ReserveNow(BaseModel): expiry_date: DateTime reservation_id: CiString(36) # type: ignore location_id: CiString(36) # type: ignore - evse_uid: CiString(36) | None # type: ignore - authorization_reference: CiString(36) | None # type: ignore + evse_uid: CiString(36) | None = None # type: ignore + authorization_reference: CiString(36) | None = None # type: ignore class StartSession(BaseModel): @@ -58,9 +58,9 @@ class StartSession(BaseModel): response_url: URL token: Token location_id: CiString(36) # type: ignore - evse_uid: CiString(36) | None # type: ignore - connector_id: CiString(36) | None # type: ignore - authorization_reference: CiString(36) | None # type: ignore + evse_uid: CiString(36) | None = None # type: ignore + connector_id: CiString(36) | None = None # type: ignore + authorization_reference: CiString(36) | None = None # type: ignore class StopSession(BaseModel):