How to use ChatGPT to create automations in Python using Click and Trogon
How to use ChatGPT to create automations in Python using Click and Trogon
Evergreen
Created: 2023-06-30 Updated: 2023-06-30
python click trogon automation command line interface
I've been using ChatGPT to create automations in Python using the Click and Trogon. For example, I might say:
"I would like a Python Click script that combines all of the files in a target directory into a single file."
When I ask ChatGPT exactly this, I get:
@click.command() @click.argument('directory', type=click.Path(exists=True)) @click.argument('output_file', type=click.Path()) def combine_files(directory, output_file):
Get a list of all files in the target directory
file_list = os.listdir(directory)
Sort the files alphabetically to ensure consistent order
file_list.sort()
Open the output file in write mode
with open(output_file, 'w') as output:
Iterate over each file in the directory
for filename in file_list:
Construct the full file path
file_path = os.path.join(directory, filename)
Check if the current item is a file (not a subdirectory)
if os.path.isfile(file_path):
Read the contents of the file
with open(file_path, 'r') as file: file_contents = file.read()
Write the contents to the output file
output.write(file_contents)
click.echo(f"All files in '{directory}' have been combined into '{output_file}'.")
if name == 'main': combine_files()
Then I copy the output from ChatGPT into a script that have called automations.py where I'm beginning to grow a collection of these little automations. In automations.py I have a Click group that looks like:
@tui() @click.group() def automation(): pass
The @tui
decorator comes from the Trogon library that analyzes the Click decorators to build a Terminal User Interface. Click is a Python library used for creating CLI's (Command Line Interfaces) and Trogon is built by the folks at Textualize and uses their Textual library to build the TUI.
Now I have to change the decorator @click.command()
to @automation.command()
so that the Python function is nested under my automation group. I've also changed:
if name == 'main': automation()
The final output of the script looks like:
import os import click
from trogon import tui
@tui() @click.group() def automation(): pass
@automation.command() @click.argument('directory', type=click.Path(exists=True)) @click.argument('output_file', type=click.Path()) def combine_files(directory, output_file):
Get a list of all files in the target directory
file_list = os.listdir(directory)
Sort the files alphabetically to ensure consistent order
file_list.sort()
Open the output file in write mode
with open(output_file, 'w') as output:
Iterate over each file in the directory
for filename in file_list:
Construct the full file path
file_path = os.path.join(directory, filename)
Check if the current item is a file (not a subdirectory)
if os.path.isfile(file_path):
Read the contents of the file
with open(file_path, 'r') as file: file_contents = file.read()
Write the contents to the output file
output.write(file_contents)
click.echo(f"All files in '{directory}' have been combined into '{output_file}'.")
if name == 'main': automation()
Now I can run: python3 [automations.py](http://automations.py/) tui
You can also use the help flag:
python3 automations.py --help Usage: automations.py [OPTIONS] COMMAND [ARGS]...
Options: --help Show this message and exit.
Commands: combine-files tui Open Textual TUI.
To make things easier for myself, I added the following couple of lines to my .zshrc file:
export PATH="/path/to/automations.py:$PATH" alias automations="automations.py"
Now I can run automations tui
from anywhere.
Subscribe to my newsletter
Read articles from Joshua Oliphant directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by