Coder Social home page Coder Social logo

socpi's Introduction

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.