Giter Site home page Giter Site logo

michaelistrofficus / gpt4docstrings Goto Github PK

View Code? Open in Web Editor NEW
103.0 5.0 8.0 1.38 MB

Generating Python docstrings with OpenAI ChatGPT!!

Home Page: https://gpt4docstrings.readthedocs.io

License: MIT License

Python 100.00%
ai chatgpt code-quality docstrings precommit-hooks python

gpt4docstrings's Introduction

gpt4docstrings logo

gpt4docstrings

Generating Python docstrings with OpenAI ChatGPT!!


PyPI Status Python Version License

Read the documentation at https://gpt4docstrings.readthedocs.io/ Tests Codecov

pre-commit Black

What is gpt4docstrings?

gpt4docstrings is a library that helps you to write docstrings for your Python code. Select a path / paths where you want gpt4docstrings to be applied and wait for the results!!

Requirements

gpt4docstrings supports Python 3.9 and above.

Installation

Warning: At the moment, this library is under heavy development, so it is recommended to always install the latest version.

You can install gpt4docstrings via pip from PyPI:

$ pip install -U gpt4docstrings

Usage

To run gpt4docstrings on a specific file, run this command.

gpt4docstrings my_file.py

Remember that, if you don't have your OpenAI API Key defined as an Environment Variable (OPENAI_API_KEY), gpt4docstrings can accept the API Key as an option.

gpt4docstrings --api_key sk-xxxxxxxxxxxx my_file.py

Be aware that, as a safety measure , gpt4docstrings won't overwrite the file in place. Instead, it will generate a patch called gpt4docstring_docstring_generator_patch.diff that contains the information about all the changes.

If you want to apply the patch to the file, simply run:

patch -p1 < gpt4docstring_docstring_generator_patch.diff

In case you don't want to generate a patch file and modify the files in place, you'll need to add the --overwrite, -w option:

gpt4docstrings -w my_file.py

You can also apply gpt4docstrings to folders recursively.

gpt4docstrings src/

Another quite common situation is that you may want to exclude the tests/ folder, for example, from the generation of docstrings. Doing this is very simple.

gpt4docstrings --exclude tests/ src/

By default, gpt4docstrings generates google style docstrings. However, you can choose between: google, numpy, epytext, reStructuredText.

You can specify the docstring style using the -st option. For example:

gpt4docstrings -st epytext my_file.py

For more information about all the available options, you can check the help info:

Usage: gpt4docstrings [OPTIONS] [PATHS]...

Options:
  -h, --help                      Show this message and exit.
  -S, --ignore-setters            Ignore methods with property setter
                                  decorators.
  -P, --ignore-property-decorators
                                  Ignore methods with property setter/getter
                                  decorators.
  -n, --ignore-nested-functions   Ignore nested functions and methods.
  -C, --ignore-nested-classes     Ignore nested classes.
  -i, --ignore-init-method        Ignore `__init__` method of classes.
  -s, --ignore-semiprivate        Ignore semiprivate classes, methods, and
                                  functions starting with a single underscore.
  -p, --ignore-private            Ignore private classes, methods, and
                                  functions starting with two underscores.
                                  [default: False]
  -w, --overwrite                 If `True`, it will directly write the
                                  docstrings into the files (it will not
                                  generate git patches)
  -v, --verbose INTEGER           Verbosity parameter. Defaults to 0.
  -e, --exclude PATH              Exclude PATHs of files and/or directories.
                                  Multiple `-e/--exclude` invocations
                                  supported.
  -k, --api_key TEXT              OpenAI's API key. If not provided,
                                  `gpt4docstrings` will try to access
                                  `OPENAI_API_KEY` environment variable.
  -st, --style TEXT               Docstring style, which must be one of
                                  'google', 'reStructuredText', 'epytext',
                                  'numpy'
  -m, --model TEXT                The model to be used by `gpt4docstrings`. By
                                  default, `gpt-3.5-turbo`.

I also encourage you to see the Command-line Reference for more details!!

Example

Here is a full example using gpt4docstring to generate docstrings for the python code inside example/example.py.

import asyncio


async def async_example():
    await asyncio.sleep(2)


class MyClass:

    def __init__(self, value):
        self.value = value

    @staticmethod
    def nested_method():
        def inner_function():
            print("Nested method inner function")
        print("Nested method start")
        inner_function()
        print("Nested method completed")

We'll create numpy docstrings in this case and will generate a patch file (default) instead of directly overwriting the file directly. We'll also increase the level of verbosity to see some additional information.

Warning: We are assuming you already have the OpenAI API Key set as an Environment Variable. Otherwise, this example won't work.

gpt4docstrings example/example.py -v 1 -st numpy

gpt4docstring-command-run.gif

After it finishes documenting, we should see a new patch file on our directory called gpt4docstring_docstring_generator_patch.diff.

To apply the patch, simply run:

patch -p1 < gpt4docstring_docstring_generator_patch.diff

The result should be similar to the following (gpt-3.5-turbo temperature is set to 1, so you should expect different results every time you run the command)

import asyncio


async def async_example():
    """
    An asynchronous example function.

    This function asynchronously sleeps for 2 seconds.

    Returns
    -------
    None
        This function does not return any value.
    """
    await asyncio.sleep(2)


class MyClass:
    """
    A class representing MyClass.

    Parameters
    ----------
    value : any
        The initial value for MyClass.

    Methods
    -------
    nested_method : static method
        A nested static method within MyClass.
    """
    def __init__(self, value):
        """
        Initialize a new instance of the class.

        Parameters
        ----------
        value : any
            The initial value for the instance.

        Returns
        -------
        None

        Raises
        ------
        None
        """
        self.value = value

    @staticmethod
    def nested_method():
        """
        This static method demonstrates a nested method.

        Raises
        ------
        None

        Returns
        -------
        None
        """
        def inner_function():
            """
            Inner function.

            This function performs a nested method inner function.

            Parameters
            ----------
            None

            Returns
            -------
            None
            """
            print("Nested method inner function")

        print("Nested method start")
        inner_function()
        print("Nested method completed")

Suppose now that we want to modify the docstring type. For example, suppose we want to use epytext style. That's very easy with gpt4docstrings, we just need to run the same command changing the docstring style.

Be aware that, by default, gpt4docstrings will allways generate docstrings for undocumented functions / classes and also translate the existing ones to follow the provided style. If you just want to generate docstrings (no translation), simply set the -t flag to False.

gpt4docstrings example/example.py -st epytext

If we apply the patch, we'll get the previous code with the docstrings translated:

import asyncio


async def async_example():
    """
    An asynchronous example function.

    This function asynchronously sleeps for 2 seconds.

    @rtype: None
    @return: This function does not return any value.
    """
    await asyncio.sleep(2)


class MyClass:
    """
    A class representing MyClass.

    @type value: any
    @ivar value: The initial value for MyClass.

    @type nested_method: static method
    @ivar nested_method: A nested static method within MyClass.
    """
    def __init__(self, value):
        """
        Initialize a new instance of the class.

        @param value: The initial value for the instance.
        @type value: any

        @return: None

        @raise None
        """
        self.value = value

    @staticmethod
    def nested_method():
        """
        This static method demonstrates a nested method.

        @rtype: None
        @return: None

        @raise: None
        """
        def inner_function():
            """
            Inner function.

            This function performs a nested method inner function.

            @rtype: None
            """
            print("Nested method inner function")

        print("Nested method start")
        inner_function()
        print("Nested method completed")

Contributing

Contributions are very welcome. To learn more, see the Contributor Guide.

License

Distributed under the terms of the MIT license, gpt4docstrings is free and open source software.

Issues

If you encounter any problems, please file an issue along with a detailed description.

Credits

This project was generated from @cjolowicz's Hypermodern Python Cookiecutter template.

gpt4docstrings's People

Contributors

dependabot[bot] avatar michaelistrofficus avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

gpt4docstrings's Issues

希望取得联系

尊敬的gpt4docstrings 应用开发者,我是 InternLM 社区开发者&志愿者尖米, 大佬开源的工作对我的启发很大,希望可以探讨使用 InternLM 实现gpt4docstrings 的可能性和实现路径,我的微信是mzm312,希望可以取得联系进行更深度的交流

Incorrect newline added

def setup_logging(level):
	"""
    Setup logging.

    Args:
        level (int): logging level.

    Returns:
        logging.Logger: logger.
    """
	logger = logging.getLogger('secator')
	logger.setLevel(level)
	ch = logging.StreamHandler()
	ch.setLevel(level)
	formatter = logging.Formatter('%(message)s')
	ch.setFormatter(formatter)
	logger.addHandler(ch)
	return logger

The first line of the docstring should be:
"""Setup logging."""

to comply with google pep style for docstrings (https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html).

merge existing docstring with new generated docstring

Thanks for great library

Instead of replacing existin docstring, please do this:

docnew =.doc_gpt4 + "\n" + doc_existing

So, user can decide after to keep his own docstring info.
We often put valuable infos in docstring: code sample.

RateLimitError: You exceeded your current quota

I'm getting this error with a brand new API key that shows as "never used":

Captura de pantalla de 2024-02-24 11 32 44

I also got this same error with the previous key and I had not used it ever.

Retrying langchain.chat_models.openai.acompletion_with_retry.<locals>._completion_with_retry in 4.0 seconds as it raised RateLimitError: You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: https://platform.openai.com/docs/guides/error-codes/api-errors..

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.