* Fix processing of http-equiv meta tags incorrectly lower casing the content
* Fix error when a textbox contained within a form contains unicode characters
2017-10-13 Kovid Goyal
* 0.3.6 release.
* Use html5-parser for parsing HTML, when available instead of html5lib
for a big performance boost.
* Fix error when trying to submit forms with non-ascii values on systems
where the default encoding is ascii.
* Fix errors on python environments with broken threading
2017-06-24 Kovid Goyal
* 0.3.5 release.
* Fix error when trying to open pages that contain HTML entities that
decode to unicode characters in their <head> sections
2017-05-05 Kovid Goyal
* 0.3.3 release.
* Add get() and __getitem__ methods to the response object for conveninent access to response headers
2017-04-29 Kovid Goyal
* 0.3.2 release.
* Allow overriding of Host headers via addheaders
* Fix using unicode strings in addheaders and trying to send data with a request failing
2017-03-17 Kovid Goyal
* 0.3.1 release.
* Allow easily selecting forms based on HTML attributes of the <form> tag
* Allow specifying the HTTP method when creating requests
* Convenience API to set headers
* Convenience API for dealing with cookies
* Create full documentation at: https://mechanize.readthedocs.io/en/latest/
2017-03-15 Kovid Goyal
* 0.3.0 release.
* Support HTML 5 (all html is now parsed using html5lib)
* Implement cloning of browser instances via Browser.__copy__()
* Make gzip content-encoding non-experimental. Always handle it if sent by the server, regardless of set_handle_gzip().
* mechanize now requires python >= 2.7.0
* When processing cookies that have a blank (unset) path, assume the path
is /. Mimics modern browser behavior.
* Support PyPy (added to continuous integration testing)
* Make the global urlopen/urlretrieve methods threadsafe
* Add support for user supplied CA certificates
* Fix gzip not being requested on HTTPS connections
* Normalize the case of HTTP headers in requests
* Fix proxy authentication for https connections not working
* Size of codebase reduced by 10,000 lines of code (40%)
* Backward incompatibility: The factory keyword argument to Browser is no longer allowed
* Backward incompatibility: Browser.forms() and Browser.links() return unicode strings instead of byte strings
* Backward incompatibility: When searching for a form control if more than one control matches, an AmbiguityError is always raised
* Backward incompatibility: There is no longer a mechanize.ParseError and mechanize.ParseResponse
class. Parsing now uses the HTML 5 algorithm, which is designed to not fail on malformed markup.
* Backward incompatibility: For links that do not have any text the text
attribute is now always an empty string instead of None or an empty string.
* Backward incompatibility: Remove support for the <isindex> HTML tag which was deprecated in HTML 4 and removed in HTML 5
2011-03-31 John J Lee <jjlpobox.com>
* 0.2.5 release.
* This is essentially a no-changes release to fix easy_install
breakage caused by a SourceForge issue
* Sourceforge is returning invalid HTTP responses, make download
links point to PyPI instead
* Include cookietest.cgi in source distribution
* Note new IETF cookie standardisation effort
2010-10-28 John J Lee <jjlpobox.com>
* 0.2.4 release.
* Fix IndexError on empty Content-type header value. (GH-18)
* Fall back to another encoding if an unknown one is declared.
Fixes traceback on unknown encoding in Content-type header.
(GH-30)
2010-10-16 John J Lee <jjlpobox.com>
* 0.2.3 release.
* Fix str(ParseError()) traceback. (GH-25)
* Add equality methods to mechanize.Cookie . (GH-29)
2010-07-17 John J Lee <jjlpobox.com>
* 0.2.2 release.
* Officially support Python 2.7 (no changes were required)
* Fix TypeError on .open()ing ftp: URL (only affects Python 2.4
and 2.5)
* Don't include HTTPSHandler in __all__ if it's not available
2010-05-16 John J Lee <jjlpobox.com>
* 0.2.1 release.
* API change: Change argument order of
HTTPRedirectHandler.redirect_request() to match urllib2.
* Fix failure to use bundled BeautifulSoup for forms. (GH-15)
* Fix default cookie path where request path has query containing
/ character. (http://bugs.python.org/issue3704)
* Fix failure to raise on click for nonexistent label. (GH-16)
* Documentation fixes.
2010-04-22 John J Lee <jjlpobox.com>
* 0.2.0 release.
* Behaviour change: merged upstream urllib2 change (allegedly a
"bug fix") to return a response for all 2** HTTP responses (e.g.
206 Partial Content). Previously, only 200 caused a response
object to be returned. All other HTTP response codes resulted
in a response object being raised as an exception.
* Behaviour change: Use of mechanize classes with `urllib2` (and
vice-versa) is no longer supported. However, existing classes
implementing the urllib2 Handler interface are likely to work
unchanged with mechanize. Removed RequestUpgradeProcessor,
ResponseUpgradeProcessor, SeekableProcessor.
* ClientForm has been merged into mechanize. This means that
mechanize has no dependencies other than Python itself. The
ClientForm API is still available -- to switch from ClientForm to
mechanize, just s/ClientForm/mechanize in your source code, and
ensure any use of the module logging logger named "ClientForm" is
updated to use the new logger name "mechanize.forms". I probably
won't do further standalone releases of ClientForm.
* Stop monkey-patching Python stdlib.
* Merge fixes from urllib2 trunk
* Close file objects on .read() failure in .retrieve()
* Fix a python 2.4 bug due to buggy urllib.splithost
* Fix Python 2.4 syntax error in _firefox3cookiejar
* Fix __init__.py typo that hid mechanize.seek_wrapped_response and
mechanize.str2time. Fixes
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=465206
* Fix an obvious bug with experimental firefox 3 cookiejar support.
It's still experimental and not properly tested.
* Change documentation to not require a .port attribute on request
objects, since that's unused.
* Doc fixes
* Added mechanize.urljoin (RFC 3986 compliant function for joining
a base URI with a URI reference)
* Merge of ClientForm (see above).
* Moved to git (from SVN) http://github.com/jjlee/mechanize
* Created an issue tracker http://github.com/jjlee/mechanize/issues
* Docs are now in markdown format (thanks John Gabriele).
* Website rearranged. The old website has been archived at
http://wwwsearch.sourceforge.net/old/ . The new website is
essentially just the mechanize pages, rearranged and cleaned up a
bit.
* Source code rearranged for easier merging with upstream urllib2
* Fully automated release process.
* New test runner. Single test suite; tests create their own HTTP
server fixtures (server fixtures are cached where possible for
speed).
2009-02-07 John J Lee <jjlpobox.com>
* 0.1.11 release.
* Fix quadratic performance in number of .read() calls (and add an
automated performance test).
2008-12-03 John J Lee <jjlpobox.com>
* 0.1.10 release.
* Add support for Python 2.6: Raise URLError on file: URL errors,
not IOError (port of upstream urllib2 fix). Add support for
Python 2.6's per-connection timeouts: Add timeout arguments to
urlopen(), Request constructor, .open(), and .open_novisit().
* Drop support for Python 2.3
* Add Content-length header to Request object (httplib bug that
prevented doing that was fixed in Python 2.4). There's no
change is what is actually sent over the wire here, just in what
headers get added to the Request object.
* Fix AttributeError on .retrieve() with a Request (as opposed to
URL string) argument
* Don't change CookieJar state in .make_cookies().
* Fix AttributeError in case where .make_cookies() or
.cookies_for_request() is called before other methods like
.extract_cookies() or .make_cookie_header()
* Fixes affecting version cookie-attribute
(http://bugs.python.org/issue3924).
* Silence module logging's "no handlers could be found for logger
mechanize" warning in a way that doesn't clobber attempts to set
log level sometimes
* Don't use private attribute of request in request upgrade
handler (what was I thinking??)
* Don't call setup() on import of setup.py
* Add new public function effective_request_host
* Add .get_policy() method to CookieJar
* Add method CookieJar.cookies_for_request()
* Fix documented interface required of requests and responses (and
add some tests for this!)
* Allow either .is_unverifiable() or .unverifiable on request
objects (preferring the former)
* Note that there's a new functional test for digest auth, which
fails when run against the sourceforge site (which is the
default). It looks like this reflects the fact that digest auth
has been fairly broken since it was introduced in urllib2. I
don't plan to fix this myself.
2008-09-24 John J Lee <jjlpobox.com>
* 0.1.9 release.
* Fix ImportError if sqlite3 not available
* Fix a couple of functional tests not to wait 5 seconds each
2008-09-13 John J Lee <jjlpobox.com>
* 0.1.8 release.
* Close sockets. This only affects Python 2.5 (and later) -
earlier versions of Python were unaffected. See
http://bugs.python.org/issue1627441
* Make title parsing follow Firefox behaviour wrt child
elements (previously the behaviour differed between Factory and
RobustFactory).
* Fix BeautifulSoup RobustLinksFactory (hence RobustFactory) link
text parsing for case of link text containing tags (Titus Brown)
* Fix issue where more tags after <title> caused default parser to
raise an exception
* Handle missing cookie max-age value. Previously, a warning was
emitted in this case.
* Fix thoroughly broken digest auth (still need functional
test!) (trebor74hr...)
* Handle cookies containing embedded tabs in mozilla format files
* Remove an assertion about mozilla format cookies file
contents (raise LoadError instead)
* Fix MechanizeRobotFileParser.set_opener()
* Fix selection of global form using .select_form() (Titus Brown)
* Log skipped Refreshes
* Stop tests from clobbering files that happen to be lying around
in cwd (!)
* Use SO_REUSEADDR for local test server.
* Raise exception if local test server fails to start.
* Tests no longer (accidentally) depend on third-party coverage
module
* The usual docs and test fixes.
* Add convenience method Browser.open_local_file(filename)
* Add experimental support for Firefox 3 cookie jars
("cookies.sqlite"). Requires Python 2.5
* Fix a _gzip.py NameError (gzip support is experimental)
2007-05-31 John J Lee <jjlpobox.com>
* 0.1.7b release.
* Sub-requests should not usually be visiting, so make it so. In
fact the visible behaviour wasn't really broken here, since
.back() skips over None responses (which is odd in itself, but
won't be changed until after stable release is branched).
However, this patch does change visible behaviour in that it
creates new Request objects for sub-requests (e.g. basic auth
retries) where previously we just mutated the existing Request
object.
* Changes to sort out abuse of by SeekableProcessor and
ResponseUpgradeProcessor (latter shouldn't have been public in
the first place) and resulting confusing / unclear / broken
behaviour. Deprecate SeekableProcessor and
ResponseUpgradeProcessor. Add SeekableResponseOpener. Remove
SeekableProcessor and ResponseUpgradeProcessor from Browser.
Move UserAgentBase.add_referer_header() to Browser (it was on by
default, breaking UserAgent, and should never really have been
there).
* Fix HTTP proxy support: r29110 meant that Request.get_selector()
didn't take into account the change to .__r_host
(Thanks tgates...).
* Redirected robots.txt fetch no longer results in another
attempted robots.txt fetch to check the redirection is allowed!
* Fix exception raised by RFC 3986 implementation with
urljoin(base, '/..')
* Fix two multiple-response-wrapping bugs.
* Add missing import in tests (caused failure on Windows).
* Set svn:eol-style to native for all text files in SVN.
* Add some tests for upgrade_response().
* Add a functional test for 302 + 404 case.
* Add an -l option to run the functional tests against a local
twisted.web-based server (you need Twisted installed for this
to work). This is much faster than running against
wwwsearch.sourceforge.net
* Add -u switch to skip unittests (and only run the doctests).
2007-01-07 John J Lee <jjlpobox.com>