Skip to content

Quick Start

jsem-nerad edited this page Nov 12, 2025 · 1 revision

Quick Start Guide

Get started with strava-cz-python in just a few minutes!

Basic Example

from strava_cz import StravaCZ, MealType, OrderType

# Create client and login
strava = StravaCZ(
    username="your.username",
    password="YourPassword123",
    canteen_number="3753"  # Required parameter
)

# Display user information
print(strava.user)
print(f"Balance: {strava.user.balance} {strava.user.currency}")

# Fetch and display menu
strava.menu.fetch()
strava.menu.print()

# Get orderable meals as list
meals = strava.menu.get_meals()
print(f"Available meals: {len(meals)}")

# Order meals by ID
strava.menu.order_meals(3, 6)

# Check if a meal is ordered
if strava.menu.is_ordered(3):
    print("Meal 3 is ordered")

# Cancel meal orders
strava.menu.cancel_meals(3)

# Logout
strava.logout()

Step-by-Step Breakdown

1. Import Required Classes

from strava_cz import StravaCZ, MealType, OrderType
  • StravaCZ - Main API client
  • MealType - Enum for meal types (SOUP, MAIN)
  • OrderType - Enum for order types (NORMAL, RESTRICTED, OPTIONAL)

2. Create Client and Login

strava = StravaCZ(
    username="your.username",
    password="YourPassword123",
    canteen_number="3753"
)

The client automatically logs in when credentials are provided. The canteen_number is required - it identifies your specific school canteen.

3. Access User Information

print(strava.user.full_name)      # Full name
print(strava.user.email)          # Email address
print(strava.user.balance)        # Account balance
print(strava.user.currency)       # Currency (usually "Kč")
print(strava.user.canteen_name)   # Canteen name

4. Fetch Menu

strava.menu.fetch()

This downloads the menu data from the server. You must call this before accessing menu items.

5. Display Menu

# Print formatted menu
strava.menu.print()

# Get menu information
print(f"Menu: {strava.menu}")  # Shows number of days and meals
print(f"Days: {len(strava.menu)}")  # Number of orderable days

6. Work with Meals

# Get all orderable meals (default)
meals = strava.menu.get_meals()

# Get only main dishes
main_meals = strava.menu.get_meals(meal_types=[MealType.MAIN])

# Get only soups
soups = strava.menu.get_meals(meal_types=[MealType.SOUP])

# Get ordered meals only
ordered = strava.menu.get_meals(ordered=True)

# Get unordered meals only
unordered = strava.menu.get_meals(ordered=False)

7. Access Meals by Days

# Get meals grouped by days
days = strava.menu.get_days()

for day in days:
    print(f"Date: {day['date']}")
    for meal in day['meals']:
        print(f"  - {meal['name']} ({meal['price']} Kč)")

8. Order and Cancel Meals

# Order meals by ID
strava.menu.order_meals(3, 6)

# Cancel meal orders
strava.menu.cancel_meals(3, 6)

# Check if meal is ordered
is_ordered = strava.menu.is_ordered(3)

9. Logout

strava.logout()

Finding Meal IDs

Each meal has a unique ID that changes daily. To find meal IDs:

strava.menu.fetch()

# Print menu with IDs
for day in strava.menu.get_days():
    print(f"\n{day['date']}:")
    for meal in day['meals']:
        print(f"  ID: {meal['id']} - {meal['name']}")

Error Handling Example

from strava_cz import (
    StravaCZ,
    AuthenticationError,
    InvalidMealTypeError,
    InsufficientBalanceError,
    StravaAPIError
)

try:
    strava = StravaCZ(
        username="your.username",
        password="YourPassword123",
        canteen_number="3753"
    )
    
    strava.menu.fetch()
    strava.menu.order_meals(3, 6)
    
except AuthenticationError as e:
    print(f"Login failed: {e}")
except InvalidMealTypeError as e:
    print(f"Invalid meal type: {e}")
except InsufficientBalanceError as e:
    print(f"Not enough balance: {e}")
except StravaAPIError as e:
    print(f"API error: {e}")
finally:
    if strava.user.is_logged_in:
        strava.logout()

Complete Working Example

from strava_cz import StravaCZ, MealType, OrderType

def main():
    # Login
    strava = StravaCZ(
        username="your.username",
        password="YourPassword123",
        canteen_number="3753"
    )
    
    print(f"Logged in as: {strava.user.full_name}")
    print(f"Balance: {strava.user.balance}\n")
    
    # Fetch menu
    strava.menu.fetch()
    
    # Get next 3 days with main dishes
    days = strava.menu.get_days(meal_types=[MealType.MAIN])[:3]
    
    print("Next 3 days menu:")
    meal_ids_to_order = []
    
    for day in days:
        print(f"\n{day['date']}:")
        for meal in day['meals']:
            print(f"  [{meal['id']}] {meal['name']} - {meal['price']} Kč")
            if not meal['ordered']:
                meal_ids_to_order.append(meal['id'])
    
    # Order first meal from each day
    if meal_ids_to_order[:3]:
        print(f"\nOrdering meals: {meal_ids_to_order[:3]}")
        strava.menu.order_meals(*meal_ids_to_order[:3])
        print("Meals ordered successfully!")
    
    # Show updated balance
    print(f"New balance: {strava.user.balance} Kč")
    
    # Logout
    strava.logout()
    print("Logged out")

if __name__ == "__main__":
    main()

Next Steps

Clone this wiki locally