1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
#!/usr/bin/env python
"""Stateful programmatic web browsing.
Stateful programmatic web browsing, after Andy Lester's Perl module
WWW::Mechanize.
The library is layered: mechanize.Browser (stateful web browser),
mechanize.UserAgent (configurable URL opener), plus urllib2 handlers.
Features include: ftp:, http: and file: URL schemes, browser history,
high-level hyperlink and HTML form support, HTTP cookies, HTTP-EQUIV and
Refresh, Referer [sic] header, robots.txt, redirections, proxies, and
Basic and Digest HTTP authentication. mechanize's response objects are
(lazily-) .seek()able and still work after .close().
Much of the code originally derived from Perl code by Gisle Aas
(libwww-perl), Johnny Lee (MSIE Cookie support) and last but not least
Andy Lester (WWW::Mechanize). urllib2 was written by Jeremy Hylton.
"""
def unparse_version(tup):
major, minor, bugfix, state_char, pre = tup
fmt = "%s.%s.%s"
args = [major, minor, bugfix]
if state_char is not None:
fmt += "%s"
args.append(state_char)
if pre is not None:
fmt += "-pre%s"
args.append(pre)
return fmt % tuple(args)
def str_to_tuple(text):
if text.startswith("("):
text = text[1:-1]
els = [el.strip() for el in text.split(",")]
newEls = []
for ii in range(len(els)):
el = els[ii]
if el == "None":
newEls.append(None)
elif 0 <= ii < 3:
newEls.append(int(el))
else:
if el.startswith("'") or el.startswith('"'):
el = el[1:-1]
newEls.append(el)
return tuple(newEls)
import re
## VERSION_MATCH = re.search(r'__version__ = \((.*)\)',
## open("mechanize/_mechanize.py").read())
## VERSION = unparse_version(str_to_tuple(VERSION_MATCH.group(1)))
VERSION = "0.1.2b"
INSTALL_REQUIRES = ["ClientForm>=0.2.2, ==dev"]
NAME = "mechanize"
PACKAGE = True
LICENSE = "BSD" # or ZPL 2.1
PLATFORMS = ["any"]
ZIP_SAFE = True
CLASSIFIERS = """\
Development Status :: 3 - Alpha
Intended Audience :: Developers
Intended Audience :: System Administrators
License :: OSI Approved :: BSD License
License :: OSI Approved :: Zope Public License
Natural Language :: English
Operating System :: OS Independent
Programming Language :: Python
Topic :: Internet
Topic :: Internet :: File Transfer Protocol (FTP)
Topic :: Internet :: WWW/HTTP
Topic :: Internet :: WWW/HTTP :: Browsers
Topic :: Internet :: WWW/HTTP :: Indexing/Search
Topic :: Internet :: WWW/HTTP :: Site Management
Topic :: Internet :: WWW/HTTP :: Site Management :: Link Checking
Topic :: Software Development :: Libraries
Topic :: Software Development :: Libraries :: Python Modules
Topic :: Software Development :: Testing
Topic :: Software Development :: Testing :: Traffic Generation
Topic :: System :: Archiving :: Mirroring
Topic :: System :: Networking :: Monitoring
Topic :: System :: Systems Administration
Topic :: Text Processing
Topic :: Text Processing :: Markup
Topic :: Text Processing :: Markup :: HTML
Topic :: Text Processing :: Markup :: XML
"""
#-------------------------------------------------------
# the rest is constant for most of my released packages:
import sys
if PACKAGE:
packages, py_modules = [NAME], None
else:
packages, py_modules = None, [NAME]
doclines = __doc__.split("\n")
if not hasattr(sys, "version_info") or sys.version_info < (2, 3):
from distutils.core import setup
_setup = setup
def setup(**kwargs):
for key in [
# distutils >= Python 2.3 args
# XXX probably download_url came in earlier than 2.3
"classifiers", "download_url",
# setuptools args
"install_requires", "zip_safe", "test_suite",
]:
if kwargs.has_key(key):
del kwargs[key]
# Only want packages keyword if this is a package,
# only want py_modules keyword if this is a single-file module,
# so get rid of packages or py_modules keyword as appropriate.
if kwargs["packages"] is None:
del kwargs["packages"]
else:
del kwargs["py_modules"]
apply(_setup, (), kwargs)
else:
import ez_setup
ez_setup.use_setuptools()
from setuptools import setup
setup(
name = NAME,
version = VERSION,
license = LICENSE,
platforms = PLATFORMS,
classifiers = [c for c in CLASSIFIERS.split("\n") if c],
install_requires = INSTALL_REQUIRES,
zip_safe = ZIP_SAFE,
test_suite = "test",
author = "John J. Lee",
author_email = "jjl@pobox.com",
description = doclines[0],
long_description = "\n".join(doclines[2:]),
url = "http://wwwsearch.sourceforge.net/%s/" % NAME,
download_url = ("http://wwwsearch.sourceforge.net/%s/src/"
"%s-%s.tar.gz" % (NAME, NAME, VERSION)),
py_modules = py_modules,
packages = packages,
)
|