* Always encode forward slashes as `%2F` in query parameters
* Revert inclusion of "%"
This is expected to fail tests due to double escaping
* Update `urlencode`
---------
Co-authored-by: Tom Christie <tom@tomchristie.com>
* fix: NO_PROXY supports IPv4, IPv6 and localhost
* add more tests for test_get_environment_proxies
---------
Co-authored-by: Tom Christie <tom@tomchristie.com>
* Replace quadratic algo in LineDecoder
Leading to enormous speedups when doing things such as
Response(...).iter_lines() as described on issue #2422
* Update httpx/_decoders.py
* Update _decoders.py
Handle text ending in `\r` more gracefully.
Return as much content as possible.
* Update test_decoders.py
* Update _decoders.py
* Update _decoders.py
* Update _decoders.py
* Update httpx/_decoders.py
Co-authored-by: cdeler <serj.krotov@gmail.com>
* Update _decoders.py
---------
Co-authored-by: Tom Christie <tom@tomchristie.com>
Co-authored-by: cdeler <serj.krotov@gmail.com>
* fix type annotation for MockTransport
* add type ignore
* better type checks
* better type checks
* add pragma
---------
Co-authored-by: Tom Christie <tom@tomchristie.com>
* NetRCAuth class
* Add docs for httpx.NetRCAuth()
* Drop failing cross-domain test for NetRCAuth()
* Update tests
* Update httpx/_auth.py
* Add tests for netrc file with no password
* Drop RawURL
* First pass at adding urlparse
* Update urlparse
* Add urlparse
* Add urlparse
* Unicode non-printables can be valid in IDNA hostnames
* Update _urlparse.py docstring
* Linting
* Trim away ununsed codepaths
* Tweaks for path validation depending on scheme and authority presence
* Minor cleanups
* Minor cleanups
* full_path -> raw_path, forr internal consistency
* Linting fixes
* Drop rfc3986 dependency
* Add test for #1833
* Linting
* Drop 'rfc3986' dependancy from README and docs homepage
Co-authored-by: Thomas Grainger <tagrain@gmail.com>
* replace pytest-asyncio with anyio
* remove pytest-trio also
* Update setup.cfg
* use anyio.Lock in test_auth
Co-authored-by: Tom Christie <tom@tomchristie.com>
* Typing: enable disallow_untyped_calls
Only the test suite needed adjusting to add type hints.
* Update setup.cfg
Co-authored-by: Tom Christie <tom@tomchristie.com>
- ignore mypy when it comes to comparing an IntEnum member with an int
- Correct type hint for `test_wsgi_server_port`'s `expected_server_port`
parameter.
Co-authored-by: Tom Christie <tom@tomchristie.com>
- Add explicit exports for names imported from `_compat`
- Correct imports of `URL` (from `._urls`, not via `._models`)
- Correct import of the uvicorn `Server` class
Co-authored-by: Tom Christie <tom@tomchristie.com>
* reuse the digest auth challenge to avoid sending twice as many requests
* fix for digest testcase
* ran testing/linting scripts
* codereview changes, removed tomchristie username from all authentication tests
Co-authored-by: Philipp Reitter <p.reitter@accessio.at>
Co-authored-by: Tom Christie <tom@tomchristie.com>
* Typing: always fill in generic type parameters
Being explicit about the parameters helps find bugs and makes the library
easier to use for users.
- Tell mypy to disallow generics without parameter values
- Give all generic types parameters values
* fix things that aren't coming in from other commits
* lint
Co-authored-by: Martijn Pieters <mj@zopatista.com>
Co-authored-by: Tom Christie <tom@tomchristie.com>
* Use multipart instead of cgi for multipart tests
The cgi module has been deprecated as of python 3.11.
Signed-off-by: Vincent Fazio <vfazio@gmail.com>
* Update setup.cfg
All references to the cgi module have all been removed so there's no
longer a need to silence those deprecation warnings.
The deprecation warning for certifi is resolved as of version 2022.09.24.
Signed-off-by: Vincent Fazio <vfazio@gmail.com>
Signed-off-by: Vincent Fazio <vfazio@gmail.com>
Co-authored-by: Tom Christie <tom@tomchristie.com>
* Add Response(..., default_encoding=...)
* Add tests for Response(..., default_encoding=...)
* Add Client(..., default_encoding=...)
* Switch default encoding to 'utf-8' instead of 'autodetect'
* Make charset_normalizer an optional dependancy, not a mandatory one.
* Documentation
* Use callable for default_encoding
* Update tests for new charset autodetection API
* Update docs for new charset autodetection API
* Update requirements
* Drop charset_normalizer from requirements
* Test case for clean stream closing on cancellations
* Test case for clean stream closing on cancellations
* Linting on tests
* responses should close on any BaseException
* feat: allow passing multipart headers
* Add test for including content-type in headers
* lint
* override content_type with headers
* compare tuples based on length
* incorporate suggestion
* remove .title() on headers
* Integrate with httpcore 0.14
* Fix pool timeout test
* Add request extensions to API
* Add certificate and connection info to client, using 'trace' extension
* Fix test_pool_timeout flakiness
* Add cli support
* Add setup.py
* Import main to 'httpx.main'
* Add 'cli' to requirements
* Add tests for command-line client
* Drop most CLI tests
* Add test_json
* Add test_redirects
* Coverage exclusion over _main.py in order to test more clearly
* Black formatting
* Add test_follow_redirects
* Add test_post, test_verbose, test_auth
* Add test_errors
* Remove test_errors
* Add test_download
* Change test_errors - perhaps the empty host header was causing the socket error?
* Update test_errors to not break socket
* Update docs
* Update version to 1.0.0.beta0
* Tweak CHANGELOG
* Fix up images in README
* Tweak images in README
* Update README
* Switch default on allow_redirects to False
* allow_redirects -> follow_redirects
* Update follow_redirects default in top-level API
* Update docs on follow_redirects
* Switch event hooks to also run on redirects
* Bump coverage
* Add pragma: no cover, because sometime ya just gotta be pragmatic
* Update docs with note about response.read()
* Add a network pytest mark for tests that use the network
Sometimes it's useful to have the tests that use the network
marked so they can be skipped easily when we know the network
is not available.
This is useful for example on SUSE and openSUSE's build servers.
When building the httpx packages (actually, any package in the
distribution) the network is disabled so we can assure
reproducible builds (among other benefits). With this mark, it's
easier to skip tests that can not succeed.
* Add a better explanation for the network marker
Co-authored-by: Florimond Manca <15911462+florimondmanca@users.noreply.github.com>
Co-authored-by: Joe <nigelchiang@outlook.com>
Co-authored-by: Florimond Manca <15911462+florimondmanca@users.noreply.github.com>
Co-authored-by: Tom Christie <tom@tomchristie.com>
* Use either brotli (recommended for CPython) or brotlicffi (Recommended for PyPy and others)
* Add comments in places where we switch behaviour depending on brotli/brotlicffi
Co-authored-by: Florimond Manca <florimond.manca@gmail.com>
Fix test_json_without_specified_encoding_*_error tests on big endian
platforms. The tests wrongly assume that data encoded as "utf-32-be"
can not be decoded as "utf-32". This is true on little endian platforms
but on big endian platforms "utf-32" is equivalent to "utf-32-be".
To avoid the problem, explicitly decode as "utf-32-le", as this should
trigger the expected exception independently of platform's endianness.
* Treat warnings as errors
* Defensive programming in Client.__del__ to avoid possible warnings on partially initialized instances
* Linting
* Ignore linting getattr errors in __del__
* getattr requires a default
* Tighten up closing of auth_flow generators
* Switch multipart test to open file in a context manager
* Ignore warnings on uvicorn
* Drop -Werror from addopts
* Warings specified entirely in 'filterwarnings' section
* Use ssl.PROTOCOL_TLS_CLIENT instead of deprecated ssl.PROTOCOL_TLS
* Push 'check_hostname = False' above 'context.verify_mode = ssl.CERT_NONE'
* Introduce set_minimum_tls_version_1_2 compatible across different python versions
* Commenting
* Add missing annotation
* Exclude _compat from coverage
Co-authored-by: Joe <nigelchiang@outlook.com>
Co-authored-by: jianghang <jianghang@didiglobal.com>
* Add failing test case for 'content=io.BytesIO(...)'
* Refactor peek_filelike_length to return an Optional[int]
* Peek filelength on file-like objects when rendering 'content=...'
* Support HTTPCore 0.13
* Update httpcore minimum version
* Call into 'handle_async_request', not 'arequest'
* Drop unintentional commit
* Update tests
* Make Request and Response picklable
* fixup! Make Request and Response picklable
* Apply suggestions from code review
* Apply suggestions from code review
* Update tests/models/test_requests.py
Co-authored-by: Tom Christie <tom@tomchristie.com>
* Deprecate per-request cookies
* Update docs/compatibility.md
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
* Update httpx/_client.py
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
* Update compatibility.md
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>