A simple curseforge api wrapper
Project description
curse-api
A simple async python Curseforge api wrapper using pydantic
Built to serve CF endpoints while providing methods and functions to assist in finding the right mod.
Some backstory
A while back when I was starting to learn python further then the basics I created a small tool to download Minecraft mods from a pack manifest. Soon after I wrote it the new API changes came and broke it. Now once more I want to return to that project idea and expand further. After first rewriting the project using chili it felt off, so returned to rewrite once more using pydantic for data validation and ease of access
Features
Main Dependencies:
Currently implemented:
- Important endpoint support
- Full CurseForge model
- Mediocre error handling
- Shortcuts to download mods
- Pluggable API factory
- Serialization and deserialization of models
- Python 3.8 & 3.9 support
- Async
To Do:
- Fix to be usable with pydantic based ORM's
- Address all TODO's
- Fully expose needed httpx args
- Write more download handling code
- Test other games too
- Write docs
- Update and fix error handling
CI/CD:
- Type checking
- Version testing
- Tests
Examples
Quick start
Requires an api from CF to use the API. You can get one here. This example runs through most of the basics
from curse_api import CurseAPI
import asyncio
async def main():
async with CurseAPI(APIKEY) as api:
"Mods"
a = await api.search_mods(searchFilter="JEI", slug="jei")
# applies the search filters to the standard of CF docs
mod = await api.get_mod(250398) # returns a singular Mod
mod_list = await api.get_mods([285109, 238222]) # returns a list of Mods
"files"
"See examples/download.py"
# TODO finish file support
files = await api.get_files([3940240]) # returns a list of Files matching their id
mod_files = await api.get_mod_files(238222) # returns all the Files of on a give Mod
"Version details - large data"
"See examples/modloader.py"
mc = await api.minecraft_versions() # returns all of minecraft version data
ml = await api.modloader_versions() # returns **ALL** modloader versions on curseforge
mc_112 = await api.get_specific_minecraft_version("1.12.2") # returns minecraft version related information
forge = await api.get_specific_minecraft_modloader("forge-36.2.39") # returns forge related version information
if __name__ == "__main__":
# Since this is an async wrapper we use asyncio to run our function
asyncio.run(main())
Downloading to a file
This example opens a properly named file in the current working directory and writes to it.
from curse_api import CurseAPI
import asyncio
async def main():
async with CurseAPI(APIKEY) as api:
mod_l, page_data = await api.search_mods(slug="jei")
latest = mod_l[0].latestFiles[0]
with open(latest.fileName, "wb") as f:
f.write(latest.download())
if __name__ == "__main__":
asyncio.run(main())
Sub project / extension ideas:
- Modloader download and installation
- Minecraft Version type / parser
- MC pack installation
- DB cache extension
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 curse_api-1.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0bfa1c36a7835e26b0b97d94adeb9be15efb6f1337ef12d631f97be33c595ad6 |
|
MD5 | bf0436ffda698e28b0f6f9c0b8fb7cb4 |
|
BLAKE2b-256 | 9422e8fa892eddd8d404e3fc3303b1f95f00783c15256228725b108b33442cb8 |