def test_redirect(self, request): result = False old_url = base_url() + self.old new_path = self.overwrite if self.overwrite else self.new new_url = base_url() + new_path try: resp = requests.get(old_url) except ConnectionError: messages.add_message( request, messages.ERROR, ugettext(u"Can't connect to url: %(old_url)s") % {"old_url": old_url} ) result = None except RequestException as e: messages.add_message(request, messages.ERROR, "%s: %s" % (e, self.old)) result = None else: # successfull request, test for history if resp.status_code == 200: try: # first history entry should be the redirect redir = resp.history[0] if redir.status_code == 301: location = redir.headers.get("Location") # location of redirect has to match # Django 1.9 will send back relative urls # if run via dev server # Both absolute and relative urls should # be accounted for # https://en.wikipedia.org/wiki/HTTP_location if location == new_url or location == new_path: result = True except IndexError: pass self.last_test_result = result self.last_test_date = now() self.save() return result
def manual_test(self, obj): link = base_url() + obj.old return format_html('<a class="button" href="%s" target="_blank">Link</a>' % link)