diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 78a4c53..cfbc581 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,7 +33,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.10", "3.11", "3.12"] + python-version: ["3.10", "3.11", "3.12"] # 3.13, 3.14 are not supported by some dependencies yet steps: - uses: actions/checkout@v6.0.2 diff --git a/README.md b/README.md index 3d31da0..eb16129 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ [![PyPI version](https://img.shields.io/pypi/v/pyfragment?style=flat&color=blue)](https://pypi.org/project/pyfragment/) [![PyPI downloads](https://img.shields.io/pypi/dm/pyfragment?style=flat&color=brightgreen)](https://pypi.org/project/pyfragment/) -[![Python](https://img.shields.io/badge/Python-3.12+-3776AB?style=flat&logo=python&logoColor=white)](https://python.org) +[![Python](https://img.shields.io/badge/Python-3.10+-3776AB?style=flat&logo=python&logoColor=white)](https://python.org) [![License](https://img.shields.io/github/license/bohd4nx/pyfragment?style=flat&color=lightgrey)](LICENSE) [![Stars](https://img.shields.io/github/stars/bohd4nx/pyfragment?style=flat&color=yellow)](https://github.com/bohd4nx/pyfragment/stargazers) [![CI](https://img.shields.io/github/actions/workflow/status/bohd4nx/pyfragment/ci.yml?style=flat&label=tests&logo=github)](https://github.com/bohd4nx/pyfragment/actions) @@ -34,7 +34,7 @@ To install the latest unreleased changes from the `dev` branch: pip install git+https://github.com/bohd4nx/pyfragment.git@dev ``` -Requires Python 3.12+. +Requires Python 3.10+. --- diff --git a/pyfragment/client.py b/pyfragment/client.py index 64433cf..a085c09 100644 --- a/pyfragment/client.py +++ b/pyfragment/client.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import json from typing import Any, cast diff --git a/pyfragment/methods/anonymous_number.py b/pyfragment/methods/anonymous_number.py index 5d1786a..590a8e9 100644 --- a/pyfragment/methods/anonymous_number.py +++ b/pyfragment/methods/anonymous_number.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import html from typing import TYPE_CHECKING diff --git a/pyfragment/methods/giveaway_premium.py b/pyfragment/methods/giveaway_premium.py index 681dab6..4a6d9b4 100644 --- a/pyfragment/methods/giveaway_premium.py +++ b/pyfragment/methods/giveaway_premium.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import json from typing import TYPE_CHECKING diff --git a/pyfragment/methods/giveaway_stars.py b/pyfragment/methods/giveaway_stars.py index 0c802c4..0788bb5 100644 --- a/pyfragment/methods/giveaway_stars.py +++ b/pyfragment/methods/giveaway_stars.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import json from typing import TYPE_CHECKING diff --git a/pyfragment/methods/purchase_premium.py b/pyfragment/methods/purchase_premium.py index 5b81ae4..3130205 100644 --- a/pyfragment/methods/purchase_premium.py +++ b/pyfragment/methods/purchase_premium.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import json import time from typing import TYPE_CHECKING diff --git a/pyfragment/methods/purchase_stars.py b/pyfragment/methods/purchase_stars.py index be71352..cbf3db0 100644 --- a/pyfragment/methods/purchase_stars.py +++ b/pyfragment/methods/purchase_stars.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import json from typing import TYPE_CHECKING diff --git a/pyfragment/methods/recharge_ads.py b/pyfragment/methods/recharge_ads.py index 8522bc8..ffe1fcf 100644 --- a/pyfragment/methods/recharge_ads.py +++ b/pyfragment/methods/recharge_ads.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import json from typing import TYPE_CHECKING diff --git a/pyfragment/methods/search_gifts.py b/pyfragment/methods/search_gifts.py index f86108a..2623ee7 100644 --- a/pyfragment/methods/search_gifts.py +++ b/pyfragment/methods/search_gifts.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from typing import TYPE_CHECKING, Any from pyfragment.types import FragmentAPIError, FragmentError, GiftsResult, UnexpectedError diff --git a/pyfragment/methods/search_numbers.py b/pyfragment/methods/search_numbers.py index 5969ac6..83442bb 100644 --- a/pyfragment/methods/search_numbers.py +++ b/pyfragment/methods/search_numbers.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from typing import TYPE_CHECKING, Any from pyfragment.types import FragmentAPIError, FragmentError, NumbersResult, UnexpectedError diff --git a/pyfragment/methods/search_usernames.py b/pyfragment/methods/search_usernames.py index 6abdfed..3218ed5 100644 --- a/pyfragment/methods/search_usernames.py +++ b/pyfragment/methods/search_usernames.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from typing import TYPE_CHECKING, Any from pyfragment.types import FragmentAPIError, FragmentError, UnexpectedError, UsernamesResult diff --git a/pyfragment/methods/topup_ton.py b/pyfragment/methods/topup_ton.py index f19e342..0967ee8 100644 --- a/pyfragment/methods/topup_ton.py +++ b/pyfragment/methods/topup_ton.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import json from typing import TYPE_CHECKING diff --git a/pyfragment/types/constants.py b/pyfragment/types/constants.py index fa7cb76..d552234 100644 --- a/pyfragment/types/constants.py +++ b/pyfragment/types/constants.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import json from typing import Any, Literal, get_args diff --git a/pyfragment/types/exceptions.py b/pyfragment/types/exceptions.py index 3027d74..f2db392 100644 --- a/pyfragment/types/exceptions.py +++ b/pyfragment/types/exceptions.py @@ -1,3 +1,6 @@ +from __future__ import annotations + + class FragmentError(Exception): """Base exception for all pyfragment library errors.""" diff --git a/pyfragment/types/results.py b/pyfragment/types/results.py index 3f008e1..1e4cecc 100644 --- a/pyfragment/types/results.py +++ b/pyfragment/types/results.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from dataclasses import dataclass from typing import Any diff --git a/pyfragment/utils/decoder.py b/pyfragment/utils/decoder.py index 5acae41..d38a692 100644 --- a/pyfragment/utils/decoder.py +++ b/pyfragment/utils/decoder.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import base64 from ton_core import Cell diff --git a/pyfragment/utils/html.py b/pyfragment/utils/html.py index f3a82e5..28defd7 100644 --- a/pyfragment/utils/html.py +++ b/pyfragment/utils/html.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import re from typing import Any diff --git a/pyfragment/utils/http.py b/pyfragment/utils/http.py index cffc227..9cac3fd 100644 --- a/pyfragment/utils/http.py +++ b/pyfragment/utils/http.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import re from typing import Any diff --git a/pyfragment/utils/wallet.py b/pyfragment/utils/wallet.py index 4d67059..039f482 100644 --- a/pyfragment/utils/wallet.py +++ b/pyfragment/utils/wallet.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import asyncio import base64 import ssl diff --git a/pyproject.toml b/pyproject.toml index f0218c2..2579e64 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ version = "2026.2.0" description = "Async Python client for the Fragment API — a unified toolkit to manage Telegram assets: purchase Stars and Premium, top up TON and Ads balances, run giveaways, manage anonymous numbers, and explore the marketplace for usernames, numbers, and gifts." readme = "README.md" license = { text = "MIT" } -requires-python = ">=3.12" +requires-python = ">=3.10" authors = [{ name = "bohd4nx", url = "https://github.com/bohd4nx" }] keywords = ["fragment", "telegram", "ton", "stars", "premium", "crypto", "blockchain"] classifiers = [ @@ -18,6 +18,8 @@ classifiers = [ "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Framework :: AsyncIO", "Topic :: Software Development :: Libraries :: Python Modules",