Skip to content

Commit

Permalink
Fixing tests & adding ability to view the advertisement
Browse files Browse the repository at this point in the history
(closes rosineygp#18)
See pull request for a screenshot of how many tries it really took to pass all tests
  • Loading branch information
spookyahell committed Aug 4, 2021
1 parent e0c865d commit c947734
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 29 deletions.
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@ pip install PyIsEven
```python
from is_even import is_even as ie

ie.is_even(10)
ie.is_even(10).is_even
> True

# Random ad
ie.is_even(10).ad
> "HONDA CIVIC '96, AM/FM/CD, low miles, Good condition. Speaks Spanish $3500 339-555-6289"
ie.is_even(10).ad
> "CHINA CABINET, buffet, hutch solid pine, 6.5 tall x 4.5 wide, lighted windows. few cat scratches but cat has died. $700. Call 435-555-6421"
```
19 changes: 13 additions & 6 deletions is_even/_py2_is_even.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
import requests
from requests.exceptions import RequestException, ConnectTimeout


class ISEVEN_APIresponse(object):
def __init__(self, is_even, ad):
self.is_even = is_even
self.ad = ad


def is_even(number):
Expand All @@ -10,16 +17,16 @@ def is_even(number):
try:
r = requests.get("https://api.isevenapi.xyz/api/iseven/" + str(n) + "/")

if r.ok:
return r.json()["iseven"]
else:
if "error" in r.json():
raise Exception(r.json()["error"])
except Exception:
return _is_even(n)
else:
return ISEVEN_APIresponse(r.json()["iseven"], r.json()["ad"])
except (RequestException, ConnectTimeout):
return ISEVEN_APIresponse(_is_even(n), "Python Software Foundation rocks!")


def is_odd(number):
return not is_even(number)
return not is_even(number).is_even


def _is_even(n):
Expand Down
19 changes: 13 additions & 6 deletions is_even/_py3_10_is_even.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,13 @@
from retry import retry
from typing_extensions import TypeGuard
from ._typings import Success, Error
from requests.exceptions import RequestException, ConnectTimeout


class ISEVEN_APIresponse(object):
def __init__(self, is_even, ad):
self.is_even = is_even
self.ad = ad


@lru_cache(maxsize=None)
Expand All @@ -17,16 +24,16 @@ def is_even(number: str | int) -> TypeGuard[int]:

json: Success | Error = r.json()

if r.status_code == requests.codes.ok:
return json["iseven"]
else:
if "error" in json:
raise Exception(json["error"])
except Exception:
return list(_is_even(n))[-1]
else:
return ISEVEN_APIresponse(json["iseven"], json["ad"])
except (RequestException, ConnectTimeout):
return ISEVEN_APIresponse(_is_even(n), "Python Software Foundation rocks!")


def is_odd(number: str | int) -> TypeGuard[int]:
return not is_even(number)
return not is_even(number).is_even


def _is_even(n: int):
Expand Down
19 changes: 13 additions & 6 deletions is_even/_py3_8_is_even.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,18 @@
from retry import retry
from typing import TYPE_CHECKING, Union
from ._typings import Success, Error
from requests.exceptions import RequestException, ConnectTimeout

if TYPE_CHECKING:
from typing_extensions import TypeGuard


class ISEVEN_APIresponse(object):
def __init__(self, is_even, ad):
self.is_even = is_even
self.ad = ad


@lru_cache(maxsize=None)
@retry(ConnectionError, tries=3, delay=2)
def is_even(number: Union[str, int]) -> TypeGuard[int]:
Expand All @@ -22,16 +29,16 @@ def is_even(number: Union[str, int]) -> TypeGuard[int]:

json: Union[Success, Error] = r.json()

if r.status_code == requests.codes.ok:
return json["iseven"]
else:
if "error" in json:
raise Exception(json["error"])
except Exception:
return list(_is_even(n))[-1]
else:
return ISEVEN_APIresponse(json["iseven"], json["ad"])
except (RequestException, ConnectTimeout):
return ISEVEN_APIresponse(_is_even(n), "Python Software Foundation rocks!")


def is_odd(number: Union[str, int]) -> TypeGuard[int]:
return not is_even(number)
return not is_even(number).is_even


def _is_even(n: int):
Expand Down
19 changes: 13 additions & 6 deletions is_even/_py3_is_even.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@
from functools import lru_cache
from retry import retry
from typing import Union
from requests.exceptions import RequestException, ConnectTimeout


class ISEVEN_APIresponse(object):
def __init__(self, is_even, ad):
self.is_even = is_even
self.ad = ad


@lru_cache(maxsize=None)
Expand All @@ -12,16 +19,16 @@ def is_even(number: Union[str, int]) -> bool:
try:
r = requests.get(f"https://api.isevenapi.xyz/api/iseven/{n}/")

if r.status_code == requests.codes.ok:
return r.json()["iseven"]
else:
if "error" in r.json():
raise Exception(r.json()["error"])
except Exception:
return list(_is_even(n))[-1]
else:
return ISEVEN_APIresponse(r.json()["iseven"], r.json()["ad"])
except (RequestException, ConnectTimeout):
return ISEVEN_APIresponse(_is_even(n), "Python Software foundation rocks!")


def is_odd(number: Union[str, int]) -> bool:
return not is_even(number)
return not is_even(number).is_even


def _is_even(n: int):
Expand Down
8 changes: 4 additions & 4 deletions test_is_even.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,24 @@

class TestIsEven(unittest.TestCase):
def test_even(self):
even = is_even.is_even(2)
even = is_even.is_even(2).is_even
self.assertTrue(even)

def test_odd(self):
odd = is_even.is_odd(3)
self.assertTrue(odd)

def test_not_even(self):
even = is_even.is_even(3)
even = is_even.is_even(3).is_even
self.assertFalse(even)

def test_not_odd(self):
even = is_even.is_odd(2)
self.assertFalse(even)

def test_cache(self):
self.assertTrue(is_even.is_even(2))
self.assertFalse(is_even.is_even(3))
self.assertTrue(is_even.is_even(2).is_even)
self.assertFalse(is_even.is_even(3).is_even)

def test_negative(self):
with self.assertRaises(Exception):
Expand Down

0 comments on commit c947734

Please sign in to comment.