Skip to main content

A Python package to interact with the Team Fortress 2 Schema

Project description

tf2schema

tf2schema is a Python package for interacting with the Team Fortress 2 (TF2) Schema. It provides an easy-to-use SchemaManager class that allows fetching, updating, and managing the TF2 Schema from Steam's API or from a local file. The package includes features such as automatic updates, file-based schema storage, and async support for better performance.

The library builds on the work from python-tf2-utilities but extends it with additional features, including async fetch operations and more Pythonic naming conventions.

Features

  • Fetch the TF2 schema asynchronously from Steam's API or a local file.
  • Automatic schema updates (optional).
  • Pythonic snake_case naming for schema functions.
  • Integration with file-based schema management for environments where file-only mode is preferred.
  • Uses httpx for async HTTP requests.

Installation

...coming soon...

Make sure your environment has the following dependencies installed:

  • httpx
  • python-dotenv
  • pytest
  • pytest-asyncio

Usage

Head to the Examples directory for a quick start guide on how to use the SchemaManager & Schema classes.

Basic Example

By default, when using the async with syntax, the SchemaManager will start the auto-update loop. If you prefer not to have auto-update enabled, you should manually call fetch_schema or get to fetch the schema.

Here’s a basic example of how to use the SchemaManager:

import asyncio
from tf2schema import SchemaManager
from pathlib import Path


async def main():
    steam_api_key = "YOUR_STEAM_API_KEY"

    async with SchemaManager(
            steam_api_key=steam_api_key,
            file_path=Path(__file__).parent / "schema.json",
            save_to_file=True
    ) as manager:
        # Wait until the schema is fetched
        await manager.wait_for_schema()

        # Get the name of an item from the schema using its SKU
        sku = "30911;5;u144"
        item_name = manager.schema.get_name_from_sku(sku)
        print(f"Item name for SKU {sku}: {item_name}")
        # Expected output: "Item name for SKU 30911;5;u144: Snowblinded Fat Man's Field Cap"


if __name__ == "__main__":
    asyncio.run(main())

Disabling Auto-Update

If you do not want auto-update to be enabled, you should avoid using async with to create the SchemaManager. Instead, create an instance and manually fetch the schema.

import asyncio
from tf2schema import SchemaManager
from pathlib import Path


async def main():
    steam_api_key = "YOUR_STEAM_API_KEY"

    # Create the SchemaManager instance
    manager = SchemaManager(
        steam_api_key=steam_api_key,
        file_path=Path(__file__).parent / "schema.json",
        save_to_file=True
    )

    # Manually fetch the schema from Steam's API or file if it exists
    await manager.get()

    # Example: Get the name of an item from the schema using its SKU
    sku = "160;3;u4"
    item_name = manager.schema.get_name_from_sku(sku)
    print(f"Item name for SKU {sku}: {item_name}")
    # Expected output: "Item name for SKU 160;3;u4: Vintage Community Sparkle Lugermorph"


if __name__ == "__main__":
    asyncio.run(main())

Auto-Updating Schema

The SchemaManager supports an auto-update feature that checks for schema updates at regular intervals. If you want to enable the auto-update loop explicitly, you can do so with the run method:

import asyncio
from tf2schema import SchemaManager
from pathlib import Path


async def main():
    steam_api_key = "YOUR_STEAM_API_KEY"

    async with SchemaManager(
            steam_api_key=steam_api_key,
            file_path=Path(__file__).parent / "schema.json",
            save_to_file=True,
            update_interval=timedelta(hours=12)  # Update every 12 hours
    ) as manager:
        # The manager will automatically update the schema in the background
        await manager.wait_for_schema()

        # Example: Get the name for another item from the schema using its SKU
        sku = "817;5;u13"
        item_name = manager.schema.get_name_from_sku(sku)
        print(f"Item name for SKU {sku}: {item_name}")
        # Expected output: "Item name for SKU 817;5;u13: Burning Flames Human Cannonball"


if __name__ == "__main__":
    asyncio.run(main())

File-Only Mode

If you want to use the package in environments where the schema should only be fetched from a file (e.g., in Docker containers), you can enable file_only_mode:

import asyncio
from tf2schema import SchemaManager
from pathlib import Path


async def main():
    async with SchemaManager(
            file_path=Path(__file__).parent / "schema.json",
            file_only_mode=True
    ) as manager:
        try:
            await manager.wait_for_schema()
        except FileNotFoundError:
            print("Schema file not found. Please make sure it exists.")
            return

        # Example: Get the name of an item from the schema using its SKU
        sku = "996;6"
        item_name = manager.schema.get_name_from_sku(sku)
        print(f"Item name for SKU {sku}: {item_name}")
        # Expected output: "Item name for SKU 996;6: The Loose Cannon"


if __name__ == "__main__":
    asyncio.run(main())

Running Tests

To run the tests, you need to set the STEAM_API_KEY as an environment variable:

  1. Create a .env file with your Steam API key:

    STEAM_API_KEY=your_steam_api_key_here
    
  2. Run the tests using pytest:

    pytest
    

The tests include checks for schema fetching, conversion from SKU to name, and vice versa.

Contributing

If you'd like to contribute to this package, feel free to submit a pull request or open an issue. Contributions are always welcome!

License

This project is licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tf2schema_py-0.4.4.tar.gz (22.4 kB view details)

Uploaded Source

Built Distribution

tf2schema_py-0.4.4-py3-none-any.whl (22.3 kB view details)

Uploaded Python 3

File details

Details for the file tf2schema_py-0.4.4.tar.gz.

File metadata

  • Download URL: tf2schema_py-0.4.4.tar.gz
  • Upload date:
  • Size: 22.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.10

File hashes

Hashes for tf2schema_py-0.4.4.tar.gz
Algorithm Hash digest
SHA256 4c62be7e3e26aa9131806ad54c6a4ae844b8f96a5918b193c6bfe0201a9ddcbb
MD5 0d0407a4f6e059e6d3082c9d8ec722f5
BLAKE2b-256 ec7aef10959a92775605d8c5f9ebbf3680031222f9f6d5595d58948ad0e31c80

See more details on using hashes here.

File details

Details for the file tf2schema_py-0.4.4-py3-none-any.whl.

File metadata

  • Download URL: tf2schema_py-0.4.4-py3-none-any.whl
  • Upload date:
  • Size: 22.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.10

File hashes

Hashes for tf2schema_py-0.4.4-py3-none-any.whl
Algorithm Hash digest
SHA256 febdf27ac64d1f6e90493f12dd5b093390f8eb813a793bd76c3564cd121d6945
MD5 a16ff1528ea142260fce540bd96c2f05
BLAKE2b-256 72b49c7712deeed1e8461e9125fe2b675f3d7c5367a3a3cb91ddc710bdbcc015

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page