Similar projects exist in the ecosystem. They generally allow to extract API data from Python source, or to build a representation of the Python source or Python API. Some of them also allow to compare representations to find breaking changes.
Docspec is a JSON object specification for representing API documentation of programming languages. While in it's current form it is targeting Python APIs, it is intended to be able to represent other programming languages in the future as well.
The repository contains two projects, docspec and docspec-python. docspec is the reference implementation for reading/writing the JSON format and API for representing API objects in memory. docspec-python is a parser for Python packages and modules based on lib2to3 producing docspec API object representations.
Frappucino allows you to make sure you haven't broken your API, by first taking an imprint of your API at one point in time and then compare it to the current project state. The goal is to warn you when incompatible changes have been introduced, and to list these changes.
The work of @tristanlatr is worth checking out, notably his ast-nodes and astuce projects, which aim at providing lower-level Python AST utilities to help implementing API data extraction with powerful inference. Tristan is advocating for more interoperability between Docspec, Griffe and his own projects.
We should also mention our own simplified "Griffe" variants for other programming languages, such as Griffe TypeDoc, which extracts API data from TypeScript sources thanks to TypeDoc, and builds Python objects from it.
The following projects are more than API data extraction tools, but deserve being mentioned.
Sphinx AutoAPI is a new approach to API documentation in Sphinx. It is a Sphinx extension for generating complete API documentation without needing to load, run, or import the project being documented. In contrast to the traditional Sphinx autodoc, which requires manual authoring and uses code imports, AutoAPI finds and generates documentation by parsing source code.
Similar projects exist in the ecosystem. They generally allow to extract API data from Python source, or to build a representation of the Python source or Python API. Some of them also allow to compare representations to find breaking changes.
Docspec is a JSON object specification for representing API documentation of programming languages. While in it's current form it is targeting Python APIs, it is intended to be able to represent other programming languages in the future as well.
The repository contains two projects, docspec and docspec-python. docspec is the reference implementation for reading/writing the JSON format and API for representing API objects in memory. docspec-python is a parser for Python packages and modules based on lib2to3 producing docspec API object representations.
Frappucino allows you to make sure you haven't broken your API, by first taking an imprint of your API at one point in time and then compare it to the current project state. The goal is to warn you when incompatible changes have been introduced, and to list these changes.
The work of @tristanlatr is worth checking out, notably his ast-nodes and astuce projects, which aim at providing lower-level Python AST utilities to help implementing API data extraction with powerful inference. Tristan is advocating for more interoperability between Docspec, Griffe and his own projects.
We should also mention our own simplified "Griffe" variants for other programming languages, such as Griffe TypeDoc, which extracts API data from TypeScript sources thanks to TypeDoc, and builds Python objects from it.
The following projects are more than API data extraction tools, but deserve being mentioned.
Sphinx AutoAPI is a new approach to API documentation in Sphinx. It is a Sphinx extension for generating complete API documentation without needing to load, run, or import the project being documented. In contrast to the traditional Sphinx autodoc, which requires manual authoring and uses code imports, AutoAPI finds and generates documentation by parsing source code.
Cancel deprecation of get_logger and patch_loggers (and deprecate patch_logger instead). Extensions need loggers too, distinct ones, and they were forgotten... Sorry for the back and forth 🙇
Attributes setter and deleter on Function are deprecated. They were moved into the Attribute class since properties are instantiated as attributes, not functions.
Extension hooks must accept **kwargs in their signature, to allow forward-compatibility. Accepting **kwargs also makes it possible to remove unused arguments from the signature.
In version 1, Griffe will serialize object members as dictionaries instead of lists. Lists were initially used to preserve source order, but source order can be re-obtained thanks to the line number attributes (lineno, endlineno). Version 0.49 is able to load both lists and dictionaries from JSON dumps, and version 1 will maintain this ability. However external tools loading JSON dumps will need to be updated.
Add temporary_inspected_package helper (3c4ba16 by Timothée Mazzucotelli).
Accept alias resolution related parameters in temporary_visited_package (7d5408a by Timothée Mazzucotelli).
Accept inits parameter in temporary_visited_package (a4859b7 by Timothée Mazzucotelli).
Warn (DEBUG) when an object coming from a sibling, parent or external module instead of the current module or a submodule is exported (listed in __all__) (f82317a by Timothée Mazzucotelli). Issue-249, Related-to-PR-251
Pass down agent to extension hooks (71acb01 by Timothée Mazzucotelli). Issue-312
Add source property to docstrings, which return the docstring lines as written in the source (3f6a71a by Timothée Mazzucotelli). Issue-90
Move setter and deleter to Attribute class instead of Function, since that's how properties are instantiated (309c6e3 by Timothée Mazzucotelli). Issue-311
Reduce risk of recursion errors by excluding imported objects from has_docstrings, unless they're public (9296ca7 by Timothée Mazzucotelli). Issue-302
Fix retrieval of annotations from parent for Yields section in properties (8a21f4d by Timothée Mazzucotelli). Issue-298
Fix parsing Yields section (Google-style) when yielded values are tuples, and the description has more lines than tuple values (9091776 by Timothée Mazzucotelli).
Fix condition on objects kinds when merging stubs (727f99b by Timothée Mazzucotelli).
All submodules are deprecated. All objects are now exposed in the top-level griffe module.
All logger names are deprecated, and will be replaced with "griffe" in v1. In v1 our single "griffe" logger will provide a method to temporarily disable logging, logger.disable(), since that's the most common third-party use.
The get_logger function is deprecated. Instead, we'll use a global logger internally, and users are welcome to use it too.
The patch_loggers function is renamed patch_logger.
Following the logging changes, the docstring_warning function can now directly log a warning message instead of returning a callable that does. Passing it a logger name (to get a callable) is deprecated in favor of passing it a docstring, message and offset directly.
Don't take a shortcut to the end of an alias chain when getting/setting/deleting alias members (1930609 by Timothée Mazzucotelli).
Short-circuit __all__ convention when checking if a module is public (5abf4e3 by Timothée Mazzucotelli).
Reuse existing loggers, preventing overwriting issues (3c2825f by Timothée Mazzucotelli).
Ignore .pth files that are not utf-8 encoded (ea299dc by Andrew Sansom). Issue-300, PR-301
Attributes without annotations cannot be dataclass parameters (c9b2e09 by Hassan Kibirige). PR-297
When deciding to alias an object or not during inspection, consider module paths to be equivalent even with arbitrary private components (8c9f6e6 by Timothée Mazzucotelli). Issue-296
Fix target path computation: use qualified names to maintain classes in the path (6e17def by Timothée Mazzucotelli). Issue-296
The has_private_name and has_special_name properties on objects and aliases have been renamed is_private and is_special. The is_private property now only returns true if the name is not special.
We are working on v1, and it will come soon, so we recommend that you consider adding an upper bound on Griffe. Version 1 will remove all legacy code! There will be a couple more v0 before so that you get all the deprecation warnings needed to upgrade your code using Griffe before upgrading to v1. See breaking changes and deprecations for v0.46 below.
Calling objects' has_labels() method with a labels keyword argument is not supported anymore. The parameter became a variadic positional parameter, so it cannot be used as a keyword argument anymore. Passing a sequence instead of multiple positional arguments still works but will emit a deprecation warning.
Calling the load_extensions() function with an exts keyword argument is not supported anymore. The parameter became a variadic positional parameter, so it cannot be used as a keyword argument anymore. Passing a sequence instead of multiple positional arguments still works but will emit a deprecation warning.
As seen above in the breaking changes section, the only parameters of Object.has_labels() and load_extensions() both became variadic positional parameters. Passing a sequence as single argument is deprecated in favor of passing multiple arguments. This is an ergonomic change: I myself often forgot to wrap extensions in a list. Passing sequences of labels (lists, sets, tuples) is also difficult from Jinja templates.
The following methods and properties on objects and aliases are deprecated: member_is_exported(), is_explicitely_exported, is_implicitely_exported. Use the is_exported property instead. See issue 281.
The is_exported() and is_public() methods became properties. They can still be called like methods, but will emit deprecation warnings when doing so. See issue 281.
The ignore_private parameter of the find_breaking_changes() function is now deprecated and unused. With the reworked "exported" and "public" API, this parameter became useless. See issue 281.
Using stats() instead of Stats will now emit a deprecation warning.
Add properties telling whether an expression name resolves to an enumeration class, instance or value (fdb21d9 by Timothée Mazzucotelli). Issue-mkdocstrings/python#124
Remove get_call_keyword_arguments utility function, as it is implemented with a single line and creates a cyclic dependency with expressions (35cf170 by Timothée Mazzucotelli).
Further prevent cyclic dependency between node utils and expressions (9614c83 by Timothée Mazzucotelli).
Avoid cyclic dependency between node utils and expressions (aedf39c by Timothée Mazzucotelli).
Move arguments node-parsing logic into its own module (used by visitor and lambda expressions) (ad68e65 by Timothée Mazzucotelli).
Use canonical imports (3091660 by Timothée Mazzucotelli).
Use ast.unparse instead of our own unparser (6fe1316 by Timothée Mazzucotelli).
Only return 0 for the line number of removed objects when the location is reworked as relative (3a4d054 by Timothée Mazzucotelli).
De-duplicate search paths in finder as they could lead to the same modules being yielded twice or more when scanning namespace packages (80a158a by Timothée Mazzucotelli).
Fix logic for skipping already encountered modules when scanning namespace packages (21a48d0 by Timothée Mazzucotelli). Issue mkdocstrings#646
The loader load_module method was renamed load, Its module parameter was renamed objspec and is now positional-only. This method always returned the specified object, not just modules, so it made more sense to rename it load and to rename the parameter specifying the object. Old usages (load_module and module=...) will continue to work for some time (a few months, a year, more), and will emit deprecation warnings.
Force extension import path to be a string (coming from MkDocs' !relative tag) (34e21a9 by Timothée Mazzucotelli).
Fix crash when trying to get a decorator callable path (found thanks to pysource-codegen) (e57f08e by Timothée Mazzucotelli).
Fix crash when trying to get docstring after assignment (found thanks to pysource-codegen) (fb0a0c1 by Timothée Mazzucotelli).
Fix type errors in expressions and value extractor, don't pass duplicate arguments (found thanks to pysource-codegen) (7e53288 by Timothée Mazzucotelli).
Use all members (declared and inherited) when checking for breakages, avoid false-positives when a member of a class is moved into a parent class (1c4340b by Timothée Mazzucotelli). Issue #203
Skip early submodules with dots in their path (5e81b8a by Timothée Mazzucotelli). Issue #185
Classes InspectorExtension and VisitorExtension are deprecated in favor of Extension. As a side-effect, the hybrid extension is also deprecated. See how to use and write extensions.
Numpy parser: handle return section items with just type, or no name and no type (bdec37d by Michael Chow). Issue #173, PR #174, Co-authored-by: Timothée Mazzucotelli pawamoy@pm.me
Rework extension system (dea4c83 by Timothée Mazzucotelli).
Parse attribute values, parameter defaults and decorators as expressions (7b653b3 by Timothée Mazzucotelli).
Add loader option to avoid storing source code, reducing memory footprint (d592edf by Timothée Mazzucotelli).
Add extra attribute to objects (707a348 by Timothée Mazzucotelli).
AliasResolutionError instances don't have a target_path attribute anymore. It is instead replaced by an alias attribute which is a reference to an Alias instance.
Lots of positional-or-keyword parameters were changed to keyword-only parameters.
Support newer versions of editables (ab7a3be by Timothée Mazzucotelli): the names of editable modules have changed from __editables_* to _editable_impl_*.
Provide a JSON schema (7dfed39 by Timothée Mazzucotelli).
Allow hybrid extension to filter objects and run multiple inspectors (f8ff53a by Timothée Mazzucotelli).
Allow loading extension from file path (131454e by Timothée Mazzucotelli).
Add back relative_filepath which now really returns the filepath relative to the current working directory (40fe0c5 by Timothée Mazzucotelli).
Parameter only_known_modules was renamed external in the expand_wildcards() method of the loader.
Exception UnhandledEditablesModuleError was renamed UnhandledEditableModuleError since we now support editable installation from other packages than editables.
Properties are now fetched as attributes rather than functions, since that is how they are used. This was asked by users, and since Griffe generates signatures for Python APIs (emphasis on APIs), it makes sense to return data that matches the interface provided to users. Such property objects in Griffe's output will still have the associated property labels of course.
Lots of bug fixes. These bugs were discovered by running Griffe on many major packages as well as the standard library (again). Particularly, alias resolution should be more robust now, and should generate less issues like cyclic aliases, meaning indirect/wildcard imports should be better understood. We still highly discourage the use of wildcard imports
The "Breaking Changes" and "Deprecations" sections are proudly written with the help of our new API breakage detection feature ! Many thanks to Talley Lambert (@tlambert03) for the initial code allowing to compare two Griffe trees.
All parameters of the load_git function, except module, are now keyword-only.
Parameter try_relative_path of the load_git function was removed.
Parameter commit was renamed ref in the load_git function.
Parameter commit was renamed ref in the tmp_worktree helper, which will probably become private later.
Parameters ref and repo switched positions in the tmp_worktree helper.
All parameters of the resolve_aliases method are now keyword-only.
Parameters only_exported and only_known_modules of the resolve_module_aliases method were removed. This method is most probably not used by anyone, and will probably be made private in the future.
Parameters only_exported and only_known_modules of the resolve_aliases method are deprecated in favor of their inverted counter-part implicit and external parameters.
Example before: loader.resolve_aliases(only_exported=True, only_known_modules=True)
Example after: loader.resolve_aliases(implicit=False, external=False)
Add CLI option to disallow inspection (8f71a07 by Timothée Mazzucotelli).
Support complex __all__ assignments (9a2128b by Timothée Mazzucotelli). Issue #40
Inherit class parameters from __init__ method (e195593 by François Rozet). Issue mkdocstrings/python#19, PR #65. It allows to write "Parameters" sections in the docstring of the class itself.
Cancel deprecation of get_logger and patch_loggers (and deprecate patch_logger instead). Extensions need loggers too, distinct ones, and they were forgotten... Sorry for the back and forth 🙇
Attributes setter and deleter on Function are deprecated. They were moved into the Attribute class since properties are instantiated as attributes, not functions.
Extension hooks must accept **kwargs in their signature, to allow forward-compatibility. Accepting **kwargs also makes it possible to remove unused arguments from the signature.
In version 1, Griffe will serialize object members as dictionaries instead of lists. Lists were initially used to preserve source order, but source order can be re-obtained thanks to the line number attributes (lineno, endlineno). Version 0.49 is able to load both lists and dictionaries from JSON dumps, and version 1 will maintain this ability. However external tools loading JSON dumps will need to be updated.
Add temporary_inspected_package helper (3c4ba16 by Timothée Mazzucotelli).
Accept alias resolution related parameters in temporary_visited_package (7d5408a by Timothée Mazzucotelli).
Accept inits parameter in temporary_visited_package (a4859b7 by Timothée Mazzucotelli).
Warn (DEBUG) when an object coming from a sibling, parent or external module instead of the current module or a submodule is exported (listed in __all__) (f82317a by Timothée Mazzucotelli). Issue-249, Related-to-PR-251
Pass down agent to extension hooks (71acb01 by Timothée Mazzucotelli). Issue-312
Add source property to docstrings, which return the docstring lines as written in the source (3f6a71a by Timothée Mazzucotelli). Issue-90
Move setter and deleter to Attribute class instead of Function, since that's how properties are instantiated (309c6e3 by Timothée Mazzucotelli). Issue-311
Reduce risk of recursion errors by excluding imported objects from has_docstrings, unless they're public (9296ca7 by Timothée Mazzucotelli). Issue-302
Fix retrieval of annotations from parent for Yields section in properties (8a21f4d by Timothée Mazzucotelli). Issue-298
Fix parsing Yields section (Google-style) when yielded values are tuples, and the description has more lines than tuple values (9091776 by Timothée Mazzucotelli).
Fix condition on objects kinds when merging stubs (727f99b by Timothée Mazzucotelli).
All submodules are deprecated. All objects are now exposed in the top-level griffe module.
All logger names are deprecated, and will be replaced with "griffe" in v1. In v1 our single "griffe" logger will provide a method to temporarily disable logging, logger.disable(), since that's the most common third-party use.
The get_logger function is deprecated. Instead, we'll use a global logger internally, and users are welcome to use it too.
The patch_loggers function is renamed patch_logger.
Following the logging changes, the docstring_warning function can now directly log a warning message instead of returning a callable that does. Passing it a logger name (to get a callable) is deprecated in favor of passing it a docstring, message and offset directly.
Don't take a shortcut to the end of an alias chain when getting/setting/deleting alias members (1930609 by Timothée Mazzucotelli).
Short-circuit __all__ convention when checking if a module is public (5abf4e3 by Timothée Mazzucotelli).
Reuse existing loggers, preventing overwriting issues (3c2825f by Timothée Mazzucotelli).
Ignore .pth files that are not utf-8 encoded (ea299dc by Andrew Sansom). Issue-300, PR-301
Attributes without annotations cannot be dataclass parameters (c9b2e09 by Hassan Kibirige). PR-297
When deciding to alias an object or not during inspection, consider module paths to be equivalent even with arbitrary private components (8c9f6e6 by Timothée Mazzucotelli). Issue-296
Fix target path computation: use qualified names to maintain classes in the path (6e17def by Timothée Mazzucotelli). Issue-296
The has_private_name and has_special_name properties on objects and aliases have been renamed is_private and is_special. The is_private property now only returns true if the name is not special.
We are working on v1, and it will come soon, so we recommend that you consider adding an upper bound on Griffe. Version 1 will remove all legacy code! There will be a couple more v0 before so that you get all the deprecation warnings needed to upgrade your code using Griffe before upgrading to v1. See breaking changes and deprecations for v0.46 below.
Calling objects' has_labels() method with a labels keyword argument is not supported anymore. The parameter became a variadic positional parameter, so it cannot be used as a keyword argument anymore. Passing a sequence instead of multiple positional arguments still works but will emit a deprecation warning.
Calling the load_extensions() function with an exts keyword argument is not supported anymore. The parameter became a variadic positional parameter, so it cannot be used as a keyword argument anymore. Passing a sequence instead of multiple positional arguments still works but will emit a deprecation warning.
As seen above in the breaking changes section, the only parameters of Object.has_labels() and load_extensions() both became variadic positional parameters. Passing a sequence as single argument is deprecated in favor of passing multiple arguments. This is an ergonomic change: I myself often forgot to wrap extensions in a list. Passing sequences of labels (lists, sets, tuples) is also difficult from Jinja templates.
The following methods and properties on objects and aliases are deprecated: member_is_exported(), is_explicitely_exported, is_implicitely_exported. Use the is_exported property instead. See issue 281.
The is_exported() and is_public() methods became properties. They can still be called like methods, but will emit deprecation warnings when doing so. See issue 281.
The ignore_private parameter of the find_breaking_changes() function is now deprecated and unused. With the reworked "exported" and "public" API, this parameter became useless. See issue 281.
Using stats() instead of Stats will now emit a deprecation warning.
Add properties telling whether an expression name resolves to an enumeration class, instance or value (fdb21d9 by Timothée Mazzucotelli). Issue-mkdocstrings/python#124
Remove get_call_keyword_arguments utility function, as it is implemented with a single line and creates a cyclic dependency with expressions (35cf170 by Timothée Mazzucotelli).
Further prevent cyclic dependency between node utils and expressions (9614c83 by Timothée Mazzucotelli).
Avoid cyclic dependency between node utils and expressions (aedf39c by Timothée Mazzucotelli).
Move arguments node-parsing logic into its own module (used by visitor and lambda expressions) (ad68e65 by Timothée Mazzucotelli).
Use canonical imports (3091660 by Timothée Mazzucotelli).
Use ast.unparse instead of our own unparser (6fe1316 by Timothée Mazzucotelli).
Only return 0 for the line number of removed objects when the location is reworked as relative (3a4d054 by Timothée Mazzucotelli).
De-duplicate search paths in finder as they could lead to the same modules being yielded twice or more when scanning namespace packages (80a158a by Timothée Mazzucotelli).
Fix logic for skipping already encountered modules when scanning namespace packages (21a48d0 by Timothée Mazzucotelli). Issue mkdocstrings#646
The loader load_module method was renamed load, Its module parameter was renamed objspec and is now positional-only. This method always returned the specified object, not just modules, so it made more sense to rename it load and to rename the parameter specifying the object. Old usages (load_module and module=...) will continue to work for some time (a few months, a year, more), and will emit deprecation warnings.
Force extension import path to be a string (coming from MkDocs' !relative tag) (34e21a9 by Timothée Mazzucotelli).
Fix crash when trying to get a decorator callable path (found thanks to pysource-codegen) (e57f08e by Timothée Mazzucotelli).
Fix crash when trying to get docstring after assignment (found thanks to pysource-codegen) (fb0a0c1 by Timothée Mazzucotelli).
Fix type errors in expressions and value extractor, don't pass duplicate arguments (found thanks to pysource-codegen) (7e53288 by Timothée Mazzucotelli).
Use all members (declared and inherited) when checking for breakages, avoid false-positives when a member of a class is moved into a parent class (1c4340b by Timothée Mazzucotelli). Issue #203
Skip early submodules with dots in their path (5e81b8a by Timothée Mazzucotelli). Issue #185
Classes InspectorExtension and VisitorExtension are deprecated in favor of Extension. As a side-effect, the hybrid extension is also deprecated. See how to use and write extensions.
Numpy parser: handle return section items with just type, or no name and no type (bdec37d by Michael Chow). Issue #173, PR #174, Co-authored-by: Timothée Mazzucotelli pawamoy@pm.me
Rework extension system (dea4c83 by Timothée Mazzucotelli).
Parse attribute values, parameter defaults and decorators as expressions (7b653b3 by Timothée Mazzucotelli).
Add loader option to avoid storing source code, reducing memory footprint (d592edf by Timothée Mazzucotelli).
Add extra attribute to objects (707a348 by Timothée Mazzucotelli).
AliasResolutionError instances don't have a target_path attribute anymore. It is instead replaced by an alias attribute which is a reference to an Alias instance.
Lots of positional-or-keyword parameters were changed to keyword-only parameters.
Support newer versions of editables (ab7a3be by Timothée Mazzucotelli): the names of editable modules have changed from __editables_* to _editable_impl_*.
Provide a JSON schema (7dfed39 by Timothée Mazzucotelli).
Allow hybrid extension to filter objects and run multiple inspectors (f8ff53a by Timothée Mazzucotelli).
Allow loading extension from file path (131454e by Timothée Mazzucotelli).
Add back relative_filepath which now really returns the filepath relative to the current working directory (40fe0c5 by Timothée Mazzucotelli).
Parameter only_known_modules was renamed external in the expand_wildcards() method of the loader.
Exception UnhandledEditablesModuleError was renamed UnhandledEditableModuleError since we now support editable installation from other packages than editables.
Properties are now fetched as attributes rather than functions, since that is how they are used. This was asked by users, and since Griffe generates signatures for Python APIs (emphasis on APIs), it makes sense to return data that matches the interface provided to users. Such property objects in Griffe's output will still have the associated property labels of course.
Lots of bug fixes. These bugs were discovered by running Griffe on many major packages as well as the standard library (again). Particularly, alias resolution should be more robust now, and should generate less issues like cyclic aliases, meaning indirect/wildcard imports should be better understood. We still highly discourage the use of wildcard imports
The "Breaking Changes" and "Deprecations" sections are proudly written with the help of our new API breakage detection feature ! Many thanks to Talley Lambert (@tlambert03) for the initial code allowing to compare two Griffe trees.
All parameters of the load_git function, except module, are now keyword-only.
Parameter try_relative_path of the load_git function was removed.
Parameter commit was renamed ref in the load_git function.
Parameter commit was renamed ref in the tmp_worktree helper, which will probably become private later.
Parameters ref and repo switched positions in the tmp_worktree helper.
All parameters of the resolve_aliases method are now keyword-only.
Parameters only_exported and only_known_modules of the resolve_module_aliases method were removed. This method is most probably not used by anyone, and will probably be made private in the future.
Parameters only_exported and only_known_modules of the resolve_aliases method are deprecated in favor of their inverted counter-part implicit and external parameters.
Example before: loader.resolve_aliases(only_exported=True, only_known_modules=True)
Example after: loader.resolve_aliases(implicit=False, external=False)
Add CLI option to disallow inspection (8f71a07 by Timothée Mazzucotelli).
Support complex __all__ assignments (9a2128b by Timothée Mazzucotelli). Issue #40
Inherit class parameters from __init__ method (e195593 by François Rozet). Issue mkdocstrings/python#19, PR #65. It allows to write "Parameters" sections in the docstring of the class itself.
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at dev@pawamoy.fr. All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the reporter of any incident.
Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
Community Impact: A violation through a single incident or series of actions.
Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
Community Impact: A serious violation of community standards, including sustained inappropriate behavior.
Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
Consequence: A permanent ban from any sort of public interaction within the community.
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at dev@pawamoy.fr. All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the reporter of any incident.
Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
Community Impact: A violation through a single incident or series of actions.
Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
Community Impact: A serious violation of community standards, including sustained inappropriate behavior.
Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
Consequence: A permanent ban from any sort of public interaction within the community.
Griffe is part of is the mkdocstrings ecosystem, and therefore part of the MkDocs ecosystem too. These two ecosystems have wonderful communities and we invite you to join them Make sure to read and follow our code of conduct when engaging with the community.
You can start new discussions on GitHub, in the following repositories, depending on the specificity of the discussion: griffe, mkdocstrings-python, mkdocstrings, and MkDocs.
More generally, Griffe is also related to API documentation and API analysis (static or dynamic): if your project is related to these two domains, but in different ecosystems (other programming languages, static site generators, or environments), feel free to drop us a message! We are always happy to share with other actors in these domains
Griffe is part of is the mkdocstrings ecosystem, and therefore part of the MkDocs ecosystem too. These two ecosystems have wonderful communities and we invite you to join them Make sure to read and follow our code of conduct when engaging with the community.
You can start new discussions on GitHub, in the following repositories, depending on the specificity of the discussion: griffe, mkdocstrings-python, mkdocstrings, and MkDocs.
More generally, Griffe is also related to API documentation and API analysis (static or dynamic): if your project is related to these two domains, but in different ecosystems (other programming languages, static site generators, or environments), feel free to drop us a message! We are always happy to share with other actors in these domains
Contributions are welcome, and they are greatly appreciated! Every little bit helps, and credit will always be given.
There are multiple ways to contribute to this project:
with feature requests: we are always happy to receive feedback and new ideas! If you have any, you can create new feature requests on our issue tracker. Make sure to search issues first, to avoid creating duplicate requests.
with bug reports: only you (the users) can help us find and fix bugs! We greatly appreciate if you can give us a bit of your time to create a proper bug report on our issue tracker. Same as for feature requests, make sure the bug is not already reported, by searching through issues first.
with user support: watch activity on the Github repository and our Gitter channel to answer issues and discussions created by users. Answering questions from users can take a lot of time off maintenance and new features: helping us with user support means more time for us to work on the project.
with documentation: spotted a mistake in the documentation? Found a paragraph unclear or a section missing? Reporting those already helps a lot, and if you can, sending pull requests is even better.
with code: if you are interested in a feature request, or are experiencing a reported bug, you can contribute a feature or a fix. You can simply drop a comment in the relevant issue, and we will do our best to guide you.
For easy documentation fixes, you can edit a file and send a pull request directly from the GitHub web interface. For more complex fixes or improvements, please read our contributor guide. The guide will show you how to setup a development environment to run tests or serve the documentation locally.
Contributions are welcome, and they are greatly appreciated! Every little bit helps, and credit will always be given.
There are multiple ways to contribute to this project:
with feature requests: we are always happy to receive feedback and new ideas! If you have any, you can create new feature requests on our issue tracker. Make sure to search issues first, to avoid creating duplicate requests.
with bug reports: only you (the users) can help us find and fix bugs! We greatly appreciate if you can give us a bit of your time to create a proper bug report on our issue tracker. Same as for feature requests, make sure the bug is not already reported, by searching through issues first.
with user support: watch activity on the Github repository and our Gitter channel to answer issues and discussions created by users. Answering questions from users can take a lot of time off maintenance and new features: helping us with user support means more time for us to work on the project.
with documentation: spotted a mistake in the documentation? Found a paragraph unclear or a section missing? Reporting those already helps a lot, and if you can, sending pull requests is even better.
with code: if you are interested in a feature request, or are experiencing a reported bug, you can contribute a feature or a fix. You can simply drop a comment in the relevant issue, and we will do our best to guide you.
For easy documentation fixes, you can edit a file and send a pull request directly from the GitHub web interface. For more complex fixes or improvements, please read our contributor guide. The guide will show you how to setup a development environment to run tests or serve the documentation locally.
An MkDocs plugin to create a list of contributors on the page. The git-committers plugin will seed the template context with a list of GitHub or GitLab committers and other useful GIT info such as last modified date
An MkDocs plugin to create a list of contributors on the page. The git-committers plugin will seed the template context with a list of GitHub or GitLab committers and other useful GIT info such as last modified date
griffe2md outputs API docs in Markdown. It uses Griffe to load the data, and then use Jinja templates to render documentation in Markdown, just like mkdocstrings-python, but in Markdown instead of HTML.
quartodoc lets you quickly generate Python package API reference documentation using Markdown and Quarto. quartodoc is designed as an alternative to Sphinx. It uses Griffe to load API data and parse docstrings in order to render HTML documentation, just like mkdocstrings-python, but for Quarto instead of Mkdocs.
Pydanclick allows to use Pydantic models as Click options. It uses Griffe to parse docstrings and find Attributes sections, to help itself build Click options.
rafe is a tool for inspecting python environments and building packages (irrespective of language) in a reproducible manner. It wraps Griffe to provide a CLI command to check for API breaking changes.
Yapper converts Python docstrings to astro files for use by the Astro static site generator. It uses Griffe to parse Python modules and extracts Numpydoc-style docstrings.
griffe2md outputs API docs in Markdown. It uses Griffe to load the data, and then use Jinja templates to render documentation in Markdown, just like mkdocstrings-python, but in Markdown instead of HTML.
quartodoc lets you quickly generate Python package API reference documentation using Markdown and Quarto. quartodoc is designed as an alternative to Sphinx. It uses Griffe to load API data and parse docstrings in order to render HTML documentation, just like mkdocstrings-python, but for Quarto instead of Mkdocs.
Pydanclick allows to use Pydantic models as Click options. It uses Griffe to parse docstrings and find Attributes sections, to help itself build Click options.
rafe is a tool for inspecting python environments and building packages (irrespective of language) in a reproducible manner. It wraps Griffe to provide a CLI command to check for API breaking changes.
Yapper converts Python docstrings to astro files for use by the Astro static site generator. It uses Griffe to parse Python modules and extracts Numpydoc-style docstrings.
The dataclasses extension adds support for dataclasses from the standard library. It works both statically and dynamically. When used statically, it re-creates the __init__ methods and their signatures (as Griffe objects), that would otherwise be created at runtime. When used dynamically, it does nothing since __init__ methods are created by the library and can be inspected normally.
The dataclasses extension adds support for dataclasses from the standard library. It works both statically and dynamically. When used statically, it re-creates the __init__ methods and their signatures (as Griffe objects), that would otherwise be created at runtime. When used dynamically, it does nothing since __init__ methods are created by the library and can be inspected normally.
Built-in extensions are maintained in Griffe's code base. They generally bring support for core features of the Python language or its standard library.
Built-in extensions are maintained in Griffe's code base. They generally bring support for core features of the Python language or its standard library.
This extension sets the docstring parser to auto for all the docstrings of external packages. Packages are considered "external" when their sources are found in a virtual environment instead of a folder under the current working directory. Setting their docstring style to auto is useful if you plan on rendering the docstring of these objects in your own documentation.
This extension sets the docstring parser to auto for all the docstrings of external packages. Packages are considered "external" when their sources are found in a virtual environment instead of a folder under the current working directory. Setting their docstring style to auto is useful if you plan on rendering the docstring of these objects in your own documentation.
Official extensions are developed and maintained within the mkdocstrings organization on GitHub, in separated repositories. They generally bring support for various third-party libraries or other documentation-related features that are part of Python's standard library.
Official extensions are developed and maintained within the mkdocstrings organization on GitHub, in separated repositories. They generally bring support for various third-party libraries or other documentation-related features that are part of Python's standard library.
This extension, when enabled, iterates on the declared members of all classes found within a package, and if they don't have a docstring, but have a parent member with a docstring, sets their docstring to this parent docstring.
This extension, when enabled, iterates on the declared members of all classes found within a package, and if they don't have a docstring, but have a parent member with a docstring, sets their docstring to this parent docstring.
\ No newline at end of file
diff --git a/extensions/official/public-redundant-aliases/index.html b/extensions/official/public-redundant-aliases/index.html
new file mode 100644
index 00000000..8a2240c4
--- /dev/null
+++ b/extensions/official/public-redundant-aliases/index.html
@@ -0,0 +1,35 @@
+ public-redundant-aliases - Griffe
This extension marks every objects that was imported with a redundant alias as public. See our documentation on the redundant aliases convention.
Feedback
\ No newline at end of file
diff --git a/extensions/official/public-wildcard-imports/index.html b/extensions/official/public-wildcard-imports/index.html
new file mode 100644
index 00000000..e8b3f7f4
--- /dev/null
+++ b/extensions/official/public-wildcard-imports/index.html
@@ -0,0 +1,35 @@
+ public-wildcard-imports - Griffe
This extension adds support for Pydantic models. It extracts useful information from them, stores this information into the extra attribute of objects, and binds custom mkdocstrings templates to the objects for better rendering. The extension works both statically and dynamically, and supports model inheritance.
This extension adds support for Pydantic models. It extracts useful information from them, stores this information into the extra attribute of objects, and binds custom mkdocstrings templates to the objects for better rendering. The extension works both statically and dynamically, and supports model inheritance.