Skip to main content

Simple TCP socket client and server with Pydantic models

Project description

pydantic_socket - Simple socket client and server with Pydantic models

PyPI version shields.io PyPI pyversions PyPI license

Examples

Output examples are provided for simultaneous run of Server and Client examples

Server

import asyncio
import logging

import pydantic_socket
from pydantic_socket.types import Action
from pydantic_socket.websocket import (
    Server,
    ServerClient,
)

server = Server()


class TestResponse(pydantic_socket.types.BaseModel):
    foo: int = 1
    bar: str = "bar"
    input: str | None = None


# Register handler for certain action type    
@server.action_handler("hello")
async def hello_handler(s: Server, client: ServerClient, action: Action):
    logging.info(f"Hello, {action.payload.get('name', 'World')}!")
    # Will print:
    # INFO:root:Hello, pydantic_socket!


async def test_handler(s: Server, client: ServerClient, action: Action):
    return TestResponse(foo=1, bar="bar", input=action.payload.get('input'))


# Another way to register handler for certain action type
server.set_action_handler("test", test_handler)

if __name__ == '__main__':
    logging.basicConfig(level=logging.INFO)
    asyncio.run(server.run())

Client

import asyncio
import logging

import pydantic

from pydantic_socket.types import Action
from pydantic_socket.websocket import Client

client = Client("http://127.0.0.1:8080", auto_reconnect=False, client_id=1)


class SomeActionInputPayload(pydantic.BaseModel):
    input: str


async def main():
    # Establishing connection to server
    asyncio.create_task(client.run())
    # Wait some time until connection is done
    await asyncio.sleep(2)
    # Send action
    await client.send(Action(type='hello', payload={"name": "pydantic_socket"}))
    # Send and wait for response
    response = await client.request(Action(type='test', payload={"input": "Some Input"}))

    logging.info(f"Payload is: {response.payload}")
    # Will print: 
    # INFO:root:Payload is: {'foo': 1, 'bar': 'bar', 'input': 'Some Input'}

    await client.close()


if __name__ == '__main__':
    logging.basicConfig(level=logging.INFO)
    asyncio.run(main())

LICENSE

This project is licensed under the terms of the MIT license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pydantic_socket-0.1.1.tar.gz (7.9 kB view details)

Uploaded Source

Built Distribution

pydantic_socket-0.1.1-py3-none-any.whl (12.0 kB view details)

Uploaded Python 3

File details

Details for the file pydantic_socket-0.1.1.tar.gz.

File metadata

  • Download URL: pydantic_socket-0.1.1.tar.gz
  • Upload date:
  • Size: 7.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.1 CPython/3.11.0 Linux/5.15.0-1034-azure

File hashes

Hashes for pydantic_socket-0.1.1.tar.gz
Algorithm Hash digest
SHA256 08a08194dd481bcee415a10af05abe98a7f47c116fed65b4ba31a06f085fd08b
MD5 2585542ab290a399bc690ebd54adba6e
BLAKE2b-256 48d25aed07511ff65dde49cbe7f95b6c98f368bcd91a76fc53cf95af0c92b790

See more details on using hashes here.

File details

Details for the file pydantic_socket-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: pydantic_socket-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 12.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.1 CPython/3.11.0 Linux/5.15.0-1034-azure

File hashes

Hashes for pydantic_socket-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 08dc9a3c302575ddaaa43b02a4d2eb975a4b95e1c4c8647f145b43fb2a802fa4
MD5 0c68d42dcd908f8c1fac9bde523a2480
BLAKE2b-256 ea794e0b2faa21bb62255f39f55287b29cd733a4633296ba2962457994d1eb7b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page