Skip to main content

A set of utilities to build API gateway.

Project description

Usage: Define Command

Command represents an external operation. To define a command, you must inherit from blackgate.Command.

Example:

from blackgate import Command

class GetCurrentUser(Command):

    group_key = 'service.session'
    command_key = 'get_current_user'

    def __init__(self, cookie):
        self.cookie = cookie

    def run(self):
        resp = requests.get('http://session-service/session', headers={'Cookie': self.cookie}, timeout=1)
        return resp.json()['user_id']

    def fallback(self):
        return None

Usage: Synchronous Execution

You can contruct command with parameters and then execute it:

get_current_user = GetCurrentUser(cookie='session=78b29404-92c9-49db-b87b-531b5f9cfc56')
user_id = get_current_user.execute()

Usage: Asynchronous Execution

You can execute a Command asynchronously by using the queue() method, as in the following example:

@tornado.gen.coroutine
def some_function():
    get_current_user = GetCurrentUser(cookie='session=78b29404-92c9-49db-b87b-531b5f9cfc56')
    user_id = yield get_current_user.queue()
    print(user_id)

Usage: Fallback

Usage: Proxy

Configure Blackgate Component:

from blackgate import component
component.add('executor_pool', {'group_key': 'api.v1', 'max_workers': 10})
component.install()
app = tornado.web.Application([
  (r'/api/v1/(.*)', HTTPProxy, dict(command=APIV1Command)),
])
app.listen(8888)
tornado.ioloop.IOLoop.current().start()

Route User Request to Inner Service:

from blackgate import HTTPProxyCommand

class APIService(HTTPProxyCommand):

    group_key = 'api.v1'

    command_key = 'proxy_v1_traffic'

    def before_request(self):
        path = self.request['path'].replace('/api', '')
        self.request['url'] = 'http://intra.service.com' + path

    def fallback(self):
        return dict(
            status_code=500,
            reason='Internal Server Error',
            headers={},
            content=json.dumps({
                'code': 500,
                'message': 'internal server error',
                'error': {}
            })
        )

ThreadExecutorPool

Executor Pool is the place where you can run external network calls.

Each command defines its group_key. You must register an executor_pool for specific group_key:

from blackgate import component
component.add('executor_pool', {'group_key': 'service.session', 'max_workers', 10})
# ...
component.install()

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

blackgate-0.2.3.tar.gz (8.4 kB view details)

Uploaded Source

Built Distribution

blackgate-0.2.3-py2.py3-none-any.whl (11.5 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file blackgate-0.2.3.tar.gz.

File metadata

  • Download URL: blackgate-0.2.3.tar.gz
  • Upload date:
  • Size: 8.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for blackgate-0.2.3.tar.gz
Algorithm Hash digest
SHA256 707acec2a3223db917c7372054717eda6e8f929489450b6193366512a41536a9
MD5 18c949edb5feeea595093de55f2c2a2d
BLAKE2b-256 0a59a925c8989bca87d7e9616c71f0d6f13e245a3692c255a350368b8153ee1a

See more details on using hashes here.

File details

Details for the file blackgate-0.2.3-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for blackgate-0.2.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 eb1ee582e0b1facc481afd6989c3fa2bc657248dbee0367a58787a7c957a4822
MD5 109ed620321a30d8d5a251ce807e3160
BLAKE2b-256 2e0509c20e80e44468fdae70598170e1fd7b93b359f75d70d8947b4da48b860c

See more details on using hashes here.

Supported by

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