Skip to content

Instantly share code, notes, and snippets.

@Averroes
Averroes / jsonrpclient.py
Created April 10, 2015 17:14
implementing remote procedure call
import json
class RPCProxy:
def __init__(self, connection):
self._connection = connection
def __getattr__(self, name):
def do_rpc(*args, **kwargs):
self._connection.send(json.dumps((name, args, kwargs)))
result = json.loads(self._connection.recv())
return result
@Averroes
Averroes / jsonrpcserver.py
Created April 10, 2015 17:15
implementing remote procedure call
# rpcserver.py
import json
class RPCHandler:
def __init__(self):
self._functions = { }
def register_function(self, func):
self._functions[func.__name__] = func
@Averroes
Averroes / rpcclient.py
Created April 10, 2015 17:15
implementing remote procedure call
import pickle
class RPCProxy:
def __init__(self, connection):
self._connection = connection
def __getattr__(self, name):
def do_rpc(*args, **kwargs):
self._connection.send(pickle.dumps((name, args, kwargs)))
result = pickle.loads(self._connection.recv())
if isinstance(result, Exception):
@Averroes
Averroes / rpcserver.py
Created April 10, 2015 17:16
implementing remote procedure call
# rpcserver.py
import pickle
class RPCHandler:
def __init__(self):
self._functions = { }
def register_function(self, func):
self._functions[func.__name__] = func
@Averroes
Averroes / example1.py
Created April 10, 2015 17:16
interacting with http services as a client
# A basic GET request
from urllib import request, parse
# Base URL being accessed
url = 'http://httpbin.org/get'
# Dictionary of query parameters (if any)
parms = {
'name1' : 'value1',
@Averroes
Averroes / example2.py
Created April 10, 2015 17:17
interacting with http services as a client
# A basic POST request
from urllib import request, parse
# Base URL being accessed
url = 'http://httpbin.org/post'
# Dictionary of query parameters (if any)
parms = {
'name1' : 'value1',
@Averroes
Averroes / example3.py
Created April 10, 2015 17:17
interacting with http services as a client
# A POST request using requests library
import requests
# Base URL being accessed
url = 'http://httpbin.org/post'
# Dictionary of query parameters (if any)
parms = {
'name1' : 'value1',
'name2' : 'value2'
@Averroes
Averroes / example4.py
Created April 10, 2015 17:18
interacting with http services as a client
# Example of a HEAD request
import requests
resp = requests.head('http://www.python.org/index.html')
status = resp.status_code
last_modified = resp.headers['last-modified']
content_type = resp.headers['content-type']
content_length = resp.headers['content-length']
@Averroes
Averroes / client1.py
Created April 10, 2015 17:18
passing a socket file descriptor between processes
from socket import socket, AF_INET, SOCK_STREAM
s = socket(AF_INET, SOCK_STREAM)
s.connect(('localhost', 15000))
s.send(b'Hello\n')
print('Got:', s.recv(8192))
s.send(b'World\n')
print('Got:', s.recv(8192))
s.close()
@Averroes
Averroes / server.py
Created April 10, 2015 17:19
passing a socket file descriptor between processes
# server.py
import socket
import struct
def send_fd(sock, fd):
'''
Send a single file descriptor.
'''
sock.sendmsg([b'x'],
[(socket.SOL_SOCKET, socket.SCM_RIGHTS, struct.pack('i', fd))])