fork download
  1. import random
  2. from tenacity import retry, before, retry_if_exception_type, stop_after_attempt
  3.  
  4. class ExpiredTokenException(Exception):
  5. pass
  6.  
  7. class external_http_request_interface:
  8. def get_token(self):
  9. return "some token"
  10.  
  11. def make_request(self, token, request):
  12. if (random.randint(0, 5) < 3):
  13. raise ExpiredTokenException("Your token has expired!")
  14. return "Request result for: " + str(request)
  15.  
  16. def old_way():
  17. http = external_http_request_interface()
  18. token = http.get_token()
  19.  
  20. # Do some stuff with your token here...
  21.  
  22. attempts = 0
  23. while (attempts < 10):
  24. try:
  25. result = http.make_request(token, "some request")
  26. except ExpiredTokenException:
  27. token = http.get_token()
  28. continue
  29.  
  30. print(result)
  31.  
  32. break
  33.  
  34. @retry(retry=retry_if_exception_type(ExpiredTokenException),
  35. stop=stop_after_attempt(10),
  36. before=(token = external_http_request_interface.get_token(http)))
  37. def part_to_retry(http, token):
  38. result = http.make_request(token, "some request")
  39. return result
  40.  
  41. def new_way():
  42. http = external_http_request_interface()
  43. token = http.get_token()
  44.  
  45. return part_to_retry(http, token)
  46.  
  47.  
  48. old_way()
  49. new_way()
  50.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Traceback (most recent call last):
  File "/usr/lib/python3.5/py_compile.py", line 125, in compile
    _optimize=optimize)
  File "<frozen importlib._bootstrap_external>", line 735, in source_to_code
  File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
  File "./prog.py", line 36
    before=(token = external_http_request_interface.get_token(http)))
                  ^
SyntaxError: invalid syntax

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3.5/py_compile.py", line 129, in compile
    raise py_exc
py_compile.PyCompileError:   File "./prog.py", line 36
    before=(token = external_http_request_interface.get_token(http)))
                  ^
SyntaxError: invalid syntax

stdout
Standard output is empty