13 Commits

Author SHA1 Message Date
f4df542dd1 Clean up dead code, fix type errors, and add publish workflow
Remove unused _append_ops_call_method, fix _property_data_from_member
call signature, replace sys.version_info guard with hasattr check for
__buffer__ protocol, fix implicit string concatenations, add msgbus
overrides for 4.0-4.4, add conformance tests, and add publish script.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 11:07:52 +02:00
5b3253b81a Add conformance tests from Blender docs and generate ContextDict TypedDict
Add conformance test files for bpy.ops, bpy.types.Object, bpy.types.Context,
bpy.msgbus, and bpy.data from official Blender documentation for both 5.0 and
5.1. Generate a ContextDict TypedDict from Context properties so that
Context.copy() returns precisely typed values instead of dict[str, object],
fixing type errors when unpacking into temp_override().

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 11:40:51 +02:00
f1cfc8ccbd Use collections.abc.Sequence instead of _Sequence alias in bpy.types
Same approach as fake-bpy-module: fully qualify all Sequence references
as collections.abc.Sequence to avoid shadowing by bpy.types.Sequence.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 15:55:39 +02:00
80d5311e33 Add ContextTempOverride as context manager, support __enter__/__exit__ dunders
- Discover ContextTempOverride by probing Context.temp_override() return value
- Add __enter__ and __exit__ to _USEFUL_DUNDERS set
- Fix __enter__ return type to Self, __exit__ params to standard CM signature
- Add Self import to bpy.types generator when used in type annotations
- Remove ContextTempOverride from undefined type map (now a real class)

Remaining conformance issue: context.copy() returns dict[str, object] which
loses specific types when unpacked with **kwargs into temp_override params.
This is an inherent limitation of the copy() -> dict pattern.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 12:47:44 +02:00
a30e772cf8 Discover Python API functions on RNA types (Context.copy, etc.)
Pick up Python functions defined on RNA classes that have RST docstrings
(:rtype: or :type:), indicating they are public API methods rather than
operator/panel implementation details.

Also add Iterable and mathutils imports to bpy.types stub generator
for functions that reference these types in their annotations.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 12:34:19 +02:00
cfcb66620a Fix all typecheck errors in source code
- Fix partially unknown types from empty set() literals with annotations
- Use getattr-based indexing for runtime probes on object-typed instances
- Fix val_type annotation for hidden type discovery
- Use raw_type string check instead of isinstance for classmethod detection
- Access classmethod.__func__ via getattr to avoid partial unknown types
- Fix struct base type narrowing in collect_all_type_strings

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 17:29:40 +02:00
8ef75df9eb Fix mypy compatibility and add 5.0 conformance tests
- Qualify bare "object" as builtins.object in bpy.types to avoid shadowing
  by Context.object and similar properties
- Use _Sequence alias import to fix mypy "collections.abc.Sequence not defined"
- Filter out variables that clash with submodule re-exports (e.g. bpy.app)
- Add 5.0 conformance tests from Blender 5.0 mathutils documentation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 18:24:12 +01:00
441631d69a Fix all typecheck errors across all 8 Blender versions (4.0-5.1)
- Fix Sequence name clash in bpy.types by never importing it directly
- Qualify all bare Sequence[ to collections.abc.Sequence[ in bpy.types
- Force writable properties to readonly when overriding parent @property
- Auto-detect classes used as generics and add Generic[_T] base
- Include struct bases in type string collection for import detection
- Strip RST backslash-space before generic brackets in docstrings
- Convert "string in ['X', 'Y']" docstring pattern to Literal types
- Strip single backtick RST markup from type annotations
- Fix Callable[[object, ...], X] -> Callable[..., X]
- Add Callable import to bpy.types generator
- Map ContextTempOverride to object, handle BMVertSkin removal in 5.1
- Fix Literal[...] = False incompatible defaults
- Update test for collect_inherited_info rename

Result: 0 errors on all versions (4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 5.0, 5.1)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 12:41:38 +01:00
6ecd996f35 Fix typecheck errors across all Blender versions
- Strip single backtick RST markup from type annotations (` int ` -> int)
- Convert "string in ['X', 'Y']" docstring patterns to Literal types
- Map undefined ContextTempOverride type to object
- Add Callable import to bpy.types stub generator
- Fix Callable[[object, ...], X] -> Callable[..., X] for varargs
- Fix Literal[...] = False incompatible defaults to use ...
- Include classmethod-wrapped C builtins in RNA type C-method scan

Remaining pre-existing errors:
- 4.0-4.3: Sequence name clash with bpy.types.Sequence
- 4.0: Node.type structural RNA conflict
- 5.1: BMElemSeq/BMLayerCollection not declared as generic

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 11:33:22 +01:00
c2876bc184 Widen mathutils param types, fix getset_descriptor writability, add conformance tests
- Widen bare mathutils type params (Vector, Euler, etc.) to also accept
  Sequence[float], matching Blender's mathutils_array_parse C behavior
- Fix getset_descriptor readonly detection by probing __set__ on the
  descriptor instead of checking fset (which doesn't exist on C descriptors)
- Accept int | slice keys in __getitem__/__setitem__/__delitem__
- Accept Sequence[element_type] values in __setitem__ for slice assignment
- Add mathutils overrides for Matrix.Translation and Matrix.Scale
- Extend apply_overrides to support ClassName.method_name keys
- Add conformance test files from Blender docs examples
- Disable reportUnusedExpression in conformance checks

Remaining known conformance issues:
- draw_handler_add missing from SpaceView3D
- Vector not nominally Sequence[float] (buffer protocol, swizzle setters)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 18:06:11 +01:00
e4739448c2 Add dunder methods, hidden type discovery, uniform_float override, and docstring fixes
- Introspect dunder methods (__getitem__, __len__, __add__, __matmul__, etc.)
  on C extension classes with runtime probing for return types
- Discover hidden C types from property values (e.g. MatrixAccess from Matrix.col)
- Add gpu.types override for uniform_float to accept Matrix, Vector, Euler,
  Quaternion, and Color (matching Blender's mathutils_array_parse C implementation)
- Extend apply_overrides to support ClassName.method_name keys for struct methods
- Parse standalone :type: annotations in property docstrings (is_frozen -> bool)
- Strip (readonly) and (never None) from docstring type annotations
- Add :raises to directive lookahead to prevent rtype bleeding into raises text
- Fix NoneType -> None normalization in runtime type probing

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 17:18:09 +01:00
6ea41f3b4d Add rna_type/bl_rna, GeometrySet, bpy.ops typing, publish task, and README updates
- Add rna_type and bl_rna as readonly properties on bpy_struct (fixes fake-bpy-module#419)
- Discover non-RNA C classes in bpy.types like GeometrySet (fixes fake-bpy-module#436)
- Introspect bpy.ops operator wrapper with poll(), idname(), get_rna_type(), bl_options
- Handle builtin name shadowing (e.g. bpy.ops.object) with builtins. qualification
- Add poe publish task for building and publishing to PyPI
- Update project URLs to Gitea, improve generated README, add disclaimer
- Fix f-string lint warning and type annotation for introspect_class

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 15:07:35 +01:00
852a5de700 Initial commit
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 13:00:51 +01:00