mirror of
https://github.com/saltstack/salt.git
synced 2025-04-16 09:40:20 +00:00
Fix doc builds
Signed-off-by: Pedro Algarvio <palgarvio@vmware.com>
This commit is contained in:
parent
bdf8bb95ec
commit
c4beeb8fb9
13 changed files with 322 additions and 723 deletions
|
@ -1,554 +0,0 @@
|
|||
"""
|
||||
sphinxcontrib.httpdomain
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The HTTP domain for documenting RESTful HTTP APIs.
|
||||
|
||||
:copyright: Copyright 2011 by Hong Minhee
|
||||
:license: BSD, see LICENSE for details.
|
||||
|
||||
"""
|
||||
|
||||
import re
|
||||
|
||||
from docutils import nodes
|
||||
from docutils.parsers.rst.roles import set_classes
|
||||
from pygments.lexer import RegexLexer, bygroups
|
||||
from pygments.lexers import get_lexer_by_name
|
||||
from pygments.token import Keyword, Literal, Name, Number, Operator, Text
|
||||
from pygments.util import ClassNotFound
|
||||
from sphinx import addnodes
|
||||
from sphinx.directives import ObjectDescription
|
||||
from sphinx.domains import Domain, Index, ObjType
|
||||
from sphinx.roles import XRefRole
|
||||
from sphinx.util.docfields import GroupedField, TypedField
|
||||
from sphinx.util.nodes import make_refnode
|
||||
|
||||
|
||||
class DocRef:
|
||||
"""Represents a link to an RFC which defines an HTTP method."""
|
||||
|
||||
def __init__(self, base_url, anchor, section):
|
||||
"""Stores the specified attributes which represent a URL which links to
|
||||
an RFC which defines an HTTP method.
|
||||
|
||||
"""
|
||||
self.base_url = base_url
|
||||
self.anchor = anchor
|
||||
self.section = section
|
||||
|
||||
def __repr__(self):
|
||||
"""Returns the URL which this object represents, which points to the
|
||||
location of the RFC which defines some HTTP method.
|
||||
|
||||
"""
|
||||
return "{}#{}{}".format(self.base_url, self.anchor, self.section)
|
||||
|
||||
|
||||
#: The URL of the HTTP/1.1 RFC which defines the HTTP methods OPTIONS, GET,
|
||||
#: HEAD, POST, PUT, DELETE, TRACE, and CONNECT.
|
||||
RFC2616 = "http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html"
|
||||
|
||||
#: The name to use for section anchors in RFC2616.
|
||||
RFC2616ANCHOR = "sec"
|
||||
|
||||
#: The URL of the RFC which defines the HTTP PATCH method.
|
||||
RFC5789 = "http://tools.ietf.org/html/rfc5789"
|
||||
|
||||
#: The name to use for section anchors in RFC5789.
|
||||
RFC5789ANCHOR = "section-"
|
||||
|
||||
#: Mapping from lowercase HTTP method name to :class:`DocRef` object which
|
||||
#: maintains the URL which points to the section of the RFC which defines that
|
||||
#: HTTP method.
|
||||
DOCREFS = {
|
||||
"patch": DocRef(RFC5789, RFC5789ANCHOR, 2),
|
||||
"options": DocRef(RFC2616, RFC2616ANCHOR, 9.2),
|
||||
"get": DocRef(RFC2616, RFC2616ANCHOR, 9.3),
|
||||
"head": DocRef(RFC2616, RFC2616ANCHOR, 9.4),
|
||||
"post": DocRef(RFC2616, RFC2616ANCHOR, 9.5),
|
||||
"put": DocRef(RFC2616, RFC2616ANCHOR, 9.6),
|
||||
"delete": DocRef(RFC2616, RFC2616ANCHOR, 9.7),
|
||||
"trace": DocRef(RFC2616, RFC2616ANCHOR, 9.8),
|
||||
"connect": DocRef(RFC2616, RFC2616ANCHOR, 9.9),
|
||||
}
|
||||
|
||||
HTTP_STATUS_CODES = {
|
||||
100: "Continue",
|
||||
101: "Switching Protocols",
|
||||
102: "Processing",
|
||||
200: "OK",
|
||||
201: "Created",
|
||||
202: "Accepted",
|
||||
203: "Non Authoritative Information",
|
||||
204: "No Content",
|
||||
205: "Reset Content",
|
||||
206: "Partial Content",
|
||||
207: "Multi Status",
|
||||
226: "IM Used", # see RFC 3229
|
||||
300: "Multiple Choices",
|
||||
301: "Moved Permanently",
|
||||
302: "Found",
|
||||
303: "See Other",
|
||||
304: "Not Modified",
|
||||
305: "Use Proxy",
|
||||
307: "Temporary Redirect",
|
||||
400: "Bad Request",
|
||||
401: "Unauthorized",
|
||||
402: "Payment Required", # unused
|
||||
403: "Forbidden",
|
||||
404: "Not Found",
|
||||
405: "Method Not Allowed",
|
||||
406: "Not Acceptable",
|
||||
407: "Proxy Authentication Required",
|
||||
408: "Request Timeout",
|
||||
409: "Conflict",
|
||||
410: "Gone",
|
||||
411: "Length Required",
|
||||
412: "Precondition Failed",
|
||||
413: "Request Entity Too Large",
|
||||
414: "Request URI Too Long",
|
||||
415: "Unsupported Media Type",
|
||||
416: "Requested Range Not Satisfiable",
|
||||
417: "Expectation Failed",
|
||||
418: "I'm a teapot", # see RFC 2324
|
||||
422: "Unprocessable Entity",
|
||||
423: "Locked",
|
||||
424: "Failed Dependency",
|
||||
426: "Upgrade Required",
|
||||
449: "Retry With", # proprietary MS extension
|
||||
500: "Internal Server Error",
|
||||
501: "Not Implemented",
|
||||
502: "Bad Gateway",
|
||||
503: "Service Unavailable",
|
||||
504: "Gateway Timeout",
|
||||
505: "HTTP Version Not Supported",
|
||||
507: "Insufficient Storage",
|
||||
510: "Not Extended",
|
||||
}
|
||||
|
||||
http_sig_param_re = re.compile(
|
||||
r"\((?:(?P<type>[^:)]+):)?(?P<name>[\w_]+)\)", re.VERBOSE
|
||||
)
|
||||
|
||||
|
||||
def http_resource_anchor(method, path):
|
||||
path = re.sub(r"[<>:/]", "-", path)
|
||||
return method.lower() + "-" + path
|
||||
|
||||
|
||||
class HTTPResource(ObjectDescription):
|
||||
|
||||
doc_field_types = [
|
||||
TypedField(
|
||||
"parameter",
|
||||
label="Parameters",
|
||||
names=("param", "parameter", "arg", "argument"),
|
||||
typerolename="obj",
|
||||
typenames=("paramtype", "type"),
|
||||
),
|
||||
TypedField(
|
||||
"jsonparameter",
|
||||
label="JSON Parameters",
|
||||
names=("jsonparameter", "jsonparam", "json"),
|
||||
typerolename="obj",
|
||||
typenames=("jsonparamtype", "jsontype"),
|
||||
),
|
||||
TypedField(
|
||||
"queryparameter",
|
||||
label="Query Parameters",
|
||||
names=("queryparameter", "queryparam", "qparam", "query"),
|
||||
typerolename="obj",
|
||||
typenames=("queryparamtype", "querytype", "qtype"),
|
||||
),
|
||||
GroupedField(
|
||||
"formparameter",
|
||||
label="Form Parameters",
|
||||
names=("formparameter", "formparam", "fparam", "form"),
|
||||
),
|
||||
GroupedField(
|
||||
"requestheader",
|
||||
label="Request Headers",
|
||||
rolename="mailheader",
|
||||
names=("reqheader", "requestheader"),
|
||||
),
|
||||
GroupedField(
|
||||
"responseheader",
|
||||
label="Response Headers",
|
||||
rolename="mailheader",
|
||||
names=("resheader", "responseheader"),
|
||||
),
|
||||
GroupedField(
|
||||
"statuscode",
|
||||
label="Status Codes",
|
||||
rolename="statuscode",
|
||||
names=("statuscode", "status", "code"),
|
||||
),
|
||||
]
|
||||
|
||||
method = NotImplemented
|
||||
|
||||
def handle_signature(self, sig, signode):
|
||||
method = self.method.upper() + " "
|
||||
signode += addnodes.desc_name(method, method)
|
||||
offset = 0
|
||||
for match in http_sig_param_re.finditer(sig):
|
||||
path = sig[offset : match.start()]
|
||||
signode += addnodes.desc_name(path, path)
|
||||
params = addnodes.desc_parameterlist()
|
||||
typ = match.group("type")
|
||||
if typ:
|
||||
typ = typ + ": "
|
||||
params += addnodes.desc_annotation(typ, typ)
|
||||
name = match.group("name")
|
||||
params += addnodes.desc_parameter(name, name)
|
||||
signode += params
|
||||
offset = match.end()
|
||||
if offset < len(sig):
|
||||
path = sig[offset : len(sig)]
|
||||
signode += addnodes.desc_name(path, path)
|
||||
fullname = self.method.upper() + " " + path
|
||||
signode["method"] = self.method
|
||||
signode["path"] = sig
|
||||
signode["fullname"] = fullname
|
||||
return (fullname, self.method, sig)
|
||||
|
||||
def needs_arglist(self):
|
||||
return False
|
||||
|
||||
def add_target_and_index(self, name_cls, sig, signode):
|
||||
signode["ids"].append(http_resource_anchor(*name_cls[1:]))
|
||||
self.env.domaindata["http"][self.method][sig] = (self.env.docname, "")
|
||||
|
||||
def get_index_text(self, modname, name):
|
||||
return ""
|
||||
|
||||
|
||||
class HTTPOptions(HTTPResource):
|
||||
|
||||
method = "options"
|
||||
|
||||
|
||||
class HTTPHead(HTTPResource):
|
||||
|
||||
method = "head"
|
||||
|
||||
|
||||
class HTTPPatch(HTTPResource):
|
||||
|
||||
method = "patch"
|
||||
|
||||
|
||||
class HTTPPost(HTTPResource):
|
||||
|
||||
method = "post"
|
||||
|
||||
|
||||
class HTTPGet(HTTPResource):
|
||||
|
||||
method = "get"
|
||||
|
||||
|
||||
class HTTPPut(HTTPResource):
|
||||
|
||||
method = "put"
|
||||
|
||||
|
||||
class HTTPDelete(HTTPResource):
|
||||
|
||||
method = "delete"
|
||||
|
||||
|
||||
class HTTPTrace(HTTPResource):
|
||||
|
||||
method = "trace"
|
||||
|
||||
|
||||
def http_statuscode_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
|
||||
if text.isdigit():
|
||||
code = int(text)
|
||||
try:
|
||||
status = HTTP_STATUS_CODES[code]
|
||||
except KeyError:
|
||||
msg = inliner.reporter.error(
|
||||
"%d is invalid HTTP status code" % code, lineno=lineno
|
||||
)
|
||||
prb = inliner.problematic(rawtext, rawtext, msg)
|
||||
return [prb], [msg]
|
||||
else:
|
||||
try:
|
||||
code, status = re.split(r"\s", text.strip(), 1)
|
||||
code = int(code)
|
||||
except ValueError:
|
||||
msg = inliner.reporter.error(
|
||||
"HTTP status code must be an integer (e.g. `200`) or "
|
||||
"start with an integer (e.g. `200 OK`); %r is invalid" % text,
|
||||
line=lineno,
|
||||
)
|
||||
prb = inliner.problematic(rawtext, rawtext, msg)
|
||||
return [prb], [msg]
|
||||
nodes.reference(rawtext)
|
||||
if code == 226:
|
||||
url = "http://www.ietf.org/rfc/rfc3229.txt"
|
||||
if code == 418:
|
||||
url = "http://www.ietf.org/rfc/rfc2324.txt"
|
||||
if code == 449:
|
||||
url = "http://msdn.microsoft.com/en-us/library/dd891478(v=prot.10).aspx"
|
||||
elif code in HTTP_STATUS_CODES:
|
||||
url = (
|
||||
"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10."
|
||||
+ "%d.%d" % (code // 100, 1 + code % 100)
|
||||
)
|
||||
else:
|
||||
url = ""
|
||||
set_classes(options)
|
||||
node = nodes.reference(rawtext, "%d %s" % (code, status), refuri=url, **options)
|
||||
return [node], []
|
||||
|
||||
|
||||
def http_method_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
|
||||
method = str(text).lower()
|
||||
if method not in DOCREFS:
|
||||
msg = inliner.reporter.error(
|
||||
"%s is not valid HTTP method" % method, lineno=lineno
|
||||
)
|
||||
prb = inliner.problematic(rawtext, rawtext, msg)
|
||||
return [prb], [msg]
|
||||
url = str(DOCREFS[method])
|
||||
node = nodes.reference(rawtext, method.upper(), refuri=url, **options)
|
||||
return [node], []
|
||||
|
||||
|
||||
class HTTPXRefRole(XRefRole):
|
||||
def __init__(self, method, **kwargs):
|
||||
XRefRole.__init__(self, **kwargs)
|
||||
self.method = method
|
||||
|
||||
def process_link(self, env, refnode, has_explicit_title, title, target):
|
||||
if not target.startswith("/"):
|
||||
pass
|
||||
if not has_explicit_title:
|
||||
title = self.method.upper() + " " + title
|
||||
return title, target
|
||||
|
||||
|
||||
class HTTPIndex(Index):
|
||||
|
||||
name = "routingtable"
|
||||
localname = "HTTP Routing Table"
|
||||
shortname = "routing table"
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
self.ignore = [
|
||||
[l for l in x.split("/") if l]
|
||||
for x in self.domain.env.config["http_index_ignore_prefixes"]
|
||||
]
|
||||
self.ignore.sort(key=lambda x: -len(x))
|
||||
|
||||
def grouping_prefix(self, path):
|
||||
letters = [x for x in path.split("/") if x]
|
||||
for prefix in self.ignore:
|
||||
if letters[: len(prefix)] == prefix:
|
||||
return "/" + "/".join(letters[: len(prefix) + 1])
|
||||
return "/{}".format(letters[0] if letters else "")
|
||||
|
||||
def generate(self, docnames=None):
|
||||
content = {}
|
||||
items = (
|
||||
(method, path, info)
|
||||
for method, routes in self.domain.routes.items()
|
||||
for path, info in routes.items()
|
||||
)
|
||||
items = sorted(items, key=lambda item: item[1])
|
||||
for method, path, info in items:
|
||||
entries = content.setdefault(self.grouping_prefix(path), [])
|
||||
entries.append(
|
||||
[
|
||||
method.upper() + " " + path,
|
||||
0,
|
||||
info[0],
|
||||
http_resource_anchor(method, path),
|
||||
"",
|
||||
"",
|
||||
info[1],
|
||||
]
|
||||
)
|
||||
content = sorted(content.items(), key=lambda k: k[0])
|
||||
return (content, True)
|
||||
|
||||
|
||||
class HTTPDomain(Domain):
|
||||
"""HTTP domain."""
|
||||
|
||||
name = "http"
|
||||
label = "HTTP"
|
||||
|
||||
object_types = {
|
||||
"options": ObjType("options", "options", "obj"),
|
||||
"head": ObjType("head", "head", "obj"),
|
||||
"post": ObjType("post", "post", "obj"),
|
||||
"get": ObjType("get", "get", "obj"),
|
||||
"put": ObjType("put", "put", "obj"),
|
||||
"patch": ObjType("patch", "patch", "obj"),
|
||||
"delete": ObjType("delete", "delete", "obj"),
|
||||
"trace": ObjType("trace", "trace", "obj"),
|
||||
}
|
||||
|
||||
directives = {
|
||||
"options": HTTPOptions,
|
||||
"head": HTTPHead,
|
||||
"post": HTTPPost,
|
||||
"get": HTTPGet,
|
||||
"put": HTTPPut,
|
||||
"patch": HTTPPatch,
|
||||
"delete": HTTPDelete,
|
||||
"trace": HTTPTrace,
|
||||
}
|
||||
|
||||
roles = {
|
||||
"options": HTTPXRefRole("options"),
|
||||
"head": HTTPXRefRole("head"),
|
||||
"post": HTTPXRefRole("post"),
|
||||
"get": HTTPXRefRole("get"),
|
||||
"put": HTTPXRefRole("put"),
|
||||
"patch": HTTPXRefRole("patch"),
|
||||
"delete": HTTPXRefRole("delete"),
|
||||
"trace": HTTPXRefRole("trace"),
|
||||
"statuscode": http_statuscode_role,
|
||||
"method": http_method_role,
|
||||
}
|
||||
|
||||
initial_data = {
|
||||
"options": {}, # path: (docname, synopsis)
|
||||
"head": {},
|
||||
"post": {},
|
||||
"get": {},
|
||||
"put": {},
|
||||
"patch": {},
|
||||
"delete": {},
|
||||
"trace": {},
|
||||
}
|
||||
|
||||
# indices = [HTTPIndex]
|
||||
indices = []
|
||||
|
||||
@property
|
||||
def routes(self):
|
||||
return {key: self.data[key] for key in self.object_types}
|
||||
|
||||
def clear_doc(self, docname):
|
||||
for typ, routes in self.routes.items():
|
||||
for path, info in list(routes.items()):
|
||||
if info[0] == docname:
|
||||
del routes[path]
|
||||
|
||||
def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode):
|
||||
try:
|
||||
info = self.data[str(typ)][target]
|
||||
except KeyError:
|
||||
return
|
||||
else:
|
||||
anchor = http_resource_anchor(typ, target)
|
||||
title = typ.upper() + " " + target
|
||||
return make_refnode(builder, fromdocname, info[0], anchor, contnode, title)
|
||||
|
||||
def get_objects(self):
|
||||
for method, routes in self.routes.items():
|
||||
for path, info in routes.items():
|
||||
anchor = http_resource_anchor(method, path)
|
||||
yield (path, path, method, info[0], anchor, 1)
|
||||
|
||||
|
||||
class HTTPLexer(RegexLexer):
|
||||
"""Lexer for HTTP sessions."""
|
||||
|
||||
name = "HTTP"
|
||||
aliases = ["http"]
|
||||
|
||||
flags = re.DOTALL
|
||||
|
||||
def header_callback(self, match):
|
||||
if match.group(1).lower() == "content-type":
|
||||
content_type = match.group(5).strip()
|
||||
if ";" in content_type:
|
||||
content_type = content_type[: content_type.find(";")].strip()
|
||||
self.content_type = content_type
|
||||
yield match.start(1), Name.Attribute, match.group(1)
|
||||
yield match.start(2), Text, match.group(2)
|
||||
yield match.start(3), Operator, match.group(3)
|
||||
yield match.start(4), Text, match.group(4)
|
||||
yield match.start(5), Literal, match.group(5)
|
||||
yield match.start(6), Text, match.group(6)
|
||||
|
||||
def continuous_header_callback(self, match):
|
||||
yield match.start(1), Text, match.group(1)
|
||||
yield match.start(2), Literal, match.group(2)
|
||||
yield match.start(3), Text, match.group(3)
|
||||
|
||||
def content_callback(self, match):
|
||||
content_type = getattr(self, "content_type", None)
|
||||
content = match.group()
|
||||
offset = match.start()
|
||||
if content_type:
|
||||
from pygments.lexers import get_lexer_for_mimetype
|
||||
|
||||
try:
|
||||
lexer = get_lexer_for_mimetype(content_type)
|
||||
except ClassNotFound:
|
||||
pass
|
||||
else:
|
||||
for idx, token, value in lexer.get_tokens_unprocessed(content):
|
||||
yield offset + idx, token, value
|
||||
return
|
||||
yield offset, Text, content
|
||||
|
||||
tokens = {
|
||||
"root": [
|
||||
(
|
||||
r"(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS|TRACE)( +)([^ ]+)( +)"
|
||||
r"(HTTPS?)(/)(1\.[01])(\r?\n|$)",
|
||||
bygroups(
|
||||
Name.Function,
|
||||
Text,
|
||||
Name.Namespace,
|
||||
Text,
|
||||
Keyword.Reserved,
|
||||
Operator,
|
||||
Number,
|
||||
Text,
|
||||
),
|
||||
"headers",
|
||||
),
|
||||
(
|
||||
r"(HTTPS?)(/)(1\.[01])( +)(\d{3})( +)([^\r\n]+)(\r?\n|$)",
|
||||
bygroups(
|
||||
Keyword.Reserved,
|
||||
Operator,
|
||||
Number,
|
||||
Text,
|
||||
Number,
|
||||
Text,
|
||||
Name.Exception,
|
||||
Text,
|
||||
),
|
||||
"headers",
|
||||
),
|
||||
],
|
||||
"headers": [
|
||||
(r"([^\s:]+)( *)(:)( *)([^\r\n]+)(\r?\n|$)", header_callback),
|
||||
(r"([\t ]+)([^\r\n]+)(\r?\n|$)", continuous_header_callback),
|
||||
(r"\r?\n", Text, "content"),
|
||||
],
|
||||
"content": [(r".+", content_callback)],
|
||||
}
|
||||
|
||||
|
||||
def setup(app):
|
||||
app.add_domain(HTTPDomain)
|
||||
try:
|
||||
get_lexer_by_name("http")
|
||||
except ClassNotFound:
|
||||
app.add_lexer("http", HTTPLexer())
|
||||
app.add_config_value("http_index_ignore_prefixes", [], None)
|
|
@ -1,150 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# Taken from sphinx-contrib
|
||||
# https://bitbucket.org/birkenfeld/sphinx-contrib/src/a3d904f8ab24/youtube
|
||||
|
||||
# If not otherwise noted, the extensions in this package are licensed
|
||||
# under the following license.
|
||||
#
|
||||
# Copyright (c) 2009 by the contributors (see AUTHORS file).
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# * Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
import re
|
||||
|
||||
from docutils import nodes
|
||||
from docutils.parsers.rst import directives
|
||||
|
||||
try:
|
||||
from sphinx.util.compat import Directive
|
||||
except ImportError:
|
||||
from docutils.parsers.rst import Directive
|
||||
|
||||
CONTROL_HEIGHT = 30
|
||||
|
||||
|
||||
def get_size(d, key):
|
||||
if key not in d:
|
||||
return None
|
||||
m = re.match(r"(\d+)(|%|px)$", d[key])
|
||||
if not m:
|
||||
raise ValueError("invalid size %r" % d[key])
|
||||
return int(m.group(1)), m.group(2) or "px"
|
||||
|
||||
|
||||
def css(d):
|
||||
return "; ".join(sorted("%s: %s" % kv for kv in d.iteritems()))
|
||||
|
||||
|
||||
class youtube(nodes.General, nodes.Element):
|
||||
pass
|
||||
|
||||
|
||||
def visit_youtube_node(self, node):
|
||||
aspect = node["aspect"]
|
||||
width = node["width"]
|
||||
height = node["height"]
|
||||
|
||||
if aspect is None:
|
||||
aspect = 16, 9
|
||||
|
||||
if (height is None) and (width is not None) and (width[1] == "%"):
|
||||
style = {
|
||||
"padding-top": "%dpx" % CONTROL_HEIGHT,
|
||||
"padding-bottom": "%f%%" % (width[0] * aspect[1] / aspect[0]),
|
||||
"width": "%d%s" % width,
|
||||
"position": "relative",
|
||||
}
|
||||
self.body.append(self.starttag(node, "div", style=css(style)))
|
||||
style = {
|
||||
"position": "absolute",
|
||||
"top": "0",
|
||||
"left": "0",
|
||||
"width": "100%",
|
||||
"height": "100%",
|
||||
"border": "0",
|
||||
}
|
||||
attrs = {
|
||||
"src": "http://www.youtube.com/embed/%s" % node["id"],
|
||||
"style": css(style),
|
||||
}
|
||||
self.body.append(self.starttag(node, "iframe", **attrs))
|
||||
self.body.append("</iframe></div>")
|
||||
else:
|
||||
if width is None:
|
||||
if height is None:
|
||||
width = 560, "px"
|
||||
else:
|
||||
width = height[0] * aspect[0] / aspect[1], "px"
|
||||
if height is None:
|
||||
height = width[0] * aspect[1] / aspect[0], "px"
|
||||
style = {
|
||||
"width": "%d%s" % width,
|
||||
"height": "%d%s" % (height[0] + CONTROL_HEIGHT, height[1]),
|
||||
"border": "0",
|
||||
}
|
||||
attrs = {
|
||||
"src": "http://www.youtube.com/embed/%s" % node["id"],
|
||||
"style": css(style),
|
||||
}
|
||||
self.body.append(self.starttag(node, "iframe", **attrs))
|
||||
self.body.append("</iframe>")
|
||||
|
||||
|
||||
def depart_youtube_node(self, node):
|
||||
pass
|
||||
|
||||
|
||||
class YouTube(Directive):
|
||||
has_content = True
|
||||
required_arguments = 1
|
||||
optional_arguments = 0
|
||||
final_argument_whitespace = False
|
||||
option_spec = {
|
||||
"width": directives.unchanged,
|
||||
"height": directives.unchanged,
|
||||
"aspect": directives.unchanged,
|
||||
}
|
||||
|
||||
def run(self):
|
||||
if "aspect" in self.options:
|
||||
aspect = self.options.get("aspect")
|
||||
m = re.match(r"(\d+):(\d+)", aspect)
|
||||
if m is None:
|
||||
raise ValueError("invalid aspect ratio %r" % aspect)
|
||||
aspect = tuple(int(x) for x in m.groups())
|
||||
else:
|
||||
aspect = None
|
||||
width = get_size(self.options, "width")
|
||||
height = get_size(self.options, "height")
|
||||
return [
|
||||
youtube(id=self.arguments[0], aspect=aspect, width=width, height=height)
|
||||
]
|
||||
|
||||
|
||||
def setup(app):
|
||||
app.add_node(youtube, html=(visit_youtube_node, depart_youtube_node))
|
||||
app.add_directive("youtube", YouTube)
|
23
doc/conf.py
23
doc/conf.py
|
@ -55,14 +55,13 @@ on_saltstack = "SALT_ON_SALTSTACK" in os.environ
|
|||
project = "Salt"
|
||||
# This is the default branch on GitHub for the Salt project
|
||||
repo_primary_branch = "master"
|
||||
major_version = str(salt.version.__saltstack_version__.major)
|
||||
latest_release = major_version
|
||||
if salt.version.__saltstack_version__.can_have_dot_zero(major_version):
|
||||
latest_release = ".".join([str(x) for x in salt.version.__saltstack_version__.info])
|
||||
latest_release = (
|
||||
# Use next unreleased version if LATEST_RELEASE is undefined env var
|
||||
os.environ.get("LATEST_RELEASE", latest_release)
|
||||
) # latest release (3003)
|
||||
if "LATEST_RELEASE" not in os.environ:
|
||||
salt_version = salt.version.__saltstack_version__
|
||||
else:
|
||||
salt_version = salt.version.SaltStackVersion.parse(os.environ["LATEST_RELEASE"])
|
||||
|
||||
major_version = str(salt_version.major)
|
||||
latest_release = ".".join([str(x) for x in salt_version.info])
|
||||
previous_release = os.environ.get(
|
||||
"PREVIOUS_RELEASE", "previous_release"
|
||||
) # latest release from previous branch (3002.5)
|
||||
|
@ -149,8 +148,7 @@ extensions = [
|
|||
"sphinx.ext.extlinks",
|
||||
"sphinx.ext.imgconverter",
|
||||
"sphinx.ext.intersphinx",
|
||||
"httpdomain",
|
||||
"youtube",
|
||||
"sphinxcontrib.httpdomain",
|
||||
"saltrepo",
|
||||
"myst_parser",
|
||||
#'saltautodoc', # Must be AFTER autodoc
|
||||
|
@ -170,10 +168,7 @@ autosummary_generate = True
|
|||
autosummary_generate_overwrite = False
|
||||
|
||||
# In case building docs throws import errors, please add the top level package name below
|
||||
autodoc_mock_imports = [
|
||||
"cherrypy",
|
||||
"xmltodict",
|
||||
]
|
||||
autodoc_mock_imports = []
|
||||
|
||||
# strip git rev as there won't necessarily be a release based on it
|
||||
stripped_release = re.sub(r"-\d+-g[0-9a-f]+$", "", release)
|
||||
|
|
|
@ -4,3 +4,4 @@ salt.aggregation
|
|||
|
||||
.. automodule:: salt.utils.aggregation
|
||||
:members:
|
||||
:noindex: salt.utils.odict.OrderedDict
|
||||
|
|
|
@ -6,6 +6,9 @@ serializer modules
|
|||
|
||||
.. currentmodule:: salt.serializers
|
||||
|
||||
.. automodule:: salt.serializers
|
||||
:members:
|
||||
|
||||
.. autosummary::
|
||||
:toctree:
|
||||
:template: autosummary.rst.tmpl
|
||||
|
|
|
@ -3,3 +3,4 @@ salt.serializers.yaml
|
|||
|
||||
.. automodule:: salt.serializers.yaml
|
||||
:members:
|
||||
:noindex: yaml.constructor.ConstructorError
|
||||
|
|
|
@ -3,3 +3,4 @@ salt.serializers.yamlex
|
|||
|
||||
.. automodule:: salt.serializers.yamlex
|
||||
:members:
|
||||
:noindex: yaml.constructor.ConstructorError
|
||||
|
|
|
@ -3,3 +3,5 @@
|
|||
sphinx>=3.5.1; python_version < '3.9'
|
||||
sphinx>=6.1.0; python_version >= '3.9'
|
||||
myst-docutils[linkify]
|
||||
sphinxcontrib.httpdomain
|
||||
cherrypy
|
||||
|
|
|
@ -16,6 +16,14 @@ chardet==3.0.4
|
|||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
# requests
|
||||
cheroot==8.5.2
|
||||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
# cherrypy
|
||||
cherrypy==18.6.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
# -r requirements/static/ci/docs.in
|
||||
contextvars==2.4
|
||||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
|
@ -36,6 +44,24 @@ immutables==0.15
|
|||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
# contextvars
|
||||
jaraco.classes==3.2.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
# jaraco.collections
|
||||
jaraco.collections==3.4.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
# cherrypy
|
||||
jaraco.functools==2.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
# cheroot
|
||||
# jaraco.text
|
||||
# tempora
|
||||
jaraco.text==3.5.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
# jaraco.collections
|
||||
jinja2==3.1.2
|
||||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
|
@ -65,6 +91,13 @@ mdit-py-plugins==0.3.3
|
|||
# via myst-docutils
|
||||
mdurl==0.1.2
|
||||
# via markdown-it-py
|
||||
more-itertools==5.0.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
# cheroot
|
||||
# cherrypy
|
||||
# jaraco.classes
|
||||
# jaraco.functools
|
||||
msgpack==1.0.2
|
||||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
|
@ -76,6 +109,10 @@ packaging==22.0
|
|||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
# -r requirements/base.txt
|
||||
# sphinx
|
||||
portend==2.4
|
||||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
# cherrypy
|
||||
psutil==5.8.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
|
@ -90,6 +127,7 @@ pytz==2022.1
|
|||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
# babel
|
||||
# tempora
|
||||
pyyaml==5.4.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
|
@ -104,10 +142,18 @@ requests==2.25.1
|
|||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
# -r requirements/base.txt
|
||||
# sphinx
|
||||
six==1.16.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
# cheroot
|
||||
# more-itertools
|
||||
# sphinxcontrib.httpdomain
|
||||
snowballstemmer==2.1.0
|
||||
# via sphinx
|
||||
sphinx==6.1.3 ; python_version >= "3.9"
|
||||
# via -r requirements/static/ci/docs.in
|
||||
# via
|
||||
# -r requirements/static/ci/docs.in
|
||||
# sphinxcontrib.httpdomain
|
||||
sphinxcontrib-applehelp==1.0.2
|
||||
# via sphinx
|
||||
sphinxcontrib-devhelp==1.0.2
|
||||
|
@ -120,6 +166,12 @@ sphinxcontrib-qthelp==1.0.3
|
|||
# via sphinx
|
||||
sphinxcontrib-serializinghtml==1.1.5
|
||||
# via sphinx
|
||||
sphinxcontrib.httpdomain==1.8.1
|
||||
# via -r requirements/static/ci/docs.in
|
||||
tempora==4.1.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
# portend
|
||||
typing-extensions==4.2.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
|
@ -130,3 +182,10 @@ urllib3==1.26.6
|
|||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
# requests
|
||||
zc.lockfile==1.4
|
||||
# via
|
||||
# -c requirements/static/ci/py3.10/linux.txt
|
||||
# cherrypy
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
# setuptools
|
||||
|
|
|
@ -20,6 +20,14 @@ chardet==3.0.4
|
|||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# requests
|
||||
cheroot==8.5.2
|
||||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# cherrypy
|
||||
cherrypy==18.6.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# -r requirements/static/ci/docs.in
|
||||
contextvars==2.4
|
||||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
|
@ -40,6 +48,32 @@ immutables==0.14
|
|||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# contextvars
|
||||
importlib-metadata==4.6.4
|
||||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# importlib-resources
|
||||
importlib-resources==1.5.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# jaraco.text
|
||||
jaraco.classes==3.2.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# jaraco.collections
|
||||
jaraco.collections==3.4.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# cherrypy
|
||||
jaraco.functools==2.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# cheroot
|
||||
# jaraco.text
|
||||
# tempora
|
||||
jaraco.text==3.5.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# jaraco.collections
|
||||
jinja2==3.0.3
|
||||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
|
@ -69,6 +103,13 @@ mdit-py-plugins==0.3.0
|
|||
# via myst-docutils
|
||||
mdurl==0.1.0
|
||||
# via markdown-it-py
|
||||
more-itertools==5.0.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# cheroot
|
||||
# cherrypy
|
||||
# jaraco.classes
|
||||
# jaraco.functools
|
||||
msgpack==1.0.2
|
||||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
|
@ -80,6 +121,10 @@ packaging==21.3
|
|||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# -r requirements/base.txt
|
||||
# sphinx
|
||||
portend==2.4
|
||||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# cherrypy
|
||||
psutil==5.8.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
|
@ -98,6 +143,7 @@ pytz==2022.1
|
|||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# babel
|
||||
# tempora
|
||||
pyyaml==5.4.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
|
@ -112,10 +158,18 @@ requests==2.25.1
|
|||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# -r requirements/base.txt
|
||||
# sphinx
|
||||
six==1.16.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# cheroot
|
||||
# more-itertools
|
||||
# sphinxcontrib.httpdomain
|
||||
snowballstemmer==2.1.0
|
||||
# via sphinx
|
||||
sphinx==3.5.2 ; python_version < "3.9"
|
||||
# via -r requirements/static/ci/docs.in
|
||||
# via
|
||||
# -r requirements/static/ci/docs.in
|
||||
# sphinxcontrib.httpdomain
|
||||
sphinxcontrib-applehelp==1.0.2
|
||||
# via sphinx
|
||||
sphinxcontrib-devhelp==1.0.2
|
||||
|
@ -128,9 +182,16 @@ sphinxcontrib-qthelp==1.0.3
|
|||
# via sphinx
|
||||
sphinxcontrib-serializinghtml==1.1.4
|
||||
# via sphinx
|
||||
sphinxcontrib.httpdomain==1.8.1
|
||||
# via -r requirements/static/ci/docs.in
|
||||
tempora==4.1.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# portend
|
||||
typing-extensions==3.10.0.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# importlib-metadata
|
||||
# markdown-it-py
|
||||
uc-micro-py==1.0.1
|
||||
# via linkify-it-py
|
||||
|
@ -138,6 +199,15 @@ urllib3==1.26.6
|
|||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# requests
|
||||
zc.lockfile==1.4
|
||||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# cherrypy
|
||||
zipp==3.5.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.6/linux.txt
|
||||
# importlib-metadata
|
||||
# importlib-resources
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
# setuptools
|
||||
|
|
|
@ -16,6 +16,14 @@ chardet==3.0.4
|
|||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
# requests
|
||||
cheroot==8.5.2
|
||||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
# cherrypy
|
||||
cherrypy==18.6.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
# -r requirements/static/ci/docs.in
|
||||
contextvars==2.4
|
||||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
|
@ -36,6 +44,24 @@ immutables==0.15
|
|||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
# contextvars
|
||||
jaraco.classes==3.2.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
# jaraco.collections
|
||||
jaraco.collections==3.4.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
# cherrypy
|
||||
jaraco.functools==2.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
# cheroot
|
||||
# jaraco.text
|
||||
# tempora
|
||||
jaraco.text==3.5.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
# jaraco.collections
|
||||
jinja2==3.1.2
|
||||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
|
@ -65,6 +91,13 @@ mdit-py-plugins==0.3.3
|
|||
# via myst-docutils
|
||||
mdurl==0.1.2
|
||||
# via markdown-it-py
|
||||
more-itertools==5.0.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
# cheroot
|
||||
# cherrypy
|
||||
# jaraco.classes
|
||||
# jaraco.functools
|
||||
msgpack==1.0.2
|
||||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
|
@ -76,6 +109,10 @@ packaging==21.3
|
|||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
# -r requirements/base.txt
|
||||
# sphinx
|
||||
portend==2.4
|
||||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
# cherrypy
|
||||
psutil==5.8.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
|
@ -94,6 +131,7 @@ pytz==2022.1
|
|||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
# babel
|
||||
# tempora
|
||||
pyyaml==5.4.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
|
@ -108,10 +146,18 @@ requests==2.25.1
|
|||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
# -r requirements/base.txt
|
||||
# sphinx
|
||||
six==1.16.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
# cheroot
|
||||
# more-itertools
|
||||
# sphinxcontrib.httpdomain
|
||||
snowballstemmer==2.1.0
|
||||
# via sphinx
|
||||
sphinx==3.5.2 ; python_version < "3.9"
|
||||
# via -r requirements/static/ci/docs.in
|
||||
# via
|
||||
# -r requirements/static/ci/docs.in
|
||||
# sphinxcontrib.httpdomain
|
||||
sphinxcontrib-applehelp==1.0.2
|
||||
# via sphinx
|
||||
sphinxcontrib-devhelp==1.0.2
|
||||
|
@ -124,6 +170,12 @@ sphinxcontrib-qthelp==1.0.3
|
|||
# via sphinx
|
||||
sphinxcontrib-serializinghtml==1.1.4
|
||||
# via sphinx
|
||||
sphinxcontrib.httpdomain==1.8.1
|
||||
# via -r requirements/static/ci/docs.in
|
||||
tempora==4.1.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
# portend
|
||||
typing-extensions==3.10.0.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
|
@ -135,6 +187,10 @@ urllib3==1.26.6
|
|||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
# requests
|
||||
zc.lockfile==1.4
|
||||
# via
|
||||
# -c requirements/static/ci/py3.7/linux.txt
|
||||
# cherrypy
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
# setuptools
|
||||
|
|
|
@ -16,6 +16,14 @@ chardet==3.0.4
|
|||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
# requests
|
||||
cheroot==8.5.2
|
||||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
# cherrypy
|
||||
cherrypy==18.6.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
# -r requirements/static/ci/docs.in
|
||||
contextvars==2.4
|
||||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
|
@ -36,6 +44,24 @@ immutables==0.15
|
|||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
# contextvars
|
||||
jaraco.classes==3.2.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
# jaraco.collections
|
||||
jaraco.collections==3.4.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
# cherrypy
|
||||
jaraco.functools==2.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
# cheroot
|
||||
# jaraco.text
|
||||
# tempora
|
||||
jaraco.text==3.5.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
# jaraco.collections
|
||||
jinja2==3.1.2
|
||||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
|
@ -65,6 +91,13 @@ mdit-py-plugins==0.3.3
|
|||
# via myst-docutils
|
||||
mdurl==0.1.2
|
||||
# via markdown-it-py
|
||||
more-itertools==5.0.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
# cheroot
|
||||
# cherrypy
|
||||
# jaraco.classes
|
||||
# jaraco.functools
|
||||
msgpack==1.0.2
|
||||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
|
@ -76,6 +109,10 @@ packaging==22.0
|
|||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
# -r requirements/base.txt
|
||||
# sphinx
|
||||
portend==2.4
|
||||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
# cherrypy
|
||||
psutil==5.8.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
|
@ -90,6 +127,7 @@ pytz==2022.1
|
|||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
# babel
|
||||
# tempora
|
||||
pyyaml==5.4.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
|
@ -104,10 +142,18 @@ requests==2.25.1
|
|||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
# -r requirements/base.txt
|
||||
# sphinx
|
||||
six==1.16.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
# cheroot
|
||||
# more-itertools
|
||||
# sphinxcontrib.httpdomain
|
||||
snowballstemmer==2.1.0
|
||||
# via sphinx
|
||||
sphinx==3.5.2 ; python_version < "3.9"
|
||||
# via -r requirements/static/ci/docs.in
|
||||
# via
|
||||
# -r requirements/static/ci/docs.in
|
||||
# sphinxcontrib.httpdomain
|
||||
sphinxcontrib-applehelp==1.0.2
|
||||
# via sphinx
|
||||
sphinxcontrib-devhelp==1.0.2
|
||||
|
@ -120,6 +166,12 @@ sphinxcontrib-qthelp==1.0.3
|
|||
# via sphinx
|
||||
sphinxcontrib-serializinghtml==1.1.4
|
||||
# via sphinx
|
||||
sphinxcontrib.httpdomain==1.8.1
|
||||
# via -r requirements/static/ci/docs.in
|
||||
tempora==4.1.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
# portend
|
||||
typing-extensions==4.2.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
|
@ -130,6 +182,10 @@ urllib3==1.26.6
|
|||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
# requests
|
||||
zc.lockfile==1.4
|
||||
# via
|
||||
# -c requirements/static/ci/py3.8/linux.txt
|
||||
# cherrypy
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
# setuptools
|
||||
|
|
|
@ -16,6 +16,14 @@ chardet==3.0.4
|
|||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
# requests
|
||||
cheroot==8.5.2
|
||||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
# cherrypy
|
||||
cherrypy==18.6.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
# -r requirements/static/ci/docs.in
|
||||
contextvars==2.4
|
||||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
|
@ -40,6 +48,24 @@ importlib-metadata==6.0.0
|
|||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
# sphinx
|
||||
jaraco.classes==3.2.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
# jaraco.collections
|
||||
jaraco.collections==3.4.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
# cherrypy
|
||||
jaraco.functools==2.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
# cheroot
|
||||
# jaraco.text
|
||||
# tempora
|
||||
jaraco.text==3.5.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
# jaraco.collections
|
||||
jinja2==3.1.2
|
||||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
|
@ -69,6 +95,13 @@ mdit-py-plugins==0.3.3
|
|||
# via myst-docutils
|
||||
mdurl==0.1.2
|
||||
# via markdown-it-py
|
||||
more-itertools==5.0.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
# cheroot
|
||||
# cherrypy
|
||||
# jaraco.classes
|
||||
# jaraco.functools
|
||||
msgpack==1.0.2
|
||||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
|
@ -80,6 +113,10 @@ packaging==22.0
|
|||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
# -r requirements/base.txt
|
||||
# sphinx
|
||||
portend==2.4
|
||||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
# cherrypy
|
||||
psutil==5.8.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
|
@ -94,6 +131,7 @@ pytz==2022.1
|
|||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
# babel
|
||||
# tempora
|
||||
pyyaml==5.4.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
|
@ -108,10 +146,18 @@ requests==2.25.1
|
|||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
# -r requirements/base.txt
|
||||
# sphinx
|
||||
six==1.16.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
# cheroot
|
||||
# more-itertools
|
||||
# sphinxcontrib.httpdomain
|
||||
snowballstemmer==2.1.0
|
||||
# via sphinx
|
||||
sphinx==6.1.3 ; python_version >= "3.9"
|
||||
# via -r requirements/static/ci/docs.in
|
||||
# via
|
||||
# -r requirements/static/ci/docs.in
|
||||
# sphinxcontrib.httpdomain
|
||||
sphinxcontrib-applehelp==1.0.2
|
||||
# via sphinx
|
||||
sphinxcontrib-devhelp==1.0.2
|
||||
|
@ -124,6 +170,12 @@ sphinxcontrib-qthelp==1.0.3
|
|||
# via sphinx
|
||||
sphinxcontrib-serializinghtml==1.1.5
|
||||
# via sphinx
|
||||
sphinxcontrib.httpdomain==1.8.1
|
||||
# via -r requirements/static/ci/docs.in
|
||||
tempora==4.1.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
# portend
|
||||
typing-extensions==4.2.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
|
@ -134,7 +186,14 @@ urllib3==1.26.6
|
|||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
# requests
|
||||
zc.lockfile==1.4
|
||||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
# cherrypy
|
||||
zipp==3.5.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.9/linux.txt
|
||||
# importlib-metadata
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
# setuptools
|
||||
|
|
Loading…
Add table
Reference in a new issue