Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# This is where we would implement github action
16 changes: 16 additions & 0 deletions Pipfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
dailydecisionpackage = {file = ".", editable = true}

[dev-packages]
pytest = "*"
build = "*"
twine = "*"

[requires]
python_version = "3.9"
python_full_version = "3.9.6"
469 changes: 469 additions & 0 deletions Pipfile.lock

Large diffs are not rendered by default.

15 changes: 13 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
# Python Package Exercise
# Python Package Exercise - Daily Decision Helper
## Overview
Do you ever struggle to make everyday decisions? Whether it's choosing what to eat for lunch, picking an outfit color, or deciding what music to listen to, sometimes the smallest choices can feel overwhelming. DailyDecisions is here to help! This Python package takes the stress out of life's minor decisions by providing randomized suggestions when you need them most.

An exercise to create a Python package, build it, test it, distribute it, and use it. See [instructions](./instructions.md) for details.
## Features
This package provides a few functions to help with your daily decision making:
- `pick_food(dietary_restriction, cuisine)` - a function to help you pick a food based on your dietary restriction and the type of cuisine you want.
- `pick_color(mood, season)` - a function to help you pick a color (of clothing) based on your mood and the season.
- `pick_activity(energy_level, weather)` - a function to help you pick an acitvity to do based on your energy level and the weather.

## Team members:
[Maria Luo](https://github.com/MariaLuo826)
[Reece Huey](https://github.com/Coffee859)
[Jubilee Tang](https://github.com/MajesticSeagull26)
1 change: 1 addition & 0 deletions examples/exampleUsage.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# This is the exampel program where we would demonstrates our package's complete functionality.
36 changes: 36 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "dailyDecisionPackage"
description = "A lighthearted Python package that helps you make everyday decisions."
version = "0.1.0"
authors = [
{ name = "Jubilee Tang", email = "wt2187@nyu.edu" },
{ name = "Maria Luo" },
{ name = "Reece Huey" },
]
license = "GPL-3.0-or-later"
license-files = ["LICENSE"]
readme = "README.md"
keywords = ["python", "package", "daily", "decision", "helper", "color", "food"]
requires-python = ">=3.9"
classifiers = [
"Programming Language :: Python :: 3",
"Intended Audience :: Education",
"Operating System :: OS Independent",
]

[project.optional-dependencies]
dev = ["pytest", "build", "twine"]

[project.urls]
"Homepage" = "https://github.com/swe-students-fall2025/3-python-package-team_aurora"
"Repository" = "https://github.com/swe-students-fall2025/3-python-package-team_aurora.git"

[tool.setuptools.packages.find]
where = ["src"]

[tool.setuptools.package-data]
dailyDecisionPackage = ["*.txt", "*.md"]
1 change: 1 addition & 0 deletions src/dailyDecisionPackage/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Ignore for now; we will import functions from decisionMaking.py later
283 changes: 283 additions & 0 deletions src/dailyDecisionPackage/dailyDecision.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,283 @@
# This is where we will write our actual functions for the package
import random



def pick_food(dietary_restriction: str = None) -> None:
# Foods by restriction
foods_by_restriction = {
"halal": [
"chicken biryani", "beef kebab plate", "shawarma bowl", "lentil dal with rice",
"falafel wrap", "grilled salmon"
],
"high_protein": [
"grilled chicken breast with quinoa", "salmon with asparagus", "beef stir-fry",
"lentil salad", "tofu and broccoli bowl", "turkey chili"
],
"jain": [
"vegetable khichdi", "paneer tikka (no onion/garlic)", "sabudana khichdi",
"dal dhokli", "vegetable pulao", "coconut curry"
],
"keto": [
"zucchini noodles with pesto", "grilled salmon with avocado", "cauliflower rice stir-fry",
"bunless burger with cheese and salad", "omelet with spinach and mushrooms", "chicken caesar salad (no croutons)"
],
"kosher": [
"bagel with lox", "matzo ball soup", "tuna salad", "grilled salmon with potatoes",
"egg salad sandwich", "falafel plate"
],
"low_carb": [
"grilled chicken and veggies", "beef lettuce wraps", "zoodle bolognese",
"egg omelet with avocado", "shrimp and broccoli stir-fry", "cauliflower crust pizza"
],
"no_dairy": [
"tom yum soup", "poke bowl", "chicken shawarma wrap (no yogurt sauce)",
"vegan ramen", "tofu curry", "bibimbap (no egg)"
],
"no_eggs": [
"pasta primavera", "mushroom risotto", "vegetable stir-fry", "falafel wrap",
"vegan curry", "tofu scramble"
],
"no_gluten": [
"rice bowl with chicken", "corn tacos", "pho", "sashimi platter",
"thai green curry", "baked sweet potato"
],
"no_nuts": [
"margherita pizza", "spaghetti pomodoro", "fried rice", "beef tacos",
"rotisserie chicken plate", "tomato soup & grilled cheese"
],
"no_soy": [
"grilled chicken salad", "roasted veggie pasta", "eggplant parm", "mushroom risotto",
"omelet with veggies", "lentil soup"
],
"paleo": [
"grilled steak with roasted veggies", "salmon with sweet potato mash",
"zucchini noodles with tomato sauce", "chicken lettuce wraps", "baked cod with olive oil", "fruit and nut bowl"
],
"pescatarian": [
"salmon poke bowl", "shrimp tacos", "grilled cod with veggies", "tuna niçoise salad",
"sushi combo", "miso-glazed salmon", "fish and chips (light batter)"
],
"vegan": [
"tofu stir-fry", "chickpea curry", "veggie sushi", "buddha bowl",
"lentil bolognese", "quinoa salad"
],
"vegetarian": [
"margherita pizza", "mushroom risotto", "spinach ravioli", "caprese sandwich",
"falafel bowl", "paneer tikka"
],
}

# Build full set of all foods
allFoods = set()
for foods in foods_by_restriction.values():
allFoods.update(foods)

# No restriction given — pick from all
if dietary_restriction is None:
print(f"How about: {random.choice(list(allFoods))}")
return

restriction = dietary_restriction.strip().lower()

if restriction not in foods_by_restriction:
accepted = ", ".join(sorted(foods_by_restriction.keys()))
print(f"Sorry, '{restriction}' is not a supported restriction.")
print(f"Please choose from: {accepted}")
print(f"In the meantime, try: {random.choice(list(allFoods))}")
return

choice = random.choice(foods_by_restriction[restriction])
print(f"For a {restriction} diet, you could try: {choice}")


def pick_color(mood: str = None, season: str = None) -> None:
winter = [
"blue",
"navy",
"white",
"silver",
"black",
"burgundy",
"emerald green",
"royal purple",
"ice blue",
"charcoal",
]
fall = [
"orange",
"rust",
"brown",
"burgundy",
"mustard yellow",
"olive green",
"burnt sienna",
"copper",
"maroon",
"tan",
]
summer = [
"yellow",
"coral",
"turquoise",
"hot pink",
"lime green",
"sky blue",
"peach",
"tangerine",
"mint",
"aqua",
]
spring = [
"pastel pink",
"lavender",
"mint",
"baby blue",
"lemon yellow",
"peach",
"soft coral",
"light purple",
"sage green",
"cream",
]
happy = [
"yellow",
"bright orange",
"sunny gold",
"lime green",
"sky blue",
"pink",
"coral",
"peach",
"turquoise",
]
sad = ["blue", "grey", "dark purple", "navy", "slate blue", "charcoal", "ice blue"]
calm = [
"light blue",
"lavender",
"sage green",
"soft grey",
"beige",
"mint",
"powder blue",
"pale pink",
"baby blue",
]
energetic = [
"red",
"bright orange",
"electric blue",
"neon green",
"hot pink",
"vibrant yellow",
"magenta",
"lime green",
"tangerine",
]
angry = [
"red",
"crimson",
"black",
"dark orange",
"blood red",
"maroon",
"dark grey",
"burgundy",
]

# Season and mood dictionaries for easy lookup
seasonColors = {"winter": winter, "fall": fall, "summer": summer, "spring": spring}
moodColors = {
"happy": happy,
"sad": sad,
"calm": calm,
"energetic": energetic,
"angry": angry,
}
# Default color set
allColors = set()
for colors in seasonColors.values():
allColors.update(colors)
for colors in moodColors.values():
allColors.update(colors)

# No arguments - pick from default
if mood is None and season is None:
print(f"Here's a random color for you: {random.choice(list(allColors))}")
# Only mood provided
elif mood is not None and season is None:
mood = mood.lower()
if mood not in moodColors:
print(
f"Sorry, '{mood}' is not a supported mood. Here's the list of accepted moods: {', '.join(moodColors.keys())}"
)
print(
f"Picking from default list instead: {random.choice(list(allColors))}"
)
else:
color = random.choice(moodColors[mood])
print(f"For your {mood} mood, try: {color}")
# Only season provided
elif season is not None and mood is None:
season = season.lower()
if season not in seasonColors:
print(
f"Sorry, '{season}' is not a valid season. Here's the list of accepted seasons: {', '.join(seasonColors.keys())}"
)
print(
f"Picking from default list instead: {random.choice(list(allColors))}"
)
else:
color = random.choice(seasonColors[season])
print(f"For {season} season, try: {color}")
# Both mood and season provided
else:
mood = mood.lower()
season = season.lower()
validMood = mood in moodColors
validSeason = season in seasonColors
# If both invalid, pick from default
if not validMood and not validSeason:
print(
f"Sorry, '{mood}' is not a valid mood and '{season}' is not a valid season."
)
print(f"Here's the list of accepted moods: {', '.join(moodColors.keys())}")
print(
f"Here's the list of accepted seasons: {', '.join(seasonColors.keys())}"
)
print(
f"Picking from default list instead: {random.choice(list(allColors))}"
)
# If only mood invalid, use season
elif not validMood:
print(
f"Sorry, '{mood}' is not a valid mood. Try: {', '.join(moodColors.keys())}"
)
color = random.choice(seasonColors[season])
print(f"Using just your {season} season instead, try: {color}")
# If only season invalid, use mood
elif not validSeason:
print(
f"Sorry, '{season}' is not a valid season. Try: {', '.join(seasonColors.keys())}"
)
color = random.choice(moodColors[mood])
print(f"Using just your {mood} mood instead, try: {color}")
# Both valid
else:
commonColors = list(set(moodColors[mood]) & set(seasonColors[season]))
if commonColors:
color = random.choice(commonColors)
print(f"Perfect match! For {mood} mood in {season}: {color}")
else:
mood_color = random.choice(moodColors[mood])
season_color = random.choice(seasonColors[season])
print(
f"No perfect match, but try {mood} color: {mood_color} or {season} color: {season_color}"
)


def pick_activity(weather: str = None, energy_level: str = None) -> None:
print("")


pick_color("calm", "Summer")
2 changes: 2 additions & 0 deletions tests/tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# This is where we will write our unit tests
import pytest