A static analysis tool for diffing public Python APIs.
Project description
Difflog
Automated Changelog Generation via API Diffing for Python Projects
Difflog simplifies the task of generating changelogs by using static analysis to detect API-level changes in Python scripts. It outputs a concise Markdown changelog, ideal for release notes or CI/CD workflows.
Example integration: See .github/workflows/changes.yml
Installation
Install Difflog via pip:
pip install difflog
Detecting API Changes Between Files
Given two versions of a Python script:
main1.py
def main():
print("Hello, world!")
if __name__ == "__main__":
main()
main2.py
def main(name: str):
print("Hello, world! My name is", name)
if __name__ == "__main__":
main("John")
print("Goodbye, world!")
Run the following command to detect API differences:
python -m difflog main1.py main2.py
Example output:
[main] Added positional or keyword argument `name`
For more examples, see tests/test_api_diffing.py
Generating a Markdown Changelog from Git
If you're working in a Git repository, you can generate a changelog based on file-level API changes between commits:
difflog.git_report > CHANGES.md
This will:
- Analyze code changes since the last Git push
- Output a changelog in GitHub's Markdown format to
CHANGES.md
You can also specify a revision range:
difflog.git_report --from-rev v1.0.0 --to-rev HEAD > CHANGES.md
Programmatic API Usage
Use Difflog as a Python module for custom workflows, e.g., filtering changes, customizing output formats, etc.
import difflog
with open("old_file.py") as f:
old_code = f.read()
with open("new_file.py") as f:
new_code = f.read()
for change in difflog.diff(old_code, new_code):
print(change)
Contributing
Contributions are welcome! To contribute:
- Fork the repository
- Create a new branch
- Submit a pull request
See existing issues or open a new one to discuss your ideas.
License
Licensed under the Apache License 2.0. See LICENSE for details.
Acknowledgments
Difflog leverages the excellent DeepDiff library for structural diffing.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file difflog-0.0.2.tar.gz.
File metadata
- Download URL: difflog-0.0.2.tar.gz
- Upload date:
- Size: 13.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1fbb7940807c256640bd833f4be82f276cb87aeff74baa8ab1093e18b1eb5d01
|
|
| MD5 |
643d3c6b208512f90f46d0f1f17d7308
|
|
| BLAKE2b-256 |
f7507ec6d520b2529744e61639fb26280d62dc440c0dfcba0615a90f60a7b95a
|
File details
Details for the file difflog-0.0.2-py3-none-any.whl.
File metadata
- Download URL: difflog-0.0.2-py3-none-any.whl
- Upload date:
- Size: 12.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
52d559472676696d5d544f4dce3c5caedf80a4e73a10391cd8f137d917369545
|
|
| MD5 |
0e787352b2ca661245d8a4d73ddee2a3
|
|
| BLAKE2b-256 |
ab02025e3d522b2e501e8eb367779eda88cd29627edc30c03f34e5f5c3a42880
|