Skip to content

Commit 545a384

Browse files
committed
Replace examples in docs with a link to the wiki
1 parent bd9ab2a commit 545a384

File tree

1 file changed

+1
-385
lines changed

1 file changed

+1
-385
lines changed

docs/examples.md

Lines changed: 1 addition & 385 deletions
Original file line numberDiff line numberDiff line change
@@ -1,387 +1,3 @@
11
# Examples
22

3-
## aiohttp
4-
5-
```python
6-
from aiohttp import web
7-
8-
from jsonrpcserver import Result, Success, async_dispatch, method
9-
10-
11-
@method
12-
async def ping() -> Result:
13-
"""JSON-RPC method"""
14-
return Success("pong")
15-
16-
17-
async def handle(request: web.Request) -> web.Response:
18-
"""Handle aiohttp request"""
19-
return web.Response(
20-
text=await async_dispatch(await request.text()), content_type="application/json"
21-
)
22-
23-
24-
app = web.Application()
25-
app.router.add_post("/", handle)
26-
27-
if __name__ == "__main__":
28-
web.run_app(app, port=5000)
29-
```
30-
31-
See [blog post](https://explodinglabs.github.io/jsonrpc/aiohttp).
32-
33-
## Django
34-
35-
Create a `views.py`:
36-
37-
```python
38-
from django.http import HttpRequest, HttpResponse # type: ignore
39-
from django.views.decorators.csrf import csrf_exempt # type: ignore
40-
41-
from jsonrpcserver import Result, Success, dispatch, method
42-
43-
44-
@method
45-
def ping() -> Result:
46-
"""JSON-RPC method"""
47-
return Success("pong")
48-
49-
50-
@csrf_exempt # type: ignore
51-
def jsonrpc(request: HttpRequest) -> HttpResponse:
52-
"""Handle Django request"""
53-
return HttpResponse(
54-
dispatch(request.body.decode()), content_type="application/json"
55-
)
56-
```
57-
58-
See [blog post](https://explodinglabs.github.io/jsonrpc/django).
59-
60-
## FastAPI
61-
62-
```python
63-
import uvicorn
64-
from fastapi import FastAPI, Request, Response
65-
66-
from jsonrpcserver import Result, Success, dispatch, method
67-
68-
app = FastAPI()
69-
70-
71-
@method
72-
def ping() -> Result:
73-
"""JSON-RPC method"""
74-
return Success("pong")
75-
76-
77-
@app.post("/")
78-
async def index(request: Request) -> Response:
79-
"""Handle FastAPI request"""
80-
return Response(dispatch(await request.body()))
81-
82-
83-
if __name__ == "__main__":
84-
uvicorn.run(app, port=5000)
85-
```
86-
87-
See [blog post](https://explodinglabs.github.io/jsonrpc/fastapi).
88-
89-
## Flask
90-
91-
```python
92-
from flask import Flask, Response, request
93-
94-
from jsonrpcserver import Result, Success, dispatch, method
95-
96-
app = Flask(__name__)
97-
98-
99-
@method
100-
def ping() -> Result:
101-
"""JSON-RPC method"""
102-
return Success("pong")
103-
104-
105-
@app.route("/", methods=["POST"])
106-
def index() -> Response:
107-
"""Handle Flask request"""
108-
return Response(
109-
dispatch(request.get_data().decode()), content_type="application/json"
110-
)
111-
112-
113-
if __name__ == "__main__":
114-
app.run()
115-
```
116-
117-
See [blog post](https://explodinglabs.github.io/jsonrpc/flask).
118-
119-
## http.server
120-
121-
Using Python's built-in
122-
[http.server](https://docs.python.org/3/library/http.server.html) module.
123-
124-
```python
125-
from http.server import BaseHTTPRequestHandler, HTTPServer
126-
127-
from jsonrpcserver import Result, Success, dispatch, method
128-
129-
130-
@method
131-
def ping() -> Result:
132-
"""JSON-RPC method"""
133-
return Success("pong")
134-
135-
136-
class TestHttpServer(BaseHTTPRequestHandler):
137-
"""HTTPServer request handler"""
138-
139-
def do_POST(self) -> None: # pylint: disable=invalid-name
140-
"""POST handler"""
141-
# Process request
142-
request = self.rfile.read(int(self.headers["Content-Length"])).decode()
143-
response = dispatch(request)
144-
# Return response
145-
self.send_response(200)
146-
self.send_header("Content-type", "application/json")
147-
self.end_headers()
148-
self.wfile.write(response.encode())
149-
150-
151-
if __name__ == "__main__":
152-
HTTPServer(("localhost", 5000), TestHttpServer).serve_forever()
153-
```
154-
155-
See [blog post](https://explodinglabs.github.io/jsonrpc/httpserver).
156-
157-
## jsonrpcserver
158-
159-
Using jsonrpcserver's built-in `serve` method.
160-
161-
```python
162-
from jsonrpcserver import Result, Success, method, serve
163-
164-
165-
@method
166-
def ping() -> Result:
167-
"""JSON-RPC method"""
168-
return Success("pong")
169-
170-
171-
if __name__ == "__main__":
172-
serve()
173-
```
174-
175-
## Sanic
176-
177-
```python
178-
from sanic import Sanic
179-
from sanic.request import Request
180-
from sanic.response import HTTPResponse, json
181-
182-
from jsonrpcserver import Result, Success, dispatch_to_serializable, method
183-
184-
app = Sanic("JSON-RPC app")
185-
186-
187-
@method
188-
def ping() -> Result:
189-
"""JSON-RPC method"""
190-
return Success("pong")
191-
192-
193-
@app.route("/", methods=["POST"])
194-
async def test(request: Request) -> HTTPResponse:
195-
"""Handle Sanic request"""
196-
return json(dispatch_to_serializable(request.body))
197-
198-
199-
if __name__ == "__main__":
200-
app.run(port=5000)
201-
```
202-
203-
See [blog post](https://explodinglabs.github.io/jsonrpc/sanic).
204-
205-
## Socket.IO
206-
207-
```python
208-
from flask import Flask, Request
209-
from flask_socketio import SocketIO, send # type: ignore
210-
211-
from jsonrpcserver import Result, Success, dispatch, method
212-
213-
app = Flask(__name__)
214-
socketio = SocketIO(app)
215-
216-
217-
@method
218-
def ping() -> Result:
219-
"""JSON-RPC method"""
220-
return Success("pong")
221-
222-
223-
@socketio.on("message") # type: ignore
224-
def handle_message(request: Request) -> None:
225-
"""Handle SocketIO request"""
226-
if response := dispatch(request):
227-
send(response, json=True)
228-
229-
230-
if __name__ == "__main__":
231-
socketio.run(app, port=5000)
232-
```
233-
234-
See [blog post](https://explodinglabs.github.io/jsonrpc/flask-socketio).
235-
236-
## Tornado
237-
238-
```python
239-
from typing import Awaitable, Optional
240-
241-
from tornado import ioloop, web
242-
243-
from jsonrpcserver import Result, Success, async_dispatch, method
244-
245-
246-
@method
247-
async def ping() -> Result:
248-
"""JSON-RPC method"""
249-
return Success("pong")
250-
251-
252-
class MainHandler(web.RequestHandler):
253-
"""Handle Tornado request"""
254-
255-
async def post(self) -> None:
256-
"""Post"""
257-
request = self.request.body.decode()
258-
response = await async_dispatch(request)
259-
if response:
260-
self.write(response)
261-
262-
def data_received(self, chunk: bytes) -> Optional[Awaitable[None]]:
263-
pass
264-
265-
266-
app = web.Application([(r"/", MainHandler)])
267-
268-
if __name__ == "__main__":
269-
app.listen(5000)
270-
ioloop.IOLoop.current().start()
271-
```
272-
273-
See [blog post](https://explodinglabs.github.io/jsonrpc/tornado).
274-
275-
## Websockets
276-
277-
```python
278-
import asyncio
279-
280-
from websockets.server import WebSocketServerProtocol, serve
281-
282-
from jsonrpcserver import Result, Success, async_dispatch, method
283-
284-
285-
@method
286-
async def ping() -> Result:
287-
"""JSON-RPC method"""
288-
return Success("pong")
289-
290-
291-
async def main(websocket: WebSocketServerProtocol, _: str) -> None:
292-
"""Handle Websocket message"""
293-
if response := await async_dispatch(await websocket.recv()):
294-
await websocket.send(response)
295-
296-
297-
start_server = serve(main, "localhost", 5000)
298-
asyncio.get_event_loop().run_until_complete(start_server)
299-
asyncio.get_event_loop().run_forever()
300-
```
301-
302-
See [blog post](https://explodinglabs.github.io/jsonrpc/websockets).
303-
304-
## Werkzeug
305-
306-
```python
307-
from werkzeug.serving import run_simple
308-
from werkzeug.wrappers import Request, Response
309-
310-
from jsonrpcserver import Result, Success, dispatch, method
311-
312-
313-
@method
314-
def ping() -> Result:
315-
"""JSON-RPC method"""
316-
return Success("pong")
317-
318-
319-
@Request.application
320-
def application(request: Request) -> Response:
321-
"""Handle Werkzeug request"""
322-
return Response(dispatch(request.data.decode()), 200, mimetype="application/json")
323-
324-
325-
if __name__ == "__main__":
326-
run_simple("localhost", 5000, application)
327-
```
328-
329-
See [blog post](https://explodinglabs.github.io/jsonrpc/werkzeug).
330-
331-
## ZeroMQ
332-
333-
```python
334-
import zmq
335-
336-
from jsonrpcserver import Result, Success, dispatch, method
337-
338-
socket = zmq.Context().socket(zmq.REP)
339-
340-
341-
@method
342-
def ping() -> Result:
343-
"""JSON-RPC method"""
344-
return Success("pong")
345-
346-
347-
if __name__ == "__main__":
348-
socket.bind("tcp://*:5000")
349-
while True:
350-
request = socket.recv().decode()
351-
socket.send_string(dispatch(request))
352-
```
353-
354-
See [blog post](https://explodinglabs.github.io/jsonrpc/zeromq).
355-
356-
## ZeroMQ (async)
357-
358-
```python
359-
import asyncio
360-
361-
import aiozmq # type: ignore
362-
import zmq
363-
364-
from jsonrpcserver import Result, Success, async_dispatch, method
365-
366-
367-
@method
368-
async def ping() -> Result:
369-
"""JSON-RPC method"""
370-
return Success("pong")
371-
372-
373-
async def main() -> None:
374-
"""Handle AioZMQ request"""
375-
rep = await aiozmq.create_zmq_stream(zmq.REP, bind="tcp://*:5000")
376-
while True:
377-
request = (await rep.read())[0].decode()
378-
if response := (await async_dispatch(request)).encode():
379-
rep.write((response,))
380-
381-
382-
if __name__ == "__main__":
383-
asyncio.set_event_loop_policy(aiozmq.ZmqEventLoopPolicy())
384-
asyncio.get_event_loop().run_until_complete(main())
385-
```
386-
387-
See [blog post](https://explodinglabs.github.io/jsonrpc/zeromq-async).
3+
Examples have moved to the [Community Wiki](https://github.com/explodinglabs/jsonrpcserver/wiki).

0 commit comments

Comments
 (0)