summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--python-lowhaio.spec490
-rw-r--r--sources1
3 files changed, 492 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..733fbc9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/lowhaio-0.0.88.tar.gz
diff --git a/python-lowhaio.spec b/python-lowhaio.spec
new file mode 100644
index 0000000..4a59e1e
--- /dev/null
+++ b/python-lowhaio.spec
@@ -0,0 +1,490 @@
+%global _empty_manifest_terminate_build 0
+Name: python-lowhaio
+Version: 0.0.88
+Release: 1
+Summary: Lightweight Python asyncio HTTP client
+License: MIT License
+URL: https://github.com/michalc/lowhaio
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/83/8a/8bf4f87bd6a0c4384448881a97cd1860f122e1585f937916fe03b7920d52/lowhaio-0.0.88.tar.gz
+BuildArch: noarch
+
+Requires: python3-aiodnsresolver
+
+%description
+# lowhaio [![CircleCI](https://circleci.com/gh/michalc/lowhaio.svg?style=svg)](https://circleci.com/gh/michalc/lowhaio) [![Test Coverage](https://api.codeclimate.com/v1/badges/418d72f1de909bff27b6/test_coverage)](https://codeclimate.com/github/michalc/lowhaio/test_coverage)
+
+A lightweight Python asyncio HTTP/1.1 client. No additional tasks are created; all code is in a single module; and other than the standard library only a single dependency is required, [aiodnsresolver](https://github.com/michalc/aiodnsresolver)
+
+Lowhaio has a deliberately limited scope: it includes just enough code to be a useful HTTP client and allow more complex behaviour to be added on top if required.
+
+Connections are DNS-aware, in that they are only re-used if they match a current A record for the domain.
+
+
+## Installation
+
+```bash
+pip install lowhaio
+```
+
+
+## Usage
+
+The API is streaming-first: for both request and response bodies, asynchronous iterators are used.
+
+```python
+import asyncio
+from lowhaio import Pool
+
+async def main():
+ request, close = Pool()
+
+ async def request_body():
+ yield b'a'
+ yield b'bc'
+
+ code, headers, response_body = await request(
+ b'POST', 'https://postman-echo.com/post',
+ headers=((b'content-length', b'3'), (b'content-type', b'text/plain'),),
+ body=request_body,
+ )
+ async for chunk in response_body:
+ print(chunk)
+
+ await close()
+
+loop = asyncio.get_event_loop()
+loop.run_until_complete(main())
+```
+
+However, there are helper functions `streamed` and `buffered` when this isn't required or possible.
+
+```python
+import asyncio
+from lowhaio import Pool, streamed, buffered
+
+async def main():
+ request, close = Pool()
+
+ request_body = streamed(b'abc')
+
+ code, headers, response_body = await request(
+ b'POST', 'https://postman-echo.com/post',
+ headers=((b'content-length', b'3'), (b'content-type', b'text/plain'),),
+ body=request_body,
+ )
+ print(await buffered(response_body))
+
+ await close()
+
+loop = asyncio.get_event_loop()
+loop.run_until_complete(main())
+```
+
+
+## Headers
+
+The only header automatically added to requests is the `host` header, which is the idna/punycode-encoded domain name from the requested URL.
+
+
+## Exceptions
+
+Exceptions are usually subclasses of `HttpError`. If a lower-level exception caused this, it is set in the `__cause__` attribute of the `HttpError`. Specifically, before any data is sent `HttpConnectionError` is raised, and after data is sent, `HttpDataError` is raised. This difference is to make it possible to know if non-idempotent requests can be retried.
+
+However, `asyncio.CancelledError` and exceptions that do not directive from `Exception`, such as `SystemExit`, are allowed to bubble up.
+
+
+## Custom SSL context
+
+Lowhaio can be used with an custom SSL context through through the `get_ssl_context` parameter to `Pool`. For example, to use the certifi CA bundle, you can install it by
+
+```bash
+pip install certifi
+```
+
+and use it as below.
+
+```python
+import asyncio
+import ssl
+
+import certifi
+from lowhaio import Pool, buffered, streamed
+
+async def main():
+ request, close = Pool(
+ get_ssl_context=lambda: ssl.create_default_context(cafile=certifi.where()),
+ )
+
+ request_body = streamed(b'abc')
+
+ code, headers, response_body = await request(
+ b'POST', 'https://postman-echo.com/post',
+ headers=((b'content-length', b'3'), (b'content-type', b'text/plain'),),
+ body=request_body,
+ )
+ print(await buffered(response_body))
+
+ await close()
+
+loop = asyncio.get_event_loop()
+loop.run_until_complete(main())
+```
+
+
+## Scope
+
+The scope of the core functions is restricted to:
+
+- (TLS) connection opening, closing and pooling;
+- passing and receiving HTTP headers and streaming bodies;
+- decoding chunked responses;
+- raising exceptions on timeouts.
+
+This is to make the core behaviour useful to a reasonable range of uses, but to _not_ include what can be added by layer(s) on top. Specifically not included:
+
+- following redirects, implemented by [lowhaio-redirect](https://github.com/michalc/lowhaio-redirect);
+- retrying failed requests, implemented by [lowhaio-retry](https://github.com/michalc/lowhaio-retry);
+- encoding chunked requests, implemented by [lowhaio-chunked](https://github.com/michalc/lowhaio-chunked);
+- authentication, such as AWS Signature Version 4 implemented by [lowhaio-aws-sigv4](https://github.com/michalc/lowhaio-aws-sigv4), or AWS Signature Version 4 with unsigned payload implemented by [lowhaio-aws-sigv4-unsigned-payload](https://github.com/michalc/lowhaio-aws-sigv4-unsigned-payload);
+- compressing/decompressing requests/responses;
+- cookies.
+
+
+
+
+%package -n python3-lowhaio
+Summary: Lightweight Python asyncio HTTP client
+Provides: python-lowhaio
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-lowhaio
+# lowhaio [![CircleCI](https://circleci.com/gh/michalc/lowhaio.svg?style=svg)](https://circleci.com/gh/michalc/lowhaio) [![Test Coverage](https://api.codeclimate.com/v1/badges/418d72f1de909bff27b6/test_coverage)](https://codeclimate.com/github/michalc/lowhaio/test_coverage)
+
+A lightweight Python asyncio HTTP/1.1 client. No additional tasks are created; all code is in a single module; and other than the standard library only a single dependency is required, [aiodnsresolver](https://github.com/michalc/aiodnsresolver)
+
+Lowhaio has a deliberately limited scope: it includes just enough code to be a useful HTTP client and allow more complex behaviour to be added on top if required.
+
+Connections are DNS-aware, in that they are only re-used if they match a current A record for the domain.
+
+
+## Installation
+
+```bash
+pip install lowhaio
+```
+
+
+## Usage
+
+The API is streaming-first: for both request and response bodies, asynchronous iterators are used.
+
+```python
+import asyncio
+from lowhaio import Pool
+
+async def main():
+ request, close = Pool()
+
+ async def request_body():
+ yield b'a'
+ yield b'bc'
+
+ code, headers, response_body = await request(
+ b'POST', 'https://postman-echo.com/post',
+ headers=((b'content-length', b'3'), (b'content-type', b'text/plain'),),
+ body=request_body,
+ )
+ async for chunk in response_body:
+ print(chunk)
+
+ await close()
+
+loop = asyncio.get_event_loop()
+loop.run_until_complete(main())
+```
+
+However, there are helper functions `streamed` and `buffered` when this isn't required or possible.
+
+```python
+import asyncio
+from lowhaio import Pool, streamed, buffered
+
+async def main():
+ request, close = Pool()
+
+ request_body = streamed(b'abc')
+
+ code, headers, response_body = await request(
+ b'POST', 'https://postman-echo.com/post',
+ headers=((b'content-length', b'3'), (b'content-type', b'text/plain'),),
+ body=request_body,
+ )
+ print(await buffered(response_body))
+
+ await close()
+
+loop = asyncio.get_event_loop()
+loop.run_until_complete(main())
+```
+
+
+## Headers
+
+The only header automatically added to requests is the `host` header, which is the idna/punycode-encoded domain name from the requested URL.
+
+
+## Exceptions
+
+Exceptions are usually subclasses of `HttpError`. If a lower-level exception caused this, it is set in the `__cause__` attribute of the `HttpError`. Specifically, before any data is sent `HttpConnectionError` is raised, and after data is sent, `HttpDataError` is raised. This difference is to make it possible to know if non-idempotent requests can be retried.
+
+However, `asyncio.CancelledError` and exceptions that do not directive from `Exception`, such as `SystemExit`, are allowed to bubble up.
+
+
+## Custom SSL context
+
+Lowhaio can be used with an custom SSL context through through the `get_ssl_context` parameter to `Pool`. For example, to use the certifi CA bundle, you can install it by
+
+```bash
+pip install certifi
+```
+
+and use it as below.
+
+```python
+import asyncio
+import ssl
+
+import certifi
+from lowhaio import Pool, buffered, streamed
+
+async def main():
+ request, close = Pool(
+ get_ssl_context=lambda: ssl.create_default_context(cafile=certifi.where()),
+ )
+
+ request_body = streamed(b'abc')
+
+ code, headers, response_body = await request(
+ b'POST', 'https://postman-echo.com/post',
+ headers=((b'content-length', b'3'), (b'content-type', b'text/plain'),),
+ body=request_body,
+ )
+ print(await buffered(response_body))
+
+ await close()
+
+loop = asyncio.get_event_loop()
+loop.run_until_complete(main())
+```
+
+
+## Scope
+
+The scope of the core functions is restricted to:
+
+- (TLS) connection opening, closing and pooling;
+- passing and receiving HTTP headers and streaming bodies;
+- decoding chunked responses;
+- raising exceptions on timeouts.
+
+This is to make the core behaviour useful to a reasonable range of uses, but to _not_ include what can be added by layer(s) on top. Specifically not included:
+
+- following redirects, implemented by [lowhaio-redirect](https://github.com/michalc/lowhaio-redirect);
+- retrying failed requests, implemented by [lowhaio-retry](https://github.com/michalc/lowhaio-retry);
+- encoding chunked requests, implemented by [lowhaio-chunked](https://github.com/michalc/lowhaio-chunked);
+- authentication, such as AWS Signature Version 4 implemented by [lowhaio-aws-sigv4](https://github.com/michalc/lowhaio-aws-sigv4), or AWS Signature Version 4 with unsigned payload implemented by [lowhaio-aws-sigv4-unsigned-payload](https://github.com/michalc/lowhaio-aws-sigv4-unsigned-payload);
+- compressing/decompressing requests/responses;
+- cookies.
+
+
+
+
+%package help
+Summary: Development documents and examples for lowhaio
+Provides: python3-lowhaio-doc
+%description help
+# lowhaio [![CircleCI](https://circleci.com/gh/michalc/lowhaio.svg?style=svg)](https://circleci.com/gh/michalc/lowhaio) [![Test Coverage](https://api.codeclimate.com/v1/badges/418d72f1de909bff27b6/test_coverage)](https://codeclimate.com/github/michalc/lowhaio/test_coverage)
+
+A lightweight Python asyncio HTTP/1.1 client. No additional tasks are created; all code is in a single module; and other than the standard library only a single dependency is required, [aiodnsresolver](https://github.com/michalc/aiodnsresolver)
+
+Lowhaio has a deliberately limited scope: it includes just enough code to be a useful HTTP client and allow more complex behaviour to be added on top if required.
+
+Connections are DNS-aware, in that they are only re-used if they match a current A record for the domain.
+
+
+## Installation
+
+```bash
+pip install lowhaio
+```
+
+
+## Usage
+
+The API is streaming-first: for both request and response bodies, asynchronous iterators are used.
+
+```python
+import asyncio
+from lowhaio import Pool
+
+async def main():
+ request, close = Pool()
+
+ async def request_body():
+ yield b'a'
+ yield b'bc'
+
+ code, headers, response_body = await request(
+ b'POST', 'https://postman-echo.com/post',
+ headers=((b'content-length', b'3'), (b'content-type', b'text/plain'),),
+ body=request_body,
+ )
+ async for chunk in response_body:
+ print(chunk)
+
+ await close()
+
+loop = asyncio.get_event_loop()
+loop.run_until_complete(main())
+```
+
+However, there are helper functions `streamed` and `buffered` when this isn't required or possible.
+
+```python
+import asyncio
+from lowhaio import Pool, streamed, buffered
+
+async def main():
+ request, close = Pool()
+
+ request_body = streamed(b'abc')
+
+ code, headers, response_body = await request(
+ b'POST', 'https://postman-echo.com/post',
+ headers=((b'content-length', b'3'), (b'content-type', b'text/plain'),),
+ body=request_body,
+ )
+ print(await buffered(response_body))
+
+ await close()
+
+loop = asyncio.get_event_loop()
+loop.run_until_complete(main())
+```
+
+
+## Headers
+
+The only header automatically added to requests is the `host` header, which is the idna/punycode-encoded domain name from the requested URL.
+
+
+## Exceptions
+
+Exceptions are usually subclasses of `HttpError`. If a lower-level exception caused this, it is set in the `__cause__` attribute of the `HttpError`. Specifically, before any data is sent `HttpConnectionError` is raised, and after data is sent, `HttpDataError` is raised. This difference is to make it possible to know if non-idempotent requests can be retried.
+
+However, `asyncio.CancelledError` and exceptions that do not directive from `Exception`, such as `SystemExit`, are allowed to bubble up.
+
+
+## Custom SSL context
+
+Lowhaio can be used with an custom SSL context through through the `get_ssl_context` parameter to `Pool`. For example, to use the certifi CA bundle, you can install it by
+
+```bash
+pip install certifi
+```
+
+and use it as below.
+
+```python
+import asyncio
+import ssl
+
+import certifi
+from lowhaio import Pool, buffered, streamed
+
+async def main():
+ request, close = Pool(
+ get_ssl_context=lambda: ssl.create_default_context(cafile=certifi.where()),
+ )
+
+ request_body = streamed(b'abc')
+
+ code, headers, response_body = await request(
+ b'POST', 'https://postman-echo.com/post',
+ headers=((b'content-length', b'3'), (b'content-type', b'text/plain'),),
+ body=request_body,
+ )
+ print(await buffered(response_body))
+
+ await close()
+
+loop = asyncio.get_event_loop()
+loop.run_until_complete(main())
+```
+
+
+## Scope
+
+The scope of the core functions is restricted to:
+
+- (TLS) connection opening, closing and pooling;
+- passing and receiving HTTP headers and streaming bodies;
+- decoding chunked responses;
+- raising exceptions on timeouts.
+
+This is to make the core behaviour useful to a reasonable range of uses, but to _not_ include what can be added by layer(s) on top. Specifically not included:
+
+- following redirects, implemented by [lowhaio-redirect](https://github.com/michalc/lowhaio-redirect);
+- retrying failed requests, implemented by [lowhaio-retry](https://github.com/michalc/lowhaio-retry);
+- encoding chunked requests, implemented by [lowhaio-chunked](https://github.com/michalc/lowhaio-chunked);
+- authentication, such as AWS Signature Version 4 implemented by [lowhaio-aws-sigv4](https://github.com/michalc/lowhaio-aws-sigv4), or AWS Signature Version 4 with unsigned payload implemented by [lowhaio-aws-sigv4-unsigned-payload](https://github.com/michalc/lowhaio-aws-sigv4-unsigned-payload);
+- compressing/decompressing requests/responses;
+- cookies.
+
+
+
+
+%prep
+%autosetup -n lowhaio-0.0.88
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-lowhaio -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Wed May 10 2023 Python_Bot <Python_Bot@openeuler.org> - 0.0.88-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..0d15b73
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+c30952dadccc05c2d47f22c044e055a5 lowhaio-0.0.88.tar.gz