generate docstrings
Project description
Lockhart
Table of Contents
Installation
pip install lockhart
## or with pipx
pipx install lockhart
Instructions
You will need an openai key, you can obtain one from their
website. Once you have it then set
your OPENAI_API_KEY
environment variable.
export OPENAI_API_KEY='sk-***'
Lockhart it currently very crude, it works out of the clipboard. Copy a
function to your clipboard, run lockhart docstring
then paste the docstring
in.
# copy a function
lockhart docstring
# paste in your docstring
yes it just uses the clipboard for now.
Docstring Examples
def add(a, b):
"""
Add two numbers together.
Args:
a (int): The first number to add.
b (int): The second number to add.
Returns:
int: The sum of the two numbers.
Example:
add(2, 3) -> 5
"""
return a + b
Without even type hinting the arguments lockhart
can see that this function is using pandas.
def get_summary_data(df):
"""
This function takes a dataframe as an argument and returns a summary of the data grouped by column A.
Args:
df (DataFrame): The dataframe to be summarized.
Returns:
DataFrame: A summary of the data grouped by column A, containing the sum of columns C and D.
Example:
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9], 'D': [10, 11, 12]})
get_summary_data(df)
"""
df.groupby("A")[["C", "D"]].sum()
Here is an example from the fastapi docs. It writes a correct docstring to describe the function, but misses out that its a fastapi route without more context than just the function.
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
"""
Update an item in the database.
This function takes an item_id and an item object as parameters and updates the item in the database.
Args:
item_id (int): The id of the item to be updated.
item (Item): The item object to be updated.
Returns:
dict: A dictionary containing the item_id and the updated item.
Example:
results = update_item(1, {'name': 'Foo', 'price': 10.99})
"""
results = {"item_id": item_id, "item": item}
return results
Examples Refactor
def add(a, b):
return a + b
# refactor the following code to compute the ratio of the two numbers
def ratio(a, b):
return a / b
# Before
def get_summary_data(df):
df.groupby("A")[["C", "D"]].sum()
# refactor the following code to also return the averages
# After
def get_summary_data(df):
df.groupby("A")[["C", "D"]].agg(["sum", "mean"])
Run lockhart refactor
, then set the prompt to refactor the following code to accept a parameter item_name
. It did a great job at adding it to the
arguments list, type hinting it to a string, but again missed that this is a
fastapi route and we wanted to also update the decorator.
``` python
# before
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
results = {"item_id": item_id, "item": item}
return results
# refactor the following code to accept a parameter item_name
# after
@app.put("/items/{item_id}")
def update_item(item_id: int, item_name: str, item: Item):
results = {"item_id": item_id, "item_name": item_name, "item": item}
return results
License
lockhart
is distributed under the terms of the
MIT license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for lockhart-0.4.0.dev3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a414fbbe42e22b8ea12ea38d9d4b020067f9a7750982d105cce6607bf3c1fe9b |
|
MD5 | 2a21ae40f2bb9c0adbe618777cb8a6cd |
|
BLAKE2b-256 | 21ea3c5e1ceba91d1a84f7da6d7e25b95697683ed86d4b6fc49aa062541920a6 |