A Server Module to Build RESTful APIs for Python Functions
Project description
A Server Module to Build RESTful APIs for Python Fnctions.
This framework forks a new process to run the specified function on each api request.
You can specify a maximum concurrency of the function. The api request is denied if the nubmer of running processes for the function is already reaches the concurrency limitation.
How to Use
Example Code:
import concurrent.futures
import math
from restful_functions import ArgDefinition, ArgType, FunctionServer
def addition(x: int, y: int):
"""Simple Funciton."""
return x+y
def is_prime(n):
if n % 2 == 0:
return False
sqrt_n = int(math.floor(math.sqrt(n)))
for i in range(3, sqrt_n + 1, 2):
if n % i == 0:
return False
return True
def multi():
"""Heavy Function with MultiProcessing."""
PRIMES = [
112272535095293,
112582705942171,
112272535095293,
115280095190773,
115797848077099,
1099726899285419]
with concurrent.futures.ProcessPoolExecutor() as executor:
for number, prime in zip(PRIMES, executor.map(is_prime, PRIMES)):
print('%d is prime: %s' % (number, prime))
return True
if __name__ == '__main__':
server = FunctionServer()
server.add_function(
addition, # Function
[
ArgDefinition('x', ArgType.INTEGER, True, 'A value of X'),
ArgDefinition('y', ArgType.INTEGER, True, 'A value of Y'),
], # Args
1, # Max Concurrency
'Simple Awesome Addition' # Description
)
server.add_function(
multi,
[],
2,
'Heavy Function'
)
server.start()
Example Usage:
$ curl localhost:8888/
/function/list/data
/function/list/text
/function/definition/{function_name}
/function/running-count/{function_name}
/task/info/{task_id}
/task/done/{task_id}
/task/result/{task_id}
/task/list/{function_name}
/terminate/function/{function_name}
/terminate/task/{task_id}
$ curl localhost:8888/function/list/text
addition
URL:
async api: /addition
block api: /addition/keep-connection
Max Concurrency: 1
Description:
Simple Awesome Addition
Args
x INTEGER Requiered
A value of X
y INTEGER Requiered
A value of Y
multi
URL:
async api: /multi
block api: /multi/keep-connection
Max Concurrency: 2
Description:
Heavy Function
No Args
# Call Asynchronous
# Obtain task_id
$ curl -X POST -H "Content-Type: applicaiton/json" -d '{"x":3, "y":6}' http://localhost:8888/addition
{"success": true, "message": "", "task_id": "c3a6a0ef-b19e-4e6f-bce3-8d0e5a9046aa"}
# Obtain the result by task_id
$ curl http://localhost:8888/task/info/3a6a0ef-b19e-4e6f-bce3-8d0e5a9046aa
{"task_id": "c3a6a0ef-b19e-4e6f-bce3-8d0e5a9046aa", "function_name": "addition", "status": "DONE", "result": 9}
$ curl http://localhost:8888/task/result/c3a6a0ef-b19e-4e6f-bce3-8d0e5a9046aa
9
# Call synchronous
# Keeping the connection until the process ends.
$ curl -X POST -H "Content-Type: applicaiton/json" -d '{"x":3, "y":6}' http://localhost:8888/addition/keep-connection
9
# Over Max Concurrency
$ curl -X POST http://localhost:8888/multi
{"success": true, "message": "", "task_id": "5bbbc1a0-74c2-4828-a843-fa2e2363e341"}
$ curl -X POST http://localhost:8888/multi
{"success": true, "message": "", "task_id": "7729af1f-c766-456e-a516-a75ab5f3a24c"}
$ curl -X POST http://localhost:8888/multi
{"success": false, "message": "Over Max Concurrency 2", "task_id": ""}
LICENSE
MIT
TODO
[ ] Write Documents
[ ] Write CONTRIBUTING.md
[ ] Show Test Coverage
[ ] Deploy with CI Service
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file restful_functions-2.0.1-py3-none-any.whl.
File metadata
- Download URL: restful_functions-2.0.1-py3-none-any.whl
- Upload date:
- Size: 14.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.6.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a55c37ffbf4d6b447ceb8dca3e086437e0031692ca66a42b9c69f300c0f736c1
|
|
| MD5 |
c34d17faa1b739220275e3a817139805
|
|
| BLAKE2b-256 |
c00c271103356d91ad8da708691f468cff2b3293956a0f9adb7fe9252565ba7a
|