Skip to content
This repository has been archived by the owner on Jan 30, 2023. It is now read-only.

Commit

Permalink
sage.doctest.external.has_internet: Refactor through new Feature
Browse files Browse the repository at this point in the history
  • Loading branch information
Matthias Koeppe committed Oct 7, 2021
1 parent 52915b6 commit 1c6335a
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 8 deletions.
12 changes: 4 additions & 8 deletions src/sage/doctest/external.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,15 +53,11 @@ def has_internet():
EXAMPLES::
sage: from sage.doctest.external import has_internet
sage: has_internet() # random, optional -- internet
True
sage: has_internet() # random, optional -- internet
FeatureTestResult('internet', True)
"""
req = Request("https://www.sagemath.org",headers={"User-Agent":"sage-doctest"})
try:
urlopen(req, timeout=1, context=SSLContext())
return True
except urllib.error.URLError:
return False
from sage.features.internet import Internet
return Internet().is_present()

def has_latex():
"""
Expand Down
47 changes: 47 additions & 0 deletions src/sage/features/internet.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
from . import Feature, FeatureTestResult


class Internet(Feature):
r"""
A feature describing if Internet is available.
Failure of connecting to the site "https://www.sagemath.org" within a second
is regarded as internet being not available.
EXAMPLES::
sage: from sage.features.internet import Internet
sage: Internet()
Feature('internet')
"""

def __init__(self):
r"""
TESTS::
sage: from sage.features.internet import Internet
sage: Internet() is Internet()
True
"""
Feature.__init__(self, 'internet')

def _is_present(self):
r"""
Test whether Internet is available.
EXAMPLES::
sage: from sage.features.internet import Internet
sage: Internet().is_present() # random, optional -- internet
FeatureTestResult('internet', True)
"""
import urllib.error
from urllib.request import Request, urlopen
from ssl import SSLContext

req = Request("https://www.sagemath.org", headers={"User-Agent": "sage-doctest"})
try:
urlopen(req, timeout=1, context=SSLContext())
return FeatureTestResult(self, True)
except urllib.error.URLError:
return FeatureTestResult(self, False)

0 comments on commit 1c6335a

Please sign in to comment.