home *** CD-ROM | disk | FTP | other *** search
- """Miscellaneous utility functions
-
- This program is part of "Dive Into Python", a free Python book for
- experienced programmers. Visit http://diveintopython.org/ for the
- latest version.
- """
-
- __author__ = "Mark Pilgrim (mark@diveintopython.org)"
- __version__ = "$Revision: 1.3 $"
- __date__ = "$Date: 2004/05/05 21:57:20 $"
- __copyright__ = "Copyright (c) 2001 Mark Pilgrim"
- __license__ = "Python"
-
- def openAnything(source):
- """URI, filename, or string --> stream
-
- This function lets you define parsers that take any input source
- (URL, pathname to local or network file, or actual data as a string)
- and deal with it in a uniform manner. Returned object is guaranteed
- to have all the basic stdio read methods (read, readline, readlines).
- Just .close() the object when you're done with it.
-
- Examples:
- >>> from xml.dom import minidom
- >>> sock = openAnything("http://localhost/kant.xml")
- >>> doc = minidom.parse(sock)
- >>> sock.close()
- >>> sock = openAnything("c:\\inetpub\\wwwroot\\kant.xml")
- >>> doc = minidom.parse(sock)
- >>> sock.close()
- >>> sock = openAnything("<ref id='conjunction'><text>and</text><text>or</text></ref>")
- >>> doc = minidom.parse(sock)
- >>> sock.close()
- """
-
- if hasattr(source, "read"):
- return source
-
- if source == "-":
- import sys
- return sys.stdin
-
- # try to open with urllib (if source is http, ftp, or file URL)
- import urllib
- try:
- return urllib.urlopen(source)
- except (IOError, OSError):
- pass
-
- # try to open with native open function (if source is pathname)
- try:
- return open(source)
- except (IOError, OSError):
- pass
-
- # treat source as string
- import StringIO
- return StringIO.StringIO(str(source))
-