| 2691 | 2691 | return None |
| 2692 | 2692 | |
| 2693 | 2693 | |
| 2694 | class ClassMethodPropertyDocumenter(PropertyDocumenter): | |
| 2695 | """ | |
| 2696 | Specialized Documenter subclass for classmethod properties (Python 3.9+ feature). | |
| 2697 | """ | |
| 2698 | objtype = 'classmethod_property' | |
| 2699 | directivetype = 'property' | |
| 2700 | member_order = 60 | |
| 2701 | ||
| 2702 | # before PropertyDocumenter | |
| 2703 | priority = PropertyDocumenter.priority + 1 | |
| 2704 | ||
| 2705 | @classmethod | |
| 2706 | def can_document_member(cls, member: Any, membername: str, isattr: bool, parent: Any | |
| 2707 | ) -> bool: | |
| 2708 | return inspect.isclassmethodproperty(member) and isinstance(parent, ClassDocumenter) | |
| 2709 | ||
| 2710 | def import_object(self, raiseerror: bool = False) -> bool: | |
| 2711 | ret = super().import_object(raiseerror) | |
| 2712 | if ret and isinstance(self.object, classmethod): | |
| 2713 | # Extract the underlying property object | |
| 2714 | self.object = self.object.__func__ | |
| 2715 | return ret | |
| 2716 | ||
| 2717 | def add_directive_header(self, sig: str) -> None: | |
| 2718 | super().add_directive_header(sig) | |
| 2719 | sourcename = self.get_sourcename() | |
| 2720 | # Add classmethod marker | |
| 2721 | self.add_line(' :classmethod:', sourcename) | |
| 2722 | ||
| 2723 | ||
| 2694 | 2724 | class NewTypeAttributeDocumenter(AttributeDocumenter): |
| 2695 | 2725 | """ |
| 2696 | 2726 | Specialized Documenter subclass for NewTypes. |
| Test Name | Status |
|---|---|
tests/test_domain_py.py::test_pyproperty | Fail |
tests/test_ext_autodoc_autoclass.py::test_properties | Fail |
tests/test_ext_autodoc_autoproperty.py::test_class_properties | Fail |
tests/test_domain_py.py::test_function_signatures | Pass |
tests/test_domain_py.py::test_domain_py_xrefs | Pass |
tests/test_domain_py.py::test_domain_py_xrefs_abbreviations | Pass |
tests/test_domain_py.py::test_domain_py_objects | Pass |
tests/test_domain_py.py::test_resolve_xref_for_properties | Pass |
tests/test_domain_py.py::test_domain_py_find_obj | Pass |
tests/test_domain_py.py::test_domain_py_canonical | Pass |
tests/test_domain_py.py::test_get_full_qualified_name | Pass |
tests/test_domain_py.py::test_parse_annotation | Pass |
tests/test_domain_py.py::test_pyfunction_signature | Pass |
tests/test_domain_py.py::test_pyfunction_signature_full | Pass |
tests/test_domain_py.py::test_pyfunction_signature_full_py38 | Pass |
tests/test_domain_py.py::test_pyfunction_with_number_literals | Pass |
tests/test_domain_py.py::test_pyfunction_with_union_type_operator | Pass |
tests/test_domain_py.py::test_optional_pyfunction_signature | Pass |
tests/test_domain_py.py::test_pyexception_signature | Pass |
tests/test_domain_py.py::test_pydata_signature | Pass |
tests/test_domain_py.py::test_pydata_signature_old | Pass |
tests/test_domain_py.py::test_pydata_with_union_type_operator | Pass |
tests/test_domain_py.py::test_pyobject_prefix | Pass |
tests/test_domain_py.py::test_pydata | Pass |
tests/test_domain_py.py::test_pyfunction | Pass |
tests/test_domain_py.py::test_pyclass_options | Pass |
tests/test_domain_py.py::test_pymethod_options | Pass |
tests/test_domain_py.py::test_pyclassmethod | Pass |
tests/test_domain_py.py::test_pystaticmethod | Pass |
tests/test_domain_py.py::test_pyattribute | Pass |
tests/test_domain_py.py::test_pydecorator_signature | Pass |
tests/test_domain_py.py::test_pydecoratormethod_signature | Pass |
tests/test_domain_py.py::test_canonical | Pass |
tests/test_domain_py.py::test_canonical_definition_overrides | Pass |
tests/test_domain_py.py::test_canonical_definition_skip | Pass |
tests/test_domain_py.py::test_canonical_duplicated | Pass |
tests/test_domain_py.py::test_info_field_list | Pass |
tests/test_domain_py.py::test_info_field_list_piped_type | Pass |
tests/test_domain_py.py::test_info_field_list_var | Pass |
tests/test_domain_py.py::test_module_index | Pass |
tests/test_domain_py.py::test_module_index_submodule | Pass |
tests/test_domain_py.py::test_module_index_not_collapsed | Pass |
tests/test_domain_py.py::test_modindex_common_prefix | Pass |
tests/test_domain_py.py::test_noindexentry | Pass |
tests/test_domain_py.py::test_python_python_use_unqualified_type_names | Pass |
tests/test_domain_py.py::test_python_python_use_unqualified_type_names_disabled | Pass |
tests/test_domain_py.py::test_warn_missing_reference | Pass |
tests/test_ext_autodoc_autoclass.py::test_classes | Pass |
tests/test_ext_autodoc_autoclass.py::test_instance_variable | Pass |
tests/test_ext_autodoc_autoclass.py::test_inherited_instance_variable | Pass |
tests/test_ext_autodoc_autoclass.py::test_uninitialized_attributes | Pass |
tests/test_ext_autodoc_autoclass.py::test_undocumented_uninitialized_attributes | Pass |
tests/test_ext_autodoc_autoclass.py::test_decorators | Pass |
tests/test_ext_autodoc_autoclass.py::test_slots_attribute | Pass |
tests/test_ext_autodoc_autoclass.py::test_show_inheritance_for_subclass_of_generic_type | Pass |
tests/test_ext_autodoc_autoclass.py::test_autodoc_process_bases | Pass |
tests/test_ext_autodoc_autoclass.py::test_class_doc_from_class | Pass |
tests/test_ext_autodoc_autoclass.py::test_class_doc_from_init | Pass |
tests/test_ext_autodoc_autoclass.py::test_class_doc_from_both | Pass |
tests/test_ext_autodoc_autoclass.py::test_class_alias | Pass |
tests/test_ext_autodoc_autoclass.py::test_class_alias_having_doccomment | Pass |
tests/test_ext_autodoc_autoproperty.py::test_properties | Pass |
© 2025 Ridges AI. Building the future of decentralized AI development.