blob: e8c29d5bac02b670ae89fc2cd55679c6b4e1e70e [file] [log] [blame]
#!/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.9"
INSTALL_REQUIRES = ["ClientForm>=0.2.6, ==dev"]
NAME = "mechanize"
PACKAGE = True
LICENSE = "BSD" # or ZPL 2.1
PLATFORMS = ["any"]
ZIP_SAFE = True
CLASSIFIERS = """\
Development Status :: 5 - Production/Stable
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,
)