nutti / fake-bpy-module

Fake Blender Python API module collection for the code completion.
MIT License
1.37k stars 97 forks source link

Change typing of Context members #163

Closed UuuNyaa closed 4 months ago

UuuNyaa commented 9 months ago

System Information

Expected behavior

Member Actual Expected
Context.active_object 'Object' typing.Optional['Object']
Context.selected_objects typing.Iterable['Object'] typing.List['Object']

Additional comments [Optional]

nutti commented 4 months ago

@UuuNyaa

Can all type (not only selected_objects) be changed to typing.List[...] from typing.Iterable[...]?

UuuNyaa commented 4 months ago

Thank you for your efforts! I looked up the Actual Types, now.

Member Expected fake-bpy-module-latest-20240511 No selection in Object Mode Armature selected in Edit Mode Armature selected in Pose Mode GeometryNodes selected in Edit Mode
selected_files ? typing.Iterable['FileSelectEntry'] = None object has no attribute object has no attribute object has no attribute object has no attribute
selected_assets ? typing.Iterable['AssetRepresentation'] = None object has no attribute object has no attribute object has no attribute object has no attribute
selected_ids ? typing.Iterable['ID'] = None object has no attribute object has no attribute object has no attribute object has no attribute
selected_nodes ? typing.Iterable['Node'] = None object has no attribute object has no attribute object has no attribute object has no attribute
visible_objects typing.List['Object'] typing.Iterable['Object'] = None <class 'list'> <class 'list'> <class 'list'> <class 'list'>
selectable_objects typing.List['Object'] typing.Iterable['Object'] = None <class 'list'> <class 'list'> <class 'list'> <class 'list'>
selected_objects typing.List['Object'] typing.Iterable['Object'] = None <class 'list'> <class 'list'> <class 'list'> <class 'list'>
editable_objects typing.List['Object'] typing.Iterable['Object'] = None <class 'list'> <class 'list'> <class 'list'> <class 'list'>
selected_editable_objects typing.List['Object'] typing.Iterable['Object'] = None <class 'list'> <class 'list'> <class 'list'> <class 'list'>
objects_in_mode typing.List['Object'] typing.Iterable['Object'] = None <class 'list'> <class 'list'> <class 'list'> <class 'list'>
objects_in_mode_unique_data typing.List['Object'] typing.Iterable['Object'] = None <class 'list'> <class 'list'> <class 'list'> <class 'list'>
visible_bones typing.Optional[typing.List['EditBone']] typing.Iterable['EditBone'] = None <class 'NoneType'> <class 'list'> <class 'NoneType'> <class 'NoneType'>
editable_bones typing.Optional[typing.List['EditBone']] typing.Iterable['EditBone'] = None <class 'NoneType'> <class 'list'> <class 'NoneType'> <class 'NoneType'>
selected_bones typing.Optional[typing.List['EditBone']] typing.Iterable['EditBone'] = None <class 'NoneType'> <class 'list'> <class 'NoneType'> <class 'NoneType'>
selected_editable_bones typing.Optional[typing.List['EditBone']] typing.Iterable['EditBone'] = None <class 'NoneType'> <class 'list'> <class 'NoneType'> <class 'NoneType'>
visible_pose_bones typing.Optional[typing.List['PoseBone']] typing.Iterable['PoseBone'] = None <class 'NoneType'> <class 'NoneType'> <class 'list'> <class 'NoneType'>
selected_pose_bones typing.Optional[typing.List['PoseBone']] typing.Iterable['PoseBone'] = None <class 'NoneType'> <class 'NoneType'> <class 'list'> <class 'NoneType'>
selected_pose_bones_from_active_object typing.Optional[typing.List['PoseBone']] typing.Iterable['PoseBone'] = None <class 'NoneType'> <class 'NoneType'> <class 'list'> <class 'NoneType'>
sequences typing.List['Sequence'] typing.Iterable['Sequence'] = None <class 'list'> <class 'list'> <class 'list'> <class 'list'>
selected_sequences typing.List['Sequence'] typing.Iterable['Sequence'] = None <class 'list'> <class 'list'> <class 'list'> <class 'list'>
selected_editable_sequences typing.List['Sequence'] typing.Iterable['Sequence'] = None <class 'list'> <class 'list'> <class 'list'> <class 'list'>
selected_nla_strips ? typing.Iterable['NlaStrip'] = None <class 'NoneType'> <class 'NoneType'> <class 'NoneType'> <class 'NoneType'>
selected_movieclip_tracks ? typing.Iterable['MovieTrackingTrack'] = None <class 'NoneType'> <class 'NoneType'> <class 'NoneType'> <class 'NoneType'>
visible_gpencil_layers ? typing.Iterable['GPencilLayer'] = None <class 'NoneType'> <class 'NoneType'> <class 'NoneType'> <class 'NoneType'>
editable_gpencil_layers ? typing.Iterable['GPencilLayer'] = None <class 'NoneType'> <class 'NoneType'> <class 'NoneType'> <class 'NoneType'>
editable_gpencil_strokes ? typing.Iterable['GPencilStroke'] = None <class 'NoneType'> <class 'NoneType'> <class 'NoneType'> <class 'NoneType'>
active_gpencil_layer ? typing.Iterable['GPencilLayer'] = None <class 'NoneType'> <class 'NoneType'> <class 'NoneType'> <class 'NoneType'>
active_gpencil_frame ? typing.Iterable['GreasePencilLayer'] = None <class 'NoneType'> <class 'NoneType'> <class 'NoneType'> <class 'NoneType'>
selected_visible_actions ? typing.Iterable['Action'] = None <class 'NoneType'> <class 'NoneType'> <class 'NoneType'> <class 'NoneType'>
selected_editable_actions ? typing.Iterable['Action'] = None <class 'NoneType'> <class 'NoneType'> <class 'NoneType'> <class 'NoneType'>
visible_fcurves ? typing.Iterable['FCurve'] = None <class 'NoneType'> <class 'NoneType'> <class 'NoneType'> <class 'NoneType'>
editable_fcurves ? typing.Iterable['FCurve'] = None <class 'NoneType'> <class 'NoneType'> <class 'NoneType'> <class 'NoneType'>
selected_visible_fcurves ? typing.Iterable['FCurve'] = None <class 'NoneType'> <class 'NoneType'> <class 'NoneType'> <class 'NoneType'>
selected_editable_fcurves ? typing.Iterable['FCurve'] = None <class 'NoneType'> <class 'NoneType'> <class 'NoneType'> <class 'NoneType'>
selected_editable_keyframes ? typing.Iterable['Keyframe'] = None <class 'NoneType'> <class 'NoneType'> <class 'NoneType'> <class 'NoneType'>

Some properties are difficult to observe and some are Optional.

Check script

type(C.selected_files)
type(C.selected_assets)
type(C.selected_ids)
type(C.selected_nodes)
type(C.visible_objects)
type(C.selectable_objects)
type(C.selected_objects)
type(C.editable_objects)
type(C.selected_editable_objects)
type(C.objects_in_mode)
type(C.objects_in_mode_unique_data)
type(C.visible_bones)
type(C.editable_bones)
type(C.selected_bones)
type(C.selected_editable_bones)
type(C.visible_pose_bones)
type(C.selected_pose_bones)
type(C.selected_pose_bones_from_active_object)
type(C.sequences)
type(C.selected_sequences)
type(C.selected_editable_sequences)
type(C.selected_nla_strips)
type(C.selected_movieclip_tracks)
type(C.visible_gpencil_layers)
type(C.editable_gpencil_layers)
type(C.editable_gpencil_strokes)
type(C.active_gpencil_layer)
type(C.active_gpencil_frame)
type(C.selected_visible_actions)
type(C.selected_editable_actions)
type(C.visible_fcurves)
type(C.editable_fcurves)
type(C.selected_visible_fcurves)
type(C.selected_editable_fcurves)
type(C.selected_editable_keyframes)
UuuNyaa commented 4 months ago
Member Expected fake-bpy-module-latest 20240511
temp_override (self, window: Optional[bpy.types.Window] = None, area: Optional[bpy.types.Area] = None, region: Optional[bpy.types.Region] = None, **keywords) -> Generator[bpy.types.Context, None, None] (self, window: Optional['Window'], area: Optional['Area'], region: Optional['Region'], **keywords) -> 'bpy.context'
nutti commented 4 months ago

Fixed a part of this issue. However, I could not find the way to check if the members (except for active_ members) are optional or not from the sphinx documentation. If you have an idea, please let us know.