Skip to main content

Python library for GoReplay Middleware

Project description

Python library for GoReplay Middleware , API is quite similar to NodeJS library

https://badge.fury.io/py/gor.svg https://travis-ci.org/amyangfei/GorMW.svg?branch=master https://coveralls.io/repos/github/amyangfei/GorMW/badge.svg?branch=master

Installation

To install GorMW, simply:

$ pip install gor

or from source:

python setup.py install

Getting Started

Initialize a AsyncioGor based middleware and start it in the following way:

from gor.middleware import AsyncioGor
proxy = AsyncioGor()
proxy.run()

Basic idea is that you write callbacks which respond to request, response, replay, or message events, which contains request meta information and actuall http paylod. Depending on your needs you may compare, override or filter incoming requests and responses.

You can respond to the incoming events using on function, by providing callbacks:

def on_request(proxy, msg, **kwargs):
    # do anything you want with msg
    # msg is a GorMessage object
    pass

proxy = AsyncioGor()
proxy.on('request', on_request)
proxy.run()

You can provide request ID as additional argument to on function, which allow you to map related requests and responses. Below is example of middleware which checks that original and replayed response have same HTTP status code. Have a try with the following command and sample middleware.

gor --input-raw :14000 --middleware "/path/to/middleware.py" --output-http-track-response --input-raw-track-response --output-http "http://127.0.0.1:14001"
# coding: utf-8
import sys
from gor.middleware import AsyncioGor


def on_request(proxy, msg, **kwargs):
    proxy.on('response', on_response, idx=msg.id, req=msg)

def on_response(proxy, msg, **kwargs):
    proxy.on('replay', on_replay, idx=kwargs['req'].id, req=kwargs['req'], resp=msg)

def on_replay(proxy, msg, **kwargs):
    replay_status = proxy.http_status(msg.http)
    resp_status = proxy.http_status(kwargs['resp'].http)
    if replay_status != resp_status:
        sys.stderr.write('replay status [%s] diffs from response status [%s]\n' % (replay_status, resp_status))
    else:
        sys.stderr.write('replay status is same as response status\n')
    sys.stderr.flush()

if __name__ == '__main__':
    proxy = AsyncioGor()
    proxy.on('request', on_request)
    proxy.run()

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

gor-0.2.2.tar.gz (4.9 kB view details)

Uploaded Source

Built Distribution

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

gor-0.2.2-py3-none-any.whl (5.9 kB view details)

Uploaded Python 3

File details

Details for the file gor-0.2.2.tar.gz.

File metadata

  • Download URL: gor-0.2.2.tar.gz
  • Upload date:
  • Size: 4.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.2

File hashes

Hashes for gor-0.2.2.tar.gz
Algorithm Hash digest
SHA256 5094b96ff8403dfe8dcce32d28769f6517b721b359e36f7676c354c34229b88b
MD5 1bc8affa0ebb7ab7b2a485771ad88339
BLAKE2b-256 36be374c0f89f6f526bf08979506fe92977a8f6274fe9e628c8154d5c2964e91

See more details on using hashes here.

File details

Details for the file gor-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: gor-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 5.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.2

File hashes

Hashes for gor-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 04e8bffafdd860ab049708fb0ab5e5c6f7212f4cc968fff4aeb27d43ef99d4d4
MD5 573e3c996be51707aaf5ea8a61786ca1
BLAKE2b-256 6b8c4014b35a766f8e712fa27ad53f5cd0223b13d8634611de5a765fa348ad6b

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