Advertisement
Guest User

restart-case example

a guest
Jul 22nd, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 0.87 KB | None | 0 0
  1. (define-condition error-503 (error)
  2.   ((url :initarg :url)))
  3.  
  4. (defclass webpage ()
  5.   ((url :initarg :url)))
  6.  
  7. (defun http-get (url)
  8.   (format t "Retrieving: ~S~%" url)
  9.   (when (= (random 10) 0)
  10.     (error 'error-503 :url url))
  11.   (make-instance 'webpage :url url))
  12.  
  13. (defun crawl (urls)
  14.   (handler-bind ((error-503 #'(lambda (e)
  15.                                 (format t "Info: ~A~%" e)
  16.                                 (invoke-restart 'retry-a-bit-later))))
  17.     (let ((web-pages '()))
  18.       (dolist (url urls)
  19.         :again
  20.         (restart-case
  21.             (push (http-get url) web-pages)
  22.           (retry-a-bit-later ()
  23.             (format t "Let's retry in 10 seconds again...~%")
  24.             (sleep 10)
  25.             (go :again))))
  26.       web-pages)))
  27.  
  28. ;;; run e.g. with
  29. ;;;   (crawl (loop for i from 0 below 10 collect (format nil "http://foo.com/~D.html" i)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement