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
- 
- 
- 
- 
-
- [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
+[(https://github.com/pohmelie/siosocks/actions)
+[](https://codecov.io/gh/pohmelie/siosocks)
+[](https://pypi.org/project/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
-
-
-
-
+[(https://github.com/pohmelie/siosocks/actions)
+[](https://codecov.io/gh/pohmelie/siosocks)
+[](https://pypi.org/project/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
- 
- 
- 
- 
-
- [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
+[(https://github.com/pohmelie/siosocks/actions)
+[](https://codecov.io/gh/pohmelie/siosocks)
+[](https://pypi.org/project/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)