Giter Club home page Giter Club logo

python-jrpc's Introduction

Python-JRPC

A Python remote procedure call framework that uses JSON RPC v2.0

Install using pip:

pip install python-jrpc

Socket Based Usage

Python-JRPC allows programmers to create powerful client/server programs with very little code. Here's an example of a server and client:

Server

import jrpc

class SimpleService(jrpc.service.SocketObject):
    @jrpc.service.method
    def echo(self, msg):
        return msg

server = SimpleService(50001) #Include the listening port
server.run_wait()

Client

import jrpc

server = None
server = jrpc.service.SocketProxy(50001) #The server's listening port
print server.echo("Hello World!")

Web Based (Flask) Usage

A recent addition to Python JRPC offers Flask integration. Using this feature, client side Javascript can easily call webservice API methods.

Flask App

from jrpc.web import *
import jrpc.service
from flask import Flask, render_template

app = Flask(__name__)

class WebService(JRPCBlueprint):
    def __init__(self):
        JRPCBlueprint.__init__(self, "service", __name__, url_prefix="/api")

    @jrpc.service.method(path = "/echo/<name>")
    def echo(self, text, prefix = "Hello from", name = ""):
        return {"subject": prefix + " " + name, "message": text}

app.register_blueprint(WebService())

@app.route('/')
def index():
    return render_template("index.html")
app.run(host='0.0.0.0', port=8080, debug=True)

Index.html Javascript

jrpc("/api").done(function(api) {
    api.echo({name: "Python JRPC", text: "Now with more Flask"}).done(function(result) {
        $("#result").text(JSON.stringify(result));
    });
});

Result

{"subject":"Hello from Python JRPC", "message":"Now with more Flask"}

Why Use It?

Python-JRPC takes all of the boiler-plate code out of your network applications. Forget reading through socket documentation and developing your own message formats. All you need to do is write your Python server/client logic and let Python-JRPC handle the networking for you. Here's what you get:

  • Remote method call with JSON serializable parameters/return values
  • Synchronization/thread safety in servers/clients
  • Remote exception passing (When calling a remote method in a client, exceptions thrown by the server code will be thrown locally!)
  • Simplified Flask applications, client side Javascript can easily call webservice API methods

python-jrpc's People

Contributors

alex-sherman avatar pddenhar avatar lowks avatar

Stargazers

 avatar  avatar Antoine avatar Petras Vestartas avatar Tanmoy Sen Gupta avatar  avatar Maria Ropat avatar Volodymyr Yahello avatar Anton Cherenkov avatar Greg Nordin avatar Rafael Figueira Goncalves avatar Chuang Huang avatar JamesLinus avatar Jongwook Choi avatar Johannes Pink avatar Kilim Choi avatar GAURAV avatar abek avatar Yao avatar Darrell Young avatar  avatar Matt Erhart avatar Matías Agustín Méndez avatar Bob Gardner avatar  avatar nuin avatar Josue Kouka avatar RajaniKanth Reddy avatar  avatar Martin Simon avatar  avatar hfcorriez avatar Anthony Monthe avatar Francois Lebel avatar Sebastian Elsner avatar Dmitry Kulikov avatar  avatar Sietse Brouwer avatar Ernest Semerda avatar Nazeeruddin Ikram avatar Robert Vernon Phillips avatar Xiaolan.Lee avatar HealthcareGuy avatar Adam Mustafa avatar Mike Steder avatar Sam Scott avatar 강성진 sungjin.kang avatar Therry van Neerven avatar Helic avatar Minho Ryang avatar Andrew Niemantsvedriet avatar  avatar Matthew Perry avatar  avatar  avatar  avatar Michael Russo avatar  avatar Kedar avatar Ben Radosevich avatar Philip Kalinsky avatar Enrico Fasoli avatar Roman Kierzkowski avatar Julie Engel avatar Michael Behan avatar Pedro Koblitz avatar Dimitar Dimitrov avatar Justin Fay avatar Giuliano Di Pasquale avatar Andy Chong avatar Ed Pom avatar Asbjørn Alexander Fellinghaug avatar Rich Jones avatar zhaozhao avatar Marin Atanasov Nikolov avatar Eric Zheng avatar  avatar Doug Henderson avatar mattl920@gmail.com avatar Jonathan Barratt avatar Kilian avatar Keith Gaughan avatar Josh Friend avatar AwwCookies avatar Denver Fernandes avatar Antonio Dourado avatar  avatar  avatar

Watchers

James Cloos avatar Codedaiquiri avatar abek avatar  avatar  avatar  avatar  avatar  avatar

python-jrpc's Issues

Timeout configure

Allow configuring for timeouts on sockets, 1 second might be too low for some applications.

Release request

v1.1.5 was released in 2015 and all of the web stuff has been added since then - would you consider making a new release?

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.