Migrate to uv (#52)

* uvx migrate-to-uv

* uv migration

* Fix hatch build

* Fixup

* uv run

* Add tab completion to devcontainer uv

Co-authored-by: Simon Emms <simon@simonemms.com>

* Revert "Add tab completion to devcontainer uv"

This reverts commit a3b7bdd84b.

---------

Co-authored-by: Simon Emms <simon@simonemms.com>
This commit is contained in:
Dan Davison
2025-07-30 13:37:42 -04:00
committed by GitHub
parent 4ed4efbe83
commit 68ac9c40eb
14 changed files with 2518 additions and 3309 deletions

View File

@@ -3,7 +3,7 @@
"name": "Temporal AI Agentic Demo", "name": "Temporal AI Agentic Demo",
"features": { "features": {
"ghcr.io/devcontainers/features/node:1": {}, "ghcr.io/devcontainers/features/node:1": {},
"ghcr.io/devcontainers-extra/features/poetry:2": {}, "ghcr.io/va-h/devcontainers-features/uv:1": {},
"ghcr.io/devcontainers/features/python:1": {}, "ghcr.io/devcontainers/features/python:1": {},
"ghcr.io/devcontainers-extra/features/temporal-cli:1": {}, "ghcr.io/devcontainers-extra/features/temporal-cli:1": {},
"ghcr.io/mrsimonemms/devcontainers/tcld:1": {} "ghcr.io/mrsimonemms/devcontainers/tcld:1": {}

View File

@@ -34,11 +34,10 @@ Default URLs:
1. **Prerequisites:** 1. **Prerequisites:**
```bash ```bash
# Install Poetry for Python dependency management # Install uv and Temporal server (MacOS)
curl -sSL https://install.python-poetry.org | python3 - brew install uv
# Start Temporal server (Mac)
brew install temporal brew install temporal
temporal server start-dev temporal server start-dev
``` ```
@@ -50,9 +49,9 @@ Default URLs:
make run-api # Starts the API server make run-api # Starts the API server
# Or manually: # Or manually:
poetry install uv sync
poetry run python scripts/run_worker.py # In one terminal uv run scripts/run_worker.py # In one terminal
poetry run uvicorn api.main:app --reload # In another terminal uv run uvicorn api.main:app --reload # In another terminal
``` ```
3. **Frontend (React):** 3. **Frontend (React):**
@@ -102,20 +101,20 @@ The project includes comprehensive tests using Temporal's testing framework:
```bash ```bash
# Install test dependencies # Install test dependencies
poetry install --with dev uv sync
# Run all tests # Run all tests
poetry run pytest uv run pytest
# Run with time-skipping for faster execution # Run with time-skipping for faster execution
poetry run pytest --workflow-environment=time-skipping uv run pytest --workflow-environment=time-skipping
# Run specific test categories # Run specific test categories
poetry run pytest tests/test_tool_activities.py -v # Activity tests uv run pytest tests/test_tool_activities.py -v # Activity tests
poetry run pytest tests/test_agent_goal_workflow.py -v # Workflow tests uv run pytest tests/test_agent_goal_workflow.py -v # Workflow tests
# Run with coverage # Run with coverage
poetry run pytest --cov=workflows --cov=activities uv run pytest --cov=workflows --cov=activities
``` ```
**Test Coverage:** **Test Coverage:**
@@ -130,15 +129,15 @@ poetry run pytest --cov=workflows --cov=activities
## Linting and Code Quality ## Linting and Code Quality
```bash ```bash
# Using Poetry tasks # Using poe tasks
poetry run poe format # Format code with black and isort uv run poe format # Format code with black and isort
poetry run poe lint # Check code style and types uv run poe lint # Check code style and types
poetry run poe test # Run test suite uv run poe test # Run test suite
# Manual commands # Manual commands
poetry run black . uv run black .
poetry run isort . uv run isort .
poetry run mypy --check-untyped-defs --namespace-packages . uv run mypy --check-untyped-defs --namespace-packages .
``` ```
## Agent Customization ## Agent Customization
@@ -192,7 +191,7 @@ For detailed architecture information, see [architecture.md](docs/architecture.m
- Use clear commit messages describing the change purpose - Use clear commit messages describing the change purpose
- Reference specific files and line numbers when relevant (e.g., `workflows/agent_goal_workflow.py:125`) - Reference specific files and line numbers when relevant (e.g., `workflows/agent_goal_workflow.py:125`)
- Open PRs describing **what changed** and **why** - Open PRs describing **what changed** and **why**
- Ensure tests pass before submitting: `poetry run pytest --workflow-environment=time-skipping` - Ensure tests pass before submitting: `uv run pytest --workflow-environment=time-skipping`
## Additional Resources ## Additional Resources
- **Setup Guide**: [setup.md](docs/setup.md) - Detailed configuration instructions - **Setup Guide**: [setup.md](docs/setup.md) - Detailed configuration instructions

View File

@@ -4,17 +4,19 @@ WORKDIR /app
# Install system dependencies # Install system dependencies
RUN apt-get update && \ RUN apt-get update && \
apt-get install -y --no-install-recommends gcc build-essential && \ apt-get install -y --no-install-recommends gcc build-essential curl && \
apt-get clean && \ apt-get clean && \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
# Copy requirements first for better caching # Install uv
RUN pip install --no-cache-dir poetry RUN curl -LsSf https://astral.sh/uv/install.sh | sh
ENV PATH="$PATH:/root/.local/bin"
# Install Python dependencies without creating a virtualenv # Copy dependency files and README (needed for package build)
COPY pyproject.toml poetry.lock ./ COPY pyproject.toml uv.lock README.md ./
RUN poetry config virtualenvs.create false \
&& poetry install --without dev --no-interaction --no-ansi --no-root # Install dependencies and create virtual environment
RUN uv sync --frozen
# Copy application code # Copy application code
COPY . . COPY . .
@@ -27,4 +29,4 @@ ENV PYTHONPATH=/app
EXPOSE 8000 EXPOSE 8000
# Default to running only the API server; worker and train-api are separate Compose services # Default to running only the API server; worker and train-api are separate Compose services
CMD ["uvicorn", "api.main:app", "--host", "0.0.0.0", "--port", "8000"] CMD ["uv", "run", "uvicorn", "api.main:app", "--host", "0.0.0.0", "--port", "8000"]

View File

@@ -1,35 +1,24 @@
.PHONY: setup install run-worker run-api run-frontend run-train-api run-legacy-worker run-enterprise setup-venv check-python run-dev .PHONY: setup install run-worker run-api run-frontend run-train-api run-legacy-worker run-enterprise setup-venv check-python run-dev
# Setup commands setup:
setup: check-python setup-venv install uv sync
check-python:
@which python3 >/dev/null 2>&1 || (echo "Python 3 is required. Please install it first." && exit 1)
@which poetry >/dev/null 2>&1 || (echo "Poetry is required. Please install it first." && exit 1)
setup-venv:
python3 -m venv venv
@echo "Virtual environment created. Don't forget to activate it with 'source venv/bin/activate'"
install:
poetry install
cd frontend && npm install cd frontend && npm install
# Run commands # Run commands
run-worker: run-worker:
poetry run python scripts/run_worker.py uv run scripts/run_worker.py
run-api: run-api:
poetry run uvicorn api.main:app --reload uv run uvicorn api.main:app --reload
run-frontend: run-frontend:
cd frontend && npx vite cd frontend && npx vite
run-train-api: run-train-api:
poetry run python thirdparty/train_api.py uv run thirdparty/train_api.py
run-legacy-worker: run-legacy-worker:
poetry run python scripts/run_legacy_worker.py uv run scripts/run_legacy_worker.py
run-enterprise: run-enterprise:
cd enterprise && dotnet build && dotnet run cd enterprise && dotnet build && dotnet run
@@ -50,9 +39,7 @@ run-dev:
# Help command # Help command
help: help:
@echo "Available commands:" @echo "Available commands:"
@echo " make setup - Create virtual environment and install dependencies" @echo " make setup - Install all dependencies"
@echo " make setup-venv - Create virtual environment only"
@echo " make install - Install all dependencies"
@echo " make run-worker - Start the Temporal worker" @echo " make run-worker - Start the Temporal worker"
@echo " make run-api - Start the API server" @echo " make run-api - Start the API server"
@echo " make run-frontend - Start the frontend development server" @echo " make run-frontend - Start the frontend development server"

View File

@@ -65,13 +65,13 @@ The project includes comprehensive tests for workflows and activities using Temp
```bash ```bash
# Install dependencies including test dependencies # Install dependencies including test dependencies
poetry install --with dev uv sync
# Run all tests # Run all tests
poetry run pytest uv run pytest
# Run with time-skipping for faster execution # Run with time-skipping for faster execution
poetry run pytest --workflow-environment=time-skipping uv run pytest --workflow-environment=time-skipping
``` ```
**Test Coverage:** **Test Coverage:**

View File

@@ -2,17 +2,17 @@ services:
api: api:
volumes: volumes:
- ./:/app:cached - ./:/app:cached
command: uvicorn api.main:app --host 0.0.0.0 --port 8000 --reload command: uv run uvicorn api.main:app --host 0.0.0.0 --port 8000 --reload
worker: worker:
volumes: volumes:
- ./:/app:cached - ./:/app:cached
command: python scripts/run_worker.py command: uv run scripts/run_worker.py
train-api: train-api:
volumes: volumes:
- ./:/app:cached - ./:/app:cached
command: python thirdparty/train_api.py command: uv run thirdparty/train_api.py
frontend: frontend:
volumes: volumes:

View File

@@ -79,7 +79,7 @@ services:
- .env - .env
environment: environment:
- TEMPORAL_ADDRESS=temporal:7233 - TEMPORAL_ADDRESS=temporal:7233
command: python scripts/run_worker.py command: uv run scripts/run_worker.py
networks: networks:
- temporal-network - temporal-network
@@ -94,7 +94,7 @@ services:
- .env - .env
environment: environment:
- TEMPORAL_ADDRESS=temporal:7233 - TEMPORAL_ADDRESS=temporal:7233
command: python thirdparty/train_api.py command: uv run thirdparty/train_api.py
networks: networks:
- temporal-network - temporal-network

View File

@@ -8,40 +8,40 @@ This document provides guidelines for contributing to `temporal-ai-agent`. All s
We use `black` for code formatting and `isort` for import sorting to maintain a consistent codebase. We use `black` for code formatting and `isort` for import sorting to maintain a consistent codebase.
- **Format code:** - **Format code:**
```bash ```bash
poetry run poe format uv run poe format
``` ```
Or manually: Or manually
```bash ```
poetry run black . uv run black .
poetry run isort . uv run isort .
``` ```
Please format your code before committing. Please format your code before committing.
### Linting & Type Checking ### Linting & Type Checking
We use `mypy` for static type checking and other linters configured via `poe the poet`. We use `mypy` for static type checking and other linters configured via `poe`.
- **Run linters and type checks:** - **Run linters and type checks:**
```bash ```bash
poetry run poe lint uv run poe lint
``` ```
Or manually for type checking: Or manually for type checking:
```bash ```bash
poetry run mypy --check-untyped-defs --namespace-packages . uv run mypy --check-untyped-defs --namespace-packages .
``` ```
Ensure all linting and type checks pass before submitting a pull request. Ensure all linting and type checks pass before submitting a pull request.
## Testing ## Testing
Comprehensive testing is crucial for this project. We use `pytest` and Temporal's testing framework. Comprehensive testing is crucial for this project. We use `pytest` and Temporal's testing framework.
- **Install test dependencies** (if not already done with `poetry install --with dev`): - **Install test dependencies:**
```bash ```bash
poetry install --with dev uv sync
``` ```
- **Run all tests:** - **Run all tests:**
```bash ```bash
poetry run pytest uv run pytest
``` ```
- **Run tests with time-skipping (recommended for faster execution, especially in CI):** - **Run tests with time-skipping (recommended for faster execution, especially in CI):**
```bash ```bash
poetry run pytest --workflow-environment=time-skipping uv run pytest --workflow-environment=time-skipping
``` ```
For detailed information on test categories, running specific tests, test environments, coverage, and troubleshooting, please refer to: For detailed information on test categories, running specific tests, test environments, coverage, and troubleshooting, please refer to:
@@ -73,7 +73,7 @@ When you're ready to submit your changes:
1. Push your branch to the remote repository. 1. Push your branch to the remote repository.
2. Open a Pull Request (PR) against the `main` branch. 2. Open a Pull Request (PR) against the `main` branch.
3. **Describe your changes:** Clearly explain what you changed and why. Reference any related issues. 3. **Describe your changes:** Clearly explain what you changed and why. Reference any related issues.
4. **Ensure tests pass:** All CI checks, including tests and linters, must pass. The command `poetry run pytest --workflow-environment=time-skipping` is a good one to run locally. 4. **Ensure tests pass:** All CI checks, including tests and linters, must pass. The command `uv run pytest --workflow-environment=time-skipping` is a good one to run locally.
5. **Request review:** Request a review from one or more maintainers. 5. **Request review:** Request a review from one or more maintainers.
## Reporting Bugs ## Reporting Bugs

View File

@@ -22,8 +22,6 @@ We've provided a Makefile to simplify the setup and running of the application.
```bash ```bash
# Initial setup # Initial setup
make setup # Creates virtual environment and installs dependencies make setup # Creates virtual environment and installs dependencies
make setup-venv # Creates virtual environment only
make install # Installs all dependencies
# Running the application # Running the application
make run-worker # Starts the Temporal worker make run-worker # Starts the Temporal worker
@@ -159,24 +157,22 @@ Default urls:
**Python Backend** **Python Backend**
Requires [Poetry](https://python-poetry.org/) to manage dependencies. Requires [`uv`](https://docs.astral.sh/uv/) to manage dependencies.
1. `python -m venv venv` 1. Install uv: `curl -LsSf https://astral.sh/uv/install.sh | sh`
2. `source venv/bin/activate` 2. `uv sync`
3. `poetry install`
Run the following commands in separate terminal windows: Run the following commands in separate terminal windows:
1. Start the Temporal worker: 1. Start the Temporal worker:
```bash ```bash
poetry run python scripts/run_worker.py uv run scripts/run_worker.py
``` ```
2. Start the API server: 2. Start the API server:
```bash ```bash
poetry run uvicorn api.main:app --reload uv run uvicorn api.main:app --reload
``` ```
Access the API at `/docs` to see the available endpoints. Access the API at `/docs` to see the available endpoints.
@@ -261,7 +257,7 @@ NOTE: This goal was developed for an on-stage demo and has failure (and its reso
Required to search and book trains! Required to search and book trains!
```bash ```bash
poetry run python thirdparty/train_api.py uv run thirdparty/train_api.py
# example url # example url
# http://localhost:8080/api/search?from=london&to=liverpool&outbound_time=2025-04-18T09:00:00&inbound_time=2025-04-20T09:00:00 # http://localhost:8080/api/search?from=london&to=liverpool&outbound_time=2025-04-18T09:00:00&inbound_time=2025-04-20T09:00:00
@@ -273,7 +269,7 @@ poetry run python thirdparty/train_api.py
These are Python activities that fail (raise NotImplemented) to show how Temporal handles a failure. You can run these activities with. These are Python activities that fail (raise NotImplemented) to show how Temporal handles a failure. You can run these activities with.
```bash ```bash
poetry run python scripts/run_legacy_worker.py uv run scripts/run_legacy_worker.py
``` ```
The activity will fail and be retried infinitely. To rescue the activity (and its corresponding workflows), kill the worker and run the .NET one in the section below. The activity will fail and be retried infinitely. To rescue the activity (and its corresponding workflows), kill the worker and run the .NET one in the section below.
@@ -328,8 +324,8 @@ For more details, check out [adding goals and tools guide](./adding-goals-and-to
[ ] Select an LLM and add your API key to `.env` <br /> [ ] Select an LLM and add your API key to `.env` <br />
[ ] (Optional) set your starting goal and goal category in `.env` <br /> [ ] (Optional) set your starting goal and goal category in `.env` <br />
[ ] (Optional) configure your Temporal Cloud settings in `.env` <br /> [ ] (Optional) configure your Temporal Cloud settings in `.env` <br />
[ ] `poetry run python scripts/run_worker.py` <br /> [ ] `uv run scripts/run_worker.py` <br />
[ ] `poetry run uvicorn api.main:app --reload` <br /> [ ] `uv run uvicorn api.main:app --reload` <br />
[ ] `cd frontend`, `npm install`, `npx vite` <br /> [ ] `cd frontend`, `npm install`, `npx vite` <br />
[ ] Access the UI at `http://localhost:5173` <br /> [ ] Access the UI at `http://localhost:5173` <br />

View File

@@ -6,17 +6,17 @@ This guide provides instructions for running the comprehensive test suite for th
1. **Install dependencies**: 1. **Install dependencies**:
```bash ```bash
poetry install --with dev uv sync
``` ```
2. **Run all tests**: 2. **Run all tests**:
```bash ```bash
poetry run pytest uv run pytest
``` ```
3. **Run with time-skipping for faster execution**: 3. **Run with time-skipping for faster execution**:
```bash ```bash
poetry run pytest --workflow-environment=time-skipping uv run pytest --workflow-environment=time-skipping
``` ```
## Test Categories ## Test Categories
@@ -39,33 +39,33 @@ This guide provides instructions for running the comprehensive test suite for th
```bash ```bash
# Run only activity tests # Run only activity tests
poetry run pytest tests/test_tool_activities.py -v uv run pytest tests/test_tool_activities.py -v
# Run only workflow tests # Run only workflow tests
poetry run pytest tests/test_agent_goal_workflow.py -v uv run pytest tests/test_agent_goal_workflow.py -v
# Run a specific test # Run a specific test
poetry run pytest tests/test_tool_activities.py::TestToolActivities::test_sanitize_json_response -v uv run pytest tests/test_tool_activities.py::TestToolActivities::test_sanitize_json_response -v
# Run tests matching a pattern # Run tests matching a pattern
poetry run pytest -k "validation" -v uv run pytest -k "validation" -v
``` ```
## Test Environment Options ## Test Environment Options
### Local Environment (Default) ### Local Environment (Default)
```bash ```bash
poetry run pytest --workflow-environment=local uv run pytest --workflow-environment=local
``` ```
### Time-Skipping Environment (Recommended for CI) ### Time-Skipping Environment (Recommended for CI)
```bash ```bash
poetry run pytest --workflow-environment=time-skipping uv run pytest --workflow-environment=time-skipping
``` ```
### External Temporal Server ### External Temporal Server
```bash ```bash
poetry run pytest --workflow-environment=localhost:7233 uv run pytest --workflow-environment=localhost:7233
``` ```
## Environment Variables ## Environment Variables
@@ -122,7 +122,7 @@ tests/test_tool_activities.py::TestToolActivities::test_get_wf_env_vars_default_
### Common Issues ### Common Issues
1. **Module not found errors**: Run `poetry install --with dev` 1. **Module not found errors**: Run `uv sync`
2. **Async warnings**: These are expected with pytest-asyncio and can be ignored 2. **Async warnings**: These are expected with pytest-asyncio and can be ignored
3. **Test timeouts**: Use `--workflow-environment=time-skipping` for faster execution 3. **Test timeouts**: Use `--workflow-environment=time-skipping` for faster execution
4. **Import errors**: Check that you're running tests from the project root directory 4. **Import errors**: Check that you're running tests from the project root directory
@@ -131,19 +131,19 @@ tests/test_tool_activities.py::TestToolActivities::test_get_wf_env_vars_default_
Enable verbose logging: Enable verbose logging:
```bash ```bash
poetry run pytest --log-cli-level=DEBUG -s uv run pytest --log-cli-level=DEBUG -s
``` ```
Run with coverage: Run with coverage:
```bash ```bash
poetry run pytest --cov=workflows --cov=activities uv run pytest --cov=workflows --cov=activities
``` ```
## Continuous Integration ## Continuous Integration
For CI environments, use: For CI environments, use:
```bash ```bash
poetry run pytest --workflow-environment=time-skipping --tb=short uv run pytest --workflow-environment=time-skipping --tb=short
``` ```
## Additional Resources ## Additional Resources

3147
poetry.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,57 +1,56 @@
[tool.poetry] [project]
name = "temporal_AI_agent" name = "temporal_AI_agent"
version = "0.2.0" version = "0.2.0"
description = "Temporal AI Agent" description = "Temporal AI Agent"
license = "MIT"
authors = [ authors = [
"Steve Androulakis <steve.androulakis@temporal.io>", { name = "Steve Androulakis", email = "steve.androulakis@temporal.io" },
"Laine Smith <lainecaseysmith@gmail.com>", { name = "Laine Smith", email = "lainecaseysmith@gmail.com" },
"Joshua Smith <josh.smith@temporal.io>" { name = "Joshua Smith", email = "josh.smith@temporal.io" },
] ]
requires-python = ">=3.10,<4.0"
readme = "README.md" readme = "README.md"
license = "MIT"
# By default, Poetry will find packages automatically, dependencies = [
# but explicitly including them is fine: "temporalio>=1.8.0,<2",
packages = [ "litellm>=1.70.0,<2",
{ include = "**/*.py", from = "." } "pyyaml>=6.0.2,<7",
"fastapi>=0.115.6,<0.116",
"uvicorn>=0.34.0,<0.35",
"python-dotenv>=1.0.1,<2",
"requests>=2.32.3,<3",
"pandas>=2.2.3,<3",
"stripe>=11.4.1,<12",
"gtfs-kit>=10.1.1,<11",
"fastmcp>=2.7.0,<3",
] ]
[tool.poetry.urls] [project.urls]
"Bug Tracker" = "https://github.com/temporal-community/temporal-ai-agent/issues" "Bug Tracker" = "https://github.com/temporal-community/temporal-ai-agent/issues"
[dependency-groups]
dev = [
"pytest>=8.2",
"pytest-asyncio>=0.26.0,<0.27",
"black~=23.7",
"isort~=5.12",
"mypy>=1.16.0,<2",
]
[tool.poe.tasks] [tool.poe.tasks]
format = [{cmd = "black ."}, {cmd = "isort ."}] format = [{cmd = "black ."}, {cmd = "isort ."}]
lint = [{cmd = "black --check ."}, {cmd = "isort --check-only ."}, {ref = "lint-types" }] lint = [{cmd = "black --check ."}, {cmd = "isort --check-only ."}, {ref = "lint-types" }]
lint-types = "mypy --check-untyped-defs --namespace-packages ." lint-types = "mypy --check-untyped-defs --namespace-packages ."
test = "pytest" test = "pytest"
[tool.poetry.dependencies] [tool.hatch.metadata]
python = ">=3.10,<4.0" allow-direct-references = true
temporalio = "^1.8.0"
# Standard library modules (e.g. asyncio, collections) don't need to be added [tool.hatch.build]
# since they're built-in for Python 3.8+. packages = ["activities", "api", "goals", "models", "prompts", "shared", "tools", "workflows"]
litellm = "^1.70.0"
pyyaml = "^6.0.2"
fastapi = "^0.115.6"
uvicorn = "^0.34.0"
python-dotenv = "^1.0.1"
requests = "^2.32.3"
pandas = "^2.2.3"
stripe = "^11.4.1"
gtfs-kit = "^10.1.1"
fastmcp = "^2.7.0"
[tool.poetry.group.dev.dependencies]
pytest = ">=8.2"
pytest-asyncio = "^0.26.0"
black = "^23.7"
isort = "^5.12"
mypy = "^1.16.0"
[build-system] [build-system]
requires = ["poetry-core>=1.4.0"] requires = ["hatchling"]
build-backend = "poetry.core.masonry.api" build-backend = "hatchling.build"
[tool.pytest.ini_options] [tool.pytest.ini_options]
asyncio_mode = "auto" asyncio_mode = "auto"

View File

@@ -53,31 +53,31 @@ Provides shared test fixtures and configuration:
Ensure you have the required dependencies installed: Ensure you have the required dependencies installed:
```bash ```bash
poetry install --with dev uv sync
``` ```
### Basic Test Execution ### Basic Test Execution
Run all tests: Run all tests:
```bash ```bash
poetry run pytest uv run pytest
``` ```
Run specific test files: Run specific test files:
```bash ```bash
# Workflow tests only # Workflow tests only
poetry run pytest tests/test_agent_goal_workflow.py uv run pytest tests/test_agent_goal_workflow.py
# Activity tests only # Activity tests only
poetry run pytest tests/test_tool_activities.py uv run pytest tests/test_tool_activities.py
# Legacy tests # Legacy tests
poetry run pytest tests/workflowtests/ uv run pytest tests/workflowtests/
``` ```
Run with verbose output: Run with verbose output:
```bash ```bash
poetry run pytest -v uv run pytest -v
``` ```
### Test Environment Options ### Test Environment Options
@@ -87,34 +87,34 @@ The tests support different Temporal environments via the `--workflow-environmen
#### Local Environment (Default) #### Local Environment (Default)
Uses a local Temporal test server: Uses a local Temporal test server:
```bash ```bash
poetry run pytest --workflow-environment=local uv run pytest --workflow-environment=local
``` ```
#### Time-Skipping Environment #### Time-Skipping Environment
Uses Temporal's time-skipping test environment for faster execution: Uses Temporal's time-skipping test environment for faster execution:
```bash ```bash
poetry run pytest --workflow-environment=time-skipping uv run pytest --workflow-environment=time-skipping
``` ```
#### External Server #### External Server
Connect to an existing Temporal server: Connect to an existing Temporal server:
```bash ```bash
poetry run pytest --workflow-environment=localhost:7233 uv run pytest --workflow-environment=localhost:7233
``` ```
#### Setup Script for AI Agent environments such as OpenAI Codex #### Setup Script for AI Agent environments such as OpenAI Codex
```bash ```bash
export SHELL=/bin/bash export SHELL=/bin/bash
curl -sSL https://install.python-poetry.org | python3 - curl -LsSf https://astral.sh/uv/install.sh | sh
export PATH="$HOME/.local/bin:$PATH" export PATH="$HOME/.local/bin:$PATH"
ls ls
poetry install --with dev uv sync
cd frontend cd frontend
npm install npm install
cd .. cd ..
# Pre-download the temporal test server binary # Pre-download the temporal test server binary
poetry run python3 -c " uv run python -c "
import asyncio import asyncio
import sys import sys
from temporalio.testing import WorkflowEnvironment from temporalio.testing import WorkflowEnvironment
@@ -139,22 +139,22 @@ asyncio.run(predownload())
Run tests by pattern: Run tests by pattern:
```bash ```bash
# Run only validation tests # Run only validation tests
poetry run pytest -k "validation" uv run pytest -k "validation"
# Run only workflow tests # Run only workflow tests
poetry run pytest -k "workflow" uv run pytest -k "workflow"
# Run only activity tests # Run only activity tests
poetry run pytest -k "activity" uv run pytest -k "activity"
``` ```
Run tests by marker (if you add custom markers): Run tests by marker (if you add custom markers):
```bash ```bash
# Run only integration tests # Run only integration tests
poetry run pytest -m integration uv run pytest -m integration
# Skip slow tests # Skip slow tests
poetry run pytest -m "not slow" uv run pytest -m "not slow"
``` ```
## Test Configuration ## Test Configuration
@@ -276,7 +276,7 @@ The `sample_combined_input` fixture provides:
Enable detailed logging: Enable detailed logging:
```bash ```bash
poetry run pytest --log-cli-level=DEBUG -s uv run pytest --log-cli-level=DEBUG -s
``` ```
### Temporal Web UI ### Temporal Web UI
@@ -301,21 +301,18 @@ jobs:
test: test:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-python@v4 - uses: astral-sh/setup-uv@v5
with: - run: uv sync
python-version: '3.10' - run: uv run pytest --workflow-environment=time-skipping
- run: pip install poetry
- run: poetry install --with dev
- run: poetry run pytest --workflow-environment=time-skipping
``` ```
### Test Coverage ### Test Coverage
Generate coverage reports: Generate coverage reports:
```bash ```bash
poetry add --group dev pytest-cov uv add --group dev pytest-cov
poetry run pytest --cov=workflows --cov=activities --cov-report=html uv run pytest --cov=workflows --cov=activities --cov-report=html
``` ```
## Best Practices ## Best Practices
@@ -342,7 +339,7 @@ poetry run pytest --cov=workflows --cov=activities --cov-report=html
- Check Temporal Python SDK documentation - Check Temporal Python SDK documentation
- Review existing test patterns in the codebase - Review existing test patterns in the codebase
- Use `poetry run pytest --collect-only` to verify test discovery - Use `uv run pytest --collect-only` to verify test discovery
- Run with `-v` flag for detailed output - Run with `-v` flag for detailed output
## Legacy Tests ## Legacy Tests

2376
uv.lock generated Normal file

File diff suppressed because it is too large Load Diff