summaryrefslogtreecommitdiff
path: root/examples/getNTPserversNew.py
diff options
context:
space:
mode:
authorPaul McGuire <ptmcg@austin.rr.com>2019-04-06 23:44:02 -0500
committerPaul McGuire <ptmcg@austin.rr.com>2019-04-06 23:44:02 -0500
commita2439508ba5c94546db98593cfa676de9b59babe (patch)
tree80b02178820811c09b4befc9a9b5efb092813466 /examples/getNTPserversNew.py
parent832986ffccac943b363da43795c335eafc31b5da (diff)
downloadpyparsing-git-a2439508ba5c94546db98593cfa676de9b59babe.tar.gz
Fixed dict structure in makeHTMLTags expressions, and added tag_body attribute to the generated start expression giving easy access to a SkipTo(closeTag) that will parse the tag's body text; some code cleanup and removed duplication among examples
Diffstat (limited to 'examples/getNTPserversNew.py')
-rw-r--r--examples/getNTPserversNew.py71
1 files changed, 36 insertions, 35 deletions
diff --git a/examples/getNTPserversNew.py b/examples/getNTPserversNew.py
index c87c0ae..c86e756 100644
--- a/examples/getNTPserversNew.py
+++ b/examples/getNTPserversNew.py
@@ -1,35 +1,36 @@
-# getNTPserversNew.py
-#
-# Demonstration of the parsing module, implementing a HTML page scanner,
-# to extract a list of NTP time servers from the NIST web site.
-#
-# Copyright 2004-2010, by Paul McGuire
-# September, 2010 - updated to more current use of setResultsName, new NIST URL
-#
-from pyparsing import (Word, Combine, SkipTo, nums, makeHTMLTags,
- delimitedList, alphas, alphanums)
-try:
- import urllib.request
- urlopen = urllib.request.urlopen
-except ImportError:
- import urllib
- urlopen = urllib.urlopen
-
-integer = Word(nums)
-ipAddress = Combine( integer + "." + integer + "." + integer + "." + integer )
-hostname = delimitedList(Word(alphas,alphanums+"-_"),".",combine=True)
-tdStart,tdEnd = makeHTMLTags("td")
-timeServerPattern = (tdStart + hostname("hostname") + tdEnd +
- tdStart + ipAddress("ipAddr") + tdEnd +
- tdStart + SkipTo(tdEnd)("loc") + tdEnd)
-
-# get list of time servers
-nistTimeServerURL = "https://tf.nist.gov/tf-cgi/servers.cgi#"
-serverListPage = urlopen( nistTimeServerURL )
-serverListHTML = serverListPage.read().decode("UTF-8")
-serverListPage.close()
-
-addrs = {}
-for srvr,startloc,endloc in timeServerPattern.scanString( serverListHTML ):
- print("{0} ({1}) - {2}".format(srvr.ipAddr, srvr.hostname.strip(), srvr.loc.strip()))
- addrs[srvr.ipAddr] = srvr.loc
+# getNTPserversNew.py
+#
+# Demonstration of the parsing module, implementing a HTML page scanner,
+# to extract a list of NTP time servers from the NIST web site.
+#
+# Copyright 2004-2010, by Paul McGuire
+# September, 2010 - updated to more current use of setResultsName, new NIST URL
+#
+import pyparsing as pp
+ppc = pp.pyparsing_common
+from contextlib import closing
+
+try:
+ import urllib.request
+ urlopen = urllib.request.urlopen
+except ImportError:
+ import urllib
+ urlopen = urllib.urlopen
+
+integer = pp.Word(pp.nums)
+ipAddress = ppc.ipv4_address()
+hostname = pp.delimitedList(pp.Word(pp.alphas, pp.alphanums+"-_"), ".", combine=True)
+tdStart, tdEnd = pp.makeHTMLTags("td")
+timeServerPattern = (tdStart + hostname("hostname") + tdEnd
+ + tdStart + ipAddress("ipAddr") + tdEnd
+ + tdStart + tdStart.tag_body("loc") + tdEnd)
+
+# get list of time servers
+nistTimeServerURL = "https://tf.nist.gov/tf-cgi/servers.cgi#"
+with closing(urlopen(nistTimeServerURL)) as serverListPage:
+ serverListHTML = serverListPage.read().decode("UTF-8")
+
+addrs = {}
+for srvr, startloc, endloc in timeServerPattern.scanString(serverListHTML):
+ print("{0} ({1}) - {2}".format(srvr.ipAddr, srvr.hostname.strip(), srvr.loc.strip()))
+ addrs[srvr.ipAddr] = srvr.loc