Blender 3.2+ versions now uses temp_override()
.
import bpy
workspace_name = 'Layout'
bpy.context.window.workspace = bpy.data.workspaces[workspace_name]
for w in bpy.context.window_manager.windows:
for a in w.screen.areas:
if a.type == 'VIEW_3D':
with bpy.context.temp_override(window=w, area=a):
bpy.ops.screen.screen_full_area()
break