Skip to main content

A simple socket api framework

Project description

socpi

A simple async socket framework for python supporting tcp and unix sockets. Allows you to go beyond json by using pickle

How to use it

from socpi import App, Client


# create the app with the socket path for unix sockets
app = App('/run/socpi')

# or use [ip, port] tuple for tcp
# app = App(('0.0.0.0', 4238))

# Specify your endpoints
@app.register
def echo(msg: str) -> str:
    return msg.lower()

# then launch your server, change `SERVER` to false to launch a client
SERVER = True
if SERVER:
    asyncio.run(app.run())

# or launch a client:
async def main():
    # no openapi required, everything is generated from the `app`
    client = Client(app)
    print(await client.echo('fooo'))

if not SERVER:
    asyncio.run(main())

There is a demo of a chat application in the examples directory.

What can it do:

Generators:

You can write and call generators and async generators:

@app.register
def foo():
    print('hello from the other side')
    yield 'foo'

And call them like you would expect:

async for i in client.foo():
    print(i)

Every generator will be turned into an async one!

Exceptions:

Exception handling is completely transparent, just raise and except them as usual.

@app.register
def failer():
    raise Exception('foo')

Handle them as usual, the objects will not be changed (but missing server and broken connections will add some extra ones):

try:
    await client.failer()
except Exception as e:
    print(e) # foo

Serialization:

Anything pickleable will work, as such remote code execution is not a bug, it is a feature. Deploying socpi to the wider internet is not recommended.

A json only version might be a more secure, less capable option.

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

socpi-0.2.1.tar.gz (12.6 kB view details)

Uploaded Source

Built Distribution

socpi-0.2.1-py3-none-any.whl (13.8 kB view details)

Uploaded Python 3

File details

Details for the file socpi-0.2.1.tar.gz.

File metadata

  • Download URL: socpi-0.2.1.tar.gz
  • Upload date:
  • Size: 12.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.14 CPython/3.10.5 Linux/5.18.12-264-tkg-pds

File hashes

Hashes for socpi-0.2.1.tar.gz
Algorithm Hash digest
SHA256 ebded5780220439d3ea09e8f6caf17ae1b6803692afb78342c813faf8388e1e2
MD5 f01743aa385d3c3c60df9cdddf70094b
BLAKE2b-256 180b2f6518abac81f35430b7bf99e73f695f0316f83421fbee51562f25200b2f

See more details on using hashes here.

File details

Details for the file socpi-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: socpi-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 13.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.14 CPython/3.10.5 Linux/5.18.12-264-tkg-pds

File hashes

Hashes for socpi-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ce90b7286dca3ea41771a88ac39925f2fa8105e96d3b77716625b456acf116a2
MD5 ea3c72a146714dfd75eef4ae2f585ec2
BLAKE2b-256 b67efa39e373e6ec2938138c1eba40f506b74c83a6a4829b24b673544a5606cd

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