Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cheetahs 18 - Alyssa R. #80

Open
wants to merge 47 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
397d47d
Minimal change to clothing.py
alyalyaly18 Oct 3, 2022
80d0631
created constructor for Vendor class and two methods addand remove
alyalyaly18 Oct 3, 2022
6c5e93b
remove funtion updated
alyalyaly18 Oct 3, 2022
6f171ef
created assert for test_removing_not_found_is_false and passed wave1 …
alyalyaly18 Oct 3, 2022
83210e6
create constructor for class Item
alyalyaly18 Oct 3, 2022
1d944c3
create function get_by_category
alyalyaly18 Oct 3, 2022
9d41d1a
added assert to final test. passed all tests in wave 2
alyalyaly18 Oct 3, 2022
79d0476
__str__ function created
alyalyaly18 Oct 3, 2022
dc31761
created method swap_items in vendor.py
alyalyaly18 Oct 4, 2022
09f2683
updated method swap_items in vendor.py
alyalyaly18 Oct 4, 2022
9167c03
updated method swap_items in vendor.py
alyalyaly18 Oct 4, 2022
7c88243
wave 3 tests passed
alyalyaly18 Oct 4, 2022
c89af05
integrattion tests for test wave 1,2,3 passed
alyalyaly18 Oct 4, 2022
379a7f1
created function swap_first_item in vendor.py
alyalyaly18 Oct 4, 2022
988f081
changed or to and in if conditional of swap_first_item in vendor.py
alyalyaly18 Oct 4, 2022
800e354
passed tests in test_wave_04.py
alyalyaly18 Oct 4, 2022
c56b7ba
created class Clothing with attribute category and stringify method
alyalyaly18 Oct 4, 2022
cdd6bba
created class Decor with attribute category and stringify method.
alyalyaly18 Oct 4, 2022
1254610
created class Electronics with attribute category and stringify method
alyalyaly18 Oct 4, 2022
b117b51
refactored __init__ method in Item class
alyalyaly18 Oct 4, 2022
89a6eb8
added condition parameter and attribute to __init__ method
alyalyaly18 Oct 4, 2022
a8bb8bb
added condition attribute to __init__ method
alyalyaly18 Oct 4, 2022
649ac70
added condition attribute to __ini__ method
alyalyaly18 Oct 4, 2022
3fb9176
added condition attribute to __init__ method
alyalyaly18 Oct 4, 2022
8ffb259
created condition_description method
alyalyaly18 Oct 4, 2022
7022952
refactored and imported parent class Item
alyalyaly18 Oct 4, 2022
fa6a304
refactored and imported parent class Item
alyalyaly18 Oct 4, 2022
e8c4269
refactored and imported parent class Item
alyalyaly18 Oct 4, 2022
d15c7e1
passed tests in wave 5
alyalyaly18 Oct 4, 2022
c402578
refactored condition_description method to dictionary from if-elif
alyalyaly18 Oct 5, 2022
c6713e5
created method get_best_by_category
alyalyaly18 Oct 5, 2022
6d3b365
cleaned up comments
alyalyaly18 Oct 5, 2022
9bf1020
refactor __init__ method
alyalyaly18 Oct 6, 2022
480061a
created method swap_best_by_category
alyalyaly18 Oct 6, 2022
67d26f1
added assertions and passed all tests
alyalyaly18 Oct 6, 2022
be42eb2
cleaned up comments
alyalyaly18 Oct 6, 2022
60c2472
refactored get_best_by_category
alyalyaly18 Oct 6, 2022
84b12f2
integration tests for wave 4,5,6 passed
alyalyaly18 Oct 6, 2022
d2c4111
recomment and uncomment
alyalyaly18 Oct 6, 2022
ca41d7d
refactor remove method
alyalyaly18 Oct 7, 2022
767f7c6
refactor get_by_category method
alyalyaly18 Oct 7, 2022
ac17b09
refactor asserts in tests
alyalyaly18 Oct 7, 2022
9182871
refactor swap_items
alyalyaly18 Oct 7, 2022
edb63b3
refactor get_best_by_category
alyalyaly18 Oct 7, 2022
2e32ea5
cleaned up comments on swap_best_by_category
alyalyaly18 Oct 7, 2022
313f632
refactored __init__
alyalyaly18 Oct 7, 2022
72488b3
cleaned up comments
alyalyaly18 Oct 7, 2022
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
14 changes: 12 additions & 2 deletions swap_meet/clothing.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,12 @@
class Clothing:
pass
from .item import Item

class Clothing(Item):

def __init__(self, condition=0):
super().__init__("Clothing", condition)
# self.category = "Clothing"
# self.condition = condition

def __str__(self):
return "The finest clothing you could wear."

13 changes: 11 additions & 2 deletions swap_meet/decor.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,11 @@
class Decor:
pass
from .item import Item

class Decor(Item):

def __init__(self, condition=0):
super().__init__("Decor", condition)
# self.category = "Decor"
# self.condition = condition

def __str__(self):
return "Something to decorate your space."
14 changes: 12 additions & 2 deletions swap_meet/electronics.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,12 @@
class Electronics:
pass
from .item import Item

class Electronics(Item):

def __init__(self, condition=0):
super().__init__("Electronics", condition)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great job with wave 5 and using inheritance! Nice work hardcoding the category too 🥳

# self.category = "Electronics"
# self.condition = condition

def __str__(self):
return "A gadget full of buttons and secrets."

23 changes: 22 additions & 1 deletion swap_meet/item.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,23 @@
class Item:
pass
def __init__(self, category="", condition=0):
self.category = category
self.condition = condition

def __str__(self):
return "Hello World!"

def condition_description(self):
'''Returns descriptions of condition based on condition value.'''
condition_dict = {
0:"Yo this is trash.",
1:"Definitely used. Perhaps too much.",
2:"If you're okay with some dings and things.",
3:"Lots of life left if you handle with care.",
4:"Barely even a scratch.",
5:"ULTRA RARE PIECE, NWOT CONDITION.",

}
if self.condition in condition_dict:
return condition_dict[self.condition]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great job with your Item class! Love that you implemented a dictionary for the condition descriptions and also have some validation to make sure self.condition is a key in the dictionary. 🥳



69 changes: 68 additions & 1 deletion swap_meet/vendor.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,69 @@
from re import I
from swap_meet.item import Item

class Vendor:
pass
def __init__(self, inventory=None):
'''A blueprint for different store inventories.'''

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Beautiful docstrings! ✨

if inventory is None:
inventory = []
self.inventory = inventory

def add(self, item):
'''Add an item to the inventory list.'''
self.inventory.append(item)
return item

def remove(self, item):
'''Remove an item from inventory list.'''
if item not in self.inventory:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This approach works, but consider how a try-except block could improve your time complexity. 🤔 💭 😌

return False
self.inventory.remove(item)
return item

def get_by_category(self, category):
'''Return a list of items in the inventory with category.'''
category_list = [i for i in self.inventory if i.category == category]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great list comprehension! 👏🏾

Be sure to use descriptive variable names here too though!

return category_list

def swap_items(self, other_vendor, my_item, their_item):
'''Remove an item from this Vendor's inventory and swaps
with other vendor.'''
if my_item not in self.inventory or their_item not in other_vendor.inventory:
return False
self.add(their_item)
self.remove(my_item)
other_vendor.add(my_item)
other_vendor.remove(their_item)
return True


def swap_first_item(self, other_vendor):
'''Swap the first item in this vendor's inventory with
first item of other vendor.'''
if self.inventory and other_vendor.inventory:
my_item = self.inventory[0]
their_item = other_vendor.inventory[0]
self.swap_items(other_vendor, my_item, their_item)
return True
else:
return False

def get_best_by_category(self, category):
'''Returns item with the best condition in a certain category.'''
items_in_category = self.get_by_category(category)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice usage of an already implemented function 👍🏾

if not items_in_category:
return None
best_item = max(items_in_category, key=lambda item: item.condition)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oooo! Great usage of the max() function with a lambda function!! 🤩


return best_item


def swap_best_by_category(self, other, my_priority, their_priority):
'''Swap best item of certain categories with another vendor.'''
my_item = self.get_best_by_category(their_priority)
their_item = other.get_best_by_category(my_priority)

if my_item is None or their_item is None:
return False
self.swap_items(other, my_item, their_item)
return True
2 changes: 1 addition & 1 deletion tests/integration_tests/test_wave_01_02_03.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from swap_meet.vendor import Vendor
from swap_meet.item import Item

@pytest.mark.skip
# @pytest.mark.skip
@pytest.mark.integration_test
def test_integration_wave_01_02_03():
# make a vendor
Expand Down
2 changes: 1 addition & 1 deletion tests/integration_tests/test_wave_04_05_06.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from swap_meet.decor import Decor
from swap_meet.electronics import Electronics

@pytest.mark.skip
# @pytest.mark.skip
@pytest.mark.integration_test
def test_integration_wave_04_05_06():
camila = Vendor()
Expand Down
13 changes: 7 additions & 6 deletions tests/unit_tests/test_wave_01.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
import pytest
from swap_meet.vendor import Vendor

@pytest.mark.skip
# @pytest.mark.skip
def test_vendor_has_inventory():
vendor = Vendor()
assert len(vendor.inventory) == 0

@pytest.mark.skip
# @pytest.mark.skip
def test_vendor_takes_optional_inventory():
inventory = ["a", "b", "c"]
vendor = Vendor(inventory=inventory)
Expand All @@ -16,7 +16,7 @@ def test_vendor_takes_optional_inventory():
assert "b" in vendor.inventory
assert "c" in vendor.inventory

@pytest.mark.skip
# @pytest.mark.skip
def test_adding_to_inventory():
vendor = Vendor()
item = "new item"
Expand All @@ -27,7 +27,7 @@ def test_adding_to_inventory():
assert item in vendor.inventory
assert result == item

@pytest.mark.skip
# @pytest.mark.skip
def test_removing_from_inventory_returns_item():
item = "item to remove"
vendor = Vendor(
Expand All @@ -40,7 +40,7 @@ def test_removing_from_inventory_returns_item():
assert item not in vendor.inventory
assert result == item

@pytest.mark.skip
# @pytest.mark.skip
def test_removing_not_found_is_false():
item = "item to remove"
vendor = Vendor(
Expand All @@ -49,7 +49,8 @@ def test_removing_not_found_is_false():

result = vendor.remove(item)

raise Exception("Complete this test according to comments below.")
assert result == False
# raise Exception("Complete this test according to comments below.")
# *********************************************************************
# ****** Complete Assert Portion of this test **********
# *********************************************************************
12 changes: 8 additions & 4 deletions tests/unit_tests/test_wave_02.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
from swap_meet.vendor import Vendor
from swap_meet.item import Item

@pytest.mark.skip
# @pytest.mark.skip
def test_items_have_blank_default_category():
item = Item()
assert item.category == ""

@pytest.mark.skip
# @pytest.mark.skip
def test_get_items_by_category():
item_a = Item(category="clothing")
item_b = Item(category="electronics")
Expand All @@ -23,7 +23,7 @@ def test_get_items_by_category():
assert item_c in items
assert item_b not in items

@pytest.mark.skip
# @pytest.mark.skip
def test_get_no_matching_items_by_category():
item_a = Item(category="clothing")
item_b = Item(category="clothing")
Expand All @@ -34,7 +34,11 @@ def test_get_no_matching_items_by_category():

items = vendor.get_by_category("electronics")

raise Exception("Complete this test according to comments below.")
assert len(items) == 0

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good asserts 👍🏾

assert item_a not in items
assert item_b not in items
assert item_c not in items
# raise Exception("Complete this test according to comments below.")
# *********************************************************************
# ****** Complete Assert Portion of this test **********
# *********************************************************************
12 changes: 6 additions & 6 deletions tests/unit_tests/test_wave_03.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
from swap_meet.vendor import Vendor
from swap_meet.item import Item

@pytest.mark.skip
# @pytest.mark.skip
def test_item_overrides_to_string():
item = Item()

stringified_item = str(item)

assert stringified_item == "Hello World!"

@pytest.mark.skip
# @pytest.mark.skip
def test_swap_items_returns_true():
item_a = Item(category="clothing")
item_b = Item(category="clothing")
Expand Down Expand Up @@ -38,7 +38,7 @@ def test_swap_items_returns_true():
assert item_b in jolie.inventory
assert result

@pytest.mark.skip
# @pytest.mark.skip
def test_swap_items_when_my_item_is_missing_returns_false():
item_a = Item(category="clothing")
item_b = Item(category="clothing")
Expand All @@ -65,7 +65,7 @@ def test_swap_items_when_my_item_is_missing_returns_false():
assert item_e in jolie.inventory
assert not result

@pytest.mark.skip
# @pytest.mark.skip
def test_swap_items_when_their_item_is_missing_returns_false():
item_a = Item(category="clothing")
item_b = Item(category="clothing")
Expand All @@ -92,7 +92,7 @@ def test_swap_items_when_their_item_is_missing_returns_false():
assert item_e in jolie.inventory
assert not result

@pytest.mark.skip
# @pytest.mark.skip
def test_swap_items_from_my_empty_returns_false():
fatimah = Vendor(
inventory=[]
Expand All @@ -112,7 +112,7 @@ def test_swap_items_from_my_empty_returns_false():
assert len(jolie.inventory) == 2
assert not result

@pytest.mark.skip
# @pytest.mark.skip
def test_swap_items_from_their_empty_returns_false():
item_a = Item(category="clothing")
item_b = Item(category="clothing")
Expand Down
6 changes: 3 additions & 3 deletions tests/unit_tests/test_wave_04.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from swap_meet.vendor import Vendor
from swap_meet.item import Item

@pytest.mark.skip
# @pytest.mark.skip
def test_swap_first_item_returns_true():
item_a = Item(category="clothing")
item_b = Item(category="clothing")
Expand Down Expand Up @@ -30,7 +30,7 @@ def test_swap_first_item_returns_true():
assert item_a in jolie.inventory
assert result

@pytest.mark.skip
# @pytest.mark.skip
def test_swap_first_item_from_my_empty_returns_false():
fatimah = Vendor(
inventory=[]
Expand All @@ -48,7 +48,7 @@ def test_swap_first_item_from_my_empty_returns_false():
assert len(jolie.inventory) == 2
assert not result

@pytest.mark.skip
# @pytest.mark.skip
def test_swap_first_item_from_their_empty_returns_false():
item_a = Item(category="clothing")
item_b = Item(category="clothing")
Expand Down
10 changes: 5 additions & 5 deletions tests/unit_tests/test_wave_05.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,25 @@
from swap_meet.decor import Decor
from swap_meet.electronics import Electronics

@pytest.mark.skip
# @pytest.mark.skip
def test_clothing_has_default_category_and_to_str():
cloth = Clothing()
assert cloth.category == "Clothing"
assert str(cloth) == "The finest clothing you could wear."

@pytest.mark.skip
# @pytest.mark.skip
def test_decor_has_default_category_and_to_str():
decor = Decor()
assert decor.category == "Decor"
assert str(decor) == "Something to decorate your space."

@pytest.mark.skip
# @pytest.mark.skip
def test_electronics_has_default_category_and_to_str():
electronics = Electronics()
assert electronics.category == "Electronics"
assert str(electronics) == "A gadget full of buttons and secrets."

@pytest.mark.skip
# @pytest.mark.skip
def test_items_have_condition_as_float():
items = [
Clothing(condition=3.5),
Expand All @@ -31,7 +31,7 @@ def test_items_have_condition_as_float():
for item in items:
assert item.condition == pytest.approx(3.5)

@pytest.mark.skip
# @pytest.mark.skip
def test_items_have_condition_descriptions_that_are_the_same_regardless_of_type():
items = [
Clothing(condition=5),
Expand Down
Loading