Rename to scryfall-py
This commit is contained in:
parent
11d5669556
commit
96ed423f0a
26 changed files with 57 additions and 54 deletions
2
.github/workflows/publish.yml
vendored
2
.github/workflows/publish.yml
vendored
|
@ -6,7 +6,7 @@ on:
|
||||||
- published
|
- published
|
||||||
|
|
||||||
env:
|
env:
|
||||||
PACKAGE_NAME: pyfall
|
PACKAGE_NAME: scryfall
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-and-publish:
|
build-and-publish:
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
# Pyfall
|
# Scryfall-py
|
||||||
|
|
||||||
An async Scryfall API wrapper written in Python
|
An async Scryfall API wrapper written in Python
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
from pyfall.client import Pyfall
|
|
||||||
|
|
||||||
__all__ = ["Pyfall"]
|
|
|
@ -1,5 +1,5 @@
|
||||||
[project]
|
[project]
|
||||||
name = "pyfall"
|
name = "scryfall-py"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
description = "An async Scryfall API wrapper"
|
description = "An async Scryfall API wrapper"
|
||||||
license = { text = "MIT License" }
|
license = { text = "MIT License" }
|
||||||
|
@ -38,6 +38,9 @@ dev = [
|
||||||
requires = ["hatchling"]
|
requires = ["hatchling"]
|
||||||
build-backend = "hatchling.build"
|
build-backend = "hatchling.build"
|
||||||
|
|
||||||
|
[tool.hatch.build.targets.wheel]
|
||||||
|
packages = ["scryfall"]
|
||||||
|
|
||||||
[tool.pytest.ini_options]
|
[tool.pytest.ini_options]
|
||||||
minversion = "8.0"
|
minversion = "8.0"
|
||||||
testpaths = ["tests"]
|
testpaths = ["tests"]
|
||||||
|
|
3
scryfall/__init__.py
Normal file
3
scryfall/__init__.py
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
from scryfall.client import Scryfall
|
||||||
|
|
||||||
|
__all__ = ["Scryfall"]
|
|
@ -1,6 +1,6 @@
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from pyfall.const import __version__
|
from scryfall.const import __version__
|
||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
|
@ -8,11 +8,11 @@ import time
|
||||||
|
|
||||||
from httpx import AsyncClient
|
from httpx import AsyncClient
|
||||||
|
|
||||||
from pyfall.const import get_logger
|
from scryfall.const import get_logger
|
||||||
from pyfall.client.error import LibraryException, HTTPException, ScryfallError, Forbidden, NotFound
|
from scryfall.client.error import LibraryException, HTTPException, ScryfallError, Forbidden, NotFound
|
||||||
from pyfall.client.http.http_requests.card import CardRequests
|
from scryfall.client.http.http_requests.card import CardRequests
|
||||||
from pyfall.client.http.http_requests.set import SetRequests
|
from scryfall.client.http.http_requests.set import SetRequests
|
||||||
from pyfall.client.route import Route
|
from scryfall.client.route import Route
|
||||||
|
|
||||||
|
|
||||||
class GlobalLock:
|
class GlobalLock:
|
||||||
|
@ -51,11 +51,11 @@ class GlobalLock:
|
||||||
self._calls -= 1
|
self._calls -= 1
|
||||||
|
|
||||||
|
|
||||||
class Pyfall(CardRequests, SetRequests):
|
class Scryfall(CardRequests, SetRequests):
|
||||||
def __init__(self, logger: logging.Logger | None = None):
|
def __init__(self, logger: logging.Logger | None = None):
|
||||||
self.__headers = {
|
self.__headers = {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
"UserAgent": f"pyfall/{__version__}",
|
"UserAgent": f"scryfall/{__version__}",
|
||||||
"Accept": "application/json",
|
"Accept": "application/json",
|
||||||
}
|
}
|
||||||
self.__client: AsyncClient = None # type: ignore
|
self.__client: AsyncClient = None # type: ignore
|
|
@ -3,11 +3,11 @@ from typing import TYPE_CHECKING
|
||||||
import httpx
|
import httpx
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from pyfall.client.route import Route
|
from scryfall.client.route import Route
|
||||||
|
|
||||||
|
|
||||||
class LibraryException(Exception):
|
class LibraryException(Exception):
|
||||||
"""Base Exception of pyfall."""
|
"""Base Exception of scryfall-py."""
|
||||||
|
|
||||||
|
|
||||||
class HTTPException(LibraryException):
|
class HTTPException(LibraryException):
|
|
@ -1,12 +1,12 @@
|
||||||
from typing import Any, Literal
|
from typing import Any, Literal
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
from pyfall.models.catalogs import Catalog
|
from scryfall.models.catalogs import Catalog
|
||||||
from pyfall.client.route import Route
|
from scryfall.client.route import Route
|
||||||
from pyfall.models.cards import Card
|
from scryfall.models.cards import Card
|
||||||
from pyfall.models.api import APIList
|
from scryfall.models.api import APIList
|
||||||
from pyfall.models.rulings import Ruling
|
from scryfall.models.rulings import Ruling
|
||||||
from pyfall.models.internal.protocols import CanRequest
|
from scryfall.models.internal.protocols import CanRequest
|
||||||
|
|
||||||
|
|
||||||
class CardRequests(CanRequest):
|
class CardRequests(CanRequest):
|
|
@ -1,9 +1,9 @@
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
from pyfall.client.route import Route
|
from scryfall.client.route import Route
|
||||||
from pyfall.models.api import APIList
|
from scryfall.models.api import APIList
|
||||||
from pyfall.models.sets import Set
|
from scryfall.models.sets import Set
|
||||||
from pyfall.models.internal.protocols import CanRequest
|
from scryfall.models.internal.protocols import CanRequest
|
||||||
|
|
||||||
|
|
||||||
class SetRequests(CanRequest):
|
class SetRequests(CanRequest):
|
|
@ -2,7 +2,7 @@ import logging
|
||||||
|
|
||||||
__version__ = "0.1.0"
|
__version__ = "0.1.0"
|
||||||
|
|
||||||
logger_name = "pyfall"
|
logger_name = "scryfall"
|
||||||
|
|
||||||
_logger = logging.getLogger(logger_name)
|
_logger = logging.getLogger(logger_name)
|
||||||
|
|
|
@ -2,11 +2,11 @@ from typing import Any, Literal
|
||||||
|
|
||||||
from pydantic import BaseModel, HttpUrl, ValidationError, model_validator
|
from pydantic import BaseModel, HttpUrl, ValidationError, model_validator
|
||||||
|
|
||||||
from pyfall.models.base import BaseAPIModel
|
from scryfall.models.base import BaseAPIModel
|
||||||
from pyfall.models.cards import Card
|
from scryfall.models.cards import Card
|
||||||
from pyfall.models.rulings import Ruling
|
from scryfall.models.rulings import Ruling
|
||||||
from pyfall.models.sets import Set
|
from scryfall.models.sets import Set
|
||||||
from pyfall.models.symbols import CardSymbol
|
from scryfall.models.symbols import CardSymbol
|
||||||
|
|
||||||
CLASS_LOOKUP = {"card": Card, "card_symbol": CardSymbol, "ruling": Ruling, "set": Set}
|
CLASS_LOOKUP = {"card": Card, "card_symbol": CardSymbol, "ruling": Ruling, "set": Set}
|
||||||
|
|
|
@ -3,15 +3,15 @@ from typing import TYPE_CHECKING
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from pyfall.client import Pyfall
|
from scryfall.client import Scryfall
|
||||||
|
|
||||||
|
|
||||||
class BaseAPIModel(BaseModel):
|
class BaseAPIModel(BaseModel):
|
||||||
"""Base API model for base API calls."""
|
"""Base API model for base API calls."""
|
||||||
|
|
||||||
_client: "Pyfall"
|
_client: "Scryfall"
|
||||||
|
|
||||||
def __init__(self, **data):
|
def __init__(self, **data):
|
||||||
client: "Pyfall" = data["_client"]
|
client: "Scryfall" = data["_client"]
|
||||||
super().__init__(**data)
|
super().__init__(**data)
|
||||||
self._client = client
|
self._client = client
|
|
@ -4,12 +4,12 @@ from uuid import UUID
|
||||||
|
|
||||||
from pydantic import BaseModel, HttpUrl, field_validator
|
from pydantic import BaseModel, HttpUrl, field_validator
|
||||||
|
|
||||||
from pyfall.models.base import BaseAPIModel
|
from scryfall.models.base import BaseAPIModel
|
||||||
from pyfall.models.enums import Color
|
from scryfall.models.enums import Color
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from pyfall.models.rulings import Ruling
|
from scryfall.models.rulings import Ruling
|
||||||
from pyfall.models.sets import Set
|
from scryfall.models.sets import Set
|
||||||
|
|
||||||
|
|
||||||
class RelatedCard(BaseModel):
|
class RelatedCard(BaseModel):
|
|
@ -1,7 +1,7 @@
|
||||||
import typing
|
import typing
|
||||||
from typing import Protocol, Any, TypeVar
|
from typing import Protocol, Any, TypeVar
|
||||||
|
|
||||||
from pyfall.client.route import Route
|
from scryfall.client.route import Route
|
||||||
|
|
||||||
T_co = TypeVar("T", covariant=True) # type: ignore
|
T_co = TypeVar("T", covariant=True) # type: ignore
|
||||||
|
|
|
@ -4,10 +4,10 @@ from uuid import UUID
|
||||||
|
|
||||||
from pydantic import HttpUrl
|
from pydantic import HttpUrl
|
||||||
|
|
||||||
from pyfall.models.base import BaseAPIModel
|
from scryfall.models.base import BaseAPIModel
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from pyfall.models.api import APIList
|
from scryfall.models.api import APIList
|
||||||
|
|
||||||
|
|
||||||
class Set(BaseAPIModel):
|
class Set(BaseAPIModel):
|
|
@ -2,7 +2,7 @@ from typing import Literal
|
||||||
|
|
||||||
from pydantic import BaseModel, HttpUrl
|
from pydantic import BaseModel, HttpUrl
|
||||||
|
|
||||||
from pyfall.models.enums import Color
|
from scryfall.models.enums import Color
|
||||||
|
|
||||||
|
|
||||||
class CardSymbol(BaseModel):
|
class CardSymbol(BaseModel):
|
|
@ -1,6 +1,6 @@
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from pyfall import Pyfall
|
from scryfall import Scryfall
|
||||||
|
|
||||||
test_card_uuid = "1e90c638-d4b2-4243-bbc4-1cc10516c40f"
|
test_card_uuid = "1e90c638-d4b2-4243-bbc4-1cc10516c40f"
|
||||||
test_card_name = "Arcades, the Strategist"
|
test_card_name = "Arcades, the Strategist"
|
||||||
|
@ -8,7 +8,7 @@ test_card_name = "Arcades, the Strategist"
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_get_card_by_all_ids():
|
async def test_get_card_by_all_ids():
|
||||||
client = Pyfall()
|
client = Scryfall()
|
||||||
card = await client.get_card_by_id(test_card_uuid)
|
card = await client.get_card_by_id(test_card_uuid)
|
||||||
|
|
||||||
assert card.name == test_card_name
|
assert card.name == test_card_name
|
||||||
|
@ -29,7 +29,7 @@ async def test_get_card_by_all_ids():
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_get_card_rulings():
|
async def test_get_card_rulings():
|
||||||
client = Pyfall()
|
client = Scryfall()
|
||||||
card = await client.get_card_by_id(test_card_uuid)
|
card = await client.get_card_by_id(test_card_uuid)
|
||||||
|
|
||||||
rulings = await card.get_rulings()
|
rulings = await card.get_rulings()
|
||||||
|
@ -38,7 +38,7 @@ async def test_get_card_rulings():
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_search_card_all():
|
async def test_search_card_all():
|
||||||
client = Pyfall()
|
client = Scryfall()
|
||||||
|
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
_ = await client.search_cards(q="_" * 1001)
|
_ = await client.search_cards(q="_" * 1001)
|
||||||
|
@ -63,7 +63,7 @@ async def test_search_card_all():
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_cards_autocomplete():
|
async def test_cards_autocomplete():
|
||||||
client = Pyfall()
|
client = Scryfall()
|
||||||
|
|
||||||
catalog = await client.cards_autocomplete(q="avacyn")
|
catalog = await client.cards_autocomplete(q="avacyn")
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ async def test_cards_autocomplete():
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_get_random_card():
|
async def test_get_random_card():
|
||||||
client = Pyfall()
|
client = Scryfall()
|
||||||
|
|
||||||
card = await client.get_random_card()
|
card = await client.get_random_card()
|
||||||
assert card is not None
|
assert card is not None
|
||||||
|
@ -80,7 +80,7 @@ async def test_get_random_card():
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_card_set():
|
async def test_card_set():
|
||||||
client = Pyfall()
|
client = Scryfall()
|
||||||
card = await client.get_card_by_id(test_card_uuid)
|
card = await client.get_card_by_id(test_card_uuid)
|
||||||
card_set = await card.get_set()
|
card_set = await card.get_set()
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from pyfall import Pyfall
|
from scryfall import Scryfall
|
||||||
|
|
||||||
test_set_uuid = "2f5f2509-56db-414d-9a7e-6e312ec3760c"
|
test_set_uuid = "2f5f2509-56db-414d-9a7e-6e312ec3760c"
|
||||||
test_set_name = "Core Set 2019"
|
test_set_name = "Core Set 2019"
|
||||||
|
@ -9,13 +9,13 @@ test_set_code = "m19"
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_get_all_sets():
|
async def test_get_all_sets():
|
||||||
client = Pyfall()
|
client = Scryfall()
|
||||||
_ = await client.get_all_sets()
|
_ = await client.get_all_sets()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_get_set():
|
async def test_get_set():
|
||||||
client = Pyfall()
|
client = Scryfall()
|
||||||
|
|
||||||
set_ = await client.get_set_by_id(test_set_uuid)
|
set_ = await client.get_set_by_id(test_set_uuid)
|
||||||
assert set_.name == test_set_name
|
assert set_.name == test_set_name
|
||||||
|
|
2
uv.lock
generated
2
uv.lock
generated
|
@ -717,7 +717,7 @@ wheels = [
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyfall"
|
name = "scryfall"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = { editable = "." }
|
source = { editable = "." }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
|
Loading…
Add table
Reference in a new issue