sphinx-build с -blinkcheck и пользовательским CA - PullRequest
0 голосов
/ 01 июня 2018

У нас есть собственный центр сертификации, который мы используем для подписи SSL-сертификатов.В основном это работает нормально, если ваша ОС (в нашем случае CentOS 7) регистрирует эти полномочия.Он хранится здесь:

/etc/pki/ca-trust/source/anchors/company_ca.pem

Это позволяет Firefox / chrome доверять SSL-сертификатам, подписанным через него.

Я использую sphinx-build -W -blinkcheck […], чтобы проверить, что ссылки в моем PythonПроект все еще действителен, так как ссылка гнилой отстой в документации.Это хорошо для всех внешних ссылок.

Однако, когда мы ссылаемся на нашу собственную версию SSL mantis (средство отслеживания ошибок), я получаю ошибку

SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:579)'),)))

.В нашем случае Mantis работает только по протоколу https.

Как мне сказать sphinx добавить полномочия для всей компании?

Обычно я запускаю это через токсиктаким образом:

Форекс токсина, который запускает это:

[testenv:docs]
basepython=python2.7
deps=-r{toxinidir}/requirements/requirements.txt
commands=./check_docs.bash

Сценарий bash:

#!/bin/bash
set -eux
sphinx-apidoc --force --separate --private --module-first -o docs src/ '*/*test*'
cd docs
pytest --maxfail=1 \
    --tb=line \
    -v \
    --junitxml=junit_sphinx.xml \
    --exitfirst \
    --failed-first \
    --full-trace \
    -ra \
    --capture=no \
    check_sphinx.py

И сценарий питонов:

import subprocess


def test_linkcheck(tmpdir):
    doctrees = tmpdir.join("doctrees")
    htmldir = tmpdir.join("html")
    subprocess.check_call([
        "sphinx-build", "-W", "-blinkcheck", "-d",
        str(doctrees), ".",
        str(htmldir)
    ])


def test_build_docs(tmpdir):
    doctrees = tmpdir.join("doctrees")
    htmldir = tmpdir.join("html")
    subprocess.check_call([
        "sphinx-build", "-W", "-bhtml", "-d",
        str(doctrees), ".",
        str(htmldir)
    ])

1 Ответ

0 голосов
/ 01 июня 2018

Sphinx использует requests, который использует certifi - благодаря sraw , который любезно указал на это в комментарии.Вы можете изменить certifi.where(), добавив в него свой собственный центр сертификации.

Поскольку вы можете запускать токсины или пересоздавать виртуальную среду, выполнение этого вручную утомительно и подвержено ошибкам.Приспособление облегчает работу с этим.

Сценарий Python меняется на следующий.

# -*- coding: utf-8 -*-
import subprocess
import certifi
import requests
import pytest

CA = '/etc/pki/ca-trust/source/anchors/company_ca.pem'


@pytest.fixture
def certificate_authority(scope="module"):
    try:
        # Checking connection to Mantis…
        requests.get('https://mantisbt.example.com')
        # Connection to Mantis OK, thus CA should work fine.
    except requests.exceptions.SSLError:
        # SSL Error. Adding custom certs to Certifi store…
        cafile = certifi.where()
        with open(CA, 'rb') as infile:
            customca = infile.read()
        with open(cafile, 'ab') as outfile:
            outfile.write(customca)
        # That might have worked.


def test_linkcheck(certificate_authority, tmpdir):
    doctrees = tmpdir.join("doctrees")
    htmldir = tmpdir.join("html")
    subprocess.check_call([
        "sphinx-build", "-W", "-blinkcheck", "-d",
        str(doctrees), ".",
        str(htmldir)
    ])


def test_build_docs(certificate_authority, tmpdir):
    doctrees = tmpdir.join("doctrees")
    htmldir = tmpdir.join("html")
    subprocess.check_call([
        "sphinx-build", "-W", "-bhtml", "-d",
        str(doctrees), ".",
        str(htmldir)
    ])
...