Skip to main content

Simple Modular API written in Python.

Project description

PyPi TravisCI CodeCov

Smapy

Simple Modular APIs written in Python.

Overview

Smapy is a framework built on top of Falcon and gunicorn, which allows building modular, distributed and asynchronous-capable service oriented Web APIs writing as little Python code as possible.

Installation

The simplest and recommended way to install Smapy is using pip:

pip install smapy

Alternatively, clone the repository and install it from source running the make install command.

git clone git@github.com:smapy/smapy.git
cd smapy
make install

For development, you can use the make install-develop command instead in order to install all the required dependencies for testing and code linting.

Getting Started

All you need to start a Smapy application is to execute the smapy command line utility:

$ smapy
[2018-12-29 21:53:03 +0100] [25213] [INFO] Starting gunicorn 19.9.0
[2018-12-29 21:53:03 +0100] [25213] [INFO] Listening at: http://127.0.0.1:8001 (25213)
[2018-12-29 21:53:03 +0100] [25213] [INFO] Using worker: gevent
[2018-12-29 21:53:03 +0100] [25216] [INFO] Booting worker with pid: 25216
2018-12-29 21:53:03,304 - 25216 - INFO - None - application - Initializing the API
2018-12-29 21:53:03,307 - 25216 - INFO - None - api - Adding new runnable hello.World
2018-12-29 21:53:03,307 - 25216 - INFO - None - api - Adding new runnable misc.MultiProcess
2018-12-29 21:53:03,307 - 25216 - INFO - None - api - Adding new runnable misc.Report
2018-12-29 21:53:03,308 - 25216 - INFO - None - api - Adding new runnable misc.HelloWorld

After that, you can start playing with it through HTTP requests:

$ curl localhost:8001/hello
{
    "elapsed": 0.08,
    "host": "hostname",
    "in_ts": "2018-05-06T20:37:48.671867",
    "out_ts": "2018-05-06T20:37:48.671947",
    "pid": 31789,
    "results": null,
    "session": null,
    "status": "404 Not Found"
}

$ curl localhost:8001/hello_world
{
    "elapsed": 12.044,
    "host": "hostname",
    "in_ts": "2018-05-06T20:37:58.759039",
    "out_ts": "2018-05-06T20:37:58.771083",
    "pid": 31789,
    "results": null,
    "session": "5aef67a6ab17857c2d81a6ea",
    "status": "200 OK"
}

$ curl localhost:8001/hello_world?sync=True
{
    "elapsed": 26.668,
    "host": "hostname",
    "in_ts": "2018-05-06T20:38:03.903315",
    "out_ts": "2018-05-06T20:38:03.929983",
    "pid": 31789,
    "results": {
        "hello": "world!",
        "sync": "True"
    },
    "session": "5aef67abab17857c2d81a6ec",
    "status": "200 OK"
}

$ curl localhost:8001/report?session=5aef67a6ab17857c2d81a6ea
{
    "elapsed": 19.758,
    "host": "hostname",
    "in_ts": "2018-05-06T20:39:49.670267",
    "out_ts": "2018-05-06T20:39:49.690025",
    "pid": 31789,
    "results": {
        "actions": {
            "OK": 1
        },
        "last_activity": "2018-05-06T20:37:58.812000",
        "session": {
            "_id": "5aef67a6ab17857c2d81a6ea",
            "alive": false,
            "body": {},
            "elapsed": "0:00:00.058000",
            "env": {
                "HTTP_ACCEPT": "*/*",
                "HTTP_HOST": "localhost:8001",
                "HTTP_USER_AGENT": "curl/7.47.0",
                "PATH_INFO": "/hello_world",
                "QUERY_STRING": "",
                "RAW_URI": "/hello_world",
                "REMOTE_ADDR": "127.0.0.1",
                "REMOTE_PORT": "50636",
                "REQUEST_METHOD": "GET",
                "SCRIPT_NAME": "",
                "SERVER_NAME": "127.0.0.1",
                "SERVER_PORT": "8001",
                "SERVER_PROTOCOL": "HTTP/1.1",
                "SERVER_SOFTWARE": "gunicorn/19.8.1"
            },
            "host": "hostname",
            "in_ts": "2018-05-06T20:37:58.759000",
            "out_ts": "2018-05-06T20:37:58.817000",
            "params": {},
            "pid": 31789,
            "resource": "misc.HelloWorld",
            "response": {
                "hello": "world!"
            },
            "status": "OK",
            "sync": false
        },
        "session_data": {
            "links": 0,
            "occurrences": 0,
            "post": 0
        }
    },
    "session": "5aef6815ab17857c2d81a6ef",
    "status": "200 OK"
}

History

0.0.2

  • Add smapy CLI
  • Add default actions ands resources
  • Import actions dynamically
  • Update project structure

0.0.1

  • First release on PyPI.

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

smapy-0.0.3.dev0.tar.gz (33.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

smapy-0.0.3.dev0-py2.py3-none-any.whl (18.5 kB view details)

Uploaded Python 2Python 3

File details

Details for the file smapy-0.0.3.dev0.tar.gz.

File metadata

  • Download URL: smapy-0.0.3.dev0.tar.gz
  • Upload date:
  • Size: 33.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.1.0 requests-toolbelt/0.9.1 tqdm/4.33.0 CPython/3.6.8

File hashes

Hashes for smapy-0.0.3.dev0.tar.gz
Algorithm Hash digest
SHA256 508f32ec317e4c3db8aef116cf4aeb9035d4558d9f471710fc02018638296326
MD5 ba3d30324bfc362295a19675b553c96c
BLAKE2b-256 8d73cfb432b9ec314fd489f730175ea676b9a8cf30b485dcc660bdc255626aa6

See more details on using hashes here.

File details

Details for the file smapy-0.0.3.dev0-py2.py3-none-any.whl.

File metadata

  • Download URL: smapy-0.0.3.dev0-py2.py3-none-any.whl
  • Upload date:
  • Size: 18.5 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.1.0 requests-toolbelt/0.9.1 tqdm/4.33.0 CPython/3.6.8

File hashes

Hashes for smapy-0.0.3.dev0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 3157ee668e4197b2ff2e97737d3025669e3583408f7d9b81a4068306084b1800
MD5 682cfb87c552f60a28afb20981f414cb
BLAKE2b-256 1a00afcc9a5654179ea64b9650ed4e3b66f4d6db8fb74ecadf23c70c3cc6cd42

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page