Skip to main content

A Python package for accessing JD Wetherspoon's venue and menu data

Project description

Wetherspoons API - Python

A Python package for accessing JD Wetherspoon's venue and menu data, including drink information with pricing and alcohol unit calculations.

This is a Python port of the original TypeScript package by Joss Bird.

Installation

pip install wetherspoons-api-python

Or for development:

git clone https://github.com/slack2450/wetherspoons-api.git
cd wetherspoons-api-python
pip install -e .

Features

  • 🏪 Fetch all Wetherspoons venues
  • 📍 Get detailed venue information
  • 🍺 Access venue menus and drinks
  • 💰 Calculate price per unit (PPU) for alcoholic beverages
  • ✅ Type-safe with Pydantic validation
  • 🔄 Automatic handling of different portion sizes

Usage

Get All Venues

from wetherspoons_api import venues

all_venues = venues()
print(all_venues)
# [
#   HighLevelVenue(franchise='lloyds', id=123, is_closed=False, 
#                 name='The Moon Under Water', venue_ref=456),
#   ...
# ]

Get Venue Details

from wetherspoons_api import venues, get_venue

all_venues = venues()
venue = all_venues[0]
details = get_venue(venue)

print(details)
# DetailedVenue(can_place_order=True, franchise='lloyds', id=123,
#              name='The Moon Under Water', sales_areas=[{'id': 789}],
#              venue_can_order=True, venue_ref=456)

Get Drinks with Price Analysis

from wetherspoons_api import venues, get_drinks

all_venues = venues()
venue = all_venues[0]
drinks = get_drinks(venue)

print(drinks)
# [
#   Drink(name='Ruddles Best', units=2.27, product_id=12345,
#         price=249, ppu=109.69),
#   ...
# ]
# Sorted by best value (lowest price per unit first)

Get Menus

from wetherspoons_api import venues, get_venue, get_menus, get_menu

all_venues = venues()
venue = all_venues[0]
details = get_venue(venue)

# Get all menus for a sales area
menus = get_menus(details, details.sales_areas[0]['id'])

# Get detailed menu information
drinks_menu = next((m for m in menus if m.name == 'Drinks'), None)
if drinks_menu:
    detailed_menu = get_menu(drinks_menu)
    print(detailed_menu.data['categories'])

API Reference

Functions

venues() -> List[HighLevelVenue]

Fetches all Wetherspoons venues.

Returns: List of venue objects with basic information.

get_venue(venue: HighLevelVenue) -> DetailedVenue

Gets detailed information about a specific venue.

Parameters:

  • venue: A venue object from venues()

Returns: Detailed venue information including sales areas and ordering capabilities.

get_menus(venue: DetailedVenue, sales_area_id: int) -> List[HighLevelMenu]

Fetches all menus for a specific sales area in a venue.

Parameters:

  • venue: A detailed venue object from get_venue()
  • sales_area_id: The ID of the sales area

Returns: List of menu objects.

get_menu(high_level_menu: HighLevelMenu) -> DetailedMenu

Gets detailed menu information including all products and categories.

Parameters:

  • high_level_menu: A menu object from get_menus()

Returns: Detailed menu with categories, item groups, and products.

get_drinks(high_level_venue: HighLevelVenue) -> List[Drink]

Fetches all drinks from a venue's drinks menu, calculates alcohol units and price per unit, then sorts by best value.

Parameters:

  • high_level_venue: A venue object from venues()

Returns: List of drinks sorted by price per unit (best value first).

Models

HighLevelVenue

class HighLevelVenue:
    franchise: str
    id: int
    is_closed: bool
    name: str
    venue_ref: int
    address: Optional[Address]

DetailedVenue

class DetailedVenue:
    can_place_order: Optional[bool]
    franchise: str
    id: int
    is_closed: Optional[bool]
    name: str
    sales_areas: List[dict]
    venue_can_order: Optional[bool]
    venue_ref: Union[str, int]
    address: Optional[Address]

Drink

class Drink:
    name: str
    units: float        # Alcohol units
    product_id: int
    price: int          # Price in pence
    ppu: float          # Price per unit in pence

How It Works

The package:

  1. Connects to the JD Wetherspoon API
  2. Validates all responses using Pydantic models for type safety
  3. Calculates alcohol units based on ABV and volume information
  4. Determines the best value portion size for each drink
  5. Sorts drinks by price per unit to help find the best deals

Development

# Install dependencies
pip install -r requirements.txt

# Install in development mode
pip install -e .

# Run tests
pytest

# Run tests with coverage
pytest --cov=wetherspoons_api --cov-report=html

# Run specific test
pytest tests/test_api.py::TestVenues::test_venues_filters_open_venues

Testing

The package includes comprehensive unit tests with pytest. Tests use mocking to avoid hitting the live API during development.

# Run all tests
pytest

# Run with verbose output
pytest -v

# Run with coverage
pytest --cov=wetherspoons_api

License

MIT © Joss Bird - Original TypeScript version

Python port maintains the same MIT license.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Issues

Report bugs and feature requests at https://github.com/slack2450/wetherspoons-api/issues

Original TypeScript Version

This is a Python port of the original wetherspoons-api TypeScript package.

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

wetherspoons_api_python-1.0.0.tar.gz (10.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wetherspoons_api_python-1.0.0-py3-none-any.whl (7.2 kB view details)

Uploaded Python 3

File details

Details for the file wetherspoons_api_python-1.0.0.tar.gz.

File metadata

  • Download URL: wetherspoons_api_python-1.0.0.tar.gz
  • Upload date:
  • Size: 10.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for wetherspoons_api_python-1.0.0.tar.gz
Algorithm Hash digest
SHA256 a00b63d7656e2c83ffd282474070e1fff9e9702e44f2fe5d9066b223218c16c7
MD5 e2188a516530882e4422b25b01591b6e
BLAKE2b-256 93182447b069247806c45cb760bca858046334ee174c3431c8dc6ef089778118

See more details on using hashes here.

Provenance

The following attestation bundles were made for wetherspoons_api_python-1.0.0.tar.gz:

Publisher: publish.yml on jr551/wetherspoons-api-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wetherspoons_api_python-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for wetherspoons_api_python-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ac36632cd55b47f38f6e68b8161cf95b1be7a21e4716548f76b331a86368ef77
MD5 0432b6952014bbf7ecbdd9f14aa3f0c4
BLAKE2b-256 b81ec96421db722d8a754f7132f9228e42ffe1d9bf95b31fa2ddc3d960c09d32

See more details on using hashes here.

Provenance

The following attestation bundles were made for wetherspoons_api_python-1.0.0-py3-none-any.whl:

Publisher: publish.yml on jr551/wetherspoons-api-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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