Skip to main content

Britney is a module that implements the SPORE specification. It is based on Spyre. This module requires a SPORE description of an API. Some descriptions for known services are available here. You can write your own with this guide.

https://secure.travis-ci.org/agrausem/britney.png?branch=master https://coveralls.io/repos/agrausem/britney/badge.png?branch=master https://img.shields.io/pypi/v/britney.svg https://img.shields.io/pypi/dm/britney.svg Code Health Python Version https://img.shields.io/pypi/format/britney.svg

Install

Britney is working under Python 2.7 and Python >= 3.2. To install the module, you should use pip or easy_install :

$> pip install britney

or

$> easy_install britney

Create your client

Basics

You must create your client with the new method that reads a json file containing the API description or an URI exposing the description. This can be done like that :

import britney

# from a description file
client = britney.new('/path/to/api_desc.json')

# from an URI
client = britney.new('http://my-server/ws/api_desc.json')

The base URL

If your API description file doesn’t specify the base URL of the service, you can pass it to the new as the named argument base_url :

import britney

client = britney.new('/path/to/api_desc.json', base_url='http://my-server/ws/api/')

Middlewares

Sometimes, services need credentials to let you access the data or even send data. The client you created can enable middlewares at runtime and also extend his usage, by doing this :

import britney
from britney.middleware import auth

client = britney.new('http://my-server/ws/api_desc.json')
client.enable(auth.Basic, username='login', password='xxxxxx')

Sometimes, you want to enable middlewares on certain conditions. Another method called enable_if can take a callable predicate as argument that can check the environment parameters of the request :

import britney
from britney.middleware import auth

client = britney.new('http://my-server/ws/api_desc.json')
client.enable_if(lambda request: request['payload'] != '', auth.Basic, username='login', password='xxxxxx')

Use your client

Access data

Send data

A full example

Create your own middleware

Basics

Creating and enabling middlewares let you control how request are send or response are received by adding authentification or formatting data. To create your middleware, you should :

  • inherit from britney.middleware.Middleware

  • define how to instantiate your middleware

  • implement the process_request method to process the request

  • implement the process_response method to process the response

Here is a base class example to perform runtime on request :

from britney.middleware import Middleware


class Runtime(Middleware):

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

    def process_request(self, environ):
        pass

    def process_response(self, response):
        pass

Processing request

With this method, you can access all of the keys and values of the request’s base environment. By the way, you can add keys and values, change them or even delete them. Most of time, this method doesn’t return data but if you return a requests.Response object, the process will stop and return this response. The result environment data will be used to build the request :

import datetime

[...]

def process_request(self, environ):
    self.start_time = datetime.datetime.now()
    environ[self.runtime_key] = 0

Processing response

With this method, you can access data from the response, change or format content or even check headers or status :

[...]

def process_response(self, reponse):
    request_time = datetime.datetime.now() - self.start_time
    response.environ[self.runtime_key] = self.request_time.seconds

Use it

When you create your client, you only should enable your middleware and pass appopriate named arguments to the enable method :

import britney
from your_module.middleware import Runtime

client = britney.new('http:://server.org/ws/api.json')
client.enable(Runtime, runtime_key='X-Spore-Runtime')

That’s all !

Test it

A mock middleware and a function to fake Requests response are available to test the middlewares you created by faking a server. To test the Runtime middleware, you can do as follow :

import datetime
import unittest
import britney
from britney.middleware import utils
from your_module.middleware import Runtime

def test_response(request):
    return utils.fake_response(request, 'OK')

class TestRuntime(unittest.TestCase):

    def setUp(self):
        self.fake_server = {'/test', test_response}
        self.client = britney.new('/path/to/api.json')
        self.runtime_key = 'X-Spore-Runtime'

    def test_runtime(self):
        self.client.enable(Runtime, runtime_header=self.runtime_header)
        self.client.enable(utils.Mock, fakes=self.fake_server, middlewares=self.client.middlewares)
        start = datetime.datetime.now()
        result = self.client.test()
        stop = datetime.datetime.now()

        self.assertIn(result.environ, self.runtime_key)
        self.assertAlmostEqual(result.environ[self.runtime_key], (stop - start).seconds)

Release files for britney 0.5.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for britney 0.5.1
File Size Uploaded
britney-0.5.1.tar.gz 11.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for britney 0.5.1
File Interpreter ABI Platform
britney-0.5.1-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 28.1 kB

Release files / britney-0.5.1.tar.gz

Download URL britney-0.5.1.tar.gz
Size 11.4 kB
Tags Source
SHA-256 checksum
How to use checksums
6e2c461ede290246b777dc1444fcf5823234825d7746f6d6aabc4793340d2e3b
BLAKE2b-256 checksum
How to use checksums
610a0a7732d5f43a8313546941f640bd54f9b8cc540c286d4da7394e675576ff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / britney-0.5.1-py2.py3-none-any.whl

Download URL britney-0.5.1-py2.py3-none-any.whl
Size 16.7 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
680faf36f00865ab77dbb7a092d34ed3bbf7f3da018a37e6eb8207aebd01a942
BLAKE2b-256 checksum
How to use checksums
71afd83b5e5a3bc83c22b670b5a549101ad236dc7e7035f23743d892f26600d7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.5.1 This release

2 release files

0.5.0

1 release file

0.4.0

1 release file

0.3.3

1 release file

0.3.2

1 release file

0.3.1

1 release file

0.3.0

1 release file

0.2.1

1 release file

0.2

1 release file

0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page