-
Notifications
You must be signed in to change notification settings - Fork 1.2k
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
Implemented py-lockdown-cafe #545
base: master
Are you sure you want to change the base?
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
import datetime | ||
|
||
from app.errors import (NotVaccinatedError, | ||
OutdatedVaccineError, | ||
NotWearingMaskError) | ||
|
||
|
||
class Cafe: | ||
def __init__(self, name: str) -> None: | ||
self.name = name | ||
|
||
def visit_cafe(self, | ||
visitor: dict | ||
) -> (str | ||
| NotVaccinatedError | ||
| OutdatedVaccineError | ||
| NotWearingMaskError): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. the function doesn't return errors it raises them |
||
|
||
if "vaccine" not in visitor: | ||
raise NotVaccinatedError | ||
|
||
current_date = datetime.datetime.now().date() | ||
if visitor["vaccine"]["expiration_date"] < current_date: | ||
raise OutdatedVaccineError | ||
|
||
if not visitor.get("wearing_a_mask", False): | ||
raise NotWearingMaskError(masks_to_buy=0) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. maybe it's better to use a default value for your custom error? |
||
|
||
return f"Welcome to {self.name}" |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
class VaccineError(Exception): | ||
def __str__(self) -> str: | ||
return "All friends should be vaccinated" | ||
|
||
|
||
class NotVaccinatedError(VaccineError): | ||
pass | ||
|
||
|
||
class OutdatedVaccineError(VaccineError): | ||
pass | ||
|
||
|
||
class NotWearingMaskError(Exception): | ||
def __init__(self, masks_to_buy: int) -> None: | ||
self.masks_to_buy = masks_to_buy | ||
super().__init__() | ||
|
||
def __str__(self) -> str: | ||
return f"Friends should buy {self.masks_to_buy} masks" |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,25 @@ | ||
# write your code here | ||
from app.cafe import Cafe | ||
from app.errors import NotWearingMaskError, VaccineError | ||
|
||
|
||
def go_to_cafe(friends: list, | ||
cafe: Cafe | ||
) -> str | VaccineError: | ||
|
||
not_wearing_mask_error = None | ||
|
||
for friend in friends: | ||
try: | ||
cafe.visit_cafe(friend) | ||
except VaccineError as e: | ||
return str(e) | ||
except NotWearingMaskError as e: | ||
if not not_wearing_mask_error: | ||
not_wearing_mask_error = e | ||
if not_wearing_mask_error: | ||
not_wearing_mask_error.masks_to_buy += 1 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. why didn't use else? |
||
|
||
if not_wearing_mask_error is not None: | ||
return str(not_wearing_mask_error) | ||
|
||
return f"Friends can go to {cafe.name}" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fix indentation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the same in other similar cases