Skip to main content

content-negotiation

Tests codecov PyPI Read the Docs

A small Python library supporting content-negotiation.

It is used to decide content type based on a list of media ranges in the accept header, as well as deciding content-language based on the accept-language header.

  • Media ranges/language ranges with a q-value of 0.0 will be ignored.
  • Q-values above 1.0 will be treated as 1.0. Q-values below 0.0 will be treated as 0.0.
  • When a media range is not specified, it will be treated as */*.
  • When a language range is not specified, it will be treated as *.
  • When media ranges and language ranges are equal, the first one will be returned.

For more information on the accept header, see RFC 7231, section-5.3.2. For more information on the accept-language header, see RFC 7231, section-5.3.5

Usage

Install

% pip install content-negotiation

Getting started

Content type

from content_negotiation import decide_content_type, NoAgreeableContentTypeError

accept_headers = ["application/json", "text/html", "text/plain, text/*;q=0.8"]
supported_content_types = ["text/turtle", "application/json"]

try:
    content_type = decide_content_type(accept_headers, supported_content_types)
except NoAgreeableContentTypeError:
    print("No agreeable content type found.")
    # Handle error, by returning e.g. 406 Not Acceptable

Content language

from content_negotiation import decide_content_language, NoAgreeableContentLanguageError

accept_language_headers = ["en-GB;q=0.8", "nb-NO;q=0.9"]
   supported_languages = ["en-GB", "en", "nb-NO", "nb", "en-US"]

try:
    content_language = decide_decide_language(accept_language_headers, supported_languages)
except NoAgreeableLanguageError:
    print("No agreeable language found.")
    # Handle error, by returning e.g. 406 Not Acceptable

Development

Requirements

% pipx install poetry==1.2.0
% pipx install nox==2022.8.7
% pipx inject nox nox-poetry==1.0.1

Install developer tools

% git clone https://github.com/Informasjonsforvaltning/content-negotiation.git
% cd content-negotiation
% pyenv install 3.8.13
% pyenv install 3.9.13
% pyenv install 3.10.6
% pyenv local 3.8.13 3.9.13 3.10.6
% poetry install

Run all sessions

% nox

Run all tests with coverage reporting

% nox -rs tests

Debugging

You can enter into Pdb by passing --pdb to pytest:

% nox -rs tests -- --pdb  --log-cli-level=DEBUG

You can set breakpoints directly in code by using the function breakpoint().

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

content_negotiation-2.1.4.tar.gz (9.5 kB view details)

Uploaded Source

Built Distribution

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

content_negotiation-2.1.4-py3-none-any.whl (11.4 kB view details)

Uploaded Python 3

File details

Details for the file content_negotiation-2.1.4.tar.gz.

File metadata

  • Download URL: content_negotiation-2.1.4.tar.gz
  • Upload date:
  • Size: 9.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.4.1 CPython/3.12.13 Linux/6.17.0-1020-azure

File hashes

Hashes for content_negotiation-2.1.4.tar.gz
Algorithm Hash digest
SHA256 fbfbbdb242b33273401ec5f771f104d4e07f8b36d1435300b649624bab2160f8
MD5 79624e996c7b7556674034910730b86b
BLAKE2b-256 48d313b4be3bd8947fc6beb8ad21d2c86b264f5617f4127935fa30c849502d04

See more details on using hashes here.

File details

Details for the file content_negotiation-2.1.4-py3-none-any.whl.

File metadata

  • Download URL: content_negotiation-2.1.4-py3-none-any.whl
  • Upload date:
  • Size: 11.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.4.1 CPython/3.12.13 Linux/6.17.0-1020-azure

File hashes

Hashes for content_negotiation-2.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 419a0c1731c00b87ee8127c5907bb1b10c5abd0dd33816cfe21ee4922be6c21e
MD5 dddf30b13f96a2314c1ba9408d193f4c
BLAKE2b-256 caebda7a8ad2f0169124582c2153da2acc210b1d35cff79dd7b756fadd5e2a1a

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

2.1.4 This release

2 files

2.1.3

2 files

2.1.2

2 files

2.1.1

2 files

2.1.0

2 files

2.0.1

2 files

1.1.2

2 files

1.1.1

2 files

1.1.0

2 files

1.0.0

2 files

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