Data Engineering at the University of Florida
Total Points: 50
git clone <repo-url>uv sync.env.example to .env and add your NavigatorAI API keyuv run pytest -vImportant: If you cannot clone or run the repository, document the error and score accordingly.
| Score | Meaning |
|---|---|
| 5 | Excellent - Exceeds expectations |
| 4 | Good - Meets all expectations |
| 3 | Satisfactory - Meets most expectations with minor issues |
| 2 | Needs Work - Missing key elements or significant issues |
| 1 | Incomplete - Major problems or missing components |
| 0 | Missing - Component not present |
Does the application successfully fetch data from an external API?
| Score | Points | Description |
|---|---|---|
| 5 | 15 | Fetches data reliably; handles all errors gracefully; parses JSON correctly; extracts meaningful fields |
| 4 | 12 | Fetches data successfully; handles most errors; good data parsing |
| 3 | 9 | Fetches data but error handling is incomplete; some parsing issues |
| 2 | 6 | Fetches data but crashes on errors; poor parsing |
| 1 | 3 | API calls fail or return unusable data |
| 0 | 0 | No API integration present |
timeout parameter in requests?Excellent (5 points = 15):
def fetch_earthquake_data(days: int = 7) -> dict:
"""Fetch earthquake data from USGS API."""
try:
response = requests.get(
"https://earthquake.usgs.gov/fdsnws/event/1/query",
params={"format": "geojson", "starttime": start_date},
timeout=30
)
response.raise_for_status()
return response.json()
except requests.exceptions.Timeout:
logger.error("API request timed out")
raise
except requests.exceptions.HTTPError as e:
logger.error(f"HTTP error: {e.response.status_code}")
raise
Needs Work (2 points = 6):
def fetch_data():
# No timeout, no error handling, hardcoded values
response = requests.get("https://api.example.com/data")
return response.json()
Does the application use NavigatorAI to process and summarize the API data meaningfully?
| Score | Points | Description |
|---|---|---|
| 5 | 15 | LLM produces insightful analysis; well-crafted prompts; clear output formatting |
| 4 | 12 | LLM processing works well; reasonable prompts; readable output |
| 3 | 9 | LLM processing works but prompts are basic; output formatting could improve |
| 2 | 6 | LLM is called but results are not meaningful or useful |
| 1 | 3 | LLM integration is broken or produces errors |
| 0 | 0 | No LLM integration present |
Excellent (5 points = 15):
def summarize_earthquakes(data: dict) -> str:
"""Use LLM to analyze earthquake patterns."""
prompt = f"""Analyze this earthquake data and provide:
1. The most significant earthquake (highest magnitude)
2. Geographic patterns (are earthquakes clustered?)
3. Any trends in frequency over the time period
Data: {json.dumps(data[:10])} # Limit data size
Provide a concise summary suitable for a news brief."""
response = call_navigator_api(prompt)
return response
Needs Work (2 points = 6):
def summarize(data):
# Vague prompt, no structure, no insight requested
prompt = f"Summarize this: {data}"
return call_api(prompt)
Is the CLI well-designed and user-friendly?
| Score | Points | Description |
|---|---|---|
| 5 | 10 | Clear arguments; helpful --help; sensible defaults; input validation |
| 4 | 8 | Good CLI with clear arguments; --help works; minor issues |
| 3 | 6 | Basic CLI works; --help is minimal; some confusing options |
| 2 | 4 | CLI is confusing; missing arguments; poor help text |
| 1 | 2 | CLI barely works or is very confusing |
| 0 | 0 | No CLI or completely broken |
uv run python -m assignment0 --help - is the output helpful?Excellent (5 points = 10):
$ uv run python -m assignment0 --help
usage: assignment0 [-h] --source {usgs,news,books} [--days DAYS] [--query QUERY]
Fetch API data and summarize with LLM.
options:
-h, --help show this help message and exit
--source {usgs,news,books}
Data source to fetch from
--days DAYS Number of days of data (default: 7)
--query QUERY Search query (for news source)
Examples:
uv run python -m assignment0 --source usgs --days 7
uv run python -m assignment0 --source news --query "AI"
Needs Work (2 points = 4):
$ uv run python -m assignment0 --help
usage: assignment0 [-h] s d
# No descriptions, cryptic argument names
--help - Deduct 2 points-s instead of --source, deduct 1 pointAre there adequate tests that verify functionality?
| Score | Points | Description |
|---|---|---|
| 5 | 5 | Comprehensive tests; mocks external APIs; tests parsing, CLI; all pass |
| 4 | 4 | Good coverage; main functionality tested; tests pass |
| 3 | 3 | Basic tests present; some gaps; tests pass |
| 2 | 2 | Few tests; major functionality untested |
| 1 | 1 | Tests present but fail or are trivial |
| 0 | 0 | No tests |
uv run pytest -v - do all tests pass?tests/ folder - what is being tested?Excellent (5 points):
from unittest.mock import patch, MagicMock
from assignment0.api import fetch_earthquake_data
@patch("assignment0.api.requests.get")
def test_fetch_earthquake_data(mock_get):
"""Test that earthquake data is fetched and parsed correctly."""
mock_response = MagicMock()
mock_response.json.return_value = {
"features": [{"properties": {"mag": 5.2}}]
}
mock_get.return_value = mock_response
result = fetch_earthquake_data(days=7)
assert len(result["features"]) == 1
mock_get.assert_called_once()
@patch("assignment0.api.requests.get")
def test_fetch_handles_timeout(mock_get):
"""Test that timeout errors are handled gracefully."""
mock_get.side_effect = requests.exceptions.Timeout()
with pytest.raises(requests.exceptions.Timeout):
fetch_earthquake_data(days=7)
Needs Work (2 points):
def test_something():
# No mocking - calls real API
result = fetch_data()
assert result is not None # Trivial assertion
assert True, assert result, deduct 1-2 pointsIs the project properly structured with working CI?
| Score | Points | Description |
|---|---|---|
| 5 | 5 | Clean package structure; CI passes; secrets configured; .gitignore correct |
| 4 | 4 | Good structure; CI works; minor issues |
| 3 | 3 | Acceptable structure; CI has issues but runs |
| 2 | 2 | Poor structure; CI broken |
| 1 | 1 | Minimal structure; no working CI |
| 0 | 0 | No CI; completely disorganized |
__main__.py?.env.example file?.env properly in .gitignore?pyproject.toml present and correct?Excellent (5 points) - Project Structure:
cis6930sp26-assignment0/
├── .github/workflows/pytest.yml ✓ CI configured
├── assignment0/
│ ├── __main__.py ✓ Entry point
│ ├── api.py
│ ├── llm.py
│ └── cli.py
├── tests/
│ ├── test_api.py
│ └── test_llm.py
├── .env.example ✓ Documents required vars
├── .gitignore ✓ Includes .env
├── pyproject.toml ✓ Proper packaging
└── README.md ✓ Documents usage
Needs Work (2 points):
assignment0/
├── main.py ✗ No package structure
├── test.py ✗ Tests not in tests/ folder
└── requirements.txt ✗ Should use pyproject.toml
.env committed - Security issue, deduct 3+ pointsrequirements.txt - Should use pyproject.toml, deduct 1 pointsys.path.insert() - Bad practice, deduct 1 pointDid you complete your assigned peer reviews?
| Score | Points | Description |
|---|---|---|
| 5 | 5 | Completed both reviews thoroughly with constructive feedback |
| 3 | 3 | Completed both reviews but feedback was minimal |
| 1 | 1 | Completed only one review |
| 0 | 0 | Did not complete reviews |
This criterion is graded by the instructor based on your submitted reviews.
Copy this template for each review you submit:
# Assignment 0 Peer Review
**Repository:** [GitHub URL]
**Reviewer:** [Your Name]
**Date:** [Date]
## Setup Verification
- [ ] Successfully cloned repository
- [ ] `uv sync` completed without errors
- [ ] `uv run pytest -v` executed (note: pass/fail)
- [ ] Checked GitHub Actions status
## Scores
| Criterion | Score (0-5) | Points |
|-----------|-------------|--------|
| 1. API Data Collection | /5 | /15 |
| 2. LLM Processing | /5 | /15 |
| 3. Command-Line Interface | /5 | /10 |
| 4. Testing | /5 | /5 |
| 5. CI/CD & Structure | /5 | /5 |
| **Total** | | **/50** |
## Strengths
List 2-3 things the submission does well:
1.
2.
3.
## Areas for Improvement
List 2-3 specific, actionable suggestions:
1.
2.
3.
## Issues Found
Describe any bugs, errors, or problems:
-
## Code Quality Notes
Comments on readability, organization, or style:
-
## Additional Comments
Any other feedback for the author:
| Component | Points |
|---|---|
| API Data Collection | 15 |
| LLM Processing | 15 |
| Command-Line Interface | 10 |
| Testing | 5 |
| CI/CD & Structure | 5 |
| Subtotal (Implementation) | 45 |
| Completing Peer Reviews | 5 |
| Total | 50 |
api.py:25”.env files