Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-siosocks for openSUSE:Factory 
checked in at 2022-10-12 18:25:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-siosocks (Old)
 and      /work/SRC/openSUSE:Factory/.python-siosocks.new.2275 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-siosocks"

Wed Oct 12 18:25:31 2022 rev:4 rq:1009950 version:0.3.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-siosocks/python-siosocks.changes  
2022-01-19 00:35:55.186321512 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-siosocks.new.2275/python-siosocks.changes    
    2022-10-12 18:27:18.230034897 +0200
@@ -1,0 +2,6 @@
+Tue Oct  4 22:57:54 UTC 2022 - Matej Cepl <[email protected]>
+
+- Update to 0.3.0:
+  - tests: fix socks thread-based server fixture
+
+-------------------------------------------------------------------

Old:
----
  siosocks-0.2.0.tar.gz

New:
----
  siosocks-0.3.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-siosocks.spec ++++++
--- /var/tmp/diff_new_pack.qHZqOD/_old  2022-10-12 18:27:18.754036050 +0200
+++ /var/tmp/diff_new_pack.qHZqOD/_new  2022-10-12 18:27:18.758036059 +0200
@@ -19,7 +19,7 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define skip_python2 1
 Name:           python-siosocks
-Version:        0.2.0
+Version:        0.3.0
 Release:        0
 Summary:        Sans-io socks proxy client/server with couple io backends
 License:        MIT

++++++ siosocks-0.2.0.tar.gz -> siosocks-0.3.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siosocks-0.2.0/PKG-INFO new/siosocks-0.3.0/PKG-INFO
--- old/siosocks-0.2.0/PKG-INFO 2020-09-01 03:59:41.000000000 +0200
+++ new/siosocks-0.3.0/PKG-INFO 2022-09-26 01:12:47.549254700 +0200
@@ -1,213 +1,213 @@
 Metadata-Version: 2.1
 Name: siosocks
-Version: 0.2.0
+Version: 0.3.0
 Summary: sans-io socks proxy client/server with couple io backends
 Home-page: https://github.com/pohmelie/siosocks
 Author: pohmelie
 Author-email: [email protected]
 License: MIT
-Description: # siosocks
-        ![Travis status for master 
branch](https://travis-ci.com/pohmelie/siosocks.svg?branch=master)
-        ![Codecov coverage for master 
branch](https://codecov.io/gh/pohmelie/siosocks/branch/master/graph/badge.svg)
-        ![Pypi version](https://img.shields.io/pypi/v/siosocks.svg)
-        ![Pypi downloads count](https://img.shields.io/pypi/dm/siosocks)
-        
-        [Sans-io](https://sans-io.readthedocs.io/) socks 4/5 client/server 
library/framework.
-        
-        # Reasons
-        * No one-shot socks servers
-        * Sans-io
-        * asyncio-ready 
[`twunnel3`](https://github.com/jvansteirteghem/twunnel3) is dead
-        * [`aiosocks`](https://github.com/nibrag/aiosocks) do not mimic 
`asyncio.open_connection` arguments (maybe dead too)
-        * Fun
-        
-        # Features
-        * Only tcp connect (no bind, no udp)
-        * Both client and server
-        * Socks versions: 4, 4a, 5
-        * Socks5 auth: no auth, username/password
-        * Couple io backends: asyncio, trio, socketserver
-        * One-shot socks server (`python -m siosocks`)
-        
-        # License
-        `siosocks` is offered under MIT license.
-        
-        # Requirements
-        * python 3.6+
-        
-        # IO implementation matrix
-        
-        Framework | Client | Server
-        --- | :---: | :---:
-        asyncio | + | +
-        trio | + | +
-        socket | | +
-        
-        Feel free to make it bigger :wink:
-        
-        # Usage
-        End user implementations mimic ??parent?? library api.
-        ## Client
-        * asyncio: 
[`open_connection`](https://docs.python.org/3/library/asyncio-stream.html#asyncio.open_connection)
-        * trio: 
[`open_tcp_stream`](https://trio.readthedocs.io/en/stable/reference-io.html#trio.open_tcp_stream)
-        
-        Extra keyword-only arguments:
-        * `socks_host`: string
-        * `socks_port`: integer
-        * `socks_version`: integer (4 or 5)
-        * `username`: optional string (default: `None`)
-        * `password`: optional string (default: `None`)
-        * `encoding`: optional string (default: `"utf-8"`)
-        * `socks4_extras`: optional dictionary
-        * `socks5_extras`: optional dictionary
-        
-        Extras:
-        * socks4
-            * `user_id`: string (default: `""`)
-        * socks5
-            * None at this moment, added for uniform api
-        ## Server
-        End user implementations mimic ??parent?? library server request 
handlers.
-        * asyncio: 
[`start_server`](https://docs.python.org/3/library/asyncio-stream.html#asyncio.start_server)
-        * trio: 
[`serve_tcp`](https://trio.readthedocs.io/en/stable/reference-io.html#trio.serve_tcp)
-        * socketserver: 
[`ThreadingTCPServer`](https://docs.python.org/3/library/socketserver.html#socketserver.ThreadingTCPServer)
-        
-        You should use 
[`partial`](https://docs.python.org/3/library/functools.html#functools.partial) 
to bind socks specific arguments:
-        * `allowed_versions`: set of integers (default: `{4, 5}`)
-        * `username`: optional string (default: `None`)
-        * `password`: optional string (default: `None`)
-        * `strict_security_policy`: boolean, if `True` exception will be 
raised if authentication required and 4 is in allowed versions set (default: 
`True`)
-        * `encoding`: optional string (default: `"utf-8"`)
-        
-        Nothing to say more. Typical usage can be found at 
[`__main__.py`](https://github.com/pohmelie/siosocks/blob/master/siosocks/__main__.py)
-        
-        # Examples
-        ## High-level
-        This section will use `asyncio` as backend, since it is main 
target/reason for `siosocks`
-        ### Client
-        ``` python
-        import asyncio
-        
-        from siosocks.io.asyncio import open_connection
-        
-        
-        HOST = "api.ipify.org"
-        REQ = """GET /?format=json HTTP/1.1
-        Host: api.ipify.org
-        User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:67.0) 
Gecko/20100101 Firefox/67.0
-        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
-        Accept-Language: en,en-US;q=0.7,ru;q=0.3
-        Accept-Encoding: gzip, deflate
-        DNT: 1
-        Connection: keep-alive
-        Upgrade-Insecure-Requests: 1
-        Cache-Control: max-age=0
-        
-        """
-        
-        
-        async def main():
-            # assume we have tor started
-            r, w = await open_connection(HOST, 80, socks_host="localhost", 
socks_port=9050, socks_version=5)
-            w.write(REQ.replace("\n", "\r\n").encode())
-            await w.drain()
-            print(await r.read(8192))
-            w.close()
-        
-        
-        loop = asyncio.get_event_loop()
-        loop.run_until_complete(main())
-        ```
-        ### Server
-        ``` python
-        import socket
-        import asyncio
-        import contextlib
-        
-        from siosocks.io.asyncio import socks_server_handler
-        
-        
-        loop = asyncio.get_event_loop()
-        server = 
loop.run_until_complete(asyncio.start_server(socks_server_handler, port=1080))
-        addresses = []
-        for sock in server.sockets:
-            if sock.family in (socket.AF_INET, socket.AF_INET6):
-                host, port, *_ = sock.getsockname()
-                addresses.append(f"{host}:{port}")
-        print(f"Socks4/5 proxy serving on {', '.join(addresses)}")
-        with contextlib.suppress(KeyboardInterrupt):
-            loop.run_forever()
-        ```
-        But if you just want one-shot socks server then try:
-        ``` bash
-        python -m siosocks
-        ```
-        This will start socks 4, 5 server on all interfaces on 1080 port. For 
more information try `--help`
-        ``` bash
-        python -m siosocks --help
-        usage: siosocks [-h] [--backend {asyncio,socketserver,trio}] [--host 
HOST]
-                        [--port PORT] [--family {ipv4,ipv6,auto}] [--socks 
SOCKS]
-                        [--username USERNAME] [--password PASSWORD]
-                        [--encoding ENCODING] [--no-strict] [-v]
-        
-        Socks proxy server
-        
-        optional arguments:
-          -h, --help            show this help message and exit
-          --backend {asyncio,socketserver,trio}
-                                Socks server backend [default: asyncio]
-          --host HOST           Socks server host [default: None]
-          --port PORT           Socks server port [default: 1080]
-          --family {ipv4,ipv6,auto}
-                                Socket family [default: auto]
-          --socks SOCKS         Socks protocol version [default: []]
-          --username USERNAME   Socks auth username [default: None]
-          --password PASSWORD   Socks auth password [default: None]
-          --encoding ENCODING   String encoding [default: utf-8]
-          --no-strict           Allow multiversion socks server, when socks5 
used with
-                                username/password auth [default: False]
-          -v, --version         Show siosocks version
-        ```
-        
-        ### Exceptions
-        `siosocks` have unified exception for all types of socks-related 
errors:
-        ``` python
-        import asyncio
-        
-        from siosocks.exceptions import SocksException
-        from siosocks.io.asyncio import open_connection
-        
-        
-        async def main():
-            try:
-                r, w = await open_connection("127.0.0.1", 80, 
socks_host="localhost", socks_port=9050, socks_version=5)
-            except SocksException:
-                ...
-            else:
-                # at this point all socks-related tasks done and returned 
reader and writer
-                # are just plain asyncio objects without any siosocks proxies
-        
-        
-        loop = asyncio.get_event_loop()
-        loop.run_until_complete(main())
-        ```
-        
-        ## Low-level
-        Shadowsocks-like 
[client/server](https://github.com/pohmelie/siosocks/blob/master/examples/shadowsocks-like.py).
 Shadowsocks-like built on top of socks5 and encryption. It have ??client??, 
which is actually socks server and ??server??. So, precisely there are two 
servers: client side and server side. Purpose of shadowsocks is to encrypt data 
between ??incoming?? and ??outgoing?? servers. In common this looks like:
-        ```
-        client (non-encrypted socks) ??incoming?? socks server (encrypted 
socks) ??outgoing?? socks server (non-socks connection) target server
-        ```
-        Example above use Caesar cipher for simplicity (and security of 
course).
-        
-        # Roadmap/contibutions
-        - [ ] add more backends (average)
-        - [ ] speed up `passthrough` implementation (seems hard)
-        - [ ] add client redirection
-        
-Platform: UNKNOWN
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 3
-Requires-Python: >= 3.6
+Requires-Python: >=3.8
 Description-Content-Type: text/markdown
-Provides-Extra: tests
+Provides-Extra: dev
 Provides-Extra: trio
+License-File: license.txt
+
+# siosocks
+[![Github actions status for master 
branch](https://github.com/pohmelie/siosocks/actions/workflows/ci.yml/badge.svg?branch=master)(https://github.com/pohmelie/siosocks/actions)
+[![Codecov coverage for master 
branch](https://codecov.io/gh/pohmelie/siosocks/branch/master/graph/badge.svg)](https://codecov.io/gh/pohmelie/siosocks)
+[![Pypi 
version](https://img.shields.io/pypi/v/siosocks.svg)](https://pypi.org/project/siosocks/)
+[![Pypi downloads 
count](https://img.shields.io/pypi/dm/siosocks)](https://pypi.org/project/siosocks/)
+
+[Sans-io](https://sans-io.readthedocs.io/) socks 4/5 client/server 
library/framework.
+
+# Reasons
+- No one-shot socks servers
+- Sans-io
+- asyncio-ready [`twunnel3`](https://github.com/jvansteirteghem/twunnel3) is 
dead
+- [`aiosocks`](https://github.com/nibrag/aiosocks) do not mimic 
`asyncio.open_connection` arguments (maybe dead too)
+- Fun
+
+# Features
+- Only tcp connect (no bind, no udp)
+- Both client and server
+- Socks versions: 4, 4a, 5
+- Socks5 auth: no auth, username/password
+- Couple io backends: asyncio, trio, socketserver
+- One-shot socks server (`python -m siosocks`)
+
+# License
+`siosocks` is offered under MIT license.
+
+# Requirements
+- python 3.8+
+
+# IO implementation matrix
+
+Framework | Client | Server
+--- | :---: | :---:
+asyncio | + | +
+trio | + | +
+socket | | +
+
+Feel free to make it bigger :wink:
+
+# Usage
+End user implementations mimic ??parent?? library api.
+## Client
+- asyncio: 
[`open_connection`](https://docs.python.org/3/library/asyncio-stream.html#asyncio.open_connection)
+- trio: 
[`open_tcp_stream`](https://trio.readthedocs.io/en/stable/reference-io.html#trio.open_tcp_stream)
+
+Extra keyword-only arguments:
+- `socks_host`: string
+- `socks_port`: integer
+- `socks_version`: integer (4 or 5)
+- `username`: optional string (default: `None`)
+- `password`: optional string (default: `None`)
+- `encoding`: optional string (default: `"utf-8"`)
+- `socks4_extras`: optional dictionary
+- `socks5_extras`: optional dictionary
+
+Extras:
+- socks4
+    - `user_id`: string (default: `""`)
+- socks5
+    - None at this moment, added for uniform api
+## Server
+End user implementations mimic ??parent?? library server request handlers.
+- asyncio: 
[`start_server`](https://docs.python.org/3/library/asyncio-stream.html#asyncio.start_server)
+- trio: 
[`serve_tcp`](https://trio.readthedocs.io/en/stable/reference-io.html#trio.serve_tcp)
+- socketserver: 
[`ThreadingTCPServer`](https://docs.python.org/3/library/socketserver.html#socketserver.ThreadingTCPServer)
+
+You should use 
[`partial`](https://docs.python.org/3/library/functools.html#functools.partial) 
to bind socks specific arguments:
+- `allowed_versions`: set of integers (default: `{4, 5}`)
+- `username`: optional string (default: `None`)
+- `password`: optional string (default: `None`)
+- `strict_security_policy`: boolean, if `True` exception will be raised if 
authentication required and 4 is in allowed versions set (default: `True`)
+- `encoding`: optional string (default: `"utf-8"`)
+
+Nothing to say more. Typical usage can be found at 
[`__main__.py`](https://github.com/pohmelie/siosocks/blob/master/siosocks/__main__.py)
+
+# Examples
+## High-level
+This section will use `asyncio` as backend, since it is main target/reason for 
`siosocks`
+### Client
+``` python
+import asyncio
+
+from siosocks.io.asyncio import open_connection
+
+
+HOST = "api.ipify.org"
+REQ = """GET /?format=json HTTP/1.1
+Host: api.ipify.org
+User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:67.0) Gecko/20100101 
Firefox/67.0
+Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
+Accept-Language: en,en-US;q=0.7,ru;q=0.3
+Accept-Encoding: gzip, deflate
+DNT: 1
+Connection: keep-alive
+Upgrade-Insecure-Requests: 1
+Cache-Control: max-age=0
+
+"""
+
+
+async def main():
+    # assume we have tor started
+    r, w = await open_connection(HOST, 80, socks_host="localhost", 
socks_port=9050, socks_version=5)
+    w.write(REQ.replace("\n", "\r\n").encode())
+    await w.drain()
+    print(await r.read(8192))
+    w.close()
+
+
+loop = asyncio.get_event_loop()
+loop.run_until_complete(main())
+```
+### Server
+``` python
+import socket
+import asyncio
+import contextlib
+
+from siosocks.io.asyncio import socks_server_handler
+
+
+loop = asyncio.get_event_loop()
+server = loop.run_until_complete(asyncio.start_server(socks_server_handler, 
port=1080))
+addresses = []
+for sock in server.sockets:
+    if sock.family in (socket.AF_INET, socket.AF_INET6):
+        host, port, *_ = sock.getsockname()
+        addresses.append(f"{host}:{port}")
+print(f"Socks4/5 proxy serving on {', '.join(addresses)}")
+with contextlib.suppress(KeyboardInterrupt):
+    loop.run_forever()
+```
+But if you just want one-shot socks server then try:
+``` bash
+python -m siosocks
+```
+This will start socks 4, 5 server on all interfaces on 1080 port. For more 
information try `--help`
+``` bash
+python -m siosocks --help
+usage: siosocks [-h] [--backend {asyncio,socketserver,trio}] [--host HOST]
+                [--port PORT] [--family {ipv4,ipv6,auto}] [--socks SOCKS]
+                [--username USERNAME] [--password PASSWORD]
+                [--encoding ENCODING] [--no-strict] [-v]
+
+Socks proxy server
+
+optional arguments:
+  -h, --help            show this help message and exit
+  --backend {asyncio,socketserver,trio}
+                        Socks server backend [default: asyncio]
+  --host HOST           Socks server host [default: None]
+  --port PORT           Socks server port [default: 1080]
+  --family {ipv4,ipv6,auto}
+                        Socket family [default: auto]
+  --socks SOCKS         Socks protocol version [default: []]
+  --username USERNAME   Socks auth username [default: None]
+  --password PASSWORD   Socks auth password [default: None]
+  --encoding ENCODING   String encoding [default: utf-8]
+  --no-strict           Allow multiversion socks server, when socks5 used with
+                        username/password auth [default: False]
+  -v, --version         Show siosocks version
+```
+
+### Exceptions
+`siosocks` have unified exception for all types of socks-related errors:
+``` python
+import asyncio
+
+from siosocks.exceptions import SocksException
+from siosocks.io.asyncio import open_connection
+
+
+async def main():
+    try:
+        r, w = await open_connection("127.0.0.1", 80, socks_host="localhost", 
socks_port=9050, socks_version=5)
+    except SocksException:
+        ...
+    else:
+        # at this point all socks-related tasks done and returned reader and 
writer
+        # are just plain asyncio objects without any siosocks proxies
+
+
+loop = asyncio.get_event_loop()
+loop.run_until_complete(main())
+```
+
+## Low-level
+Shadowsocks-like 
[client/server](https://github.com/pohmelie/siosocks/blob/master/examples/shadowsocks-like.py).
 Shadowsocks-like built on top of socks5 and encryption. It have ??client??, 
which is actually socks server and ??server??. So, precisely there are two 
servers: client side and server side. Purpose of shadowsocks is to encrypt data 
between ??incoming?? and ??outgoing?? servers. In common this looks like:
+```
+client (non-encrypted socks) ??incoming?? socks server (encrypted socks) 
??outgoing?? socks server (non-socks connection) target server
+```
+Example above use Caesar cipher for simplicity (and security of course).
+
+# Roadmap/contibutions
+- [ ] add more backends (average)
+- [ ] speed up `passthrough` implementation (seems hard)
+- [ ] add client redirection
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siosocks-0.2.0/history.md 
new/siosocks-0.3.0/history.md
--- old/siosocks-0.2.0/history.md       2020-09-01 03:54:18.000000000 +0200
+++ new/siosocks-0.3.0/history.md       2022-09-26 01:12:39.000000000 +0200
@@ -1,5 +1,10 @@
 # x.x.x (xxxx-xx-xx)
 
+# 0.3.0 (2022-09-26)
+- tests: use asyncio strict mode (fixes #6)
+- bump python to 3.8+
+- use github actions for CI
+
 # 0.2.0 (2020-09-01)
 - add unified `SocksException`
 - remove host/port redirection checks (fixes #3)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siosocks-0.2.0/readme.md new/siosocks-0.3.0/readme.md
--- old/siosocks-0.2.0/readme.md        2020-09-01 03:48:40.000000000 +0200
+++ new/siosocks-0.3.0/readme.md        2022-09-26 01:12:39.000000000 +0200
@@ -1,31 +1,31 @@
 # siosocks
-![Travis status for master 
branch](https://travis-ci.com/pohmelie/siosocks.svg?branch=master)
-![Codecov coverage for master 
branch](https://codecov.io/gh/pohmelie/siosocks/branch/master/graph/badge.svg)
-![Pypi version](https://img.shields.io/pypi/v/siosocks.svg)
-![Pypi downloads count](https://img.shields.io/pypi/dm/siosocks)
+[![Github actions status for master 
branch](https://github.com/pohmelie/siosocks/actions/workflows/ci.yml/badge.svg?branch=master)(https://github.com/pohmelie/siosocks/actions)
+[![Codecov coverage for master 
branch](https://codecov.io/gh/pohmelie/siosocks/branch/master/graph/badge.svg)](https://codecov.io/gh/pohmelie/siosocks)
+[![Pypi 
version](https://img.shields.io/pypi/v/siosocks.svg)](https://pypi.org/project/siosocks/)
+[![Pypi downloads 
count](https://img.shields.io/pypi/dm/siosocks)](https://pypi.org/project/siosocks/)
 
 [Sans-io](https://sans-io.readthedocs.io/) socks 4/5 client/server 
library/framework.
 
 # Reasons
-* No one-shot socks servers
-* Sans-io
-* asyncio-ready [`twunnel3`](https://github.com/jvansteirteghem/twunnel3) is 
dead
-* [`aiosocks`](https://github.com/nibrag/aiosocks) do not mimic 
`asyncio.open_connection` arguments (maybe dead too)
-* Fun
+- No one-shot socks servers
+- Sans-io
+- asyncio-ready [`twunnel3`](https://github.com/jvansteirteghem/twunnel3) is 
dead
+- [`aiosocks`](https://github.com/nibrag/aiosocks) do not mimic 
`asyncio.open_connection` arguments (maybe dead too)
+- Fun
 
 # Features
-* Only tcp connect (no bind, no udp)
-* Both client and server
-* Socks versions: 4, 4a, 5
-* Socks5 auth: no auth, username/password
-* Couple io backends: asyncio, trio, socketserver
-* One-shot socks server (`python -m siosocks`)
+- Only tcp connect (no bind, no udp)
+- Both client and server
+- Socks versions: 4, 4a, 5
+- Socks5 auth: no auth, username/password
+- Couple io backends: asyncio, trio, socketserver
+- One-shot socks server (`python -m siosocks`)
 
 # License
 `siosocks` is offered under MIT license.
 
 # Requirements
-* python 3.6+
+- python 3.8+
 
 # IO implementation matrix
 
@@ -40,36 +40,36 @@
 # Usage
 End user implementations mimic ??parent?? library api.
 ## Client
-* asyncio: 
[`open_connection`](https://docs.python.org/3/library/asyncio-stream.html#asyncio.open_connection)
-* trio: 
[`open_tcp_stream`](https://trio.readthedocs.io/en/stable/reference-io.html#trio.open_tcp_stream)
+- asyncio: 
[`open_connection`](https://docs.python.org/3/library/asyncio-stream.html#asyncio.open_connection)
+- trio: 
[`open_tcp_stream`](https://trio.readthedocs.io/en/stable/reference-io.html#trio.open_tcp_stream)
 
 Extra keyword-only arguments:
-* `socks_host`: string
-* `socks_port`: integer
-* `socks_version`: integer (4 or 5)
-* `username`: optional string (default: `None`)
-* `password`: optional string (default: `None`)
-* `encoding`: optional string (default: `"utf-8"`)
-* `socks4_extras`: optional dictionary
-* `socks5_extras`: optional dictionary
+- `socks_host`: string
+- `socks_port`: integer
+- `socks_version`: integer (4 or 5)
+- `username`: optional string (default: `None`)
+- `password`: optional string (default: `None`)
+- `encoding`: optional string (default: `"utf-8"`)
+- `socks4_extras`: optional dictionary
+- `socks5_extras`: optional dictionary
 
 Extras:
-* socks4
-    * `user_id`: string (default: `""`)
-* socks5
-    * None at this moment, added for uniform api
+- socks4
+    - `user_id`: string (default: `""`)
+- socks5
+    - None at this moment, added for uniform api
 ## Server
 End user implementations mimic ??parent?? library server request handlers.
-* asyncio: 
[`start_server`](https://docs.python.org/3/library/asyncio-stream.html#asyncio.start_server)
-* trio: 
[`serve_tcp`](https://trio.readthedocs.io/en/stable/reference-io.html#trio.serve_tcp)
-* socketserver: 
[`ThreadingTCPServer`](https://docs.python.org/3/library/socketserver.html#socketserver.ThreadingTCPServer)
+- asyncio: 
[`start_server`](https://docs.python.org/3/library/asyncio-stream.html#asyncio.start_server)
+- trio: 
[`serve_tcp`](https://trio.readthedocs.io/en/stable/reference-io.html#trio.serve_tcp)
+- socketserver: 
[`ThreadingTCPServer`](https://docs.python.org/3/library/socketserver.html#socketserver.ThreadingTCPServer)
 
 You should use 
[`partial`](https://docs.python.org/3/library/functools.html#functools.partial) 
to bind socks specific arguments:
-* `allowed_versions`: set of integers (default: `{4, 5}`)
-* `username`: optional string (default: `None`)
-* `password`: optional string (default: `None`)
-* `strict_security_policy`: boolean, if `True` exception will be raised if 
authentication required and 4 is in allowed versions set (default: `True`)
-* `encoding`: optional string (default: `"utf-8"`)
+- `allowed_versions`: set of integers (default: `{4, 5}`)
+- `username`: optional string (default: `None`)
+- `password`: optional string (default: `None`)
+- `strict_security_policy`: boolean, if `True` exception will be raised if 
authentication required and 4 is in allowed versions set (default: `True`)
+- `encoding`: optional string (default: `"utf-8"`)
 
 Nothing to say more. Typical usage can be found at 
[`__main__.py`](https://github.com/pohmelie/siosocks/blob/master/siosocks/__main__.py)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siosocks-0.2.0/setup.cfg new/siosocks-0.3.0/setup.cfg
--- old/siosocks-0.2.0/setup.cfg        2020-09-01 03:59:41.000000000 +0200
+++ new/siosocks-0.3.0/setup.cfg        2022-09-26 01:12:47.553254800 +0200
@@ -15,10 +15,10 @@
 
 [options]
 packages = find:
-python_requires = >= 3.6
+python_requires = >= 3.8
 
 [options.extras_require]
-tests = 
+dev = 
        pytest
        pytest-cov
        pytest-asyncio
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siosocks-0.2.0/siosocks/__init__.py 
new/siosocks-0.3.0/siosocks/__init__.py
--- old/siosocks-0.2.0/siosocks/__init__.py     2020-09-01 03:54:27.000000000 
+0200
+++ new/siosocks-0.3.0/siosocks/__init__.py     2022-09-26 01:12:39.000000000 
+0200
@@ -1,2 +1,2 @@
-__version__ = "0.2.0"
+__version__ = "0.3.0"
 version = tuple(map(int, __version__.split(".")))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siosocks-0.2.0/siosocks/__main__.py 
new/siosocks-0.3.0/siosocks/__main__.py
--- old/siosocks-0.2.0/siosocks/__main__.py     2019-08-02 22:24:06.000000000 
+0200
+++ new/siosocks-0.3.0/siosocks/__main__.py     2022-09-26 01:12:39.000000000 
+0200
@@ -46,6 +46,18 @@
 
 
 def asyncio_main(socks_versions, family, ns):
+
+    async def main():
+        server = await asyncio.start_server(handler, host=ns.host, 
port=ns.port, family=family)
+        addresses = []
+        for sock in server.sockets:
+            if sock.family in (socket.AF_INET, socket.AF_INET6):
+                host, port, *_ = sock.getsockname()
+                addresses.append(f"{host}:{port}")
+        print(f"Socks{socks_versions} proxy serving on {', '.join(addresses)}")
+        with contextlib.suppress(KeyboardInterrupt):
+            await server.serve_forever()
+
     handler = functools.partial(
         asyncio_socks_server_handler,
         allowed_versions=socks_versions,
@@ -54,17 +66,8 @@
         strict_security_policy=not ns.no_strict,
         encoding=ns.encoding,
     )
-    loop = asyncio.get_event_loop()
-    coro = asyncio.start_server(handler, host=ns.host, port=ns.port, 
family=family)
-    server = loop.run_until_complete(coro)
-    addresses = []
-    for sock in server.sockets:
-        if sock.family in (socket.AF_INET, socket.AF_INET6):
-            host, port, *_ = sock.getsockname()
-            addresses.append(f"{host}:{port}")
-    print(f"Socks{socks_versions} proxy serving on {', '.join(addresses)}")
     with contextlib.suppress(KeyboardInterrupt):
-        loop.run_forever()
+        return asyncio.run(main())
 
 
 def socketserver_main(socks_versions, family, ns):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siosocks-0.2.0/siosocks.egg-info/PKG-INFO 
new/siosocks-0.3.0/siosocks.egg-info/PKG-INFO
--- old/siosocks-0.2.0/siosocks.egg-info/PKG-INFO       2020-09-01 
03:59:41.000000000 +0200
+++ new/siosocks-0.3.0/siosocks.egg-info/PKG-INFO       2022-09-26 
01:12:47.000000000 +0200
@@ -1,213 +1,213 @@
 Metadata-Version: 2.1
 Name: siosocks
-Version: 0.2.0
+Version: 0.3.0
 Summary: sans-io socks proxy client/server with couple io backends
 Home-page: https://github.com/pohmelie/siosocks
 Author: pohmelie
 Author-email: [email protected]
 License: MIT
-Description: # siosocks
-        ![Travis status for master 
branch](https://travis-ci.com/pohmelie/siosocks.svg?branch=master)
-        ![Codecov coverage for master 
branch](https://codecov.io/gh/pohmelie/siosocks/branch/master/graph/badge.svg)
-        ![Pypi version](https://img.shields.io/pypi/v/siosocks.svg)
-        ![Pypi downloads count](https://img.shields.io/pypi/dm/siosocks)
-        
-        [Sans-io](https://sans-io.readthedocs.io/) socks 4/5 client/server 
library/framework.
-        
-        # Reasons
-        * No one-shot socks servers
-        * Sans-io
-        * asyncio-ready 
[`twunnel3`](https://github.com/jvansteirteghem/twunnel3) is dead
-        * [`aiosocks`](https://github.com/nibrag/aiosocks) do not mimic 
`asyncio.open_connection` arguments (maybe dead too)
-        * Fun
-        
-        # Features
-        * Only tcp connect (no bind, no udp)
-        * Both client and server
-        * Socks versions: 4, 4a, 5
-        * Socks5 auth: no auth, username/password
-        * Couple io backends: asyncio, trio, socketserver
-        * One-shot socks server (`python -m siosocks`)
-        
-        # License
-        `siosocks` is offered under MIT license.
-        
-        # Requirements
-        * python 3.6+
-        
-        # IO implementation matrix
-        
-        Framework | Client | Server
-        --- | :---: | :---:
-        asyncio | + | +
-        trio | + | +
-        socket | | +
-        
-        Feel free to make it bigger :wink:
-        
-        # Usage
-        End user implementations mimic ??parent?? library api.
-        ## Client
-        * asyncio: 
[`open_connection`](https://docs.python.org/3/library/asyncio-stream.html#asyncio.open_connection)
-        * trio: 
[`open_tcp_stream`](https://trio.readthedocs.io/en/stable/reference-io.html#trio.open_tcp_stream)
-        
-        Extra keyword-only arguments:
-        * `socks_host`: string
-        * `socks_port`: integer
-        * `socks_version`: integer (4 or 5)
-        * `username`: optional string (default: `None`)
-        * `password`: optional string (default: `None`)
-        * `encoding`: optional string (default: `"utf-8"`)
-        * `socks4_extras`: optional dictionary
-        * `socks5_extras`: optional dictionary
-        
-        Extras:
-        * socks4
-            * `user_id`: string (default: `""`)
-        * socks5
-            * None at this moment, added for uniform api
-        ## Server
-        End user implementations mimic ??parent?? library server request 
handlers.
-        * asyncio: 
[`start_server`](https://docs.python.org/3/library/asyncio-stream.html#asyncio.start_server)
-        * trio: 
[`serve_tcp`](https://trio.readthedocs.io/en/stable/reference-io.html#trio.serve_tcp)
-        * socketserver: 
[`ThreadingTCPServer`](https://docs.python.org/3/library/socketserver.html#socketserver.ThreadingTCPServer)
-        
-        You should use 
[`partial`](https://docs.python.org/3/library/functools.html#functools.partial) 
to bind socks specific arguments:
-        * `allowed_versions`: set of integers (default: `{4, 5}`)
-        * `username`: optional string (default: `None`)
-        * `password`: optional string (default: `None`)
-        * `strict_security_policy`: boolean, if `True` exception will be 
raised if authentication required and 4 is in allowed versions set (default: 
`True`)
-        * `encoding`: optional string (default: `"utf-8"`)
-        
-        Nothing to say more. Typical usage can be found at 
[`__main__.py`](https://github.com/pohmelie/siosocks/blob/master/siosocks/__main__.py)
-        
-        # Examples
-        ## High-level
-        This section will use `asyncio` as backend, since it is main 
target/reason for `siosocks`
-        ### Client
-        ``` python
-        import asyncio
-        
-        from siosocks.io.asyncio import open_connection
-        
-        
-        HOST = "api.ipify.org"
-        REQ = """GET /?format=json HTTP/1.1
-        Host: api.ipify.org
-        User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:67.0) 
Gecko/20100101 Firefox/67.0
-        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
-        Accept-Language: en,en-US;q=0.7,ru;q=0.3
-        Accept-Encoding: gzip, deflate
-        DNT: 1
-        Connection: keep-alive
-        Upgrade-Insecure-Requests: 1
-        Cache-Control: max-age=0
-        
-        """
-        
-        
-        async def main():
-            # assume we have tor started
-            r, w = await open_connection(HOST, 80, socks_host="localhost", 
socks_port=9050, socks_version=5)
-            w.write(REQ.replace("\n", "\r\n").encode())
-            await w.drain()
-            print(await r.read(8192))
-            w.close()
-        
-        
-        loop = asyncio.get_event_loop()
-        loop.run_until_complete(main())
-        ```
-        ### Server
-        ``` python
-        import socket
-        import asyncio
-        import contextlib
-        
-        from siosocks.io.asyncio import socks_server_handler
-        
-        
-        loop = asyncio.get_event_loop()
-        server = 
loop.run_until_complete(asyncio.start_server(socks_server_handler, port=1080))
-        addresses = []
-        for sock in server.sockets:
-            if sock.family in (socket.AF_INET, socket.AF_INET6):
-                host, port, *_ = sock.getsockname()
-                addresses.append(f"{host}:{port}")
-        print(f"Socks4/5 proxy serving on {', '.join(addresses)}")
-        with contextlib.suppress(KeyboardInterrupt):
-            loop.run_forever()
-        ```
-        But if you just want one-shot socks server then try:
-        ``` bash
-        python -m siosocks
-        ```
-        This will start socks 4, 5 server on all interfaces on 1080 port. For 
more information try `--help`
-        ``` bash
-        python -m siosocks --help
-        usage: siosocks [-h] [--backend {asyncio,socketserver,trio}] [--host 
HOST]
-                        [--port PORT] [--family {ipv4,ipv6,auto}] [--socks 
SOCKS]
-                        [--username USERNAME] [--password PASSWORD]
-                        [--encoding ENCODING] [--no-strict] [-v]
-        
-        Socks proxy server
-        
-        optional arguments:
-          -h, --help            show this help message and exit
-          --backend {asyncio,socketserver,trio}
-                                Socks server backend [default: asyncio]
-          --host HOST           Socks server host [default: None]
-          --port PORT           Socks server port [default: 1080]
-          --family {ipv4,ipv6,auto}
-                                Socket family [default: auto]
-          --socks SOCKS         Socks protocol version [default: []]
-          --username USERNAME   Socks auth username [default: None]
-          --password PASSWORD   Socks auth password [default: None]
-          --encoding ENCODING   String encoding [default: utf-8]
-          --no-strict           Allow multiversion socks server, when socks5 
used with
-                                username/password auth [default: False]
-          -v, --version         Show siosocks version
-        ```
-        
-        ### Exceptions
-        `siosocks` have unified exception for all types of socks-related 
errors:
-        ``` python
-        import asyncio
-        
-        from siosocks.exceptions import SocksException
-        from siosocks.io.asyncio import open_connection
-        
-        
-        async def main():
-            try:
-                r, w = await open_connection("127.0.0.1", 80, 
socks_host="localhost", socks_port=9050, socks_version=5)
-            except SocksException:
-                ...
-            else:
-                # at this point all socks-related tasks done and returned 
reader and writer
-                # are just plain asyncio objects without any siosocks proxies
-        
-        
-        loop = asyncio.get_event_loop()
-        loop.run_until_complete(main())
-        ```
-        
-        ## Low-level
-        Shadowsocks-like 
[client/server](https://github.com/pohmelie/siosocks/blob/master/examples/shadowsocks-like.py).
 Shadowsocks-like built on top of socks5 and encryption. It have ??client??, 
which is actually socks server and ??server??. So, precisely there are two 
servers: client side and server side. Purpose of shadowsocks is to encrypt data 
between ??incoming?? and ??outgoing?? servers. In common this looks like:
-        ```
-        client (non-encrypted socks) ??incoming?? socks server (encrypted 
socks) ??outgoing?? socks server (non-socks connection) target server
-        ```
-        Example above use Caesar cipher for simplicity (and security of 
course).
-        
-        # Roadmap/contibutions
-        - [ ] add more backends (average)
-        - [ ] speed up `passthrough` implementation (seems hard)
-        - [ ] add client redirection
-        
-Platform: UNKNOWN
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 3
-Requires-Python: >= 3.6
+Requires-Python: >=3.8
 Description-Content-Type: text/markdown
-Provides-Extra: tests
+Provides-Extra: dev
 Provides-Extra: trio
+License-File: license.txt
+
+# siosocks
+[![Github actions status for master 
branch](https://github.com/pohmelie/siosocks/actions/workflows/ci.yml/badge.svg?branch=master)(https://github.com/pohmelie/siosocks/actions)
+[![Codecov coverage for master 
branch](https://codecov.io/gh/pohmelie/siosocks/branch/master/graph/badge.svg)](https://codecov.io/gh/pohmelie/siosocks)
+[![Pypi 
version](https://img.shields.io/pypi/v/siosocks.svg)](https://pypi.org/project/siosocks/)
+[![Pypi downloads 
count](https://img.shields.io/pypi/dm/siosocks)](https://pypi.org/project/siosocks/)
+
+[Sans-io](https://sans-io.readthedocs.io/) socks 4/5 client/server 
library/framework.
+
+# Reasons
+- No one-shot socks servers
+- Sans-io
+- asyncio-ready [`twunnel3`](https://github.com/jvansteirteghem/twunnel3) is 
dead
+- [`aiosocks`](https://github.com/nibrag/aiosocks) do not mimic 
`asyncio.open_connection` arguments (maybe dead too)
+- Fun
+
+# Features
+- Only tcp connect (no bind, no udp)
+- Both client and server
+- Socks versions: 4, 4a, 5
+- Socks5 auth: no auth, username/password
+- Couple io backends: asyncio, trio, socketserver
+- One-shot socks server (`python -m siosocks`)
+
+# License
+`siosocks` is offered under MIT license.
+
+# Requirements
+- python 3.8+
+
+# IO implementation matrix
+
+Framework | Client | Server
+--- | :---: | :---:
+asyncio | + | +
+trio | + | +
+socket | | +
+
+Feel free to make it bigger :wink:
+
+# Usage
+End user implementations mimic ??parent?? library api.
+## Client
+- asyncio: 
[`open_connection`](https://docs.python.org/3/library/asyncio-stream.html#asyncio.open_connection)
+- trio: 
[`open_tcp_stream`](https://trio.readthedocs.io/en/stable/reference-io.html#trio.open_tcp_stream)
+
+Extra keyword-only arguments:
+- `socks_host`: string
+- `socks_port`: integer
+- `socks_version`: integer (4 or 5)
+- `username`: optional string (default: `None`)
+- `password`: optional string (default: `None`)
+- `encoding`: optional string (default: `"utf-8"`)
+- `socks4_extras`: optional dictionary
+- `socks5_extras`: optional dictionary
+
+Extras:
+- socks4
+    - `user_id`: string (default: `""`)
+- socks5
+    - None at this moment, added for uniform api
+## Server
+End user implementations mimic ??parent?? library server request handlers.
+- asyncio: 
[`start_server`](https://docs.python.org/3/library/asyncio-stream.html#asyncio.start_server)
+- trio: 
[`serve_tcp`](https://trio.readthedocs.io/en/stable/reference-io.html#trio.serve_tcp)
+- socketserver: 
[`ThreadingTCPServer`](https://docs.python.org/3/library/socketserver.html#socketserver.ThreadingTCPServer)
+
+You should use 
[`partial`](https://docs.python.org/3/library/functools.html#functools.partial) 
to bind socks specific arguments:
+- `allowed_versions`: set of integers (default: `{4, 5}`)
+- `username`: optional string (default: `None`)
+- `password`: optional string (default: `None`)
+- `strict_security_policy`: boolean, if `True` exception will be raised if 
authentication required and 4 is in allowed versions set (default: `True`)
+- `encoding`: optional string (default: `"utf-8"`)
+
+Nothing to say more. Typical usage can be found at 
[`__main__.py`](https://github.com/pohmelie/siosocks/blob/master/siosocks/__main__.py)
+
+# Examples
+## High-level
+This section will use `asyncio` as backend, since it is main target/reason for 
`siosocks`
+### Client
+``` python
+import asyncio
+
+from siosocks.io.asyncio import open_connection
+
+
+HOST = "api.ipify.org"
+REQ = """GET /?format=json HTTP/1.1
+Host: api.ipify.org
+User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:67.0) Gecko/20100101 
Firefox/67.0
+Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
+Accept-Language: en,en-US;q=0.7,ru;q=0.3
+Accept-Encoding: gzip, deflate
+DNT: 1
+Connection: keep-alive
+Upgrade-Insecure-Requests: 1
+Cache-Control: max-age=0
+
+"""
+
+
+async def main():
+    # assume we have tor started
+    r, w = await open_connection(HOST, 80, socks_host="localhost", 
socks_port=9050, socks_version=5)
+    w.write(REQ.replace("\n", "\r\n").encode())
+    await w.drain()
+    print(await r.read(8192))
+    w.close()
+
+
+loop = asyncio.get_event_loop()
+loop.run_until_complete(main())
+```
+### Server
+``` python
+import socket
+import asyncio
+import contextlib
+
+from siosocks.io.asyncio import socks_server_handler
+
+
+loop = asyncio.get_event_loop()
+server = loop.run_until_complete(asyncio.start_server(socks_server_handler, 
port=1080))
+addresses = []
+for sock in server.sockets:
+    if sock.family in (socket.AF_INET, socket.AF_INET6):
+        host, port, *_ = sock.getsockname()
+        addresses.append(f"{host}:{port}")
+print(f"Socks4/5 proxy serving on {', '.join(addresses)}")
+with contextlib.suppress(KeyboardInterrupt):
+    loop.run_forever()
+```
+But if you just want one-shot socks server then try:
+``` bash
+python -m siosocks
+```
+This will start socks 4, 5 server on all interfaces on 1080 port. For more 
information try `--help`
+``` bash
+python -m siosocks --help
+usage: siosocks [-h] [--backend {asyncio,socketserver,trio}] [--host HOST]
+                [--port PORT] [--family {ipv4,ipv6,auto}] [--socks SOCKS]
+                [--username USERNAME] [--password PASSWORD]
+                [--encoding ENCODING] [--no-strict] [-v]
+
+Socks proxy server
+
+optional arguments:
+  -h, --help            show this help message and exit
+  --backend {asyncio,socketserver,trio}
+                        Socks server backend [default: asyncio]
+  --host HOST           Socks server host [default: None]
+  --port PORT           Socks server port [default: 1080]
+  --family {ipv4,ipv6,auto}
+                        Socket family [default: auto]
+  --socks SOCKS         Socks protocol version [default: []]
+  --username USERNAME   Socks auth username [default: None]
+  --password PASSWORD   Socks auth password [default: None]
+  --encoding ENCODING   String encoding [default: utf-8]
+  --no-strict           Allow multiversion socks server, when socks5 used with
+                        username/password auth [default: False]
+  -v, --version         Show siosocks version
+```
+
+### Exceptions
+`siosocks` have unified exception for all types of socks-related errors:
+``` python
+import asyncio
+
+from siosocks.exceptions import SocksException
+from siosocks.io.asyncio import open_connection
+
+
+async def main():
+    try:
+        r, w = await open_connection("127.0.0.1", 80, socks_host="localhost", 
socks_port=9050, socks_version=5)
+    except SocksException:
+        ...
+    else:
+        # at this point all socks-related tasks done and returned reader and 
writer
+        # are just plain asyncio objects without any siosocks proxies
+
+
+loop = asyncio.get_event_loop()
+loop.run_until_complete(main())
+```
+
+## Low-level
+Shadowsocks-like 
[client/server](https://github.com/pohmelie/siosocks/blob/master/examples/shadowsocks-like.py).
 Shadowsocks-like built on top of socks5 and encryption. It have ??client??, 
which is actually socks server and ??server??. So, precisely there are two 
servers: client side and server side. Purpose of shadowsocks is to encrypt data 
between ??incoming?? and ??outgoing?? servers. In common this looks like:
+```
+client (non-encrypted socks) ??incoming?? socks server (encrypted socks) 
??outgoing?? socks server (non-socks connection) target server
+```
+Example above use Caesar cipher for simplicity (and security of course).
+
+# Roadmap/contibutions
+- [ ] add more backends (average)
+- [ ] speed up `passthrough` implementation (seems hard)
+- [ ] add client redirection
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siosocks-0.2.0/siosocks.egg-info/SOURCES.txt 
new/siosocks-0.3.0/siosocks.egg-info/SOURCES.txt
--- old/siosocks-0.2.0/siosocks.egg-info/SOURCES.txt    2020-09-01 
03:59:41.000000000 +0200
+++ new/siosocks-0.3.0/siosocks.egg-info/SOURCES.txt    2022-09-26 
01:12:47.000000000 +0200
@@ -24,29 +24,4 @@
 tests/test_protocol.py
 tests/test_sansio.py
 tests/test_socketserver.py
-tests/test_trio.py
-tests/__pycache__/test_asyncio.cpython-36-pytest-5.0.1.pyc
-tests/__pycache__/test_asyncio.cpython-37-pytest-6.0.1.pyc
-tests/__pycache__/test_asyncio.cpython-38-pytest-5.0.1.pyc
-tests/__pycache__/test_asyncio.cpython-38-pytest-5.4.3.pyc
-tests/__pycache__/test_bug.cpython-36-pytest-5.0.1.pyc
-tests/__pycache__/test_bug2.cpython-36-pytest-5.0.1.pyc
-tests/__pycache__/test_protocol.cpython-36-PYTEST.pyc
-tests/__pycache__/test_protocol.cpython-36-pytest-5.0.1.pyc
-tests/__pycache__/test_protocol.cpython-37-pytest-6.0.1.pyc
-tests/__pycache__/test_protocol.cpython-38-pytest-5.0.1.pyc
-tests/__pycache__/test_protocol.cpython-38-pytest-5.4.3.pyc
-tests/__pycache__/test_sansio.cpython-36-PYTEST.pyc
-tests/__pycache__/test_sansio.cpython-36-pytest-5.0.1.pyc
-tests/__pycache__/test_sansio.cpython-37-pytest-6.0.1.pyc
-tests/__pycache__/test_sansio.cpython-38-pytest-5.0.1.pyc
-tests/__pycache__/test_sansio.cpython-38-pytest-5.4.3.pyc
-tests/__pycache__/test_socketserver.cpython-36-pytest-5.0.1.pyc
-tests/__pycache__/test_socketserver.cpython-37-pytest-6.0.1.pyc
-tests/__pycache__/test_socketserver.cpython-38-pytest-5.0.1.pyc
-tests/__pycache__/test_socketserver.cpython-38-pytest-5.4.3.pyc
-tests/__pycache__/test_trio.cpython-36-pytest-5.0.1.pyc
-tests/__pycache__/test_trio.cpython-37-pytest-6.0.1.pyc
-tests/__pycache__/test_trio.cpython-38-pytest-5.0.1.pyc
-tests/__pycache__/test_trio.cpython-38-pytest-5.4.3.pyc
-tests/__pycache__/test_trio2.cpython-36-pytest-5.0.1.pyc
\ No newline at end of file
+tests/test_trio.py
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siosocks-0.2.0/siosocks.egg-info/requires.txt 
new/siosocks-0.3.0/siosocks.egg-info/requires.txt
--- old/siosocks-0.2.0/siosocks.egg-info/requires.txt   2020-09-01 
03:59:41.000000000 +0200
+++ new/siosocks-0.3.0/siosocks.egg-info/requires.txt   2022-09-26 
01:12:47.000000000 +0200
@@ -1,5 +1,5 @@
 
-[tests]
+[dev]
 pytest
 pytest-cov
 pytest-asyncio
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_asyncio.cpython-36-pytest-5.0.1.pyc 
and 
new/siosocks-0.3.0/tests/__pycache__/test_asyncio.cpython-36-pytest-5.0.1.pyc 
differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_asyncio.cpython-37-pytest-6.0.1.pyc 
and 
new/siosocks-0.3.0/tests/__pycache__/test_asyncio.cpython-37-pytest-6.0.1.pyc 
differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_asyncio.cpython-38-pytest-5.0.1.pyc 
and 
new/siosocks-0.3.0/tests/__pycache__/test_asyncio.cpython-38-pytest-5.0.1.pyc 
differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_asyncio.cpython-38-pytest-5.4.3.pyc 
and 
new/siosocks-0.3.0/tests/__pycache__/test_asyncio.cpython-38-pytest-5.4.3.pyc 
differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_bug.cpython-36-pytest-5.0.1.pyc and 
new/siosocks-0.3.0/tests/__pycache__/test_bug.cpython-36-pytest-5.0.1.pyc differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_bug2.cpython-36-pytest-5.0.1.pyc and 
new/siosocks-0.3.0/tests/__pycache__/test_bug2.cpython-36-pytest-5.0.1.pyc 
differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_protocol.cpython-36-PYTEST.pyc and 
new/siosocks-0.3.0/tests/__pycache__/test_protocol.cpython-36-PYTEST.pyc differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_protocol.cpython-36-pytest-5.0.1.pyc 
and 
new/siosocks-0.3.0/tests/__pycache__/test_protocol.cpython-36-pytest-5.0.1.pyc 
differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_protocol.cpython-37-pytest-6.0.1.pyc 
and 
new/siosocks-0.3.0/tests/__pycache__/test_protocol.cpython-37-pytest-6.0.1.pyc 
differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_protocol.cpython-38-pytest-5.0.1.pyc 
and 
new/siosocks-0.3.0/tests/__pycache__/test_protocol.cpython-38-pytest-5.0.1.pyc 
differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_protocol.cpython-38-pytest-5.4.3.pyc 
and 
new/siosocks-0.3.0/tests/__pycache__/test_protocol.cpython-38-pytest-5.4.3.pyc 
differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_sansio.cpython-36-PYTEST.pyc and 
new/siosocks-0.3.0/tests/__pycache__/test_sansio.cpython-36-PYTEST.pyc differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_sansio.cpython-36-pytest-5.0.1.pyc 
and 
new/siosocks-0.3.0/tests/__pycache__/test_sansio.cpython-36-pytest-5.0.1.pyc 
differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_sansio.cpython-37-pytest-6.0.1.pyc 
and 
new/siosocks-0.3.0/tests/__pycache__/test_sansio.cpython-37-pytest-6.0.1.pyc 
differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_sansio.cpython-38-pytest-5.0.1.pyc 
and 
new/siosocks-0.3.0/tests/__pycache__/test_sansio.cpython-38-pytest-5.0.1.pyc 
differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_sansio.cpython-38-pytest-5.4.3.pyc 
and 
new/siosocks-0.3.0/tests/__pycache__/test_sansio.cpython-38-pytest-5.4.3.pyc 
differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_socketserver.cpython-36-pytest-5.0.1.pyc
 and 
new/siosocks-0.3.0/tests/__pycache__/test_socketserver.cpython-36-pytest-5.0.1.pyc
 differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_socketserver.cpython-37-pytest-6.0.1.pyc
 and 
new/siosocks-0.3.0/tests/__pycache__/test_socketserver.cpython-37-pytest-6.0.1.pyc
 differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_socketserver.cpython-38-pytest-5.0.1.pyc
 and 
new/siosocks-0.3.0/tests/__pycache__/test_socketserver.cpython-38-pytest-5.0.1.pyc
 differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_socketserver.cpython-38-pytest-5.4.3.pyc
 and 
new/siosocks-0.3.0/tests/__pycache__/test_socketserver.cpython-38-pytest-5.4.3.pyc
 differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_trio.cpython-36-pytest-5.0.1.pyc and 
new/siosocks-0.3.0/tests/__pycache__/test_trio.cpython-36-pytest-5.0.1.pyc 
differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_trio.cpython-37-pytest-6.0.1.pyc and 
new/siosocks-0.3.0/tests/__pycache__/test_trio.cpython-37-pytest-6.0.1.pyc 
differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_trio.cpython-38-pytest-5.0.1.pyc and 
new/siosocks-0.3.0/tests/__pycache__/test_trio.cpython-38-pytest-5.0.1.pyc 
differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_trio.cpython-38-pytest-5.4.3.pyc and 
new/siosocks-0.3.0/tests/__pycache__/test_trio.cpython-38-pytest-5.4.3.pyc 
differ
Binary files 
old/siosocks-0.2.0/tests/__pycache__/test_trio2.cpython-36-pytest-5.0.1.pyc and 
new/siosocks-0.3.0/tests/__pycache__/test_trio2.cpython-36-pytest-5.0.1.pyc 
differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siosocks-0.2.0/tests/test_asyncio.py 
new/siosocks-0.3.0/tests/test_asyncio.py
--- old/siosocks-0.2.0/tests/test_asyncio.py    2020-09-01 02:28:28.000000000 
+0200
+++ new/siosocks-0.3.0/tests/test_asyncio.py    2022-09-26 01:12:39.000000000 
+0200
@@ -1,6 +1,7 @@
 import asyncio
 
 import pytest
+import pytest_asyncio
 
 from siosocks.io.asyncio import socks_server_handler, open_connection
 from siosocks.exceptions import SocksException
@@ -10,7 +11,7 @@
 MESSAGE = b"socks work!"
 
 
[email protected]
+@pytest_asyncio.fixture
 async def endpoint_port(unused_tcp_port_factory):
     port = unused_tcp_port_factory()
 
@@ -26,7 +27,7 @@
     await server.wait_closed()
 
 
[email protected]
+@pytest_asyncio.fixture
 async def socks_server_port(unused_tcp_port_factory):
     port = unused_tcp_port_factory()
     server = await asyncio.start_server(socks_server_handler, HOST, port)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siosocks-0.2.0/tests/test_socketserver.py 
new/siosocks-0.3.0/tests/test_socketserver.py
--- old/siosocks-0.2.0/tests/test_socketserver.py       2020-09-01 
02:32:31.000000000 +0200
+++ new/siosocks-0.3.0/tests/test_socketserver.py       2022-09-26 
01:12:39.000000000 +0200
@@ -4,6 +4,7 @@
 from functools import partial
 
 import pytest
+import pytest_asyncio
 
 from siosocks.io.socket import socks_server_handler
 from siosocks.io.asyncio import open_connection
@@ -14,7 +15,7 @@
 MESSAGE = b"socks work!"
 
 
[email protected]
+@pytest_asyncio.fixture
 async def endpoint_port(unused_tcp_port_factory):
     port = unused_tcp_port_factory()
 
@@ -30,17 +31,17 @@
     await server.wait_closed()
 
 
[email protected]
-def socks_server_port(unused_tcp_port_factory):
+@pytest_asyncio.fixture
+async def socks_server_port(unused_tcp_port_factory):
     port = unused_tcp_port_factory()
     handler = partial(socks_server_handler, socks_protocol_kw={})
-    with socketserver.ThreadingTCPServer((HOST, port), handler) as server:
-        server.socket.settimeout(0.5)
-        thread = threading.Thread(target=server.serve_forever, args=[0.01])
-        thread.start()
-        yield port
-        server.shutdown()
-        thread.join()
+    server = socketserver.ThreadingTCPServer((HOST, port), handler)
+    server.socket.settimeout(0.5)
+    thread = threading.Thread(target=server.serve_forever, args=[0.01])
+    thread.start()
+    yield port
+    server.shutdown()
+    thread.join()
 
 
 @pytest.mark.asyncio
@@ -61,7 +62,7 @@
 
 
 @pytest.mark.asyncio
-async def test_connection_partly_passed_error():
+async def test_connection_partly_passed_error(endpoint_port, 
socks_server_port):
     with pytest.raises(SocksException):
         await open_connection(HOST, endpoint_port,
                               socks_host=HOST, socks_port=socks_server_port)

Reply via email to