Skip to main content

Server and Connector for RabbitMQ

Project description

FLF

RabbitMQ server and client

Installation

To install execute command:

pip install FLF --ignore-installed

Or you can install from source:

python setup.py install

Documentation

Procedure

  • Constructor: Procedure(function, schema=None)
  • Functions: is_valid(data: Parameters) -> bool, call_function(data: Parameters) -> Parameters

Parameters

  • Constructor: Parameters(params=None, files=None)
  • Fields: params, files

RpcServer

Server-node for RabbitMQ

Parameters:

  • host: host of queue
  • port: port of queue
  • username: username of queue
  • password: password of queue
  • procedures: dictionary with server's procedures in format: { str: FLF.Parameters }.
    Each procedure has fields params (dict of parameters) and files (dict of binary objects) and
    returns data in same format (FLF.Parameters(params, files))
  • [ error_callback ]: callable with 3 arguments: exception_name, description and traceback.
    Being called on error happening. By default does nothing

Functions:

  • begin()

Example:

import io

from PIL import Image

import FLF


def add(params, files):
    result_params = {"success": True, "sum": params["a"] + params["b"]}
    result_files = dict()
    
    return result_params, result_files


def get_add_schema():
    return {
        "$schema": "http://json-schema.org/draft-04/schema",
        "id": "http://example.com/example.json",
        "type": "object",
        "required": [
            "a",
            "b"
        ],
        "properties": {
            "a": {
                "type": "integer"
            },
            "b": {
                "type": "integer"
            }
        },
        "additionalProperties": False
    }


def process_image(params, files):
    pil_image = Image.frombuffer("RGB", (params["width"], params["height"]), files["image"])
    image_gray = pil_image.convert("LA")
    
    buffer = io.BytesIO()
    image_gray.save(buffer, format='PNG')
    image_gray_bytes = buffer.getvalue()
    
    return {"success": True}, {"gray_image": image_gray_bytes}


def get_process_image_schema():
    return {
        "$schema": "http://json-schema.org/draft-04/schema",
        "id": "http://example.com/example.json",
        "type": "object",
        "required": [
            "width",
            "height"
        ],
        "properties": {
            "width": {
                "type": "integer"
            },
            "height": {
                "type": "integer"
            }
        },
        "additionalProperties": False
    }


def super_error_callback(exception_name, description, traceback):
    print("OH MY GOD, SOMETHING BAD HAPPENED!")
    print(exception_name, ":", description)
    print(traceback)


def main():
    app = FLF.RpcServer(host="google.com", port=12345, username="mister.robot", password="ecorp.zuck",
                        procedures={
                            "add": FLF.Procedure(add, get_add_schema()),
                            "process_image": FLF.Procedure(process_image, get_process_image_schema())
                        }, error_callback=super_error_callback)
    app.begin()


if __name__ == "__main__":
    main()

RpcConnector

Client-node for RabbitMQ

Parameters:

  • host: host of queue
  • port: port of queue
  • username: username of queue
  • password: password of queue
  • [ error_callback ]: callable with 3 arguments: exception_name, description and traceback.
    Being called on error happening

Functions:

  • begin()
  • call_procedure(name, data: Parameters) -> Parameters

Example:

import FLF


def super_error_callback(exception_name, description, traceback):
    print("OH MY GOD, SOMETHING BAD HAPPENED ON CLIENT!")
    print(exception_name, ":", description)
    print(traceback)


def main():
    app = FLF.RpcConnector(host="google.com", port=12345, username="mister.robot", password="ecorp.zuck",
                           error_callback=super_error_callback)
    app.begin()
    
    result: FLF.Parameters = app.call_procedure("add", FLF.Parameters({"a": 22, "b": 33}))
    print("Sum is:", result.params["sum"])
    
    with open("image.jpg", "rb") as f:
        image_bytes = f.read()
    result: FLF.Parameters = app.call_procedure("process_image", FLF.Parameters({"width": 500, "height": 500},
                                                                    {"image": image_bytes}))
    
    with open("image_gray.png", "wb+") as f:
        f.write(result.files["gray_image"])


if __name__ == "__main__":
    main()

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

FLF-1.2.5.tar.gz (6.2 kB view details)

Uploaded Source

File details

Details for the file FLF-1.2.5.tar.gz.

File metadata

  • Download URL: FLF-1.2.5.tar.gz
  • Upload date:
  • Size: 6.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.4.0.post20200518 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.10

File hashes

Hashes for FLF-1.2.5.tar.gz
Algorithm Hash digest
SHA256 594841a093034feeca911863b996980468b7c8dbb1c377d1942c9da004ebf36d
MD5 b984437d89dba939e3e108b4aa22ca9d
BLAKE2b-256 80c726acd5e3173b9fbbbe97cf7262d742806eaa14a74c933e34ec84f52b495b

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