see here https://github.com/dax/vaurien/blob/f6fd015a742241b2ee6b55b75861a82b2e239030/vaurien/protocols/base.py#L55