comparison env/lib/python3.9/site-packages/urllib3-1.26.4.dist-info/DESCRIPTION.rst @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4f3585e2f14b
1
2 urllib3 is a powerful, *user-friendly* HTTP client for Python. Much of the
3 Python ecosystem already uses urllib3 and you should too.
4 urllib3 brings many critical features that are missing from the Python
5 standard libraries:
6
7 - Thread safety.
8 - Connection pooling.
9 - Client-side SSL/TLS verification.
10 - File uploads with multipart encoding.
11 - Helpers for retrying requests and dealing with HTTP redirects.
12 - Support for gzip, deflate, and brotli encoding.
13 - Proxy support for HTTP and SOCKS.
14 - 100% test coverage.
15
16 urllib3 is powerful and easy to use:
17
18 .. code-block:: python
19
20 >>> import urllib3
21 >>> http = urllib3.PoolManager()
22 >>> r = http.request('GET', 'http://httpbin.org/robots.txt')
23 >>> r.status
24 200
25 >>> r.data
26 'User-agent: *\nDisallow: /deny\n'
27
28
29 Installing
30 ----------
31
32 urllib3 can be installed with `pip <https://pip.pypa.io>`_::
33
34 $ python -m pip install urllib3
35
36 Alternatively, you can grab the latest source code from `GitHub <https://github.com/urllib3/urllib3>`_::
37
38 $ git clone git://github.com/urllib3/urllib3.git
39 $ python setup.py install
40
41
42 Documentation
43 -------------
44
45 urllib3 has usage and reference documentation at `urllib3.readthedocs.io <https://urllib3.readthedocs.io>`_.
46
47
48 Contributing
49 ------------
50
51 urllib3 happily accepts contributions. Please see our
52 `contributing documentation <https://urllib3.readthedocs.io/en/latest/contributing.html>`_
53 for some tips on getting started.
54
55
56 Security Disclosures
57 --------------------
58
59 To report a security vulnerability, please use the
60 `Tidelift security contact <https://tidelift.com/security>`_.
61 Tidelift will coordinate the fix and disclosure with maintainers.
62
63
64 Maintainers
65 -----------
66
67 - `@sethmlarson <https://github.com/sethmlarson>`__ (Seth M. Larson)
68 - `@pquentin <https://github.com/pquentin>`__ (Quentin Pradet)
69 - `@theacodes <https://github.com/theacodes>`__ (Thea Flowers)
70 - `@haikuginger <https://github.com/haikuginger>`__ (Jess Shapiro)
71 - `@lukasa <https://github.com/lukasa>`__ (Cory Benfield)
72 - `@sigmavirus24 <https://github.com/sigmavirus24>`__ (Ian Stapleton Cordasco)
73 - `@shazow <https://github.com/shazow>`__ (Andrey Petrov)
74
75 👋
76
77
78 Sponsorship
79 -----------
80
81 If your company benefits from this library, please consider `sponsoring its
82 development <https://urllib3.readthedocs.io/en/latest/sponsors.html>`_.
83
84
85 For Enterprise
86 --------------
87
88 .. |tideliftlogo| image:: https://nedbatchelder.com/pix/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White_small.png
89 :width: 75
90 :alt: Tidelift
91
92 .. list-table::
93 :widths: 10 100
94
95 * - |tideliftlogo|
96 - Professional support for urllib3 is available as part of the `Tidelift
97 Subscription`_. Tidelift gives software development teams a single source for
98 purchasing and maintaining their software, with professional grade assurances
99 from the experts who know it best, while seamlessly integrating with existing
100 tools.
101
102 .. _Tidelift Subscription: https://tidelift.com/subscription/pkg/pypi-urllib3?utm_source=pypi-urllib3&utm_medium=referral&utm_campaign=readme
103
104
105 Changes
106 =======
107
108 1.26.4 (2021-03-15)
109 -------------------
110
111 * Changed behavior of the default ``SSLContext`` when connecting to HTTPS proxy
112 during HTTPS requests. The default ``SSLContext`` now sets ``check_hostname=True``.
113
114
115 1.26.3 (2021-01-26)
116 -------------------
117
118 * Fixed bytes and string comparison issue with headers (Pull #2141)
119
120 * Changed ``ProxySchemeUnknown`` error message to be
121 more actionable if the user supplies a proxy URL without
122 a scheme. (Pull #2107)
123
124
125 1.26.2 (2020-11-12)
126 -------------------
127
128 * Fixed an issue where ``wrap_socket`` and ``CERT_REQUIRED`` wouldn't
129 be imported properly on Python 2.7.8 and earlier (Pull #2052)
130
131
132 1.26.1 (2020-11-11)
133 -------------------
134
135 * Fixed an issue where two ``User-Agent`` headers would be sent if a
136 ``User-Agent`` header key is passed as ``bytes`` (Pull #2047)
137
138
139 1.26.0 (2020-11-10)
140 -------------------
141
142 * **NOTE: urllib3 v2.0 will drop support for Python 2**.
143 `Read more in the v2.0 Roadmap <https://urllib3.readthedocs.io/en/latest/v2-roadmap.html>`_.
144
145 * Added support for HTTPS proxies contacting HTTPS servers (Pull #1923, Pull #1806)
146
147 * Deprecated negotiating TLSv1 and TLSv1.1 by default. Users that
148 still wish to use TLS earlier than 1.2 without a deprecation warning
149 should opt-in explicitly by setting ``ssl_version=ssl.PROTOCOL_TLSv1_1`` (Pull #2002)
150 **Starting in urllib3 v2.0: Connections that receive a ``DeprecationWarning`` will fail**
151
152 * Deprecated ``Retry`` options ``Retry.DEFAULT_METHOD_WHITELIST``, ``Retry.DEFAULT_REDIRECT_HEADERS_BLACKLIST``
153 and ``Retry(method_whitelist=...)`` in favor of ``Retry.DEFAULT_ALLOWED_METHODS``,
154 ``Retry.DEFAULT_REMOVE_HEADERS_ON_REDIRECT``, and ``Retry(allowed_methods=...)``
155 (Pull #2000) **Starting in urllib3 v2.0: Deprecated options will be removed**
156
157 * Added default ``User-Agent`` header to every request (Pull #1750)
158
159 * Added ``urllib3.util.SKIP_HEADER`` for skipping ``User-Agent``, ``Accept-Encoding``,
160 and ``Host`` headers from being automatically emitted with requests (Pull #2018)
161
162 * Collapse ``transfer-encoding: chunked`` request data and framing into
163 the same ``socket.send()`` call (Pull #1906)
164
165 * Send ``http/1.1`` ALPN identifier with every TLS handshake by default (Pull #1894)
166
167 * Properly terminate SecureTransport connections when CA verification fails (Pull #1977)
168
169 * Don't emit an ``SNIMissingWarning`` when passing ``server_hostname=None``
170 to SecureTransport (Pull #1903)
171
172 * Disabled requesting TLSv1.2 session tickets as they weren't being used by urllib3 (Pull #1970)
173
174 * Suppress ``BrokenPipeError`` when writing request body after the server
175 has closed the socket (Pull #1524)
176
177 * Wrap ``ssl.SSLError`` that can be raised from reading a socket (e.g. "bad MAC")
178 into an ``urllib3.exceptions.SSLError`` (Pull #1939)
179
180
181 1.25.11 (2020-10-19)
182 --------------------
183
184 * Fix retry backoff time parsed from ``Retry-After`` header when given
185 in the HTTP date format. The HTTP date was parsed as the local timezone
186 rather than accounting for the timezone in the HTTP date (typically
187 UTC) (Pull #1932, Pull #1935, Pull #1938, Pull #1949)
188
189 * Fix issue where an error would be raised when the ``SSLKEYLOGFILE``
190 environment variable was set to the empty string. Now ``SSLContext.keylog_file``
191 is not set in this situation (Pull #2016)
192
193
194 1.25.10 (2020-07-22)
195 --------------------
196
197 * Added support for ``SSLKEYLOGFILE`` environment variable for
198 logging TLS session keys with use with programs like
199 Wireshark for decrypting captured web traffic (Pull #1867)
200
201 * Fixed loading of SecureTransport libraries on macOS Big Sur
202 due to the new dynamic linker cache (Pull #1905)
203
204 * Collapse chunked request bodies data and framing into one
205 call to ``send()`` to reduce the number of TCP packets by 2-4x (Pull #1906)
206
207 * Don't insert ``None`` into ``ConnectionPool`` if the pool
208 was empty when requesting a connection (Pull #1866)
209
210 * Avoid ``hasattr`` call in ``BrotliDecoder.decompress()`` (Pull #1858)
211
212
213 1.25.9 (2020-04-16)
214 -------------------
215
216 * Added ``InvalidProxyConfigurationWarning`` which is raised when
217 erroneously specifying an HTTPS proxy URL. urllib3 doesn't currently
218 support connecting to HTTPS proxies but will soon be able to
219 and we would like users to migrate properly without much breakage.
220
221 See `this GitHub issue <https://github.com/urllib3/urllib3/issues/1850>`_
222 for more information on how to fix your proxy config. (Pull #1851)
223
224 * Drain connection after ``PoolManager`` redirect (Pull #1817)
225
226 * Ensure ``load_verify_locations`` raises ``SSLError`` for all backends (Pull #1812)
227
228 * Rename ``VerifiedHTTPSConnection`` to ``HTTPSConnection`` (Pull #1805)
229
230 * Allow the CA certificate data to be passed as a string (Pull #1804)
231
232 * Raise ``ValueError`` if method contains control characters (Pull #1800)
233
234 * Add ``__repr__`` to ``Timeout`` (Pull #1795)
235
236
237 1.25.8 (2020-01-20)
238 -------------------
239
240 * Drop support for EOL Python 3.4 (Pull #1774)
241
242 * Optimize _encode_invalid_chars (Pull #1787)
243
244
245 1.25.7 (2019-11-11)
246 -------------------
247
248 * Preserve ``chunked`` parameter on retries (Pull #1715, Pull #1734)
249
250 * Allow unset ``SERVER_SOFTWARE`` in App Engine (Pull #1704, Issue #1470)
251
252 * Fix issue where URL fragment was sent within the request target. (Pull #1732)
253
254 * Fix issue where an empty query section in a URL would fail to parse. (Pull #1732)
255
256 * Remove TLS 1.3 support in SecureTransport due to Apple removing support (Pull #1703)
257
258
259 1.25.6 (2019-09-24)
260 -------------------
261
262 * Fix issue where tilde (``~``) characters were incorrectly
263 percent-encoded in the path. (Pull #1692)
264
265
266 1.25.5 (2019-09-19)
267 -------------------
268
269 * Add mitigation for BPO-37428 affecting Python <3.7.4 and OpenSSL 1.1.1+ which
270 caused certificate verification to be enabled when using ``cert_reqs=CERT_NONE``.
271 (Issue #1682)
272
273
274 1.25.4 (2019-09-19)
275 -------------------
276
277 * Propagate Retry-After header settings to subsequent retries. (Pull #1607)
278
279 * Fix edge case where Retry-After header was still respected even when
280 explicitly opted out of. (Pull #1607)
281
282 * Remove dependency on ``rfc3986`` for URL parsing.
283
284 * Fix issue where URLs containing invalid characters within ``Url.auth`` would
285 raise an exception instead of percent-encoding those characters.
286
287 * Add support for ``HTTPResponse.auto_close = False`` which makes HTTP responses
288 work well with BufferedReaders and other ``io`` module features. (Pull #1652)
289
290 * Percent-encode invalid characters in URL for ``HTTPConnectionPool.request()`` (Pull #1673)
291
292
293 1.25.3 (2019-05-23)
294 -------------------
295
296 * Change ``HTTPSConnection`` to load system CA certificates
297 when ``ca_certs``, ``ca_cert_dir``, and ``ssl_context`` are
298 unspecified. (Pull #1608, Issue #1603)
299
300 * Upgrade bundled rfc3986 to v1.3.2. (Pull #1609, Issue #1605)
301
302
303 1.25.2 (2019-04-28)
304 -------------------
305
306 * Change ``is_ipaddress`` to not detect IPvFuture addresses. (Pull #1583)
307
308 * Change ``parse_url`` to percent-encode invalid characters within the
309 path, query, and target components. (Pull #1586)
310
311
312 1.25.1 (2019-04-24)
313 -------------------
314
315 * Add support for Google's ``Brotli`` package. (Pull #1572, Pull #1579)
316
317 * Upgrade bundled rfc3986 to v1.3.1 (Pull #1578)
318
319
320 1.25 (2019-04-22)
321 -----------------
322
323 * Require and validate certificates by default when using HTTPS (Pull #1507)
324
325 * Upgraded ``urllib3.utils.parse_url()`` to be RFC 3986 compliant. (Pull #1487)
326
327 * Added support for ``key_password`` for ``HTTPSConnectionPool`` to use
328 encrypted ``key_file`` without creating your own ``SSLContext`` object. (Pull #1489)
329
330 * Add TLSv1.3 support to CPython, pyOpenSSL, and SecureTransport ``SSLContext``
331 implementations. (Pull #1496)
332
333 * Switched the default multipart header encoder from RFC 2231 to HTML 5 working draft. (Issue #303, Pull #1492)
334
335 * Fixed issue where OpenSSL would block if an encrypted client private key was
336 given and no password was given. Instead an ``SSLError`` is raised. (Pull #1489)
337
338 * Added support for Brotli content encoding. It is enabled automatically if
339 ``brotlipy`` package is installed which can be requested with
340 ``urllib3[brotli]`` extra. (Pull #1532)
341
342 * Drop ciphers using DSS key exchange from default TLS cipher suites.
343 Improve default ciphers when using SecureTransport. (Pull #1496)
344
345 * Implemented a more efficient ``HTTPResponse.__iter__()`` method. (Issue #1483)
346
347 1.24.3 (2019-05-01)
348 -------------------
349
350 * Apply fix for CVE-2019-9740. (Pull #1591)
351
352 1.24.2 (2019-04-17)
353 -------------------
354
355 * Don't load system certificates by default when any other ``ca_certs``, ``ca_certs_dir`` or
356 ``ssl_context`` parameters are specified.
357
358 * Remove Authorization header regardless of case when redirecting to cross-site. (Issue #1510)
359
360 * Add support for IPv6 addresses in subjectAltName section of certificates. (Issue #1269)
361
362
363 1.24.1 (2018-11-02)
364 -------------------
365
366 * Remove quadratic behavior within ``GzipDecoder.decompress()`` (Issue #1467)
367
368 * Restored functionality of ``ciphers`` parameter for ``create_urllib3_context()``. (Issue #1462)
369
370
371 1.24 (2018-10-16)
372 -----------------
373
374 * Allow key_server_hostname to be specified when initializing a PoolManager to allow custom SNI to be overridden. (Pull #1449)
375
376 * Test against Python 3.7 on AppVeyor. (Pull #1453)
377
378 * Early-out ipv6 checks when running on App Engine. (Pull #1450)
379
380 * Change ambiguous description of backoff_factor (Pull #1436)
381
382 * Add ability to handle multiple Content-Encodings (Issue #1441 and Pull #1442)
383
384 * Skip DNS names that can't be idna-decoded when using pyOpenSSL (Issue #1405).
385
386 * Add a server_hostname parameter to HTTPSConnection which allows for
387 overriding the SNI hostname sent in the handshake. (Pull #1397)
388
389 * Drop support for EOL Python 2.6 (Pull #1429 and Pull #1430)
390
391 * Fixed bug where responses with header Content-Type: message/* erroneously
392 raised HeaderParsingError, resulting in a warning being logged. (Pull #1439)
393
394 * Move urllib3 to src/urllib3 (Pull #1409)
395
396
397 1.23 (2018-06-04)
398 -----------------
399
400 * Allow providing a list of headers to strip from requests when redirecting
401 to a different host. Defaults to the ``Authorization`` header. Different
402 headers can be set via ``Retry.remove_headers_on_redirect``. (Issue #1316)
403
404 * Fix ``util.selectors._fileobj_to_fd`` to accept ``long`` (Issue #1247).
405
406 * Dropped Python 3.3 support. (Pull #1242)
407
408 * Put the connection back in the pool when calling stream() or read_chunked() on
409 a chunked HEAD response. (Issue #1234)
410
411 * Fixed pyOpenSSL-specific ssl client authentication issue when clients
412 attempted to auth via certificate + chain (Issue #1060)
413
414 * Add the port to the connectionpool connect print (Pull #1251)
415
416 * Don't use the ``uuid`` module to create multipart data boundaries. (Pull #1380)
417
418 * ``read_chunked()`` on a closed response returns no chunks. (Issue #1088)
419
420 * Add Python 2.6 support to ``contrib.securetransport`` (Pull #1359)
421
422 * Added support for auth info in url for SOCKS proxy (Pull #1363)
423
424
425 1.22 (2017-07-20)
426 -----------------
427
428 * Fixed missing brackets in ``HTTP CONNECT`` when connecting to IPv6 address via
429 IPv6 proxy. (Issue #1222)
430
431 * Made the connection pool retry on ``SSLError``. The original ``SSLError``
432 is available on ``MaxRetryError.reason``. (Issue #1112)
433
434 * Drain and release connection before recursing on retry/redirect. Fixes
435 deadlocks with a blocking connectionpool. (Issue #1167)
436
437 * Fixed compatibility for cookiejar. (Issue #1229)
438
439 * pyopenssl: Use vendored version of ``six``. (Issue #1231)
440
441
442 1.21.1 (2017-05-02)
443 -------------------
444
445 * Fixed SecureTransport issue that would cause long delays in response body
446 delivery. (Pull #1154)
447
448 * Fixed regression in 1.21 that threw exceptions when users passed the
449 ``socket_options`` flag to the ``PoolManager``. (Issue #1165)
450
451 * Fixed regression in 1.21 that threw exceptions when users passed the
452 ``assert_hostname`` or ``assert_fingerprint`` flag to the ``PoolManager``.
453 (Pull #1157)
454
455
456 1.21 (2017-04-25)
457 -----------------
458
459 * Improved performance of certain selector system calls on Python 3.5 and
460 later. (Pull #1095)
461
462 * Resolved issue where the PyOpenSSL backend would not wrap SysCallError
463 exceptions appropriately when sending data. (Pull #1125)
464
465 * Selectors now detects a monkey-patched select module after import for modules
466 that patch the select module like eventlet, greenlet. (Pull #1128)
467
468 * Reduced memory consumption when streaming zlib-compressed responses
469 (as opposed to raw deflate streams). (Pull #1129)
470
471 * Connection pools now use the entire request context when constructing the
472 pool key. (Pull #1016)
473
474 * ``PoolManager.connection_from_*`` methods now accept a new keyword argument,
475 ``pool_kwargs``, which are merged with the existing ``connection_pool_kw``.
476 (Pull #1016)
477
478 * Add retry counter for ``status_forcelist``. (Issue #1147)
479
480 * Added ``contrib`` module for using SecureTransport on macOS:
481 ``urllib3.contrib.securetransport``. (Pull #1122)
482
483 * urllib3 now only normalizes the case of ``http://`` and ``https://`` schemes:
484 for schemes it does not recognise, it assumes they are case-sensitive and
485 leaves them unchanged.
486 (Issue #1080)
487
488
489 1.20 (2017-01-19)
490 -----------------
491
492 * Added support for waiting for I/O using selectors other than select,
493 improving urllib3's behaviour with large numbers of concurrent connections.
494 (Pull #1001)
495
496 * Updated the date for the system clock check. (Issue #1005)
497
498 * ConnectionPools now correctly consider hostnames to be case-insensitive.
499 (Issue #1032)
500
501 * Outdated versions of PyOpenSSL now cause the PyOpenSSL contrib module
502 to fail when it is injected, rather than at first use. (Pull #1063)
503
504 * Outdated versions of cryptography now cause the PyOpenSSL contrib module
505 to fail when it is injected, rather than at first use. (Issue #1044)
506
507 * Automatically attempt to rewind a file-like body object when a request is
508 retried or redirected. (Pull #1039)
509
510 * Fix some bugs that occur when modules incautiously patch the queue module.
511 (Pull #1061)
512
513 * Prevent retries from occurring on read timeouts for which the request method
514 was not in the method whitelist. (Issue #1059)
515
516 * Changed the PyOpenSSL contrib module to lazily load idna to avoid
517 unnecessarily bloating the memory of programs that don't need it. (Pull
518 #1076)
519
520 * Add support for IPv6 literals with zone identifiers. (Pull #1013)
521
522 * Added support for socks5h:// and socks4a:// schemes when working with SOCKS
523 proxies, and controlled remote DNS appropriately. (Issue #1035)
524
525
526 1.19.1 (2016-11-16)
527 -------------------
528
529 * Fixed AppEngine import that didn't function on Python 3.5. (Pull #1025)
530
531
532 1.19 (2016-11-03)
533 -----------------
534
535 * urllib3 now respects Retry-After headers on 413, 429, and 503 responses when
536 using the default retry logic. (Pull #955)
537
538 * Remove markers from setup.py to assist ancient setuptools versions. (Issue
539 #986)
540
541 * Disallow superscripts and other integerish things in URL ports. (Issue #989)
542
543 * Allow urllib3's HTTPResponse.stream() method to continue to work with
544 non-httplib underlying FPs. (Pull #990)
545
546 * Empty filenames in multipart headers are now emitted as such, rather than
547 being suppressed. (Issue #1015)
548
549 * Prefer user-supplied Host headers on chunked uploads. (Issue #1009)
550
551
552 1.18.1 (2016-10-27)
553 -------------------
554
555 * CVE-2016-9015. Users who are using urllib3 version 1.17 or 1.18 along with
556 PyOpenSSL injection and OpenSSL 1.1.0 *must* upgrade to this version. This
557 release fixes a vulnerability whereby urllib3 in the above configuration
558 would silently fail to validate TLS certificates due to erroneously setting
559 invalid flags in OpenSSL's ``SSL_CTX_set_verify`` function. These erroneous
560 flags do not cause a problem in OpenSSL versions before 1.1.0, which
561 interprets the presence of any flag as requesting certificate validation.
562
563 There is no PR for this patch, as it was prepared for simultaneous disclosure
564 and release. The master branch received the same fix in Pull #1010.
565
566
567 1.18 (2016-09-26)
568 -----------------
569
570 * Fixed incorrect message for IncompleteRead exception. (Pull #973)
571
572 * Accept ``iPAddress`` subject alternative name fields in TLS certificates.
573 (Issue #258)
574
575 * Fixed consistency of ``HTTPResponse.closed`` between Python 2 and 3.
576 (Issue #977)
577
578 * Fixed handling of wildcard certificates when using PyOpenSSL. (Issue #979)
579
580
581 1.17 (2016-09-06)
582 -----------------
583
584 * Accept ``SSLContext`` objects for use in SSL/TLS negotiation. (Issue #835)
585
586 * ConnectionPool debug log now includes scheme, host, and port. (Issue #897)
587
588 * Substantially refactored documentation. (Issue #887)
589
590 * Used URLFetch default timeout on AppEngine, rather than hardcoding our own.
591 (Issue #858)
592
593 * Normalize the scheme and host in the URL parser (Issue #833)
594
595 * ``HTTPResponse`` contains the last ``Retry`` object, which now also
596 contains retries history. (Issue #848)
597
598 * Timeout can no longer be set as boolean, and must be greater than zero.
599 (Pull #924)
600
601 * Removed pyasn1 and ndg-httpsclient from dependencies used for PyOpenSSL. We
602 now use cryptography and idna, both of which are already dependencies of
603 PyOpenSSL. (Pull #930)
604
605 * Fixed infinite loop in ``stream`` when amt=None. (Issue #928)
606
607 * Try to use the operating system's certificates when we are using an
608 ``SSLContext``. (Pull #941)
609
610 * Updated cipher suite list to allow ChaCha20+Poly1305. AES-GCM is preferred to
611 ChaCha20, but ChaCha20 is then preferred to everything else. (Pull #947)
612
613 * Updated cipher suite list to remove 3DES-based cipher suites. (Pull #958)
614
615 * Removed the cipher suite fallback to allow HIGH ciphers. (Pull #958)
616
617 * Implemented ``length_remaining`` to determine remaining content
618 to be read. (Pull #949)
619
620 * Implemented ``enforce_content_length`` to enable exceptions when
621 incomplete data chunks are received. (Pull #949)
622
623 * Dropped connection start, dropped connection reset, redirect, forced retry,
624 and new HTTPS connection log levels to DEBUG, from INFO. (Pull #967)
625
626
627 1.16 (2016-06-11)
628 -----------------
629
630 * Disable IPv6 DNS when IPv6 connections are not possible. (Issue #840)
631
632 * Provide ``key_fn_by_scheme`` pool keying mechanism that can be
633 overridden. (Issue #830)
634
635 * Normalize scheme and host to lowercase for pool keys, and include
636 ``source_address``. (Issue #830)
637
638 * Cleaner exception chain in Python 3 for ``_make_request``.
639 (Issue #861)
640
641 * Fixed installing ``urllib3[socks]`` extra. (Issue #864)
642
643 * Fixed signature of ``ConnectionPool.close`` so it can actually safely be
644 called by subclasses. (Issue #873)
645
646 * Retain ``release_conn`` state across retries. (Issues #651, #866)
647
648 * Add customizable ``HTTPConnectionPool.ResponseCls``, which defaults to
649 ``HTTPResponse`` but can be replaced with a subclass. (Issue #879)
650
651
652 1.15.1 (2016-04-11)
653 -------------------
654
655 * Fix packaging to include backports module. (Issue #841)
656
657
658 1.15 (2016-04-06)
659 -----------------
660
661 * Added Retry(raise_on_status=False). (Issue #720)
662
663 * Always use setuptools, no more distutils fallback. (Issue #785)
664
665 * Dropped support for Python 3.2. (Issue #786)
666
667 * Chunked transfer encoding when requesting with ``chunked=True``.
668 (Issue #790)
669
670 * Fixed regression with IPv6 port parsing. (Issue #801)
671
672 * Append SNIMissingWarning messages to allow users to specify it in
673 the PYTHONWARNINGS environment variable. (Issue #816)
674
675 * Handle unicode headers in Py2. (Issue #818)
676
677 * Log certificate when there is a hostname mismatch. (Issue #820)
678
679 * Preserve order of request/response headers. (Issue #821)
680
681
682 1.14 (2015-12-29)
683 -----------------
684
685 * contrib: SOCKS proxy support! (Issue #762)
686
687 * Fixed AppEngine handling of transfer-encoding header and bug
688 in Timeout defaults checking. (Issue #763)
689
690
691 1.13.1 (2015-12-18)
692 -------------------
693
694 * Fixed regression in IPv6 + SSL for match_hostname. (Issue #761)
695
696
697 1.13 (2015-12-14)
698 -----------------
699
700 * Fixed ``pip install urllib3[secure]`` on modern pip. (Issue #706)
701
702 * pyopenssl: Fixed SSL3_WRITE_PENDING error. (Issue #717)
703
704 * pyopenssl: Support for TLSv1.1 and TLSv1.2. (Issue #696)
705
706 * Close connections more defensively on exception. (Issue #734)
707
708 * Adjusted ``read_chunked`` to handle gzipped, chunk-encoded bodies without
709 repeatedly flushing the decoder, to function better on Jython. (Issue #743)
710
711 * Accept ``ca_cert_dir`` for SSL-related PoolManager configuration. (Issue #758)
712
713
714 1.12 (2015-09-03)
715 -----------------
716
717 * Rely on ``six`` for importing ``httplib`` to work around
718 conflicts with other Python 3 shims. (Issue #688)
719
720 * Add support for directories of certificate authorities, as supported by
721 OpenSSL. (Issue #701)
722
723 * New exception: ``NewConnectionError``, raised when we fail to establish
724 a new connection, usually ``ECONNREFUSED`` socket error.
725
726
727 1.11 (2015-07-21)
728 -----------------
729
730 * When ``ca_certs`` is given, ``cert_reqs`` defaults to
731 ``'CERT_REQUIRED'``. (Issue #650)
732
733 * ``pip install urllib3[secure]`` will install Certifi and
734 PyOpenSSL as dependencies. (Issue #678)
735
736 * Made ``HTTPHeaderDict`` usable as a ``headers`` input value
737 (Issues #632, #679)
738
739 * Added `urllib3.contrib.appengine <https://urllib3.readthedocs.io/en/latest/contrib.html#google-app-engine>`_
740 which has an ``AppEngineManager`` for using ``URLFetch`` in a
741 Google AppEngine environment. (Issue #664)
742
743 * Dev: Added test suite for AppEngine. (Issue #631)
744
745 * Fix performance regression when using PyOpenSSL. (Issue #626)
746
747 * Passing incorrect scheme (e.g. ``foo://``) will raise
748 ``ValueError`` instead of ``AssertionError`` (backwards
749 compatible for now, but please migrate). (Issue #640)
750
751 * Fix pools not getting replenished when an error occurs during a
752 request using ``release_conn=False``. (Issue #644)
753
754 * Fix pool-default headers not applying for url-encoded requests
755 like GET. (Issue #657)
756
757 * log.warning in Python 3 when headers are skipped due to parsing
758 errors. (Issue #642)
759
760 * Close and discard connections if an error occurs during read.
761 (Issue #660)
762
763 * Fix host parsing for IPv6 proxies. (Issue #668)
764
765 * Separate warning type SubjectAltNameWarning, now issued once
766 per host. (Issue #671)
767
768 * Fix ``httplib.IncompleteRead`` not getting converted to
769 ``ProtocolError`` when using ``HTTPResponse.stream()``
770 (Issue #674)
771
772 1.10.4 (2015-05-03)
773 -------------------
774
775 * Migrate tests to Tornado 4. (Issue #594)
776
777 * Append default warning configuration rather than overwrite.
778 (Issue #603)
779
780 * Fix streaming decoding regression. (Issue #595)
781
782 * Fix chunked requests losing state across keep-alive connections.
783 (Issue #599)
784
785 * Fix hanging when chunked HEAD response has no body. (Issue #605)
786
787
788 1.10.3 (2015-04-21)
789 -------------------
790
791 * Emit ``InsecurePlatformWarning`` when SSLContext object is missing.
792 (Issue #558)
793
794 * Fix regression of duplicate header keys being discarded.
795 (Issue #563)
796
797 * ``Response.stream()`` returns a generator for chunked responses.
798 (Issue #560)
799
800 * Set upper-bound timeout when waiting for a socket in PyOpenSSL.
801 (Issue #585)
802
803 * Work on platforms without `ssl` module for plain HTTP requests.
804 (Issue #587)
805
806 * Stop relying on the stdlib's default cipher list. (Issue #588)
807
808
809 1.10.2 (2015-02-25)
810 -------------------
811
812 * Fix file descriptor leakage on retries. (Issue #548)
813
814 * Removed RC4 from default cipher list. (Issue #551)
815
816 * Header performance improvements. (Issue #544)
817
818 * Fix PoolManager not obeying redirect retry settings. (Issue #553)
819
820
821 1.10.1 (2015-02-10)
822 -------------------
823
824 * Pools can be used as context managers. (Issue #545)
825
826 * Don't re-use connections which experienced an SSLError. (Issue #529)
827
828 * Don't fail when gzip decoding an empty stream. (Issue #535)
829
830 * Add sha256 support for fingerprint verification. (Issue #540)
831
832 * Fixed handling of header values containing commas. (Issue #533)
833
834
835 1.10 (2014-12-14)
836 -----------------
837
838 * Disabled SSLv3. (Issue #473)
839
840 * Add ``Url.url`` property to return the composed url string. (Issue #394)
841
842 * Fixed PyOpenSSL + gevent ``WantWriteError``. (Issue #412)
843
844 * ``MaxRetryError.reason`` will always be an exception, not string.
845 (Issue #481)
846
847 * Fixed SSL-related timeouts not being detected as timeouts. (Issue #492)
848
849 * Py3: Use ``ssl.create_default_context()`` when available. (Issue #473)
850
851 * Emit ``InsecureRequestWarning`` for *every* insecure HTTPS request.
852 (Issue #496)
853
854 * Emit ``SecurityWarning`` when certificate has no ``subjectAltName``.
855 (Issue #499)
856
857 * Close and discard sockets which experienced SSL-related errors.
858 (Issue #501)
859
860 * Handle ``body`` param in ``.request(...)``. (Issue #513)
861
862 * Respect timeout with HTTPS proxy. (Issue #505)
863
864 * PyOpenSSL: Handle ZeroReturnError exception. (Issue #520)
865
866
867 1.9.1 (2014-09-13)
868 ------------------
869
870 * Apply socket arguments before binding. (Issue #427)
871
872 * More careful checks if fp-like object is closed. (Issue #435)
873
874 * Fixed packaging issues of some development-related files not
875 getting included. (Issue #440)
876
877 * Allow performing *only* fingerprint verification. (Issue #444)
878
879 * Emit ``SecurityWarning`` if system clock is waaay off. (Issue #445)
880
881 * Fixed PyOpenSSL compatibility with PyPy. (Issue #450)
882
883 * Fixed ``BrokenPipeError`` and ``ConnectionError`` handling in Py3.
884 (Issue #443)
885
886
887
888 1.9 (2014-07-04)
889 ----------------
890
891 * Shuffled around development-related files. If you're maintaining a distro
892 package of urllib3, you may need to tweak things. (Issue #415)
893
894 * Unverified HTTPS requests will trigger a warning on the first request. See
895 our new `security documentation
896 <https://urllib3.readthedocs.io/en/latest/security.html>`_ for details.
897 (Issue #426)
898
899 * New retry logic and ``urllib3.util.retry.Retry`` configuration object.
900 (Issue #326)
901
902 * All raised exceptions should now wrapped in a
903 ``urllib3.exceptions.HTTPException``-extending exception. (Issue #326)
904
905 * All errors during a retry-enabled request should be wrapped in
906 ``urllib3.exceptions.MaxRetryError``, including timeout-related exceptions
907 which were previously exempt. Underlying error is accessible from the
908 ``.reason`` property. (Issue #326)
909
910 * ``urllib3.exceptions.ConnectionError`` renamed to
911 ``urllib3.exceptions.ProtocolError``. (Issue #326)
912
913 * Errors during response read (such as IncompleteRead) are now wrapped in
914 ``urllib3.exceptions.ProtocolError``. (Issue #418)
915
916 * Requesting an empty host will raise ``urllib3.exceptions.LocationValueError``.
917 (Issue #417)
918
919 * Catch read timeouts over SSL connections as
920 ``urllib3.exceptions.ReadTimeoutError``. (Issue #419)
921
922 * Apply socket arguments before connecting. (Issue #427)
923
924
925 1.8.3 (2014-06-23)
926 ------------------
927
928 * Fix TLS verification when using a proxy in Python 3.4.1. (Issue #385)
929
930 * Add ``disable_cache`` option to ``urllib3.util.make_headers``. (Issue #393)
931
932 * Wrap ``socket.timeout`` exception with
933 ``urllib3.exceptions.ReadTimeoutError``. (Issue #399)
934
935 * Fixed proxy-related bug where connections were being reused incorrectly.
936 (Issues #366, #369)
937
938 * Added ``socket_options`` keyword parameter which allows to define
939 ``setsockopt`` configuration of new sockets. (Issue #397)
940
941 * Removed ``HTTPConnection.tcp_nodelay`` in favor of
942 ``HTTPConnection.default_socket_options``. (Issue #397)
943
944 * Fixed ``TypeError`` bug in Python 2.6.4. (Issue #411)
945
946
947 1.8.2 (2014-04-17)
948 ------------------
949
950 * Fix ``urllib3.util`` not being included in the package.
951
952
953 1.8.1 (2014-04-17)
954 ------------------
955
956 * Fix AppEngine bug of HTTPS requests going out as HTTP. (Issue #356)
957
958 * Don't install ``dummyserver`` into ``site-packages`` as it's only needed
959 for the test suite. (Issue #362)
960
961 * Added support for specifying ``source_address``. (Issue #352)
962
963
964 1.8 (2014-03-04)
965 ----------------
966
967 * Improved url parsing in ``urllib3.util.parse_url`` (properly parse '@' in
968 username, and blank ports like 'hostname:').
969
970 * New ``urllib3.connection`` module which contains all the HTTPConnection
971 objects.
972
973 * Several ``urllib3.util.Timeout``-related fixes. Also changed constructor
974 signature to a more sensible order. [Backwards incompatible]
975 (Issues #252, #262, #263)
976
977 * Use ``backports.ssl_match_hostname`` if it's installed. (Issue #274)
978
979 * Added ``.tell()`` method to ``urllib3.response.HTTPResponse`` which
980 returns the number of bytes read so far. (Issue #277)
981
982 * Support for platforms without threading. (Issue #289)
983
984 * Expand default-port comparison in ``HTTPConnectionPool.is_same_host``
985 to allow a pool with no specified port to be considered equal to to an
986 HTTP/HTTPS url with port 80/443 explicitly provided. (Issue #305)
987
988 * Improved default SSL/TLS settings to avoid vulnerabilities.
989 (Issue #309)
990
991 * Fixed ``urllib3.poolmanager.ProxyManager`` not retrying on connect errors.
992 (Issue #310)
993
994 * Disable Nagle's Algorithm on the socket for non-proxies. A subset of requests
995 will send the entire HTTP request ~200 milliseconds faster; however, some of
996 the resulting TCP packets will be smaller. (Issue #254)
997
998 * Increased maximum number of SubjectAltNames in ``urllib3.contrib.pyopenssl``
999 from the default 64 to 1024 in a single certificate. (Issue #318)
1000
1001 * Headers are now passed and stored as a custom
1002 ``urllib3.collections_.HTTPHeaderDict`` object rather than a plain ``dict``.
1003 (Issue #329, #333)
1004
1005 * Headers no longer lose their case on Python 3. (Issue #236)
1006
1007 * ``urllib3.contrib.pyopenssl`` now uses the operating system's default CA
1008 certificates on inject. (Issue #332)
1009
1010 * Requests with ``retries=False`` will immediately raise any exceptions without
1011 wrapping them in ``MaxRetryError``. (Issue #348)
1012
1013 * Fixed open socket leak with SSL-related failures. (Issue #344, #348)
1014
1015
1016 1.7.1 (2013-09-25)
1017 ------------------
1018
1019 * Added granular timeout support with new ``urllib3.util.Timeout`` class.
1020 (Issue #231)
1021
1022 * Fixed Python 3.4 support. (Issue #238)
1023
1024
1025 1.7 (2013-08-14)
1026 ----------------
1027
1028 * More exceptions are now pickle-able, with tests. (Issue #174)
1029
1030 * Fixed redirecting with relative URLs in Location header. (Issue #178)
1031
1032 * Support for relative urls in ``Location: ...`` header. (Issue #179)
1033
1034 * ``urllib3.response.HTTPResponse`` now inherits from ``io.IOBase`` for bonus
1035 file-like functionality. (Issue #187)
1036
1037 * Passing ``assert_hostname=False`` when creating a HTTPSConnectionPool will
1038 skip hostname verification for SSL connections. (Issue #194)
1039
1040 * New method ``urllib3.response.HTTPResponse.stream(...)`` which acts as a
1041 generator wrapped around ``.read(...)``. (Issue #198)
1042
1043 * IPv6 url parsing enforces brackets around the hostname. (Issue #199)
1044
1045 * Fixed thread race condition in
1046 ``urllib3.poolmanager.PoolManager.connection_from_host(...)`` (Issue #204)
1047
1048 * ``ProxyManager`` requests now include non-default port in ``Host: ...``
1049 header. (Issue #217)
1050
1051 * Added HTTPS proxy support in ``ProxyManager``. (Issue #170 #139)
1052
1053 * New ``RequestField`` object can be passed to the ``fields=...`` param which
1054 can specify headers. (Issue #220)
1055
1056 * Raise ``urllib3.exceptions.ProxyError`` when connecting to proxy fails.
1057 (Issue #221)
1058
1059 * Use international headers when posting file names. (Issue #119)
1060
1061 * Improved IPv6 support. (Issue #203)
1062
1063
1064 1.6 (2013-04-25)
1065 ----------------
1066
1067 * Contrib: Optional SNI support for Py2 using PyOpenSSL. (Issue #156)
1068
1069 * ``ProxyManager`` automatically adds ``Host: ...`` header if not given.
1070
1071 * Improved SSL-related code. ``cert_req`` now optionally takes a string like
1072 "REQUIRED" or "NONE". Same with ``ssl_version`` takes strings like "SSLv23"
1073 The string values reflect the suffix of the respective constant variable.
1074 (Issue #130)
1075
1076 * Vendored ``socksipy`` now based on Anorov's fork which handles unexpectedly
1077 closed proxy connections and larger read buffers. (Issue #135)
1078
1079 * Ensure the connection is closed if no data is received, fixes connection leak
1080 on some platforms. (Issue #133)
1081
1082 * Added SNI support for SSL/TLS connections on Py32+. (Issue #89)
1083
1084 * Tests fixed to be compatible with Py26 again. (Issue #125)
1085
1086 * Added ability to choose SSL version by passing an ``ssl.PROTOCOL_*`` constant
1087 to the ``ssl_version`` parameter of ``HTTPSConnectionPool``. (Issue #109)
1088
1089 * Allow an explicit content type to be specified when encoding file fields.
1090 (Issue #126)
1091
1092 * Exceptions are now pickleable, with tests. (Issue #101)
1093
1094 * Fixed default headers not getting passed in some cases. (Issue #99)
1095
1096 * Treat "content-encoding" header value as case-insensitive, per RFC 2616
1097 Section 3.5. (Issue #110)
1098
1099 * "Connection Refused" SocketErrors will get retried rather than raised.
1100 (Issue #92)
1101
1102 * Updated vendored ``six``, no longer overrides the global ``six`` module
1103 namespace. (Issue #113)
1104
1105 * ``urllib3.exceptions.MaxRetryError`` contains a ``reason`` property holding
1106 the exception that prompted the final retry. If ``reason is None`` then it
1107 was due to a redirect. (Issue #92, #114)
1108
1109 * Fixed ``PoolManager.urlopen()`` from not redirecting more than once.
1110 (Issue #149)
1111
1112 * Don't assume ``Content-Type: text/plain`` for multi-part encoding parameters
1113 that are not files. (Issue #111)
1114
1115 * Pass `strict` param down to ``httplib.HTTPConnection``. (Issue #122)
1116
1117 * Added mechanism to verify SSL certificates by fingerprint (md5, sha1) or
1118 against an arbitrary hostname (when connecting by IP or for misconfigured
1119 servers). (Issue #140)
1120
1121 * Streaming decompression support. (Issue #159)
1122
1123
1124 1.5 (2012-08-02)
1125 ----------------
1126
1127 * Added ``urllib3.add_stderr_logger()`` for quickly enabling STDERR debug
1128 logging in urllib3.
1129
1130 * Native full URL parsing (including auth, path, query, fragment) available in
1131 ``urllib3.util.parse_url(url)``.
1132
1133 * Built-in redirect will switch method to 'GET' if status code is 303.
1134 (Issue #11)
1135
1136 * ``urllib3.PoolManager`` strips the scheme and host before sending the request
1137 uri. (Issue #8)
1138
1139 * New ``urllib3.exceptions.DecodeError`` exception for when automatic decoding,
1140 based on the Content-Type header, fails.
1141
1142 * Fixed bug with pool depletion and leaking connections (Issue #76). Added
1143 explicit connection closing on pool eviction. Added
1144 ``urllib3.PoolManager.clear()``.
1145
1146 * 99% -> 100% unit test coverage.
1147
1148
1149 1.4 (2012-06-16)
1150 ----------------
1151
1152 * Minor AppEngine-related fixes.
1153
1154 * Switched from ``mimetools.choose_boundary`` to ``uuid.uuid4()``.
1155
1156 * Improved url parsing. (Issue #73)
1157
1158 * IPv6 url support. (Issue #72)
1159
1160
1161 1.3 (2012-03-25)
1162 ----------------
1163
1164 * Removed pre-1.0 deprecated API.
1165
1166 * Refactored helpers into a ``urllib3.util`` submodule.
1167
1168 * Fixed multipart encoding to support list-of-tuples for keys with multiple
1169 values. (Issue #48)
1170
1171 * Fixed multiple Set-Cookie headers in response not getting merged properly in
1172 Python 3. (Issue #53)
1173
1174 * AppEngine support with Py27. (Issue #61)
1175
1176 * Minor ``encode_multipart_formdata`` fixes related to Python 3 strings vs
1177 bytes.
1178
1179
1180 1.2.2 (2012-02-06)
1181 ------------------
1182
1183 * Fixed packaging bug of not shipping ``test-requirements.txt``. (Issue #47)
1184
1185
1186 1.2.1 (2012-02-05)
1187 ------------------
1188
1189 * Fixed another bug related to when ``ssl`` module is not available. (Issue #41)
1190
1191 * Location parsing errors now raise ``urllib3.exceptions.LocationParseError``
1192 which inherits from ``ValueError``.
1193
1194
1195 1.2 (2012-01-29)
1196 ----------------
1197
1198 * Added Python 3 support (tested on 3.2.2)
1199
1200 * Dropped Python 2.5 support (tested on 2.6.7, 2.7.2)
1201
1202 * Use ``select.poll`` instead of ``select.select`` for platforms that support
1203 it.
1204
1205 * Use ``Queue.LifoQueue`` instead of ``Queue.Queue`` for more aggressive
1206 connection reusing. Configurable by overriding ``ConnectionPool.QueueCls``.
1207
1208 * Fixed ``ImportError`` during install when ``ssl`` module is not available.
1209 (Issue #41)
1210
1211 * Fixed ``PoolManager`` redirects between schemes (such as HTTP -> HTTPS) not
1212 completing properly. (Issue #28, uncovered by Issue #10 in v1.1)
1213
1214 * Ported ``dummyserver`` to use ``tornado`` instead of ``webob`` +
1215 ``eventlet``. Removed extraneous unsupported dummyserver testing backends.
1216 Added socket-level tests.
1217
1218 * More tests. Achievement Unlocked: 99% Coverage.
1219
1220
1221 1.1 (2012-01-07)
1222 ----------------
1223
1224 * Refactored ``dummyserver`` to its own root namespace module (used for
1225 testing).
1226
1227 * Added hostname verification for ``VerifiedHTTPSConnection`` by vendoring in
1228 Py32's ``ssl_match_hostname``. (Issue #25)
1229
1230 * Fixed cross-host HTTP redirects when using ``PoolManager``. (Issue #10)
1231
1232 * Fixed ``decode_content`` being ignored when set through ``urlopen``. (Issue
1233 #27)
1234
1235 * Fixed timeout-related bugs. (Issues #17, #23)
1236
1237
1238 1.0.2 (2011-11-04)
1239 ------------------
1240
1241 * Fixed typo in ``VerifiedHTTPSConnection`` which would only present as a bug if
1242 you're using the object manually. (Thanks pyos)
1243
1244 * Made RecentlyUsedContainer (and consequently PoolManager) more thread-safe by
1245 wrapping the access log in a mutex. (Thanks @christer)
1246
1247 * Made RecentlyUsedContainer more dict-like (corrected ``__delitem__`` and
1248 ``__getitem__`` behaviour), with tests. Shouldn't affect core urllib3 code.
1249
1250
1251 1.0.1 (2011-10-10)
1252 ------------------
1253
1254 * Fixed a bug where the same connection would get returned into the pool twice,
1255 causing extraneous "HttpConnectionPool is full" log warnings.
1256
1257
1258 1.0 (2011-10-08)
1259 ----------------
1260
1261 * Added ``PoolManager`` with LRU expiration of connections (tested and
1262 documented).
1263 * Added ``ProxyManager`` (needs tests, docs, and confirmation that it works
1264 with HTTPS proxies).
1265 * Added optional partial-read support for responses when
1266 ``preload_content=False``. You can now make requests and just read the headers
1267 without loading the content.
1268 * Made response decoding optional (default on, same as before).
1269 * Added optional explicit boundary string for ``encode_multipart_formdata``.
1270 * Convenience request methods are now inherited from ``RequestMethods``. Old
1271 helpers like ``get_url`` and ``post_url`` should be abandoned in favour of
1272 the new ``request(method, url, ...)``.
1273 * Refactored code to be even more decoupled, reusable, and extendable.
1274 * License header added to ``.py`` files.
1275 * Embiggened the documentation: Lots of Sphinx-friendly docstrings in the code
1276 and docs in ``docs/`` and on https://urllib3.readthedocs.io/.
1277 * Embettered all the things!
1278 * Started writing this file.
1279
1280
1281 0.4.1 (2011-07-17)
1282 ------------------
1283
1284 * Minor bug fixes, code cleanup.
1285
1286
1287 0.4 (2011-03-01)
1288 ----------------
1289
1290 * Better unicode support.
1291 * Added ``VerifiedHTTPSConnection``.
1292 * Added ``NTLMConnectionPool`` in contrib.
1293 * Minor improvements.
1294
1295
1296 0.3.1 (2010-07-13)
1297 ------------------
1298
1299 * Added ``assert_host_name`` optional parameter. Now compatible with proxies.
1300
1301
1302 0.3 (2009-12-10)
1303 ----------------
1304
1305 * Added HTTPS support.
1306 * Minor bug fixes.
1307 * Refactored, broken backwards compatibility with 0.2.
1308 * API to be treated as stable from this version forward.
1309
1310
1311 0.2 (2008-11-17)
1312 ----------------
1313
1314 * Added unit tests.
1315 * Bug fixes.
1316
1317
1318 0.1 (2008-11-16)
1319 ----------------
1320
1321 * First release.
1322
1323