# pynetmanager
A FOSS library to simplify writing and handling sockets in Python. Includes INET and INET6 support, `bind`, `listen`, `accept`, `connect` API.
## Description
This repositiory contains the source code for the `pynetmanager` library. This is my second and (hopefully) better networking wrapper library, the first being [pyNetSocket](https://github.com/AdityaIyer2k7/pyNetSocket).
Improvements over `pyNetSocket`:
- Direct IPv6 support (through `AF_INET6`)
- Direct `SOCK_RAW` support
- Support functions to generate socket objects
- Use of threading to avoid blocking
- PEP8 compliance
## Installation
Install directly from `pip` using
```
pip install pynetmanager
```
or download the library from the [GitHub repo](https://github.com/AdityaIyer2k7/pynetmanager) using
```
git clone https://github.com/AdityaIyer2k7/pynetmanager
```
## Usage - Scripting
### Creating a Network Event Callback
Defining the function:
```py
def some_func(conn, addr, data, queues):
'''
This function will be called when a network event (binding or connection) occurs
Parameters:
- conn: The socket object linked to the event
- addr: The other side's address
- data: The miscellaneous data being passed to the function, either Iterable or None
- queues: An iterable (list or dict) of queues between processes
'''
print(f"Address {addr} has connected")
```
Creating the callback:
```py
from pynetmanager import NetCallback
from multiprocessing import Queue
myQueues = [Queue(), Queue()]
callback = NetCallback(func=some_func, queues=myQueues)
```
Running the callback (using `someConn` and `someAddr`):
```py
callback.start(conn=someConn, addr=someAddr, data=None)
```
---
### Running a generic Server (AF_INET, SOCK_STREAM)
Setup the server:
```py
from pynetmanager import SvrManager, deafult_socket_inet_stream
server_socket = deafult_socket_inet_stream()
server_address = ("127.0.0.1", 5500)
server = SvrManager(server_socket, server_address)
```
Assign callbacks:
```py
# Bind Callbacks are called when the server binds to its address
myBindCallbacks = [bindCallback1, bindCallback2]
# Conn Callbacks are called when a client connects to the server
myConnCallbacks = [connCallback1, connCallback2, connCallback3]
# Always use '+=' to add two lists
# do NOT replace any server.xxxxCallbacks unless you know what you're doing
server.bindCallbacks += myBindCallbacks
server.connCallbacks += myConnCallbacks
```
Bind the server:
```py
# If `listenByDeault` is True, the server starts listening for and
# accepting clients as soon as it binds to its address
server.bind(listenByDefault=False)
```
Listen for clients (Skip if you set `listenByDefault` as True):
```py
# This function does not require parameters
server.listen_and_accept(None, None, None, None)
```
To list connected clients:
```py
server.clients
# OUTPUT:
# [
# (<socket.socket ...>, ('127.0.0.1', 65028)),
# (<socket.socket ...>, ('127.0.0.1', 62157)),
# ...
# (conn, addr)
# ]
```
To access open queues
```py
server.recvQueues
# OUTPUT:
# {
# (<socket.socket ...>, ('127.0.0.1', 65028)): <multiprocessing.queues.Queue ...>,
# (<socket.socket ...>, ('127.0.0.1', 62157)): <multiprocessing.queues.Queue ...>,
# ...
# (conn, addr): <multiprocessing.queues.Queue ...>,
# }
```
---
### Running a generic Client (AF_INET, SOCK_STREAM)
Setup the client:
```py
from pynetmanager import CliManager, deafult_socket_inet_stream
client_socket = deafult_socket_inet_stream()
server_address = ("127.0.0.1", 5500) # Note that we use the server's address here since that is what we are connecting to
client = CliManager(client_socket, server_address)
```
Assign callbacks:
```py
# Conn Callbacks are called when the client connects to the server
myConnCallbacks = [connCallback1, connCallback2, connCallback3]
# Always use '+=' to add two lists
# do NOT replace any client.xxxxCallbacks unless you know what you're doing
client.connCallbacks += myConnCallbacks
```
Connect the client:
```py
client.bind()
```
To access the queue of received messages
```py
client.recvQueue
# OUTPUT:
# <multiprocessing.queues.Queue object at ...>
```
Raw data
{
"_id": null,
"home_page": "https://github.com/AdityaIyer2k7/pynetmanager",
"name": "pynetmanager",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": "",
"keywords": "python,python 3,socket,sockets,network,networks,networking",
"author": "AdityaIyer2k7",
"author_email": "adityaiyer2007@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/39/81/c52febb676d34290ba97dc455471d31ec0ccb4564a554d278775d4c96128/pynetmanager-1.0.0.tar.gz",
"platform": null,
"description": "# pynetmanager\nA FOSS library to simplify writing and handling sockets in Python. Includes INET and INET6 support, `bind`, `listen`, `accept`, `connect` API.\n\n## Description\nThis repositiory contains the source code for the `pynetmanager` library. This is my second and (hopefully) better networking wrapper library, the first being [pyNetSocket](https://github.com/AdityaIyer2k7/pyNetSocket).\n\nImprovements over `pyNetSocket`:\n- Direct IPv6 support (through `AF_INET6`)\n- Direct `SOCK_RAW` support\n- Support functions to generate socket objects\n- Use of threading to avoid blocking\n- PEP8 compliance\n\n## Installation\nInstall directly from `pip` using\n```\npip install pynetmanager\n```\n\nor download the library from the [GitHub repo](https://github.com/AdityaIyer2k7/pynetmanager) using\n```\ngit clone https://github.com/AdityaIyer2k7/pynetmanager\n```\n\n## Usage - Scripting\n\n### Creating a Network Event Callback\nDefining the function:\n```py\ndef some_func(conn, addr, data, queues):\n '''\n This function will be called when a network event (binding or connection) occurs\n Parameters:\n - conn: The socket object linked to the event\n - addr: The other side's address\n - data: The miscellaneous data being passed to the function, either Iterable or None\n - queues: An iterable (list or dict) of queues between processes\n '''\n print(f\"Address {addr} has connected\")\n```\n\nCreating the callback:\n```py\nfrom pynetmanager import NetCallback\nfrom multiprocessing import Queue\n\nmyQueues = [Queue(), Queue()]\ncallback = NetCallback(func=some_func, queues=myQueues)\n```\n\nRunning the callback (using `someConn` and `someAddr`):\n```py\ncallback.start(conn=someConn, addr=someAddr, data=None)\n```\n---\n\n### Running a generic Server (AF_INET, SOCK_STREAM)\nSetup the server:\n```py\nfrom pynetmanager import SvrManager, deafult_socket_inet_stream\n\nserver_socket = deafult_socket_inet_stream()\nserver_address = (\"127.0.0.1\", 5500)\nserver = SvrManager(server_socket, server_address)\n```\n\nAssign callbacks:\n```py\n# Bind Callbacks are called when the server binds to its address\nmyBindCallbacks = [bindCallback1, bindCallback2]\n\n# Conn Callbacks are called when a client connects to the server\nmyConnCallbacks = [connCallback1, connCallback2, connCallback3]\n\n# Always use '+=' to add two lists\n# do NOT replace any server.xxxxCallbacks unless you know what you're doing\nserver.bindCallbacks += myBindCallbacks\nserver.connCallbacks += myConnCallbacks\n```\n\nBind the server:\n```py\n# If `listenByDeault` is True, the server starts listening for and \n# accepting clients as soon as it binds to its address\nserver.bind(listenByDefault=False)\n```\n\nListen for clients (Skip if you set `listenByDefault` as True):\n```py\n# This function does not require parameters\nserver.listen_and_accept(None, None, None, None)\n```\n\nTo list connected clients:\n```py\nserver.clients\n# OUTPUT:\n# [\n# (<socket.socket ...>, ('127.0.0.1', 65028)),\n# (<socket.socket ...>, ('127.0.0.1', 62157)),\n# ...\n# (conn, addr)\n# ]\n```\n\nTo access open queues\n```py\nserver.recvQueues\n# OUTPUT:\n# {\n# (<socket.socket ...>, ('127.0.0.1', 65028)): <multiprocessing.queues.Queue ...>,\n# (<socket.socket ...>, ('127.0.0.1', 62157)): <multiprocessing.queues.Queue ...>,\n# ...\n# (conn, addr): <multiprocessing.queues.Queue ...>,\n# }\n```\n---\n\n### Running a generic Client (AF_INET, SOCK_STREAM)\nSetup the client:\n```py\nfrom pynetmanager import CliManager, deafult_socket_inet_stream\n\nclient_socket = deafult_socket_inet_stream()\nserver_address = (\"127.0.0.1\", 5500) # Note that we use the server's address here since that is what we are connecting to\nclient = CliManager(client_socket, server_address)\n```\n\nAssign callbacks:\n```py\n# Conn Callbacks are called when the client connects to the server\nmyConnCallbacks = [connCallback1, connCallback2, connCallback3]\n\n# Always use '+=' to add two lists\n# do NOT replace any client.xxxxCallbacks unless you know what you're doing\nclient.connCallbacks += myConnCallbacks\n```\n\nConnect the client:\n```py\nclient.bind()\n```\n\nTo access the queue of received messages\n```py\nclient.recvQueue\n# OUTPUT:\n# <multiprocessing.queues.Queue object at ...>\n```\n",
"bugtrack_url": null,
"license": "",
"summary": "A FOSS library to simplify writing and handling sockets in Python. Includes INET and INET6 support, `bind`, `listen`, `accept`, `connect` API.",
"version": "1.0.0",
"project_urls": {
"Homepage": "https://github.com/AdityaIyer2k7/pynetmanager"
},
"split_keywords": [
"python",
"python 3",
"socket",
"sockets",
"network",
"networks",
"networking"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "282e1f7d27f82e6cd3d9a849d3ce3f393edaf4dc86c08a1047f92f22cbc3782b",
"md5": "f8a118d439975439f58ed9278d30994c",
"sha256": "e200af5e2f568474d07584549585830517554b090b504284c1feb310c2c1b5b7"
},
"downloads": -1,
"filename": "pynetmanager-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f8a118d439975439f58ed9278d30994c",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 7588,
"upload_time": "2023-12-22T18:21:25",
"upload_time_iso_8601": "2023-12-22T18:21:25.156350Z",
"url": "https://files.pythonhosted.org/packages/28/2e/1f7d27f82e6cd3d9a849d3ce3f393edaf4dc86c08a1047f92f22cbc3782b/pynetmanager-1.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3981c52febb676d34290ba97dc455471d31ec0ccb4564a554d278775d4c96128",
"md5": "9ea4f34866054b06183c4ad914d58736",
"sha256": "e4069df13b183ecb5a9f83c62f55f46216628753adb43726e39a01e2a1a4daf8"
},
"downloads": -1,
"filename": "pynetmanager-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "9ea4f34866054b06183c4ad914d58736",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 5964,
"upload_time": "2023-12-22T18:21:27",
"upload_time_iso_8601": "2023-12-22T18:21:27.015021Z",
"url": "https://files.pythonhosted.org/packages/39/81/c52febb676d34290ba97dc455471d31ec0ccb4564a554d278775d4c96128/pynetmanager-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-12-22 18:21:27",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "AdityaIyer2k7",
"github_project": "pynetmanager",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pynetmanager"
}