diff --git a/lib/spack/external/_vendoring/jsonschema/tests/__init__.py b/lib/spack/external/_vendoring/__init__.py similarity index 100% rename from lib/spack/external/_vendoring/jsonschema/tests/__init__.py rename to lib/spack/external/_vendoring/__init__.py diff --git a/lib/spack/external/_vendoring/altgraph/Dot.py b/lib/spack/external/_vendoring/altgraph/Dot.py index f265a7121c0..9571bda96e5 100644 --- a/lib/spack/external/_vendoring/altgraph/Dot.py +++ b/lib/spack/external/_vendoring/altgraph/Dot.py @@ -1,8 +1,8 @@ """ -altgraph.Dot - Interface to the dot language +_vendoring.altgraph.Dot - Interface to the dot language ============================================ -The :py:mod:`~altgraph.Dot` module provides a simple interface to the +The :py:mod:`~_vendoring.altgraph.Dot` module provides a simple interface to the file format used in the `graphviz `_ program. The module is intended to offload the most tedious part of the process @@ -20,7 +20,7 @@ Here is a typical usage:: - from altgraph import Graph, Dot + from _vendoring.altgraph import Graph, Dot # create a graph edges = [ (1,2), (1,3), (3,4), (3,5), (4,5), (5,4) ] @@ -77,7 +77,7 @@ .. note:: - dotty (invoked via :py:func:`~altgraph.Dot.display`) may not be able to + dotty (invoked via :py:func:`~_vendoring.altgraph.Dot.display`) may not be able to display all graphics styles. To verify the output save it to an image file and look at it that way. @@ -111,7 +111,7 @@ import os import warnings -from altgraph import GraphError +from _vendoring.altgraph import GraphError class Dot(object): diff --git a/lib/spack/external/_vendoring/altgraph/Graph.py b/lib/spack/external/_vendoring/altgraph/Graph.py index 8088007abdf..c772fc3faf2 100644 --- a/lib/spack/external/_vendoring/altgraph/Graph.py +++ b/lib/spack/external/_vendoring/altgraph/Graph.py @@ -1,5 +1,5 @@ """ -altgraph.Graph - Base Graph class +_vendoring.altgraph.Graph - Base Graph class ================================= .. @@ -15,7 +15,7 @@ from collections import deque -from altgraph import GraphError +from _vendoring.altgraph import GraphError class Graph(object): diff --git a/lib/spack/external/_vendoring/altgraph/GraphAlgo.py b/lib/spack/external/_vendoring/altgraph/GraphAlgo.py index f93e73dcda1..c4865cfccd7 100644 --- a/lib/spack/external/_vendoring/altgraph/GraphAlgo.py +++ b/lib/spack/external/_vendoring/altgraph/GraphAlgo.py @@ -1,8 +1,8 @@ """ -altgraph.GraphAlgo - Graph algorithms +_vendoring.altgraph.GraphAlgo - Graph algorithms ===================================== """ -from altgraph import GraphError +from _vendoring.altgraph import GraphError def dijkstra(graph, start, end=None): @@ -25,7 +25,7 @@ def dijkstra(graph, start, end=None): and will raise an exception if it discovers that a negative edge has caused it to make a mistake. - Adapted to altgraph by Istvan Albert, Pennsylvania State University - + Adapted to _vendoring.altgraph by Istvan Albert, Pennsylvania State University - June, 9 2004 """ D = {} # dictionary of final distances diff --git a/lib/spack/external/_vendoring/altgraph/GraphStat.py b/lib/spack/external/_vendoring/altgraph/GraphStat.py index 577464b41e8..ed284f3105f 100644 --- a/lib/spack/external/_vendoring/altgraph/GraphStat.py +++ b/lib/spack/external/_vendoring/altgraph/GraphStat.py @@ -1,5 +1,5 @@ """ -altgraph.GraphStat - Functions providing various graph statistics +_vendoring.altgraph.GraphStat - Functions providing various graph statistics ================================================================= """ diff --git a/lib/spack/external/_vendoring/altgraph/GraphUtil.py b/lib/spack/external/_vendoring/altgraph/GraphUtil.py index cfd6a34f3c5..ee687fbb364 100644 --- a/lib/spack/external/_vendoring/altgraph/GraphUtil.py +++ b/lib/spack/external/_vendoring/altgraph/GraphUtil.py @@ -1,17 +1,17 @@ """ -altgraph.GraphUtil - Utility classes and functions +_vendoring.altgraph.GraphUtil - Utility classes and functions ================================================== """ import random from collections import deque -from altgraph import Graph, GraphError +from _vendoring.altgraph import Graph, GraphError def generate_random_graph(node_num, edge_num, self_loops=False, multi_edges=False): """ - Generates and returns a :py:class:`~altgraph.Graph.Graph` instance with + Generates and returns a :py:class:`~_vendoring.altgraph.Graph.Graph` instance with *node_num* nodes randomly connected by *edge_num* edges. """ g = Graph.Graph() @@ -52,7 +52,7 @@ def generate_random_graph(node_num, edge_num, self_loops=False, multi_edges=Fals def generate_scale_free_graph(steps, growth_num, self_loops=False, multi_edges=False): """ - Generates and returns a :py:class:`~altgraph.Graph.Graph` instance that + Generates and returns a :py:class:`~_vendoring.altgraph.Graph.Graph` instance that will have *steps* \\* *growth_num* nodes and a scale free (powerlaw) connectivity. Starting with a fully connected graph with *growth_num* nodes at every step *growth_num* nodes are added to the graph and are diff --git a/lib/spack/external/_vendoring/altgraph/ObjectGraph.py b/lib/spack/external/_vendoring/altgraph/ObjectGraph.py index 379b05b1293..04c73367445 100644 --- a/lib/spack/external/_vendoring/altgraph/ObjectGraph.py +++ b/lib/spack/external/_vendoring/altgraph/ObjectGraph.py @@ -1,14 +1,14 @@ """ -altgraph.ObjectGraph - Graph of objects with an identifier +_vendoring.altgraph.ObjectGraph - Graph of objects with an identifier ========================================================== A graph of objects that have a "graphident" attribute. graphident is the key for the object in the graph """ -from altgraph import GraphError -from altgraph.Graph import Graph -from altgraph.GraphUtil import filter_stack +from _vendoring.altgraph import GraphError +from _vendoring.altgraph.Graph import Graph +from _vendoring.altgraph.GraphUtil import filter_stack class ObjectGraph(object): diff --git a/lib/spack/external/_vendoring/altgraph/__init__.py b/lib/spack/external/_vendoring/altgraph/__init__.py index a56342438bb..fceaff449bf 100644 --- a/lib/spack/external/_vendoring/altgraph/__init__.py +++ b/lib/spack/external/_vendoring/altgraph/__init__.py @@ -1,18 +1,18 @@ """ -altgraph - a python graph library +_vendoring.altgraph - a python graph library ================================= -altgraph is a fork of `graphlib `_ tailored +_vendoring.altgraph is a fork of `graphlib `_ tailored to use newer Python 2.3+ features, including additional support used by the -py2app suite (modulegraph and macholib, specifically). +py2app suite (modulegraph and _vendoring.macholib, specifically). -altgraph is a python based graph (network) representation and manipulation +_vendoring.altgraph is a python based graph (network) representation and manipulation package. It has started out as an extension to the `graph_lib module `_ written by Nathan Denny it has been significantly optimized and expanded. -The :class:`altgraph.Graph.Graph` class is loosely modeled after the +The :class:`_vendoring.altgraph.Graph.Graph` class is loosely modeled after the `LEDA `_ (Library of Efficient Datatypes) representation. The library includes methods for constructing graphs, BFS and DFS traversals, @@ -22,22 +22,22 @@ The package contains the following modules: - - the :py:mod:`altgraph.Graph` module contains the - :class:`~altgraph.Graph.Graph` class that stores the graph data + - the :py:mod:`_vendoring.altgraph.Graph` module contains the + :class:`~_vendoring.altgraph.Graph.Graph` class that stores the graph data - - the :py:mod:`altgraph.GraphAlgo` module implements graph algorithms - operating on graphs (:py:class:`~altgraph.Graph.Graph`} instances) + - the :py:mod:`_vendoring.altgraph.GraphAlgo` module implements graph algorithms + operating on graphs (:py:class:`~_vendoring.altgraph.Graph.Graph`} instances) - - the :py:mod:`altgraph.GraphStat` module contains functions for + - the :py:mod:`_vendoring.altgraph.GraphStat` module contains functions for computing statistical measures on graphs - - the :py:mod:`altgraph.GraphUtil` module contains functions for + - the :py:mod:`_vendoring.altgraph.GraphUtil` module contains functions for generating, reading and saving graphs - - the :py:mod:`altgraph.Dot` module contains functions for displaying + - the :py:mod:`_vendoring.altgraph.Dot` module contains functions for displaying graphs via `graphviz `_ - - the :py:mod:`altgraph.ObjectGraph` module implements a graph of + - the :py:mod:`_vendoring.altgraph.ObjectGraph` module implements a graph of objects with a unique identifier Installation @@ -62,7 +62,7 @@ Lets assume that we want to analyze the graph below (links to the full picture) GRAPH_IMG. Our script then might look the following way:: - from altgraph import Graph, GraphAlgo, Dot + from _vendoring.altgraph import Graph, GraphAlgo, Dot # these are the edges edges = [ (1,2), (2,4), (1,3), (2,4), (3,4), (4,5), (6,5), @@ -141,7 +141,7 @@ """ import pkg_resources -__version__ = pkg_resources.require("altgraph")[0].version +__version__ = pkg_resources.require("_vendoring.altgraph")[0].version class GraphError(ValueError): diff --git a/lib/spack/external/_vendoring/attr/_make.py b/lib/spack/external/_vendoring/attr/_make.py index 4d1afe3fc8a..0c2662cfeb2 100644 --- a/lib/spack/external/_vendoring/attr/_make.py +++ b/lib/spack/external/_vendoring/attr/_make.py @@ -38,7 +38,7 @@ "typing.ClassVar", "t.ClassVar", "ClassVar", - "typing_extensions.ClassVar", + "_vendoring.typing_extensions.ClassVar", ) # we don't use a double-underscore prefix because that triggers # name mangling when trying to create a slot for the field diff --git a/lib/spack/external/_vendoring/attrs/__init__.py b/lib/spack/external/_vendoring/attrs/__init__.py index a704b8b56bc..7c328dbab32 100644 --- a/lib/spack/external/_vendoring/attrs/__init__.py +++ b/lib/spack/external/_vendoring/attrs/__init__.py @@ -1,6 +1,6 @@ # SPDX-License-Identifier: MIT -from attr import ( +from _vendoring.attr import ( NOTHING, Attribute, Factory, @@ -28,7 +28,7 @@ resolve_types, validate, ) -from attr._next_gen import asdict, astuple +from _vendoring.attr._next_gen import asdict, astuple from . import converters, exceptions, filters, setters, validators diff --git a/lib/spack/external/_vendoring/attrs/converters.py b/lib/spack/external/_vendoring/attrs/converters.py index edfa8d3c16a..b57c8b625b8 100644 --- a/lib/spack/external/_vendoring/attrs/converters.py +++ b/lib/spack/external/_vendoring/attrs/converters.py @@ -1,3 +1,3 @@ # SPDX-License-Identifier: MIT -from attr.converters import * # noqa +from _vendoring.attr.converters import * # noqa diff --git a/lib/spack/external/_vendoring/attrs/exceptions.py b/lib/spack/external/_vendoring/attrs/exceptions.py index bd9efed202a..0d592e5c8f0 100644 --- a/lib/spack/external/_vendoring/attrs/exceptions.py +++ b/lib/spack/external/_vendoring/attrs/exceptions.py @@ -1,3 +1,3 @@ # SPDX-License-Identifier: MIT -from attr.exceptions import * # noqa +from _vendoring.attr.exceptions import * # noqa diff --git a/lib/spack/external/_vendoring/attrs/filters.py b/lib/spack/external/_vendoring/attrs/filters.py index 52959005b08..008932987b5 100644 --- a/lib/spack/external/_vendoring/attrs/filters.py +++ b/lib/spack/external/_vendoring/attrs/filters.py @@ -1,3 +1,3 @@ # SPDX-License-Identifier: MIT -from attr.filters import * # noqa +from _vendoring.attr.filters import * # noqa diff --git a/lib/spack/external/_vendoring/attrs/setters.py b/lib/spack/external/_vendoring/attrs/setters.py index 9b50770804e..7d444db6868 100644 --- a/lib/spack/external/_vendoring/attrs/setters.py +++ b/lib/spack/external/_vendoring/attrs/setters.py @@ -1,3 +1,3 @@ # SPDX-License-Identifier: MIT -from attr.setters import * # noqa +from _vendoring.attr.setters import * # noqa diff --git a/lib/spack/external/_vendoring/attrs/validators.py b/lib/spack/external/_vendoring/attrs/validators.py index ab2c9b30247..ee68b11cb6d 100644 --- a/lib/spack/external/_vendoring/attrs/validators.py +++ b/lib/spack/external/_vendoring/attrs/validators.py @@ -1,3 +1,3 @@ # SPDX-License-Identifier: MIT -from attr.validators import * # noqa +from _vendoring.attr.validators import * # noqa diff --git a/lib/spack/external/_vendoring/jinja2/bccache.py b/lib/spack/external/_vendoring/jinja2/bccache.py index 3bb61b7c34c..791f8c42561 100644 --- a/lib/spack/external/_vendoring/jinja2/bccache.py +++ b/lib/spack/external/_vendoring/jinja2/bccache.py @@ -19,7 +19,7 @@ from types import CodeType if t.TYPE_CHECKING: - import typing_extensions as te + import _vendoring.typing_extensions as te from .environment import Environment class _MemcachedClient(te.Protocol): @@ -101,7 +101,7 @@ def bytecode_to_string(self) -> bytes: class BytecodeCache: """To implement your own bytecode cache you have to subclass this class and override :meth:`load_bytecode` and :meth:`dump_bytecode`. Both of - these methods are passed a :class:`~jinja2.bccache.Bucket`. + these methods are passed a :class:`~_vendoring.jinja2.bccache.Bucket`. A very basic bytecode cache that saves the bytecode on the file system:: @@ -193,7 +193,7 @@ class FileSystemBytecodeCache(BytecodeCache): is created for the user in the system temp directory. The pattern can be used to have multiple separate caches operate on the - same directory. The default pattern is ``'__jinja2_%s.cache'``. ``%s`` + same directory. The default pattern is ``'___vendoring.jinja2_%s.cache'``. ``%s`` is replaced with the cache key. >>> bcc = FileSystemBytecodeCache('/tmp/jinja_cache', '%s.cache') @@ -202,7 +202,7 @@ class FileSystemBytecodeCache(BytecodeCache): """ def __init__( - self, directory: t.Optional[str] = None, pattern: str = "__jinja2_%s.cache" + self, directory: t.Optional[str] = None, pattern: str = "___vendoring.jinja2_%s.cache" ) -> None: if directory is None: directory = self._get_default_cache_dir() @@ -225,7 +225,7 @@ def _unsafe_dir() -> "te.NoReturn": if not hasattr(os, "getuid"): _unsafe_dir() - dirname = f"_jinja2-cache-{os.getuid()}" + dirname = f"__vendoring.jinja2-cache-{os.getuid()}" actual_dir = os.path.join(tmpdir, dirname) try: @@ -332,7 +332,7 @@ class MemcachedBytecodeCache(BytecodeCache): def __init__( self, client: "_MemcachedClient", - prefix: str = "jinja2/bytecode/", + prefix: str = "_vendoring.jinja2/bytecode/", timeout: t.Optional[int] = None, ignore_memcache_errors: bool = True, ): diff --git a/lib/spack/external/_vendoring/jinja2/compiler.py b/lib/spack/external/_vendoring/jinja2/compiler.py index 52fd5b83e20..6a648e5cc8e 100644 --- a/lib/spack/external/_vendoring/jinja2/compiler.py +++ b/lib/spack/external/_vendoring/jinja2/compiler.py @@ -6,8 +6,8 @@ from itertools import chain from keyword import iskeyword as is_python_keyword -from markupsafe import escape -from markupsafe import Markup +from _vendoring.markupsafe import escape +from _vendoring.markupsafe import Markup from . import nodes from .exceptions import TemplateAssertionError @@ -23,7 +23,7 @@ from .visitor import NodeVisitor if t.TYPE_CHECKING: - import typing_extensions as te + import _vendoring.typing_extensions as te from .environment import Environment F = t.TypeVar("F", bound=t.Callable[..., t.Any]) @@ -836,7 +836,7 @@ def visit_Template( exported_names = sorted(exported) self.writeline("from __future__ import generator_stop") # Python < 3.7 - self.writeline("from jinja2.runtime import " + ", ".join(exported_names)) + self.writeline("from _vendoring.jinja2.runtime import " + ", ".join(exported_names)) # if we want a deferred initialization we cannot move the # environment into a local name diff --git a/lib/spack/external/_vendoring/jinja2/defaults.py b/lib/spack/external/_vendoring/jinja2/defaults.py index 638cad3d2d8..7d3b60d11e5 100644 --- a/lib/spack/external/_vendoring/jinja2/defaults.py +++ b/lib/spack/external/_vendoring/jinja2/defaults.py @@ -8,7 +8,7 @@ from .utils import Namespace if t.TYPE_CHECKING: - import typing_extensions as te + import _vendoring.typing_extensions as te # defaults for the parser / lexer BLOCK_START_STRING = "{%" diff --git a/lib/spack/external/_vendoring/jinja2/environment.py b/lib/spack/external/_vendoring/jinja2/environment.py index a231d9cd576..0cd0de2be17 100644 --- a/lib/spack/external/_vendoring/jinja2/environment.py +++ b/lib/spack/external/_vendoring/jinja2/environment.py @@ -12,7 +12,7 @@ from functools import reduce from types import CodeType -from markupsafe import Markup +from _vendoring.markupsafe import Markup from . import nodes from .compiler import CodeGenerator @@ -55,7 +55,7 @@ from .utils import missing if t.TYPE_CHECKING: - import typing_extensions as te + import _vendoring.typing_extensions as te from .bccache import BytecodeCache from .ext import Extension from .loaders import BaseLoader @@ -126,7 +126,7 @@ def _environment_config_check(environment: "Environment") -> "Environment": """Perform a sanity check on the environment.""" assert issubclass( environment.undefined, Undefined - ), "'undefined' must be a subclass of 'jinja2.Undefined'." + ), "'undefined' must be a subclass of '_vendoring.jinja2.Undefined'." assert ( environment.block_start_string != environment.variable_start_string @@ -221,7 +221,7 @@ class Environment: `autoescape` If set to ``True`` the XML/HTML autoescaping feature is enabled by default. For more details about autoescaping see - :class:`~markupsafe.Markup`. As of Jinja 2.4 this can also + :class:`~_vendoring.markupsafe.Markup`. As of Jinja 2.4 this can also be a callable that is passed the template name and has to return ``True`` or ``False`` depending on autoescape should be enabled by default. @@ -264,7 +264,7 @@ class Environment: #: if this environment is sandboxed. Modifying this variable won't make #: the environment sandboxed though. For a real sandboxed environment - #: have a look at jinja2.sandbox. This flag alone controls the code + #: have a look at _vendoring.jinja2.sandbox. This flag alone controls the code #: generation by the compiler. sandboxed = False @@ -279,11 +279,11 @@ class Environment: shared = False #: the class that is used for code generation. See - #: :class:`~jinja2.compiler.CodeGenerator` for more information. + #: :class:`~_vendoring.jinja2.compiler.CodeGenerator` for more information. code_generator_class: t.Type["CodeGenerator"] = CodeGenerator #: the context class that is used for templates. See - #: :class:`~jinja2.runtime.Context` for more information. + #: :class:`~_vendoring.jinja2.runtime.Context` for more information. context_class: t.Type[Context] = Context template_class: t.Type["Template"] @@ -650,7 +650,7 @@ def _tokenize( state: t.Optional[str] = None, ) -> TokenStream: """Called by the parser to do the preprocessing and filtering - for all the extensions. Returns a :class:`~jinja2.lexer.TokenStream`. + for all the extensions. Returns a :class:`~_vendoring.jinja2.lexer.TokenStream`. """ source = self.preprocess(source, name, filename) stream = self.lexer.tokenize(source, name, filename, state) @@ -1547,7 +1547,7 @@ def __repr__(self) -> str: class TemplateExpression: - """The :meth:`jinja2.Environment.compile_expression` method returns an + """The :meth:`_vendoring.jinja2.Environment.compile_expression` method returns an instance of this object. It encapsulates the expression-like access to the template with an expression it wraps. """ diff --git a/lib/spack/external/_vendoring/jinja2/ext.py b/lib/spack/external/_vendoring/jinja2/ext.py index 3e982930c4e..4f10d305c6a 100644 --- a/lib/spack/external/_vendoring/jinja2/ext.py +++ b/lib/spack/external/_vendoring/jinja2/ext.py @@ -4,7 +4,7 @@ import typing as t import warnings -from markupsafe import Markup +from _vendoring.markupsafe import Markup from . import defaults from . import nodes @@ -18,7 +18,7 @@ from .utils import pass_context if t.TYPE_CHECKING: - import typing_extensions as te + import _vendoring.typing_extensions as te from .lexer import Token from .lexer import TokenStream from .parser import Parser @@ -108,10 +108,10 @@ def preprocess( def filter_stream( self, stream: "TokenStream" ) -> t.Union["TokenStream", t.Iterable["Token"]]: - """It's passed a :class:`~jinja2.lexer.TokenStream` that can be used + """It's passed a :class:`~_vendoring.jinja2.lexer.TokenStream` that can be used to filter tokens returned. This method has to return an iterable of - :class:`~jinja2.lexer.Token`\\s, but it doesn't have to return a - :class:`~jinja2.lexer.TokenStream`. + :class:`~_vendoring.jinja2.lexer.Token`\\s, but it doesn't have to return a + :class:`~_vendoring.jinja2.lexer.TokenStream`. """ return stream @@ -145,7 +145,7 @@ def call_method( lineno: t.Optional[int] = None, ) -> nodes.Call: """Call a method of the extension. This is a shortcut for - :meth:`attr` + :class:`jinja2.nodes.Call`. + :meth:`attr` + :class:`_vendoring.jinja2.nodes.Call`. """ if args is None: args = [] @@ -629,9 +629,9 @@ class DebugExtension(Extension): .. code-block:: text - {'context': {'cycler': , + {'context': {'cycler': , ..., - 'namespace': }, + 'namespace': }, 'filters': ['abs', 'attr', 'batch', 'capitalize', 'center', 'count', 'd', ..., 'urlencode', 'urlize', 'wordcount', 'wordwrap', 'xmlattr'], 'tests': ['!=', '<', '<=', '==', '>', '>=', 'callable', 'defined', @@ -679,7 +679,7 @@ def extract_from_ast( This example explains the behavior: - >>> from jinja2 import Environment + >>> from _vendoring.jinja2 import Environment >>> env = Environment() >>> node = env.parse('{{ (_("foo"), _(), ngettext("foo", "bar", 42)) }}') >>> list(extract_from_ast(node)) diff --git a/lib/spack/external/_vendoring/jinja2/filters.py b/lib/spack/external/_vendoring/jinja2/filters.py index ffb98bf4e33..97757d18419 100644 --- a/lib/spack/external/_vendoring/jinja2/filters.py +++ b/lib/spack/external/_vendoring/jinja2/filters.py @@ -9,9 +9,9 @@ from itertools import chain from itertools import groupby -from markupsafe import escape -from markupsafe import Markup -from markupsafe import soft_str +from _vendoring.markupsafe import escape +from _vendoring.markupsafe import Markup +from _vendoring.markupsafe import soft_str from .async_utils import async_variant from .async_utils import auto_aiter @@ -28,7 +28,7 @@ from .utils import urlize if t.TYPE_CHECKING: - import typing_extensions as te + import _vendoring.typing_extensions as te from .environment import Environment from .nodes import EvalContext from .runtime import Context @@ -48,7 +48,7 @@ def contextfilter(f: F) -> F: """Pass the context as the first argument to the decorated function. .. deprecated:: 3.0 - Will be removed in Jinja 3.1. Use :func:`~jinja2.pass_context` + Will be removed in Jinja 3.1. Use :func:`~_vendoring.jinja2.pass_context` instead. """ warnings.warn( @@ -66,7 +66,7 @@ def evalcontextfilter(f: F) -> F: .. deprecated:: 3.0 Will be removed in Jinja 3.1. Use - :func:`~jinja2.pass_eval_context` instead. + :func:`~_vendoring.jinja2.pass_eval_context` instead. .. versionadded:: 2.4 """ @@ -85,7 +85,7 @@ def environmentfilter(f: F) -> F: .. deprecated:: 3.0 Will be removed in Jinja 3.1. Use - :func:`~jinja2.pass_environment` instead. + :func:`~_vendoring.jinja2.pass_environment` instead. """ warnings.warn( "'environmentfilter' is renamed to 'pass_environment', the old" @@ -547,10 +547,10 @@ def do_default( {{ ''|default('the string was empty', true) }} .. versionchanged:: 2.11 - It's now possible to configure the :class:`~jinja2.Environment` with - :class:`~jinja2.ChainableUndefined` to make the `default` filter work + It's now possible to configure the :class:`~_vendoring.jinja2.Environment` with + :class:`~_vendoring.jinja2.ChainableUndefined` to make the `default` filter work on nested elements and attributes that may contain undefined values - in the chain without getting an :exc:`~jinja2.UndefinedError`. + in the chain without getting an :exc:`~_vendoring.jinja2.UndefinedError`. """ if isinstance(value, Undefined) or (boolean and not value): return default_value diff --git a/lib/spack/external/_vendoring/jinja2/lexer.py b/lib/spack/external/_vendoring/jinja2/lexer.py index c25ab0f6901..943cf9023f2 100644 --- a/lib/spack/external/_vendoring/jinja2/lexer.py +++ b/lib/spack/external/_vendoring/jinja2/lexer.py @@ -14,7 +14,7 @@ from .utils import LRUCache if t.TYPE_CHECKING: - import typing_extensions as te + import _vendoring.typing_extensions as te from .environment import Environment # cache for the lexers. Exists in order to be able to have multiple @@ -400,7 +400,7 @@ def close(self) -> None: def expect(self, expr: str) -> Token: """Expect a given token type and return it. This accepts the same - argument as :meth:`jinja2.lexer.Token.test`. + argument as :meth:`_vendoring.jinja2.lexer.Token.test`. """ if not self.current.test(expr): expr = describe_token_expr(expr) diff --git a/lib/spack/external/_vendoring/jinja2/loaders.py b/lib/spack/external/_vendoring/jinja2/loaders.py index 4fac3a09665..8b3929dcd73 100644 --- a/lib/spack/external/_vendoring/jinja2/loaders.py +++ b/lib/spack/external/_vendoring/jinja2/loaders.py @@ -47,7 +47,7 @@ class BaseLoader: A very basic example for a loader that looks up templates on the file system could look like this:: - from jinja2 import BaseLoader, TemplateNotFound + from _vendoring.jinja2 import BaseLoader, TemplateNotFound from os.path import join, exists, getmtime class MyLoader(BaseLoader): @@ -594,7 +594,7 @@ class ModuleLoader(BaseLoader): def __init__( self, path: t.Union[str, os.PathLike, t.Sequence[t.Union[str, os.PathLike]]] ) -> None: - package_name = f"_jinja2_module_templates_{id(self):x}" + package_name = f"__vendoring.jinja2_module_templates_{id(self):x}" # create a fake module that looks for the templates in the # path given. diff --git a/lib/spack/external/_vendoring/jinja2/meta.py b/lib/spack/external/_vendoring/jinja2/meta.py index 0057d6eabad..6b42e8cef35 100644 --- a/lib/spack/external/_vendoring/jinja2/meta.py +++ b/lib/spack/external/_vendoring/jinja2/meta.py @@ -36,7 +36,7 @@ def find_undeclared_variables(ast: nodes.Template) -> t.Set[str]: variables will be used depending on the path the execution takes at runtime, all variables are returned. - >>> from jinja2 import Environment, meta + >>> from _vendoring.jinja2 import Environment, meta >>> env = Environment() >>> ast = env.parse('{% set foo = 42 %}{{ bar + foo }}') >>> meta.find_undeclared_variables(ast) == {'bar'} @@ -64,7 +64,7 @@ def find_referenced_templates(ast: nodes.Template) -> t.Iterator[t.Optional[str] imports. If dynamic inheritance or inclusion is used, `None` will be yielded. - >>> from jinja2 import Environment, meta + >>> from _vendoring.jinja2 import Environment, meta >>> env = Environment() >>> ast = env.parse('{% extends "layout.html" %}{% include helper %}') >>> list(meta.find_referenced_templates(ast)) diff --git a/lib/spack/external/_vendoring/jinja2/nodes.py b/lib/spack/external/_vendoring/jinja2/nodes.py index b2f88d9d9c1..f9b5c322d6e 100644 --- a/lib/spack/external/_vendoring/jinja2/nodes.py +++ b/lib/spack/external/_vendoring/jinja2/nodes.py @@ -7,12 +7,12 @@ import typing as t from collections import deque -from markupsafe import Markup +from _vendoring.markupsafe import Markup from .utils import _PassArg if t.TYPE_CHECKING: - import typing_extensions as te + import _vendoring.typing_extensions as te from .environment import Environment _NodeBound = t.TypeVar("_NodeBound", bound="Node") @@ -1041,7 +1041,7 @@ class ExtensionAttribute(Expr): The identifier is the identifier of the :class:`Extension`. This node is usually constructed by calling the - :meth:`~jinja2.ext.Extension.attr` method on an extension. + :meth:`~_vendoring.jinja2.ext.Extension.attr` method on an extension. """ fields = ("identifier", "name") @@ -1063,7 +1063,7 @@ class ImportedName(Expr): class InternalName(Expr): """An internal name in the compiler. You cannot create these nodes yourself but the parser provides a - :meth:`~jinja2.parser.Parser.free_identifier` method that creates + :meth:`~_vendoring.jinja2.parser.Parser.free_identifier` method that creates a new identifier for you. This identifier is not available from the template and is not treated specially by the compiler. """ @@ -1114,7 +1114,7 @@ def as_const( class ContextReference(Expr): """Returns the current template context. It can be used like a :class:`Name` node, with a ``'load'`` ctx and will return the - current :class:`~jinja2.runtime.Context` object. + current :class:`~_vendoring.jinja2.runtime.Context` object. Here an example that assigns the current template name to a variable named `foo`:: @@ -1123,7 +1123,7 @@ class ContextReference(Expr): Getattr(ContextReference(), 'name')) This is basically equivalent to using the - :func:`~jinja2.pass_context` decorator when using the high-level + :func:`~_vendoring.jinja2.pass_context` decorator when using the high-level API, which causes a reference to the context to be passed as the first argument to a function. """ @@ -1188,7 +1188,7 @@ class EvalContextModifier(Stmt): class ScopedEvalContextModifier(EvalContextModifier): """Modifies the eval context and reverts it later. Works exactly like :class:`EvalContextModifier` but will only modify the - :class:`~jinja2.nodes.EvalContext` for nodes in the :attr:`body`. + :class:`~_vendoring.jinja2.nodes.EvalContext` for nodes in the :attr:`body`. """ fields = ("body",) diff --git a/lib/spack/external/_vendoring/jinja2/parser.py b/lib/spack/external/_vendoring/jinja2/parser.py index 7ad73fcc0f0..050de2526a4 100644 --- a/lib/spack/external/_vendoring/jinja2/parser.py +++ b/lib/spack/external/_vendoring/jinja2/parser.py @@ -9,7 +9,7 @@ from .lexer import describe_token_expr if t.TYPE_CHECKING: - import typing_extensions as te + import _vendoring.typing_extensions as te from .environment import Environment _ImportInclude = t.TypeVar("_ImportInclude", nodes.Import, nodes.Include) @@ -156,7 +156,7 @@ def is_tuple_end( return False def free_identifier(self, lineno: t.Optional[int] = None) -> nodes.InternalName: - """Return a new free identifier as :class:`~jinja2.nodes.InternalName`.""" + """Return a new free identifier as :class:`~_vendoring.jinja2.nodes.InternalName`.""" self._last_identifier += 1 rv = object.__new__(nodes.InternalName) nodes.Node.__init__(rv, f"fi{self._last_identifier}", lineno=lineno) @@ -687,7 +687,7 @@ def parse_tuple( explicit_parentheses: bool = False, ) -> t.Union[nodes.Tuple, nodes.Expr]: """Works like `parse_expression` but if multiple expressions are - delimited by a comma a :class:`~jinja2.nodes.Tuple` node is created. + delimited by a comma a :class:`~_vendoring.jinja2.nodes.Tuple` node is created. This method could also return a regular expression instead of a tuple if no commas where found. diff --git a/lib/spack/external/_vendoring/jinja2/runtime.py b/lib/spack/external/_vendoring/jinja2/runtime.py index 2346cf2bac1..38ba42ad97a 100644 --- a/lib/spack/external/_vendoring/jinja2/runtime.py +++ b/lib/spack/external/_vendoring/jinja2/runtime.py @@ -5,9 +5,9 @@ from collections import abc from itertools import chain -from markupsafe import escape # noqa: F401 -from markupsafe import Markup -from markupsafe import soft_str +from _vendoring.markupsafe import escape # noqa: F401 +from _vendoring.markupsafe import Markup +from _vendoring.markupsafe import soft_str from .async_utils import auto_aiter from .async_utils import auto_await # noqa: F401 @@ -28,7 +28,7 @@ if t.TYPE_CHECKING: import logging - import typing_extensions as te + import _vendoring.typing_extensions as te from .environment import Environment class LoopRenderFunc(te.Protocol): @@ -849,7 +849,7 @@ class Undefined: >>> foo + 42 Traceback (most recent call last): ... - jinja2.exceptions.UndefinedError: 'foo' is undefined + _vendoring.jinja2.exceptions.UndefinedError: 'foo' is undefined """ __slots__ = ( @@ -1020,7 +1020,7 @@ class ChainableUndefined(Undefined): >>> foo.bar['baz'] + 42 Traceback (most recent call last): ... - jinja2.exceptions.UndefinedError: 'foo' is undefined + _vendoring.jinja2.exceptions.UndefinedError: 'foo' is undefined .. versionadded:: 2.11.0 """ @@ -1047,7 +1047,7 @@ class DebugUndefined(Undefined): >>> foo + 42 Traceback (most recent call last): ... - jinja2.exceptions.UndefinedError: 'foo' is undefined + _vendoring.jinja2.exceptions.UndefinedError: 'foo' is undefined """ __slots__ = () @@ -1077,15 +1077,15 @@ class StrictUndefined(Undefined): >>> str(foo) Traceback (most recent call last): ... - jinja2.exceptions.UndefinedError: 'foo' is undefined + _vendoring.jinja2.exceptions.UndefinedError: 'foo' is undefined >>> not foo Traceback (most recent call last): ... - jinja2.exceptions.UndefinedError: 'foo' is undefined + _vendoring.jinja2.exceptions.UndefinedError: 'foo' is undefined >>> foo + 42 Traceback (most recent call last): ... - jinja2.exceptions.UndefinedError: 'foo' is undefined + _vendoring.jinja2.exceptions.UndefinedError: 'foo' is undefined """ __slots__ = () diff --git a/lib/spack/external/_vendoring/jinja2/sandbox.py b/lib/spack/external/_vendoring/jinja2/sandbox.py index 42948847769..ef9262d3637 100644 --- a/lib/spack/external/_vendoring/jinja2/sandbox.py +++ b/lib/spack/external/_vendoring/jinja2/sandbox.py @@ -9,8 +9,8 @@ from collections import deque from string import Formatter -from markupsafe import EscapeFormatter -from markupsafe import Markup +from _vendoring.markupsafe import EscapeFormatter +from _vendoring.markupsafe import Markup from .environment import Environment from .exceptions import SecurityError @@ -128,7 +128,7 @@ def is_internal_attribute(obj: t.Any, attr: str) -> bool: python objects. This is useful if the environment method :meth:`~SandboxedEnvironment.is_safe_attribute` is overridden. - >>> from jinja2.sandbox import is_internal_attribute + >>> from _vendoring.jinja2.sandbox import is_internal_attribute >>> is_internal_attribute(str, "mro") True >>> is_internal_attribute(str, "upper") diff --git a/lib/spack/external/_vendoring/jinja2/utils.py b/lib/spack/external/_vendoring/jinja2/utils.py index 567185f41fc..4f51efba8cf 100644 --- a/lib/spack/external/_vendoring/jinja2/utils.py +++ b/lib/spack/external/_vendoring/jinja2/utils.py @@ -12,10 +12,10 @@ from types import CodeType from urllib.parse import quote_from_bytes -import markupsafe +import _vendoring.markupsafe if t.TYPE_CHECKING: - import typing_extensions as te + import _vendoring.typing_extensions as te F = t.TypeVar("F", bound=t.Callable[..., t.Any]) @@ -28,7 +28,7 @@ def pass_context(f: F) -> F: - """Pass the :class:`~jinja2.runtime.Context` as the first argument + """Pass the :class:`~_vendoring.jinja2.runtime.Context` as the first argument to the decorated function when called while rendering a template. Can be used on functions, filters, and tests. @@ -45,7 +45,7 @@ def pass_context(f: F) -> F: def pass_eval_context(f: F) -> F: - """Pass the :class:`~jinja2.nodes.EvalContext` as the first argument + """Pass the :class:`~_vendoring.jinja2.nodes.EvalContext` as the first argument to the decorated function when called while rendering a template. See :ref:`eval-context`. @@ -62,7 +62,7 @@ def pass_eval_context(f: F) -> F: def pass_environment(f: F) -> F: - """Pass the :class:`~jinja2.Environment` as the first argument to + """Pass the :class:`~_vendoring.jinja2.Environment` as the first argument to the decorated function when called while rendering a template. Can be used on functions, filters, and tests. @@ -104,7 +104,7 @@ def contextfunction(f: F) -> F: """Pass the context as the first argument to the decorated function. .. deprecated:: 3.0 - Will be removed in Jinja 3.1. Use :func:`~jinja2.pass_context` + Will be removed in Jinja 3.1. Use :func:`~_vendoring.jinja2.pass_context` instead. """ warnings.warn( @@ -122,7 +122,7 @@ def evalcontextfunction(f: F) -> F: .. deprecated:: 3.0 Will be removed in Jinja 3.1. Use - :func:`~jinja2.pass_eval_context` instead. + :func:`~_vendoring.jinja2.pass_eval_context` instead. .. versionadded:: 2.4 """ @@ -141,7 +141,7 @@ def environmentfunction(f: F) -> F: .. deprecated:: 3.0 Will be removed in Jinja 3.1. Use - :func:`~jinja2.pass_environment` instead. + :func:`~_vendoring.jinja2.pass_environment` instead. """ warnings.warn( "'environmentfunction' is renamed to 'pass_environment', the" @@ -335,9 +335,9 @@ def trim_url(x: str) -> str: def trim_url(x: str) -> str: return x - words = re.split(r"(\s+)", str(markupsafe.escape(text))) - rel_attr = f' rel="{markupsafe.escape(rel)}"' if rel else "" - target_attr = f' target="{markupsafe.escape(target)}"' if target else "" + words = re.split(r"(\s+)", str(_vendoring.markupsafe.escape(text))) + rel_attr = f' rel="{_vendoring.markupsafe.escape(rel)}"' if rel else "" + target_attr = f' target="{_vendoring.markupsafe.escape(target)}"' if target else "" for i, word in enumerate(words): head, middle, tail = "", word, "" @@ -455,8 +455,8 @@ def generate_lorem_ipsum( if not html: return "\n\n".join(result) - return markupsafe.Markup( - "\n".join(f"

{markupsafe.escape(x)}

" for x in result) + return _vendoring.markupsafe.Markup( + "\n".join(f"

{_vendoring.markupsafe.escape(x)}

" for x in result) ) @@ -658,7 +658,7 @@ def select_autoescape( If you want to enable it for all templates created from strings or for all templates with `.html` and `.xml` extensions:: - from jinja2 import Environment, select_autoescape + from _vendoring.jinja2 import Environment, select_autoescape env = Environment(autoescape=select_autoescape( enabled_extensions=('html', 'xml'), default_for_string=True, @@ -667,7 +667,7 @@ def select_autoescape( Example configuration to turn it on at all times except if the template ends with `.txt`:: - from jinja2 import Environment, select_autoescape + from _vendoring.jinja2 import Environment, select_autoescape env = Environment(autoescape=select_autoescape( disabled_extensions=('txt',), default_for_string=True, @@ -703,10 +703,10 @@ def autoescape(template_name: t.Optional[str]) -> bool: def htmlsafe_json_dumps( obj: t.Any, dumps: t.Optional[t.Callable[..., str]] = None, **kwargs: t.Any -) -> markupsafe.Markup: +) -> _vendoring.markupsafe.Markup: """Serialize an object to a string of JSON with :func:`json.dumps`, then replace HTML-unsafe characters with Unicode escapes and mark - the result safe with :class:`~markupsafe.Markup`. + the result safe with :class:`~_vendoring.markupsafe.Markup`. This is available in templates as the ``|tojson`` filter. @@ -732,7 +732,7 @@ def htmlsafe_json_dumps( if dumps is None: dumps = json.dumps - return markupsafe.Markup( + return _vendoring.markupsafe.Markup( dumps(obj, **kwargs) .replace("<", "\\u003c") .replace(">", "\\u003e") @@ -833,11 +833,11 @@ def __repr__(self) -> str: return f"" -class Markup(markupsafe.Markup): +class Markup(_vendoring.markupsafe.Markup): def __new__(cls, base="", encoding=None, errors="strict"): # type: ignore warnings.warn( - "'jinja2.Markup' is deprecated and will be removed in Jinja" - " 3.1. Import 'markupsafe.Markup' instead.", + "'_vendoring.jinja2.Markup' is deprecated and will be removed in Jinja" + " 3.1. Import '_vendoring.markupsafe.Markup' instead.", DeprecationWarning, stacklevel=2, ) @@ -846,9 +846,9 @@ def __new__(cls, base="", encoding=None, errors="strict"): # type: ignore def escape(s: t.Any) -> str: warnings.warn( - "'jinja2.escape' is deprecated and will be removed in Jinja" - " 3.1. Import 'markupsafe.escape' instead.", + "'_vendoring.jinja2.escape' is deprecated and will be removed in Jinja" + " 3.1. Import '_vendoring.markupsafe.escape' instead.", DeprecationWarning, stacklevel=2, ) - return markupsafe.escape(s) + return _vendoring.markupsafe.escape(s) diff --git a/lib/spack/external/_vendoring/jinja2/visitor.py b/lib/spack/external/_vendoring/jinja2/visitor.py index b150e578a8e..87fe7de6a97 100644 --- a/lib/spack/external/_vendoring/jinja2/visitor.py +++ b/lib/spack/external/_vendoring/jinja2/visitor.py @@ -6,7 +6,7 @@ from .nodes import Node if t.TYPE_CHECKING: - import typing_extensions as te + import _vendoring.typing_extensions as te class VisitCallable(te.Protocol): def __call__(self, node: Node, *args: t.Any, **kwargs: t.Any) -> t.Any: diff --git a/lib/spack/external/_vendoring/jsonschema/__init__.py b/lib/spack/external/_vendoring/jsonschema/__init__.py index 1791fe7fbf0..498105842b7 100644 --- a/lib/spack/external/_vendoring/jsonschema/__init__.py +++ b/lib/spack/external/_vendoring/jsonschema/__init__.py @@ -8,18 +8,18 @@ instance under a schema, and will create a validator for you. """ -from jsonschema.exceptions import ( +from _vendoring.jsonschema.exceptions import ( ErrorTree, FormatError, RefResolutionError, SchemaError, ValidationError ) -from jsonschema._format import ( +from _vendoring.jsonschema._format import ( FormatChecker, draft3_format_checker, draft4_format_checker, draft6_format_checker, draft7_format_checker, ) -from jsonschema._types import TypeChecker -from jsonschema.validators import ( +from _vendoring.jsonschema._types import TypeChecker +from _vendoring.jsonschema.validators import ( Draft3Validator, Draft4Validator, Draft6Validator, diff --git a/lib/spack/external/_vendoring/jsonschema/__main__.py b/lib/spack/external/_vendoring/jsonschema/__main__.py index 82c29fd39e7..5d8c6436061 100644 --- a/lib/spack/external/_vendoring/jsonschema/__main__.py +++ b/lib/spack/external/_vendoring/jsonschema/__main__.py @@ -1,2 +1,2 @@ -from jsonschema.cli import main +from _vendoring.jsonschema.cli import main main() diff --git a/lib/spack/external/_vendoring/jsonschema/_format.py b/lib/spack/external/_vendoring/jsonschema/_format.py index 29061e3661f..922ee3c63c3 100644 --- a/lib/spack/external/_vendoring/jsonschema/_format.py +++ b/lib/spack/external/_vendoring/jsonschema/_format.py @@ -3,8 +3,8 @@ import socket import struct -from jsonschema.compat import str_types -from jsonschema.exceptions import FormatError +from _vendoring.jsonschema.compat import str_types +from _vendoring.jsonschema.exceptions import FormatError class FormatChecker(object): diff --git a/lib/spack/external/_vendoring/jsonschema/_legacy_validators.py b/lib/spack/external/_vendoring/jsonschema/_legacy_validators.py index 264ff7d7135..fd5724d398c 100644 --- a/lib/spack/external/_vendoring/jsonschema/_legacy_validators.py +++ b/lib/spack/external/_vendoring/jsonschema/_legacy_validators.py @@ -1,6 +1,6 @@ -from jsonschema import _utils -from jsonschema.compat import iteritems -from jsonschema.exceptions import ValidationError +from _vendoring.jsonschema import _utils +from _vendoring.jsonschema.compat import iteritems +from _vendoring.jsonschema.exceptions import ValidationError def dependencies_draft3(validator, dependencies, instance, schema): diff --git a/lib/spack/external/_vendoring/jsonschema/_reflect.py b/lib/spack/external/_vendoring/jsonschema/_reflect.py index d09e38fbdcf..29e8bb5f25a 100644 --- a/lib/spack/external/_vendoring/jsonschema/_reflect.py +++ b/lib/spack/external/_vendoring/jsonschema/_reflect.py @@ -9,7 +9,7 @@ import sys -from jsonschema.compat import PY3 +from _vendoring.jsonschema.compat import PY3 class _NoModuleFound(Exception): diff --git a/lib/spack/external/_vendoring/jsonschema/_types.py b/lib/spack/external/_vendoring/jsonschema/_types.py index a71a4e34bdc..f669beb1406 100644 --- a/lib/spack/external/_vendoring/jsonschema/_types.py +++ b/lib/spack/external/_vendoring/jsonschema/_types.py @@ -1,10 +1,10 @@ import numbers -from pyrsistent import pmap -import attr +from _vendoring.pyrsistent import pmap +import _vendoring.attr -from jsonschema.compat import int_types, str_types -from jsonschema.exceptions import UndefinedTypeCheck +from _vendoring.jsonschema.compat import int_types, str_types +from _vendoring.jsonschema.exceptions import UndefinedTypeCheck def is_array(checker, instance): @@ -45,7 +45,7 @@ def is_any(checker, instance): return True -@attr.s(frozen=True) +@_vendoring.attr.s(frozen=True) class TypeChecker(object): """ A ``type`` property checker. @@ -61,7 +61,7 @@ class TypeChecker(object): The initial mapping of types to their checking functions. """ - _type_checkers = attr.ib(default=pmap(), converter=pmap) + _type_checkers = _vendoring.attr.ib(default=pmap(), converter=pmap) def is_type(self, instance, type): """ @@ -131,7 +131,7 @@ def redefine_many(self, definitions=()): A new `TypeChecker` instance. """ - return attr.evolve( + return _vendoring.attr.evolve( self, type_checkers=self._type_checkers.update(definitions), ) @@ -162,7 +162,7 @@ def remove(self, *types): checkers = checkers.remove(each) except KeyError: raise UndefinedTypeCheck(each) - return attr.evolve(self, type_checkers=checkers) + return _vendoring.attr.evolve(self, type_checkers=checkers) draft3_type_checker = TypeChecker( diff --git a/lib/spack/external/_vendoring/jsonschema/_utils.py b/lib/spack/external/_vendoring/jsonschema/_utils.py index ceb880198d1..452eecc96f5 100644 --- a/lib/spack/external/_vendoring/jsonschema/_utils.py +++ b/lib/spack/external/_vendoring/jsonschema/_utils.py @@ -3,7 +3,7 @@ import pkgutil import re -from jsonschema.compat import MutableMapping, str_types, urlsplit +from _vendoring.jsonschema.compat import MutableMapping, str_types, urlsplit class URIDict(MutableMapping): @@ -51,7 +51,7 @@ def load_schema(name): Load a schema from ./schemas/``name``.json and return it. """ - data = pkgutil.get_data("jsonschema", "schemas/{0}.json".format(name)) + data = pkgutil.get_data("_vendoring.jsonschema", "schemas/{0}.json".format(name)) return json.loads(data.decode("utf-8")) diff --git a/lib/spack/external/_vendoring/jsonschema/_validators.py b/lib/spack/external/_vendoring/jsonschema/_validators.py index 179fec09a94..c49d81fd503 100644 --- a/lib/spack/external/_vendoring/jsonschema/_validators.py +++ b/lib/spack/external/_vendoring/jsonschema/_validators.py @@ -1,6 +1,6 @@ import re -from jsonschema._utils import ( +from _vendoring.jsonschema._utils import ( ensure_list, equal, extras_msg, @@ -9,8 +9,8 @@ unbool, uniq, ) -from jsonschema.exceptions import FormatError, ValidationError -from jsonschema.compat import iteritems +from _vendoring.jsonschema.exceptions import FormatError, ValidationError +from _vendoring.jsonschema.compat import iteritems def patternProperties(validator, patternProperties, instance, schema): diff --git a/lib/spack/external/_vendoring/jsonschema/benchmarks/issue232.py b/lib/spack/external/_vendoring/jsonschema/benchmarks/issue232.py index 65e3aedf794..e4ea5e37d00 100644 --- a/lib/spack/external/_vendoring/jsonschema/benchmarks/issue232.py +++ b/lib/spack/external/_vendoring/jsonschema/benchmarks/issue232.py @@ -6,10 +6,10 @@ """ from twisted.python.filepath import FilePath from pyperf import Runner -from pyrsistent import m +from _vendoring.pyrsistent import m -from jsonschema.tests._suite import Version -import jsonschema +from _vendoring.jsonschema.tests._suite import Version +import _vendoring.jsonschema issue232 = Version( diff --git a/lib/spack/external/_vendoring/jsonschema/benchmarks/json_schema_test_suite.py b/lib/spack/external/_vendoring/jsonschema/benchmarks/json_schema_test_suite.py index 5add5051df1..d2f1b69dd1d 100644 --- a/lib/spack/external/_vendoring/jsonschema/benchmarks/json_schema_test_suite.py +++ b/lib/spack/external/_vendoring/jsonschema/benchmarks/json_schema_test_suite.py @@ -7,7 +7,7 @@ """ from pyperf import Runner -from jsonschema.tests._suite import Suite +from _vendoring.jsonschema.tests._suite import Suite if __name__ == "__main__": diff --git a/lib/spack/external/_vendoring/jsonschema/cli.py b/lib/spack/external/_vendoring/jsonschema/cli.py index ab3335b27c5..2e81ba1a53a 100644 --- a/lib/spack/external/_vendoring/jsonschema/cli.py +++ b/lib/spack/external/_vendoring/jsonschema/cli.py @@ -6,9 +6,9 @@ import json import sys -from jsonschema import __version__ -from jsonschema._reflect import namedAny -from jsonschema.validators import validator_for +from _vendoring.jsonschema import __version__ +from _vendoring.jsonschema._reflect import namedAny +from _vendoring.jsonschema.validators import validator_for def _namedAnyWithDefault(name): diff --git a/lib/spack/external/_vendoring/jsonschema/exceptions.py b/lib/spack/external/_vendoring/jsonschema/exceptions.py index 691dcffe6c7..6422eb47ea0 100644 --- a/lib/spack/external/_vendoring/jsonschema/exceptions.py +++ b/lib/spack/external/_vendoring/jsonschema/exceptions.py @@ -6,10 +6,10 @@ import pprint import textwrap -import attr +import _vendoring.attr -from jsonschema import _utils -from jsonschema.compat import PY3, iteritems +from _vendoring.jsonschema import _utils +from _vendoring.jsonschema.compat import PY3, iteritems WEAK_MATCHES = frozenset(["anyOf", "oneOf"]) @@ -149,13 +149,13 @@ class SchemaError(_Error): _word_for_instance_in_error_message = "schema" -@attr.s(hash=True) +@_vendoring.attr.s(hash=True) class RefResolutionError(Exception): """ A ref could not be resolved. """ - _cause = attr.ib() + _cause = _vendoring.attr.ib() def __str__(self): return str(self._cause) diff --git a/lib/spack/external/_vendoring/jsonschema/tests/_helpers.py b/lib/spack/external/_vendoring/jsonschema/tests/_helpers.py deleted file mode 100644 index 70f291fe2ab..00000000000 --- a/lib/spack/external/_vendoring/jsonschema/tests/_helpers.py +++ /dev/null @@ -1,5 +0,0 @@ -def bug(issue=None): - message = "A known bug." - if issue is not None: - message += " See issue #{issue}.".format(issue=issue) - return message diff --git a/lib/spack/external/_vendoring/jsonschema/tests/_suite.py b/lib/spack/external/_vendoring/jsonschema/tests/_suite.py deleted file mode 100644 index b68a7b668c9..00000000000 --- a/lib/spack/external/_vendoring/jsonschema/tests/_suite.py +++ /dev/null @@ -1,239 +0,0 @@ -""" -Python representations of the JSON Schema Test Suite tests. -""" - -from functools import partial -import json -import os -import re -import subprocess -import sys -import unittest - -from twisted.python.filepath import FilePath -import attr - -from jsonschema.compat import PY3 -from jsonschema.validators import validators -import jsonschema - - -def _find_suite(): - root = os.environ.get("JSON_SCHEMA_TEST_SUITE") - if root is not None: - return FilePath(root) - - root = FilePath(jsonschema.__file__).parent().sibling("json") - if not root.isdir(): # pragma: no cover - raise ValueError( - ( - "Can't find the JSON-Schema-Test-Suite directory. " - "Set the 'JSON_SCHEMA_TEST_SUITE' environment " - "variable or run the tests from alongside a checkout " - "of the suite." - ), - ) - return root - - -@attr.s(hash=True) -class Suite(object): - - _root = attr.ib(default=attr.Factory(_find_suite)) - - def _remotes(self): - jsonschema_suite = self._root.descendant(["bin", "jsonschema_suite"]) - remotes = subprocess.check_output( - [sys.executable, jsonschema_suite.path, "remotes"], - ) - return { - "http://localhost:1234/" + name: schema - for name, schema in json.loads(remotes.decode("utf-8")).items() - } - - def benchmark(self, runner): # pragma: no cover - for name in validators: - self.version(name=name).benchmark(runner=runner) - - def version(self, name): - return Version( - name=name, - path=self._root.descendant(["tests", name]), - remotes=self._remotes(), - ) - - -@attr.s(hash=True) -class Version(object): - - _path = attr.ib() - _remotes = attr.ib() - - name = attr.ib() - - def benchmark(self, runner, **kwargs): # pragma: no cover - for suite in self.tests(): - for test in suite: - runner.bench_func( - test.fully_qualified_name, - partial(test.validate_ignoring_errors, **kwargs), - ) - - def tests(self): - return ( - test - for child in self._path.globChildren("*.json") - for test in self._tests_in( - subject=child.basename()[:-5], - path=child, - ) - ) - - def format_tests(self): - path = self._path.descendant(["optional", "format"]) - return ( - test - for child in path.globChildren("*.json") - for test in self._tests_in( - subject=child.basename()[:-5], - path=child, - ) - ) - - def tests_of(self, name): - return self._tests_in( - subject=name, - path=self._path.child(name + ".json"), - ) - - def optional_tests_of(self, name): - return self._tests_in( - subject=name, - path=self._path.descendant(["optional", name + ".json"]), - ) - - def to_unittest_testcase(self, *suites, **kwargs): - name = kwargs.pop("name", "Test" + self.name.title()) - methods = { - test.method_name: test.to_unittest_method(**kwargs) - for suite in suites - for tests in suite - for test in tests - } - cls = type(name, (unittest.TestCase,), methods) - - try: - cls.__module__ = _someone_save_us_the_module_of_the_caller() - except Exception: # pragma: no cover - # We're doing crazy things, so if they go wrong, like a function - # behaving differently on some other interpreter, just make them - # not happen. - pass - - return cls - - def _tests_in(self, subject, path): - for each in json.loads(path.getContent().decode("utf-8")): - yield ( - _Test( - version=self, - subject=subject, - case_description=each["description"], - schema=each["schema"], - remotes=self._remotes, - **test - ) for test in each["tests"] - ) - - -@attr.s(hash=True, repr=False) -class _Test(object): - - version = attr.ib() - - subject = attr.ib() - case_description = attr.ib() - description = attr.ib() - - data = attr.ib() - schema = attr.ib(repr=False) - - valid = attr.ib() - - _remotes = attr.ib() - - def __repr__(self): # pragma: no cover - return "".format(self.fully_qualified_name) - - @property - def fully_qualified_name(self): # pragma: no cover - return " > ".join( - [ - self.version.name, - self.subject, - self.case_description, - self.description, - ] - ) - - @property - def method_name(self): - delimiters = r"[\W\- ]+" - name = "test_%s_%s_%s" % ( - re.sub(delimiters, "_", self.subject), - re.sub(delimiters, "_", self.case_description), - re.sub(delimiters, "_", self.description), - ) - - if not PY3: # pragma: no cover - name = name.encode("utf-8") - return name - - def to_unittest_method(self, skip=lambda test: None, **kwargs): - if self.valid: - def fn(this): - self.validate(**kwargs) - else: - def fn(this): - with this.assertRaises(jsonschema.ValidationError): - self.validate(**kwargs) - - fn.__name__ = self.method_name - reason = skip(self) - return unittest.skipIf(reason is not None, reason)(fn) - - def validate(self, Validator, **kwargs): - resolver = jsonschema.RefResolver.from_schema( - schema=self.schema, - store=self._remotes, - id_of=Validator.ID_OF, - ) - jsonschema.validate( - instance=self.data, - schema=self.schema, - cls=Validator, - resolver=resolver, - **kwargs - ) - - def validate_ignoring_errors(self, Validator): # pragma: no cover - try: - self.validate(Validator=Validator) - except jsonschema.ValidationError: - pass - - -def _someone_save_us_the_module_of_the_caller(): - """ - The FQON of the module 2nd stack frames up from here. - - This is intended to allow us to dynamicallly return test case classes that - are indistinguishable from being defined in the module that wants them. - - Otherwise, trial will mis-print the FQON, and copy pasting it won't re-run - the class that really is running. - - Save us all, this is all so so so so so terrible. - """ - - return sys._getframe(2).f_globals["__name__"] diff --git a/lib/spack/external/_vendoring/jsonschema/tests/test_cli.py b/lib/spack/external/_vendoring/jsonschema/tests/test_cli.py deleted file mode 100644 index ed820ba3f83..00000000000 --- a/lib/spack/external/_vendoring/jsonschema/tests/test_cli.py +++ /dev/null @@ -1,151 +0,0 @@ -from unittest import TestCase -import json -import subprocess -import sys - -from jsonschema import Draft4Validator, ValidationError, cli, __version__ -from jsonschema.compat import NativeIO -from jsonschema.exceptions import SchemaError - - -def fake_validator(*errors): - errors = list(reversed(errors)) - - class FakeValidator(object): - def __init__(self, *args, **kwargs): - pass - - def iter_errors(self, instance): - if errors: - return errors.pop() - return [] - - def check_schema(self, schema): - pass - - return FakeValidator - - -class TestParser(TestCase): - - FakeValidator = fake_validator() - instance_file = "foo.json" - schema_file = "schema.json" - - def setUp(self): - cli.open = self.fake_open - self.addCleanup(delattr, cli, "open") - - def fake_open(self, path): - if path == self.instance_file: - contents = "" - elif path == self.schema_file: - contents = {} - else: # pragma: no cover - self.fail("What is {!r}".format(path)) - return NativeIO(json.dumps(contents)) - - def test_find_validator_by_fully_qualified_object_name(self): - arguments = cli.parse_args( - [ - "--validator", - "jsonschema.tests.test_cli.TestParser.FakeValidator", - "--instance", self.instance_file, - self.schema_file, - ] - ) - self.assertIs(arguments["validator"], self.FakeValidator) - - def test_find_validator_in_jsonschema(self): - arguments = cli.parse_args( - [ - "--validator", "Draft4Validator", - "--instance", self.instance_file, - self.schema_file, - ] - ) - self.assertIs(arguments["validator"], Draft4Validator) - - -class TestCLI(TestCase): - def test_draft3_schema_draft4_validator(self): - stdout, stderr = NativeIO(), NativeIO() - with self.assertRaises(SchemaError): - cli.run( - { - "validator": Draft4Validator, - "schema": { - "anyOf": [ - {"minimum": 20}, - {"type": "string"}, - {"required": True}, - ], - }, - "instances": [1], - "error_format": "{error.message}", - }, - stdout=stdout, - stderr=stderr, - ) - - def test_successful_validation(self): - stdout, stderr = NativeIO(), NativeIO() - exit_code = cli.run( - { - "validator": fake_validator(), - "schema": {}, - "instances": [1], - "error_format": "{error.message}", - }, - stdout=stdout, - stderr=stderr, - ) - self.assertFalse(stdout.getvalue()) - self.assertFalse(stderr.getvalue()) - self.assertEqual(exit_code, 0) - - def test_unsuccessful_validation(self): - error = ValidationError("I am an error!", instance=1) - stdout, stderr = NativeIO(), NativeIO() - exit_code = cli.run( - { - "validator": fake_validator([error]), - "schema": {}, - "instances": [1], - "error_format": "{error.instance} - {error.message}", - }, - stdout=stdout, - stderr=stderr, - ) - self.assertFalse(stdout.getvalue()) - self.assertEqual(stderr.getvalue(), "1 - I am an error!") - self.assertEqual(exit_code, 1) - - def test_unsuccessful_validation_multiple_instances(self): - first_errors = [ - ValidationError("9", instance=1), - ValidationError("8", instance=1), - ] - second_errors = [ValidationError("7", instance=2)] - stdout, stderr = NativeIO(), NativeIO() - exit_code = cli.run( - { - "validator": fake_validator(first_errors, second_errors), - "schema": {}, - "instances": [1, 2], - "error_format": "{error.instance} - {error.message}\t", - }, - stdout=stdout, - stderr=stderr, - ) - self.assertFalse(stdout.getvalue()) - self.assertEqual(stderr.getvalue(), "1 - 9\t1 - 8\t2 - 7\t") - self.assertEqual(exit_code, 1) - - def test_version(self): - version = subprocess.check_output( - [sys.executable, "-m", "jsonschema", "--version"], - stderr=subprocess.STDOUT, - ) - version = version.decode("utf-8").strip() - self.assertEqual(version, __version__) diff --git a/lib/spack/external/_vendoring/jsonschema/tests/test_exceptions.py b/lib/spack/external/_vendoring/jsonschema/tests/test_exceptions.py deleted file mode 100644 index eae00d76d77..00000000000 --- a/lib/spack/external/_vendoring/jsonschema/tests/test_exceptions.py +++ /dev/null @@ -1,462 +0,0 @@ -from unittest import TestCase -import textwrap - -from jsonschema import Draft4Validator, exceptions -from jsonschema.compat import PY3 - - -class TestBestMatch(TestCase): - def best_match(self, errors): - errors = list(errors) - best = exceptions.best_match(errors) - reversed_best = exceptions.best_match(reversed(errors)) - msg = "Didn't return a consistent best match!\nGot: {0}\n\nThen: {1}" - self.assertEqual( - best._contents(), reversed_best._contents(), - msg=msg.format(best, reversed_best), - ) - return best - - def test_shallower_errors_are_better_matches(self): - validator = Draft4Validator( - { - "properties": { - "foo": { - "minProperties": 2, - "properties": {"bar": {"type": "object"}}, - }, - }, - }, - ) - best = self.best_match(validator.iter_errors({"foo": {"bar": []}})) - self.assertEqual(best.validator, "minProperties") - - def test_oneOf_and_anyOf_are_weak_matches(self): - """ - A property you *must* match is probably better than one you have to - match a part of. - """ - - validator = Draft4Validator( - { - "minProperties": 2, - "anyOf": [{"type": "string"}, {"type": "number"}], - "oneOf": [{"type": "string"}, {"type": "number"}], - } - ) - best = self.best_match(validator.iter_errors({})) - self.assertEqual(best.validator, "minProperties") - - def test_if_the_most_relevant_error_is_anyOf_it_is_traversed(self): - """ - If the most relevant error is an anyOf, then we traverse its context - and select the otherwise *least* relevant error, since in this case - that means the most specific, deep, error inside the instance. - - I.e. since only one of the schemas must match, we look for the most - relevant one. - """ - - validator = Draft4Validator( - { - "properties": { - "foo": { - "anyOf": [ - {"type": "string"}, - {"properties": {"bar": {"type": "array"}}}, - ], - }, - }, - }, - ) - best = self.best_match(validator.iter_errors({"foo": {"bar": 12}})) - self.assertEqual(best.validator_value, "array") - - def test_if_the_most_relevant_error_is_oneOf_it_is_traversed(self): - """ - If the most relevant error is an oneOf, then we traverse its context - and select the otherwise *least* relevant error, since in this case - that means the most specific, deep, error inside the instance. - - I.e. since only one of the schemas must match, we look for the most - relevant one. - """ - - validator = Draft4Validator( - { - "properties": { - "foo": { - "oneOf": [ - {"type": "string"}, - {"properties": {"bar": {"type": "array"}}}, - ], - }, - }, - }, - ) - best = self.best_match(validator.iter_errors({"foo": {"bar": 12}})) - self.assertEqual(best.validator_value, "array") - - def test_if_the_most_relevant_error_is_allOf_it_is_traversed(self): - """ - Now, if the error is allOf, we traverse but select the *most* relevant - error from the context, because all schemas here must match anyways. - """ - - validator = Draft4Validator( - { - "properties": { - "foo": { - "allOf": [ - {"type": "string"}, - {"properties": {"bar": {"type": "array"}}}, - ], - }, - }, - }, - ) - best = self.best_match(validator.iter_errors({"foo": {"bar": 12}})) - self.assertEqual(best.validator_value, "string") - - def test_nested_context_for_oneOf(self): - validator = Draft4Validator( - { - "properties": { - "foo": { - "oneOf": [ - {"type": "string"}, - { - "oneOf": [ - {"type": "string"}, - { - "properties": { - "bar": {"type": "array"}, - }, - }, - ], - }, - ], - }, - }, - }, - ) - best = self.best_match(validator.iter_errors({"foo": {"bar": 12}})) - self.assertEqual(best.validator_value, "array") - - def test_one_error(self): - validator = Draft4Validator({"minProperties": 2}) - error, = validator.iter_errors({}) - self.assertEqual( - exceptions.best_match(validator.iter_errors({})).validator, - "minProperties", - ) - - def test_no_errors(self): - validator = Draft4Validator({}) - self.assertIsNone(exceptions.best_match(validator.iter_errors({}))) - - -class TestByRelevance(TestCase): - def test_short_paths_are_better_matches(self): - shallow = exceptions.ValidationError("Oh no!", path=["baz"]) - deep = exceptions.ValidationError("Oh yes!", path=["foo", "bar"]) - match = max([shallow, deep], key=exceptions.relevance) - self.assertIs(match, shallow) - - match = max([deep, shallow], key=exceptions.relevance) - self.assertIs(match, shallow) - - def test_global_errors_are_even_better_matches(self): - shallow = exceptions.ValidationError("Oh no!", path=[]) - deep = exceptions.ValidationError("Oh yes!", path=["foo"]) - - errors = sorted([shallow, deep], key=exceptions.relevance) - self.assertEqual( - [list(error.path) for error in errors], - [["foo"], []], - ) - - errors = sorted([deep, shallow], key=exceptions.relevance) - self.assertEqual( - [list(error.path) for error in errors], - [["foo"], []], - ) - - def test_weak_validators_are_lower_priority(self): - weak = exceptions.ValidationError("Oh no!", path=[], validator="a") - normal = exceptions.ValidationError("Oh yes!", path=[], validator="b") - - best_match = exceptions.by_relevance(weak="a") - - match = max([weak, normal], key=best_match) - self.assertIs(match, normal) - - match = max([normal, weak], key=best_match) - self.assertIs(match, normal) - - def test_strong_validators_are_higher_priority(self): - weak = exceptions.ValidationError("Oh no!", path=[], validator="a") - normal = exceptions.ValidationError("Oh yes!", path=[], validator="b") - strong = exceptions.ValidationError("Oh fine!", path=[], validator="c") - - best_match = exceptions.by_relevance(weak="a", strong="c") - - match = max([weak, normal, strong], key=best_match) - self.assertIs(match, strong) - - match = max([strong, normal, weak], key=best_match) - self.assertIs(match, strong) - - -class TestErrorTree(TestCase): - def test_it_knows_how_many_total_errors_it_contains(self): - # FIXME: https://github.com/Julian/jsonschema/issues/442 - errors = [ - exceptions.ValidationError("Something", validator=i) - for i in range(8) - ] - tree = exceptions.ErrorTree(errors) - self.assertEqual(tree.total_errors, 8) - - def test_it_contains_an_item_if_the_item_had_an_error(self): - errors = [exceptions.ValidationError("a message", path=["bar"])] - tree = exceptions.ErrorTree(errors) - self.assertIn("bar", tree) - - def test_it_does_not_contain_an_item_if_the_item_had_no_error(self): - errors = [exceptions.ValidationError("a message", path=["bar"])] - tree = exceptions.ErrorTree(errors) - self.assertNotIn("foo", tree) - - def test_validators_that_failed_appear_in_errors_dict(self): - error = exceptions.ValidationError("a message", validator="foo") - tree = exceptions.ErrorTree([error]) - self.assertEqual(tree.errors, {"foo": error}) - - def test_it_creates_a_child_tree_for_each_nested_path(self): - errors = [ - exceptions.ValidationError("a bar message", path=["bar"]), - exceptions.ValidationError("a bar -> 0 message", path=["bar", 0]), - ] - tree = exceptions.ErrorTree(errors) - self.assertIn(0, tree["bar"]) - self.assertNotIn(1, tree["bar"]) - - def test_children_have_their_errors_dicts_built(self): - e1, e2 = ( - exceptions.ValidationError("1", validator="foo", path=["bar", 0]), - exceptions.ValidationError("2", validator="quux", path=["bar", 0]), - ) - tree = exceptions.ErrorTree([e1, e2]) - self.assertEqual(tree["bar"][0].errors, {"foo": e1, "quux": e2}) - - def test_multiple_errors_with_instance(self): - e1, e2 = ( - exceptions.ValidationError( - "1", - validator="foo", - path=["bar", "bar2"], - instance="i1"), - exceptions.ValidationError( - "2", - validator="quux", - path=["foobar", 2], - instance="i2"), - ) - exceptions.ErrorTree([e1, e2]) - - def test_it_does_not_contain_subtrees_that_are_not_in_the_instance(self): - error = exceptions.ValidationError("123", validator="foo", instance=[]) - tree = exceptions.ErrorTree([error]) - - with self.assertRaises(IndexError): - tree[0] - - def test_if_its_in_the_tree_anyhow_it_does_not_raise_an_error(self): - """ - If a validator is dumb (like :validator:`required` in draft 3) and - refers to a path that isn't in the instance, the tree still properly - returns a subtree for that path. - """ - - error = exceptions.ValidationError( - "a message", validator="foo", instance={}, path=["foo"], - ) - tree = exceptions.ErrorTree([error]) - self.assertIsInstance(tree["foo"], exceptions.ErrorTree) - - -class TestErrorInitReprStr(TestCase): - def make_error(self, **kwargs): - defaults = dict( - message=u"hello", - validator=u"type", - validator_value=u"string", - instance=5, - schema={u"type": u"string"}, - ) - defaults.update(kwargs) - return exceptions.ValidationError(**defaults) - - def assertShows(self, expected, **kwargs): - if PY3: # pragma: no cover - expected = expected.replace("u'", "'") - expected = textwrap.dedent(expected).rstrip("\n") - - error = self.make_error(**kwargs) - message_line, _, rest = str(error).partition("\n") - self.assertEqual(message_line, error.message) - self.assertEqual(rest, expected) - - def test_it_calls_super_and_sets_args(self): - error = self.make_error() - self.assertGreater(len(error.args), 1) - - def test_repr(self): - self.assertEqual( - repr(exceptions.ValidationError(message="Hello!")), - "" % "Hello!", - ) - - def test_unset_error(self): - error = exceptions.ValidationError("message") - self.assertEqual(str(error), "message") - - kwargs = { - "validator": "type", - "validator_value": "string", - "instance": 5, - "schema": {"type": "string"}, - } - # Just the message should show if any of the attributes are unset - for attr in kwargs: - k = dict(kwargs) - del k[attr] - error = exceptions.ValidationError("message", **k) - self.assertEqual(str(error), "message") - - def test_empty_paths(self): - self.assertShows( - """ - Failed validating u'type' in schema: - {u'type': u'string'} - - On instance: - 5 - """, - path=[], - schema_path=[], - ) - - def test_one_item_paths(self): - self.assertShows( - """ - Failed validating u'type' in schema: - {u'type': u'string'} - - On instance[0]: - 5 - """, - path=[0], - schema_path=["items"], - ) - - def test_multiple_item_paths(self): - self.assertShows( - """ - Failed validating u'type' in schema[u'items'][0]: - {u'type': u'string'} - - On instance[0][u'a']: - 5 - """, - path=[0, u"a"], - schema_path=[u"items", 0, 1], - ) - - def test_uses_pprint(self): - self.assertShows( - """ - Failed validating u'maxLength' in schema: - {0: 0, - 1: 1, - 2: 2, - 3: 3, - 4: 4, - 5: 5, - 6: 6, - 7: 7, - 8: 8, - 9: 9, - 10: 10, - 11: 11, - 12: 12, - 13: 13, - 14: 14, - 15: 15, - 16: 16, - 17: 17, - 18: 18, - 19: 19} - - On instance: - [0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24] - """, - instance=list(range(25)), - schema=dict(zip(range(20), range(20))), - validator=u"maxLength", - ) - - def test_str_works_with_instances_having_overriden_eq_operator(self): - """ - Check for https://github.com/Julian/jsonschema/issues/164 which - rendered exceptions unusable when a `ValidationError` involved - instances with an `__eq__` method that returned truthy values. - """ - - class DontEQMeBro(object): - def __eq__(this, other): # pragma: no cover - self.fail("Don't!") - - def __ne__(this, other): # pragma: no cover - self.fail("Don't!") - - instance = DontEQMeBro() - error = exceptions.ValidationError( - "a message", - validator="foo", - instance=instance, - validator_value="some", - schema="schema", - ) - self.assertIn(repr(instance), str(error)) - - -class TestHashable(TestCase): - def test_hashable(self): - set([exceptions.ValidationError("")]) - set([exceptions.SchemaError("")]) diff --git a/lib/spack/external/_vendoring/jsonschema/tests/test_format.py b/lib/spack/external/_vendoring/jsonschema/tests/test_format.py deleted file mode 100644 index 254985f6156..00000000000 --- a/lib/spack/external/_vendoring/jsonschema/tests/test_format.py +++ /dev/null @@ -1,89 +0,0 @@ -""" -Tests for the parts of jsonschema related to the :validator:`format` property. -""" - -from unittest import TestCase - -from jsonschema import FormatError, ValidationError, FormatChecker -from jsonschema.validators import Draft4Validator - - -BOOM = ValueError("Boom!") -BANG = ZeroDivisionError("Bang!") - - -def boom(thing): - if thing == "bang": - raise BANG - raise BOOM - - -class TestFormatChecker(TestCase): - def test_it_can_validate_no_formats(self): - checker = FormatChecker(formats=()) - self.assertFalse(checker.checkers) - - def test_it_raises_a_key_error_for_unknown_formats(self): - with self.assertRaises(KeyError): - FormatChecker(formats=["o noes"]) - - def test_it_can_register_cls_checkers(self): - original = dict(FormatChecker.checkers) - self.addCleanup(FormatChecker.checkers.pop, "boom") - FormatChecker.cls_checks("boom")(boom) - self.assertEqual( - FormatChecker.checkers, - dict(original, boom=(boom, ())), - ) - - def test_it_can_register_checkers(self): - checker = FormatChecker() - checker.checks("boom")(boom) - self.assertEqual( - checker.checkers, - dict(FormatChecker.checkers, boom=(boom, ())) - ) - - def test_it_catches_registered_errors(self): - checker = FormatChecker() - checker.checks("boom", raises=type(BOOM))(boom) - - with self.assertRaises(FormatError) as cm: - checker.check(instance=12, format="boom") - - self.assertIs(cm.exception.cause, BOOM) - self.assertIs(cm.exception.__cause__, BOOM) - - # Unregistered errors should not be caught - with self.assertRaises(type(BANG)): - checker.check(instance="bang", format="boom") - - def test_format_error_causes_become_validation_error_causes(self): - checker = FormatChecker() - checker.checks("boom", raises=ValueError)(boom) - validator = Draft4Validator({"format": "boom"}, format_checker=checker) - - with self.assertRaises(ValidationError) as cm: - validator.validate("BOOM") - - self.assertIs(cm.exception.cause, BOOM) - self.assertIs(cm.exception.__cause__, BOOM) - - def test_format_checkers_come_with_defaults(self): - # This is bad :/ but relied upon. - # The docs for quite awhile recommended people do things like - # validate(..., format_checker=FormatChecker()) - # We should change that, but we can't without deprecation... - checker = FormatChecker() - with self.assertRaises(FormatError): - checker.check(instance="not-an-ipv4", format="ipv4") - - def test_repr(self): - checker = FormatChecker(formats=()) - checker.checks("foo")(lambda thing: True) - checker.checks("bar")(lambda thing: True) - checker.checks("baz")(lambda thing: True) - self.assertEqual( - repr(checker), - "", - ) diff --git a/lib/spack/external/_vendoring/jsonschema/tests/test_jsonschema_test_suite.py b/lib/spack/external/_vendoring/jsonschema/tests/test_jsonschema_test_suite.py deleted file mode 100644 index ebccf29735a..00000000000 --- a/lib/spack/external/_vendoring/jsonschema/tests/test_jsonschema_test_suite.py +++ /dev/null @@ -1,277 +0,0 @@ -""" -Test runner for the JSON Schema official test suite - -Tests comprehensive correctness of each draft's validator. - -See https://github.com/json-schema-org/JSON-Schema-Test-Suite for details. -""" - -import sys -import warnings - -from jsonschema import ( - Draft3Validator, - Draft4Validator, - Draft6Validator, - Draft7Validator, - draft3_format_checker, - draft4_format_checker, - draft6_format_checker, - draft7_format_checker, -) -from jsonschema.tests._helpers import bug -from jsonschema.tests._suite import Suite -from jsonschema.validators import _DEPRECATED_DEFAULT_TYPES, create - - -SUITE = Suite() -DRAFT3 = SUITE.version(name="draft3") -DRAFT4 = SUITE.version(name="draft4") -DRAFT6 = SUITE.version(name="draft6") -DRAFT7 = SUITE.version(name="draft7") - - -def skip(message, **kwargs): - def skipper(test): - if all(value == getattr(test, attr) for attr, value in kwargs.items()): - return message - return skipper - - -def missing_format(checker): - def missing_format(test): - schema = test.schema - if schema is True or schema is False or "format" not in schema: - return - - if schema["format"] not in checker.checkers: - return "Format checker {0!r} not found.".format(schema["format"]) - return missing_format - - -is_narrow_build = sys.maxunicode == 2 ** 16 - 1 -if is_narrow_build: # pragma: no cover - message = "Not running surrogate Unicode case, this Python is narrow." - - def narrow_unicode_build(test): # pragma: no cover - return skip( - message=message, - description="one supplementary Unicode code point is not long enough", - )(test) or skip( - message=message, - description="two supplementary Unicode code points is long enough", - )(test) -else: - def narrow_unicode_build(test): # pragma: no cover - return - - -TestDraft3 = DRAFT3.to_unittest_testcase( - DRAFT3.tests(), - DRAFT3.optional_tests_of(name="bignum"), - DRAFT3.optional_tests_of(name="format"), - DRAFT3.optional_tests_of(name="zeroTerminatedFloats"), - Validator=Draft3Validator, - format_checker=draft3_format_checker, - skip=lambda test: ( - narrow_unicode_build(test) - or missing_format(draft3_format_checker)(test) - or skip( - message="Upstream bug in strict_rfc3339", - subject="format", - description="case-insensitive T and Z", - )(test) - ), -) - - -TestDraft4 = DRAFT4.to_unittest_testcase( - DRAFT4.tests(), - DRAFT4.optional_tests_of(name="bignum"), - DRAFT4.optional_tests_of(name="format"), - DRAFT4.optional_tests_of(name="zeroTerminatedFloats"), - Validator=Draft4Validator, - format_checker=draft4_format_checker, - skip=lambda test: ( - narrow_unicode_build(test) - or missing_format(draft4_format_checker)(test) - or skip( - message=bug(), - subject="ref", - case_description="Recursive references between schemas", - )(test) - or skip( - message=bug(371), - subject="ref", - case_description="Location-independent identifier", - )(test) - or skip( - message=bug(371), - subject="ref", - case_description=( - "Location-independent identifier with absolute URI" - ), - )(test) - or skip( - message=bug(371), - subject="ref", - case_description=( - "Location-independent identifier with base URI change in subschema" - ), - )(test) - or skip( - message=bug(), - subject="refRemote", - case_description="base URI change - change folder in subschema", - )(test) - or skip( - message="Upstream bug in strict_rfc3339", - subject="format", - description="case-insensitive T and Z", - )(test) - ), -) - - -TestDraft6 = DRAFT6.to_unittest_testcase( - DRAFT6.tests(), - DRAFT6.optional_tests_of(name="bignum"), - DRAFT6.optional_tests_of(name="format"), - DRAFT6.optional_tests_of(name="zeroTerminatedFloats"), - Validator=Draft6Validator, - format_checker=draft6_format_checker, - skip=lambda test: ( - narrow_unicode_build(test) - or missing_format(draft6_format_checker)(test) - or skip( - message=bug(), - subject="ref", - case_description="Recursive references between schemas", - )(test) - or skip( - message=bug(371), - subject="ref", - case_description="Location-independent identifier", - )(test) - or skip( - message=bug(371), - subject="ref", - case_description=( - "Location-independent identifier with absolute URI" - ), - )(test) - or skip( - message=bug(371), - subject="ref", - case_description=( - "Location-independent identifier with base URI change in subschema" - ), - )(test) - or skip( - message=bug(), - subject="refRemote", - case_description="base URI change - change folder in subschema", - )(test) - or skip( - message="Upstream bug in strict_rfc3339", - subject="format", - description="case-insensitive T and Z", - )(test) - ), -) - - -TestDraft7 = DRAFT7.to_unittest_testcase( - DRAFT7.tests(), - DRAFT7.format_tests(), - DRAFT7.optional_tests_of(name="bignum"), - DRAFT7.optional_tests_of(name="content"), - DRAFT7.optional_tests_of(name="zeroTerminatedFloats"), - Validator=Draft7Validator, - format_checker=draft7_format_checker, - skip=lambda test: ( - narrow_unicode_build(test) - or missing_format(draft7_format_checker)(test) - or skip( - message=bug(), - subject="ref", - case_description="Recursive references between schemas", - )(test) - or skip( - message=bug(371), - subject="ref", - case_description="Location-independent identifier", - )(test) - or skip( - message=bug(371), - subject="ref", - case_description=( - "Location-independent identifier with absolute URI" - ), - )(test) - or skip( - message=bug(371), - subject="ref", - case_description=( - "Location-independent identifier with base URI change in subschema" - ), - )(test) - or skip( - message=bug(), - subject="refRemote", - case_description="base URI change - change folder in subschema", - )(test) - or skip( - message="Upstream bug in strict_rfc3339", - subject="date-time", - description="case-insensitive T and Z", - )(test) - or skip( - message=bug(593), - subject="content", - case_description=( - "validation of string-encoded content based on media type" - ), - )(test) - or skip( - message=bug(593), - subject="content", - case_description="validation of binary string-encoding", - )(test) - or skip( - message=bug(593), - subject="content", - case_description=( - "validation of binary-encoded media type documents" - ), - )(test) - ), -) - - -with warnings.catch_warnings(): - warnings.simplefilter("ignore", DeprecationWarning) - - TestDraft3LegacyTypeCheck = DRAFT3.to_unittest_testcase( - # Interestingly the any part couldn't really be done w/the old API. - ( - (test for test in each if test.schema != {"type": "any"}) - for each in DRAFT3.tests_of(name="type") - ), - name="TestDraft3LegacyTypeCheck", - Validator=create( - meta_schema=Draft3Validator.META_SCHEMA, - validators=Draft3Validator.VALIDATORS, - default_types=_DEPRECATED_DEFAULT_TYPES, - ), - ) - - TestDraft4LegacyTypeCheck = DRAFT4.to_unittest_testcase( - DRAFT4.tests_of(name="type"), - name="TestDraft4LegacyTypeCheck", - Validator=create( - meta_schema=Draft4Validator.META_SCHEMA, - validators=Draft4Validator.VALIDATORS, - default_types=_DEPRECATED_DEFAULT_TYPES, - ), - ) diff --git a/lib/spack/external/_vendoring/jsonschema/tests/test_types.py b/lib/spack/external/_vendoring/jsonschema/tests/test_types.py deleted file mode 100644 index 2280cc395b2..00000000000 --- a/lib/spack/external/_vendoring/jsonschema/tests/test_types.py +++ /dev/null @@ -1,190 +0,0 @@ -""" -Tests on the new type interface. The actual correctness of the type checking -is handled in test_jsonschema_test_suite; these tests check that TypeChecker -functions correctly and can facilitate extensions to type checking -""" -from collections import namedtuple -from unittest import TestCase - -from jsonschema import ValidationError, _validators -from jsonschema._types import TypeChecker -from jsonschema.exceptions import UndefinedTypeCheck -from jsonschema.validators import Draft4Validator, extend - - -def equals_2(checker, instance): - return instance == 2 - - -def is_namedtuple(instance): - return isinstance(instance, tuple) and getattr(instance, "_fields", None) - - -def is_object_or_named_tuple(checker, instance): - if Draft4Validator.TYPE_CHECKER.is_type(instance, "object"): - return True - return is_namedtuple(instance) - - -def coerce_named_tuple(fn): - def coerced(validator, value, instance, schema): - if is_namedtuple(instance): - instance = instance._asdict() - return fn(validator, value, instance, schema) - return coerced - - -required = coerce_named_tuple(_validators.required) -properties = coerce_named_tuple(_validators.properties) - - -class TestTypeChecker(TestCase): - def test_is_type(self): - checker = TypeChecker({"two": equals_2}) - self.assertEqual( - ( - checker.is_type(instance=2, type="two"), - checker.is_type(instance="bar", type="two"), - ), - (True, False), - ) - - def test_is_unknown_type(self): - with self.assertRaises(UndefinedTypeCheck) as context: - TypeChecker().is_type(4, "foobar") - self.assertIn("foobar", str(context.exception)) - - def test_checks_can_be_added_at_init(self): - checker = TypeChecker({"two": equals_2}) - self.assertEqual(checker, TypeChecker().redefine("two", equals_2)) - - def test_redefine_existing_type(self): - self.assertEqual( - TypeChecker().redefine("two", object()).redefine("two", equals_2), - TypeChecker().redefine("two", equals_2), - ) - - def test_remove(self): - self.assertEqual( - TypeChecker({"two": equals_2}).remove("two"), - TypeChecker(), - ) - - def test_remove_unknown_type(self): - with self.assertRaises(UndefinedTypeCheck) as context: - TypeChecker().remove("foobar") - self.assertIn("foobar", str(context.exception)) - - def test_redefine_many(self): - self.assertEqual( - TypeChecker().redefine_many({"foo": int, "bar": str}), - TypeChecker().redefine("foo", int).redefine("bar", str), - ) - - def test_remove_multiple(self): - self.assertEqual( - TypeChecker({"foo": int, "bar": str}).remove("foo", "bar"), - TypeChecker(), - ) - - def test_type_check_can_raise_key_error(self): - """ - Make sure no one writes: - - try: - self._type_checkers[type](...) - except KeyError: - - ignoring the fact that the function itself can raise that. - """ - - error = KeyError("Stuff") - - def raises_keyerror(checker, instance): - raise error - - with self.assertRaises(KeyError) as context: - TypeChecker({"foo": raises_keyerror}).is_type(4, "foo") - - self.assertIs(context.exception, error) - - -class TestCustomTypes(TestCase): - def test_simple_type_can_be_extended(self): - def int_or_str_int(checker, instance): - if not isinstance(instance, (int, str)): - return False - try: - int(instance) - except ValueError: - return False - return True - - CustomValidator = extend( - Draft4Validator, - type_checker=Draft4Validator.TYPE_CHECKER.redefine( - "integer", int_or_str_int, - ), - ) - validator = CustomValidator({"type": "integer"}) - - validator.validate(4) - validator.validate("4") - - with self.assertRaises(ValidationError): - validator.validate(4.4) - - def test_object_can_be_extended(self): - schema = {"type": "object"} - - Point = namedtuple("Point", ["x", "y"]) - - type_checker = Draft4Validator.TYPE_CHECKER.redefine( - u"object", is_object_or_named_tuple, - ) - - CustomValidator = extend(Draft4Validator, type_checker=type_checker) - validator = CustomValidator(schema) - - validator.validate(Point(x=4, y=5)) - - def test_object_extensions_require_custom_validators(self): - schema = {"type": "object", "required": ["x"]} - - type_checker = Draft4Validator.TYPE_CHECKER.redefine( - u"object", is_object_or_named_tuple, - ) - - CustomValidator = extend(Draft4Validator, type_checker=type_checker) - validator = CustomValidator(schema) - - Point = namedtuple("Point", ["x", "y"]) - # Cannot handle required - with self.assertRaises(ValidationError): - validator.validate(Point(x=4, y=5)) - - def test_object_extensions_can_handle_custom_validators(self): - schema = { - "type": "object", - "required": ["x"], - "properties": {"x": {"type": "integer"}}, - } - - type_checker = Draft4Validator.TYPE_CHECKER.redefine( - u"object", is_object_or_named_tuple, - ) - - CustomValidator = extend( - Draft4Validator, - type_checker=type_checker, - validators={"required": required, "properties": properties}, - ) - - validator = CustomValidator(schema) - - Point = namedtuple("Point", ["x", "y"]) - # Can now process required and properties - validator.validate(Point(x=4, y=5)) - - with self.assertRaises(ValidationError): - validator.validate(Point(x="not an integer", y=5)) diff --git a/lib/spack/external/_vendoring/jsonschema/tests/test_validators.py b/lib/spack/external/_vendoring/jsonschema/tests/test_validators.py deleted file mode 100644 index 07be4f08bc2..00000000000 --- a/lib/spack/external/_vendoring/jsonschema/tests/test_validators.py +++ /dev/null @@ -1,1762 +0,0 @@ -from collections import deque -from contextlib import contextmanager -from decimal import Decimal -from io import BytesIO -from unittest import TestCase -import json -import os -import sys -import tempfile -import unittest - -from twisted.trial.unittest import SynchronousTestCase -import attr - -from jsonschema import FormatChecker, TypeChecker, exceptions, validators -from jsonschema.compat import PY3, pathname2url -from jsonschema.tests._helpers import bug - - -def startswith(validator, startswith, instance, schema): - if not instance.startswith(startswith): - yield exceptions.ValidationError(u"Whoops!") - - -class TestCreateAndExtend(SynchronousTestCase): - def setUp(self): - self.addCleanup( - self.assertEqual, - validators.meta_schemas, - dict(validators.meta_schemas), - ) - - self.meta_schema = {u"$id": "some://meta/schema"} - self.validators = {u"startswith": startswith} - self.type_checker = TypeChecker() - self.Validator = validators.create( - meta_schema=self.meta_schema, - validators=self.validators, - type_checker=self.type_checker, - ) - - def test_attrs(self): - self.assertEqual( - ( - self.Validator.VALIDATORS, - self.Validator.META_SCHEMA, - self.Validator.TYPE_CHECKER, - ), ( - self.validators, - self.meta_schema, - self.type_checker, - ), - ) - - def test_init(self): - schema = {u"startswith": u"foo"} - self.assertEqual(self.Validator(schema).schema, schema) - - def test_iter_errors(self): - schema = {u"startswith": u"hel"} - iter_errors = self.Validator(schema).iter_errors - - errors = list(iter_errors(u"hello")) - self.assertEqual(errors, []) - - expected_error = exceptions.ValidationError( - u"Whoops!", - instance=u"goodbye", - schema=schema, - validator=u"startswith", - validator_value=u"hel", - schema_path=deque([u"startswith"]), - ) - - errors = list(iter_errors(u"goodbye")) - self.assertEqual(len(errors), 1) - self.assertEqual(errors[0]._contents(), expected_error._contents()) - - def test_if_a_version_is_provided_it_is_registered(self): - Validator = validators.create( - meta_schema={u"$id": "something"}, - version="my version", - ) - self.addCleanup(validators.meta_schemas.pop, "something") - self.assertEqual(Validator.__name__, "MyVersionValidator") - - def test_if_a_version_is_not_provided_it_is_not_registered(self): - original = dict(validators.meta_schemas) - validators.create(meta_schema={u"id": "id"}) - self.assertEqual(validators.meta_schemas, original) - - def test_validates_registers_meta_schema_id(self): - meta_schema_key = "meta schema id" - my_meta_schema = {u"id": meta_schema_key} - - validators.create( - meta_schema=my_meta_schema, - version="my version", - id_of=lambda s: s.get("id", ""), - ) - self.addCleanup(validators.meta_schemas.pop, meta_schema_key) - - self.assertIn(meta_schema_key, validators.meta_schemas) - - def test_validates_registers_meta_schema_draft6_id(self): - meta_schema_key = "meta schema $id" - my_meta_schema = {u"$id": meta_schema_key} - - validators.create( - meta_schema=my_meta_schema, - version="my version", - ) - self.addCleanup(validators.meta_schemas.pop, meta_schema_key) - - self.assertIn(meta_schema_key, validators.meta_schemas) - - def test_create_default_types(self): - Validator = validators.create(meta_schema={}, validators=()) - self.assertTrue( - all( - Validator({}).is_type(instance=instance, type=type) - for type, instance in [ - (u"array", []), - (u"boolean", True), - (u"integer", 12), - (u"null", None), - (u"number", 12.0), - (u"object", {}), - (u"string", u"foo"), - ] - ), - ) - - def test_extend(self): - original = dict(self.Validator.VALIDATORS) - new = object() - - Extended = validators.extend( - self.Validator, - validators={u"new": new}, - ) - self.assertEqual( - ( - Extended.VALIDATORS, - Extended.META_SCHEMA, - Extended.TYPE_CHECKER, - self.Validator.VALIDATORS, - ), ( - dict(original, new=new), - self.Validator.META_SCHEMA, - self.Validator.TYPE_CHECKER, - original, - ), - ) - - def test_extend_idof(self): - """ - Extending a validator preserves its notion of schema IDs. - """ - def id_of(schema): - return schema.get(u"__test__", self.Validator.ID_OF(schema)) - correct_id = "the://correct/id/" - meta_schema = { - u"$id": "the://wrong/id/", - u"__test__": correct_id, - } - Original = validators.create( - meta_schema=meta_schema, - validators=self.validators, - type_checker=self.type_checker, - id_of=id_of, - ) - self.assertEqual(Original.ID_OF(Original.META_SCHEMA), correct_id) - - Derived = validators.extend(Original) - self.assertEqual(Derived.ID_OF(Derived.META_SCHEMA), correct_id) - - -class TestLegacyTypeChecking(SynchronousTestCase): - def test_create_default_types(self): - Validator = validators.create(meta_schema={}, validators=()) - self.assertEqual( - set(Validator.DEFAULT_TYPES), { - u"array", - u"boolean", - u"integer", - u"null", - u"number", - u"object", u"string", - }, - ) - self.flushWarnings() - - def test_extend(self): - Validator = validators.create(meta_schema={}, validators=()) - original = dict(Validator.VALIDATORS) - new = object() - - Extended = validators.extend( - Validator, - validators={u"new": new}, - ) - self.assertEqual( - ( - Extended.VALIDATORS, - Extended.META_SCHEMA, - Extended.TYPE_CHECKER, - Validator.VALIDATORS, - - Extended.DEFAULT_TYPES, - Extended({}).DEFAULT_TYPES, - self.flushWarnings()[0]["message"], - ), ( - dict(original, new=new), - Validator.META_SCHEMA, - Validator.TYPE_CHECKER, - original, - - Validator.DEFAULT_TYPES, - Validator.DEFAULT_TYPES, - self.flushWarnings()[0]["message"], - ), - ) - - def test_types_redefines_the_validators_type_checker(self): - schema = {"type": "string"} - self.assertFalse(validators.Draft7Validator(schema).is_valid(12)) - - validator = validators.Draft7Validator( - schema, - types={"string": (str, int)}, - ) - self.assertTrue(validator.is_valid(12)) - self.flushWarnings() - - def test_providing_default_types_warns(self): - self.assertWarns( - category=DeprecationWarning, - message=( - "The default_types argument is deprecated. " - "Use the type_checker argument instead." - ), - # https://tm.tl/9363 :'( - filename=sys.modules[self.assertWarns.__module__].__file__, - - f=validators.create, - meta_schema={}, - validators={}, - default_types={"foo": object}, - ) - - def test_cannot_ask_for_default_types_with_non_default_type_checker(self): - """ - We raise an error when you ask a validator with non-default - type checker for its DEFAULT_TYPES. - - The type checker argument is new, so no one but this library - itself should be trying to use it, and doing so while then - asking for DEFAULT_TYPES makes no sense (not to mention is - deprecated), since type checkers are not strictly about Python - type. - """ - Validator = validators.create( - meta_schema={}, - validators={}, - type_checker=TypeChecker(), - ) - with self.assertRaises(validators._DontDoThat) as e: - Validator.DEFAULT_TYPES - - self.assertIn( - "DEFAULT_TYPES cannot be used on Validators using TypeCheckers", - str(e.exception), - ) - with self.assertRaises(validators._DontDoThat): - Validator({}).DEFAULT_TYPES - - self.assertFalse(self.flushWarnings()) - - def test_providing_explicit_type_checker_does_not_warn(self): - Validator = validators.create( - meta_schema={}, - validators={}, - type_checker=TypeChecker(), - ) - self.assertFalse(self.flushWarnings()) - - Validator({}) - self.assertFalse(self.flushWarnings()) - - def test_providing_neither_does_not_warn(self): - Validator = validators.create(meta_schema={}, validators={}) - self.assertFalse(self.flushWarnings()) - - Validator({}) - self.assertFalse(self.flushWarnings()) - - def test_providing_default_types_with_type_checker_errors(self): - with self.assertRaises(TypeError) as e: - validators.create( - meta_schema={}, - validators={}, - default_types={"foo": object}, - type_checker=TypeChecker(), - ) - - self.assertIn( - "Do not specify default_types when providing a type checker", - str(e.exception), - ) - self.assertFalse(self.flushWarnings()) - - def test_extending_a_legacy_validator_with_a_type_checker_errors(self): - Validator = validators.create( - meta_schema={}, - validators={}, - default_types={u"array": list} - ) - with self.assertRaises(TypeError) as e: - validators.extend( - Validator, - validators={}, - type_checker=TypeChecker(), - ) - - self.assertIn( - ( - "Cannot extend a validator created with default_types " - "with a type_checker. Update the validator to use a " - "type_checker when created." - ), - str(e.exception), - ) - self.flushWarnings() - - def test_extending_a_legacy_validator_does_not_rewarn(self): - Validator = validators.create(meta_schema={}, default_types={}) - self.assertTrue(self.flushWarnings()) - - validators.extend(Validator) - self.assertFalse(self.flushWarnings()) - - def test_accessing_default_types_warns(self): - Validator = validators.create(meta_schema={}, validators={}) - self.assertFalse(self.flushWarnings()) - - self.assertWarns( - DeprecationWarning, - ( - "The DEFAULT_TYPES attribute is deprecated. " - "See the type checker attached to this validator instead." - ), - # https://tm.tl/9363 :'( - sys.modules[self.assertWarns.__module__].__file__, - - getattr, - Validator, - "DEFAULT_TYPES", - ) - - def test_accessing_default_types_on_the_instance_warns(self): - Validator = validators.create(meta_schema={}, validators={}) - self.assertFalse(self.flushWarnings()) - - self.assertWarns( - DeprecationWarning, - ( - "The DEFAULT_TYPES attribute is deprecated. " - "See the type checker attached to this validator instead." - ), - # https://tm.tl/9363 :'( - sys.modules[self.assertWarns.__module__].__file__, - - getattr, - Validator({}), - "DEFAULT_TYPES", - ) - - def test_providing_types_to_init_warns(self): - Validator = validators.create(meta_schema={}, validators={}) - self.assertFalse(self.flushWarnings()) - - self.assertWarns( - category=DeprecationWarning, - message=( - "The types argument is deprecated. " - "Provide a type_checker to jsonschema.validators.extend " - "instead." - ), - # https://tm.tl/9363 :'( - filename=sys.modules[self.assertWarns.__module__].__file__, - - f=Validator, - schema={}, - types={"bar": object}, - ) - - -class TestIterErrors(TestCase): - def setUp(self): - self.validator = validators.Draft3Validator({}) - - def test_iter_errors(self): - instance = [1, 2] - schema = { - u"disallow": u"array", - u"enum": [["a", "b", "c"], ["d", "e", "f"]], - u"minItems": 3, - } - - got = (e.message for e in self.validator.iter_errors(instance, schema)) - expected = [ - "%r is disallowed for [1, 2]" % (schema["disallow"],), - "[1, 2] is too short", - "[1, 2] is not one of %r" % (schema["enum"],), - ] - self.assertEqual(sorted(got), sorted(expected)) - - def test_iter_errors_multiple_failures_one_validator(self): - instance = {"foo": 2, "bar": [1], "baz": 15, "quux": "spam"} - schema = { - u"properties": { - "foo": {u"type": "string"}, - "bar": {u"minItems": 2}, - "baz": {u"maximum": 10, u"enum": [2, 4, 6, 8]}, - }, - } - - errors = list(self.validator.iter_errors(instance, schema)) - self.assertEqual(len(errors), 4) - - -class TestValidationErrorMessages(TestCase): - def message_for(self, instance, schema, *args, **kwargs): - kwargs.setdefault("cls", validators.Draft3Validator) - with self.assertRaises(exceptions.ValidationError) as e: - validators.validate(instance, schema, *args, **kwargs) - return e.exception.message - - def test_single_type_failure(self): - message = self.message_for(instance=1, schema={u"type": u"string"}) - self.assertEqual(message, "1 is not of type %r" % u"string") - - def test_single_type_list_failure(self): - message = self.message_for(instance=1, schema={u"type": [u"string"]}) - self.assertEqual(message, "1 is not of type %r" % u"string") - - def test_multiple_type_failure(self): - types = u"string", u"object" - message = self.message_for(instance=1, schema={u"type": list(types)}) - self.assertEqual(message, "1 is not of type %r, %r" % types) - - def test_object_without_title_type_failure(self): - type = {u"type": [{u"minimum": 3}]} - message = self.message_for(instance=1, schema={u"type": [type]}) - self.assertEqual(message, "1 is less than the minimum of 3") - - def test_object_with_named_type_failure(self): - schema = {u"type": [{u"name": "Foo", u"minimum": 3}]} - message = self.message_for(instance=1, schema=schema) - self.assertEqual(message, "1 is less than the minimum of 3") - - def test_minimum(self): - message = self.message_for(instance=1, schema={"minimum": 2}) - self.assertEqual(message, "1 is less than the minimum of 2") - - def test_maximum(self): - message = self.message_for(instance=1, schema={"maximum": 0}) - self.assertEqual(message, "1 is greater than the maximum of 0") - - def test_dependencies_single_element(self): - depend, on = "bar", "foo" - schema = {u"dependencies": {depend: on}} - message = self.message_for( - instance={"bar": 2}, - schema=schema, - cls=validators.Draft3Validator, - ) - self.assertEqual(message, "%r is a dependency of %r" % (on, depend)) - - def test_dependencies_list_draft3(self): - depend, on = "bar", "foo" - schema = {u"dependencies": {depend: [on]}} - message = self.message_for( - instance={"bar": 2}, - schema=schema, - cls=validators.Draft3Validator, - ) - self.assertEqual(message, "%r is a dependency of %r" % (on, depend)) - - def test_dependencies_list_draft7(self): - depend, on = "bar", "foo" - schema = {u"dependencies": {depend: [on]}} - message = self.message_for( - instance={"bar": 2}, - schema=schema, - cls=validators.Draft7Validator, - ) - self.assertEqual(message, "%r is a dependency of %r" % (on, depend)) - - def test_additionalItems_single_failure(self): - message = self.message_for( - instance=[2], - schema={u"items": [], u"additionalItems": False}, - ) - self.assertIn("(2 was unexpected)", message) - - def test_additionalItems_multiple_failures(self): - message = self.message_for( - instance=[1, 2, 3], - schema={u"items": [], u"additionalItems": False} - ) - self.assertIn("(1, 2, 3 were unexpected)", message) - - def test_additionalProperties_single_failure(self): - additional = "foo" - schema = {u"additionalProperties": False} - message = self.message_for(instance={additional: 2}, schema=schema) - self.assertIn("(%r was unexpected)" % (additional,), message) - - def test_additionalProperties_multiple_failures(self): - schema = {u"additionalProperties": False} - message = self.message_for( - instance=dict.fromkeys(["foo", "bar"]), - schema=schema, - ) - - self.assertIn(repr("foo"), message) - self.assertIn(repr("bar"), message) - self.assertIn("were unexpected)", message) - - def test_const(self): - schema = {u"const": 12} - message = self.message_for( - instance={"foo": "bar"}, - schema=schema, - cls=validators.Draft6Validator, - ) - self.assertIn("12 was expected", message) - - def test_contains(self): - schema = {u"contains": {u"const": 12}} - message = self.message_for( - instance=[2, {}, []], - schema=schema, - cls=validators.Draft6Validator, - ) - self.assertIn( - "None of [2, {}, []] are valid under the given schema", - message, - ) - - def test_invalid_format_default_message(self): - checker = FormatChecker(formats=()) - checker.checks(u"thing")(lambda value: False) - - schema = {u"format": u"thing"} - message = self.message_for( - instance="bla", - schema=schema, - format_checker=checker, - ) - - self.assertIn(repr("bla"), message) - self.assertIn(repr("thing"), message) - self.assertIn("is not a", message) - - def test_additionalProperties_false_patternProperties(self): - schema = {u"type": u"object", - u"additionalProperties": False, - u"patternProperties": { - u"^abc$": {u"type": u"string"}, - u"^def$": {u"type": u"string"}, - }} - message = self.message_for( - instance={u"zebra": 123}, - schema=schema, - cls=validators.Draft4Validator, - ) - self.assertEqual( - message, - "{} does not match any of the regexes: {}, {}".format( - repr(u"zebra"), repr(u"^abc$"), repr(u"^def$"), - ), - ) - message = self.message_for( - instance={u"zebra": 123, u"fish": 456}, - schema=schema, - cls=validators.Draft4Validator, - ) - self.assertEqual( - message, - "{}, {} do not match any of the regexes: {}, {}".format( - repr(u"fish"), repr(u"zebra"), repr(u"^abc$"), repr(u"^def$") - ), - ) - - def test_False_schema(self): - message = self.message_for( - instance="something", - schema=False, - cls=validators.Draft7Validator, - ) - self.assertIn("False schema does not allow 'something'", message) - - -class TestValidationErrorDetails(TestCase): - # TODO: These really need unit tests for each individual validator, rather - # than just these higher level tests. - def test_anyOf(self): - instance = 5 - schema = { - "anyOf": [ - {"minimum": 20}, - {"type": "string"}, - ], - } - - validator = validators.Draft4Validator(schema) - errors = list(validator.iter_errors(instance)) - self.assertEqual(len(errors), 1) - e = errors[0] - - self.assertEqual(e.validator, "anyOf") - self.assertEqual(e.validator_value, schema["anyOf"]) - self.assertEqual(e.instance, instance) - self.assertEqual(e.schema, schema) - self.assertIsNone(e.parent) - - self.assertEqual(e.path, deque([])) - self.assertEqual(e.relative_path, deque([])) - self.assertEqual(e.absolute_path, deque([])) - - self.assertEqual(e.schema_path, deque(["anyOf"])) - self.assertEqual(e.relative_schema_path, deque(["anyOf"])) - self.assertEqual(e.absolute_schema_path, deque(["anyOf"])) - - self.assertEqual(len(e.context), 2) - - e1, e2 = sorted_errors(e.context) - - self.assertEqual(e1.validator, "minimum") - self.assertEqual(e1.validator_value, schema["anyOf"][0]["minimum"]) - self.assertEqual(e1.instance, instance) - self.assertEqual(e1.schema, schema["anyOf"][0]) - self.assertIs(e1.parent, e) - - self.assertEqual(e1.path, deque([])) - self.assertEqual(e1.absolute_path, deque([])) - self.assertEqual(e1.relative_path, deque([])) - - self.assertEqual(e1.schema_path, deque([0, "minimum"])) - self.assertEqual(e1.relative_schema_path, deque([0, "minimum"])) - self.assertEqual( - e1.absolute_schema_path, deque(["anyOf", 0, "minimum"]), - ) - - self.assertFalse(e1.context) - - self.assertEqual(e2.validator, "type") - self.assertEqual(e2.validator_value, schema["anyOf"][1]["type"]) - self.assertEqual(e2.instance, instance) - self.assertEqual(e2.schema, schema["anyOf"][1]) - self.assertIs(e2.parent, e) - - self.assertEqual(e2.path, deque([])) - self.assertEqual(e2.relative_path, deque([])) - self.assertEqual(e2.absolute_path, deque([])) - - self.assertEqual(e2.schema_path, deque([1, "type"])) - self.assertEqual(e2.relative_schema_path, deque([1, "type"])) - self.assertEqual(e2.absolute_schema_path, deque(["anyOf", 1, "type"])) - - self.assertEqual(len(e2.context), 0) - - def test_type(self): - instance = {"foo": 1} - schema = { - "type": [ - {"type": "integer"}, - { - "type": "object", - "properties": {"foo": {"enum": [2]}}, - }, - ], - } - - validator = validators.Draft3Validator(schema) - errors = list(validator.iter_errors(instance)) - self.assertEqual(len(errors), 1) - e = errors[0] - - self.assertEqual(e.validator, "type") - self.assertEqual(e.validator_value, schema["type"]) - self.assertEqual(e.instance, instance) - self.assertEqual(e.schema, schema) - self.assertIsNone(e.parent) - - self.assertEqual(e.path, deque([])) - self.assertEqual(e.relative_path, deque([])) - self.assertEqual(e.absolute_path, deque([])) - - self.assertEqual(e.schema_path, deque(["type"])) - self.assertEqual(e.relative_schema_path, deque(["type"])) - self.assertEqual(e.absolute_schema_path, deque(["type"])) - - self.assertEqual(len(e.context), 2) - - e1, e2 = sorted_errors(e.context) - - self.assertEqual(e1.validator, "type") - self.assertEqual(e1.validator_value, schema["type"][0]["type"]) - self.assertEqual(e1.instance, instance) - self.assertEqual(e1.schema, schema["type"][0]) - self.assertIs(e1.parent, e) - - self.assertEqual(e1.path, deque([])) - self.assertEqual(e1.relative_path, deque([])) - self.assertEqual(e1.absolute_path, deque([])) - - self.assertEqual(e1.schema_path, deque([0, "type"])) - self.assertEqual(e1.relative_schema_path, deque([0, "type"])) - self.assertEqual(e1.absolute_schema_path, deque(["type", 0, "type"])) - - self.assertFalse(e1.context) - - self.assertEqual(e2.validator, "enum") - self.assertEqual(e2.validator_value, [2]) - self.assertEqual(e2.instance, 1) - self.assertEqual(e2.schema, {u"enum": [2]}) - self.assertIs(e2.parent, e) - - self.assertEqual(e2.path, deque(["foo"])) - self.assertEqual(e2.relative_path, deque(["foo"])) - self.assertEqual(e2.absolute_path, deque(["foo"])) - - self.assertEqual( - e2.schema_path, deque([1, "properties", "foo", "enum"]), - ) - self.assertEqual( - e2.relative_schema_path, deque([1, "properties", "foo", "enum"]), - ) - self.assertEqual( - e2.absolute_schema_path, - deque(["type", 1, "properties", "foo", "enum"]), - ) - - self.assertFalse(e2.context) - - def test_single_nesting(self): - instance = {"foo": 2, "bar": [1], "baz": 15, "quux": "spam"} - schema = { - "properties": { - "foo": {"type": "string"}, - "bar": {"minItems": 2}, - "baz": {"maximum": 10, "enum": [2, 4, 6, 8]}, - }, - } - - validator = validators.Draft3Validator(schema) - errors = validator.iter_errors(instance) - e1, e2, e3, e4 = sorted_errors(errors) - - self.assertEqual(e1.path, deque(["bar"])) - self.assertEqual(e2.path, deque(["baz"])) - self.assertEqual(e3.path, deque(["baz"])) - self.assertEqual(e4.path, deque(["foo"])) - - self.assertEqual(e1.relative_path, deque(["bar"])) - self.assertEqual(e2.relative_path, deque(["baz"])) - self.assertEqual(e3.relative_path, deque(["baz"])) - self.assertEqual(e4.relative_path, deque(["foo"])) - - self.assertEqual(e1.absolute_path, deque(["bar"])) - self.assertEqual(e2.absolute_path, deque(["baz"])) - self.assertEqual(e3.absolute_path, deque(["baz"])) - self.assertEqual(e4.absolute_path, deque(["foo"])) - - self.assertEqual(e1.validator, "minItems") - self.assertEqual(e2.validator, "enum") - self.assertEqual(e3.validator, "maximum") - self.assertEqual(e4.validator, "type") - - def test_multiple_nesting(self): - instance = [1, {"foo": 2, "bar": {"baz": [1]}}, "quux"] - schema = { - "type": "string", - "items": { - "type": ["string", "object"], - "properties": { - "foo": {"enum": [1, 3]}, - "bar": { - "type": "array", - "properties": { - "bar": {"required": True}, - "baz": {"minItems": 2}, - }, - }, - }, - }, - } - - validator = validators.Draft3Validator(schema) - errors = validator.iter_errors(instance) - e1, e2, e3, e4, e5, e6 = sorted_errors(errors) - - self.assertEqual(e1.path, deque([])) - self.assertEqual(e2.path, deque([0])) - self.assertEqual(e3.path, deque([1, "bar"])) - self.assertEqual(e4.path, deque([1, "bar", "bar"])) - self.assertEqual(e5.path, deque([1, "bar", "baz"])) - self.assertEqual(e6.path, deque([1, "foo"])) - - self.assertEqual(e1.schema_path, deque(["type"])) - self.assertEqual(e2.schema_path, deque(["items", "type"])) - self.assertEqual( - list(e3.schema_path), ["items", "properties", "bar", "type"], - ) - self.assertEqual( - list(e4.schema_path), - ["items", "properties", "bar", "properties", "bar", "required"], - ) - self.assertEqual( - list(e5.schema_path), - ["items", "properties", "bar", "properties", "baz", "minItems"] - ) - self.assertEqual( - list(e6.schema_path), ["items", "properties", "foo", "enum"], - ) - - self.assertEqual(e1.validator, "type") - self.assertEqual(e2.validator, "type") - self.assertEqual(e3.validator, "type") - self.assertEqual(e4.validator, "required") - self.assertEqual(e5.validator, "minItems") - self.assertEqual(e6.validator, "enum") - - def test_recursive(self): - schema = { - "definitions": { - "node": { - "anyOf": [{ - "type": "object", - "required": ["name", "children"], - "properties": { - "name": { - "type": "string", - }, - "children": { - "type": "object", - "patternProperties": { - "^.*$": { - "$ref": "#/definitions/node", - }, - }, - }, - }, - }], - }, - }, - "type": "object", - "required": ["root"], - "properties": {"root": {"$ref": "#/definitions/node"}}, - } - - instance = { - "root": { - "name": "root", - "children": { - "a": { - "name": "a", - "children": { - "ab": { - "name": "ab", - # missing "children" - }, - }, - }, - }, - }, - } - validator = validators.Draft4Validator(schema) - - e, = validator.iter_errors(instance) - self.assertEqual(e.absolute_path, deque(["root"])) - self.assertEqual( - e.absolute_schema_path, deque(["properties", "root", "anyOf"]), - ) - - e1, = e.context - self.assertEqual(e1.absolute_path, deque(["root", "children", "a"])) - self.assertEqual( - e1.absolute_schema_path, deque( - [ - "properties", - "root", - "anyOf", - 0, - "properties", - "children", - "patternProperties", - "^.*$", - "anyOf", - ], - ), - ) - - e2, = e1.context - self.assertEqual( - e2.absolute_path, deque( - ["root", "children", "a", "children", "ab"], - ), - ) - self.assertEqual( - e2.absolute_schema_path, deque( - [ - "properties", - "root", - "anyOf", - 0, - "properties", - "children", - "patternProperties", - "^.*$", - "anyOf", - 0, - "properties", - "children", - "patternProperties", - "^.*$", - "anyOf", - ], - ), - ) - - def test_additionalProperties(self): - instance = {"bar": "bar", "foo": 2} - schema = {"additionalProperties": {"type": "integer", "minimum": 5}} - - validator = validators.Draft3Validator(schema) - errors = validator.iter_errors(instance) - e1, e2 = sorted_errors(errors) - - self.assertEqual(e1.path, deque(["bar"])) - self.assertEqual(e2.path, deque(["foo"])) - - self.assertEqual(e1.validator, "type") - self.assertEqual(e2.validator, "minimum") - - def test_patternProperties(self): - instance = {"bar": 1, "foo": 2} - schema = { - "patternProperties": { - "bar": {"type": "string"}, - "foo": {"minimum": 5}, - }, - } - - validator = validators.Draft3Validator(schema) - errors = validator.iter_errors(instance) - e1, e2 = sorted_errors(errors) - - self.assertEqual(e1.path, deque(["bar"])) - self.assertEqual(e2.path, deque(["foo"])) - - self.assertEqual(e1.validator, "type") - self.assertEqual(e2.validator, "minimum") - - def test_additionalItems(self): - instance = ["foo", 1] - schema = { - "items": [], - "additionalItems": {"type": "integer", "minimum": 5}, - } - - validator = validators.Draft3Validator(schema) - errors = validator.iter_errors(instance) - e1, e2 = sorted_errors(errors) - - self.assertEqual(e1.path, deque([0])) - self.assertEqual(e2.path, deque([1])) - - self.assertEqual(e1.validator, "type") - self.assertEqual(e2.validator, "minimum") - - def test_additionalItems_with_items(self): - instance = ["foo", "bar", 1] - schema = { - "items": [{}], - "additionalItems": {"type": "integer", "minimum": 5}, - } - - validator = validators.Draft3Validator(schema) - errors = validator.iter_errors(instance) - e1, e2 = sorted_errors(errors) - - self.assertEqual(e1.path, deque([1])) - self.assertEqual(e2.path, deque([2])) - - self.assertEqual(e1.validator, "type") - self.assertEqual(e2.validator, "minimum") - - def test_propertyNames(self): - instance = {"foo": 12} - schema = {"propertyNames": {"not": {"const": "foo"}}} - - validator = validators.Draft7Validator(schema) - error, = validator.iter_errors(instance) - - self.assertEqual(error.validator, "not") - self.assertEqual( - error.message, - "%r is not allowed for %r" % ({"const": "foo"}, "foo"), - ) - self.assertEqual(error.path, deque([])) - self.assertEqual(error.schema_path, deque(["propertyNames", "not"])) - - def test_if_then(self): - schema = { - "if": {"const": 12}, - "then": {"const": 13}, - } - - validator = validators.Draft7Validator(schema) - error, = validator.iter_errors(12) - - self.assertEqual(error.validator, "const") - self.assertEqual(error.message, "13 was expected") - self.assertEqual(error.path, deque([])) - self.assertEqual(error.schema_path, deque(["if", "then", "const"])) - - def test_if_else(self): - schema = { - "if": {"const": 12}, - "else": {"const": 13}, - } - - validator = validators.Draft7Validator(schema) - error, = validator.iter_errors(15) - - self.assertEqual(error.validator, "const") - self.assertEqual(error.message, "13 was expected") - self.assertEqual(error.path, deque([])) - self.assertEqual(error.schema_path, deque(["if", "else", "const"])) - - def test_boolean_schema_False(self): - validator = validators.Draft7Validator(False) - error, = validator.iter_errors(12) - - self.assertEqual( - ( - error.message, - error.validator, - error.validator_value, - error.instance, - error.schema, - error.schema_path, - ), - ( - "False schema does not allow 12", - None, - None, - 12, - False, - deque([]), - ), - ) - - def test_ref(self): - ref, schema = "someRef", {"additionalProperties": {"type": "integer"}} - validator = validators.Draft7Validator( - {"$ref": ref}, - resolver=validators.RefResolver("", {}, store={ref: schema}), - ) - error, = validator.iter_errors({"foo": "notAnInteger"}) - - self.assertEqual( - ( - error.message, - error.validator, - error.validator_value, - error.instance, - error.absolute_path, - error.schema, - error.schema_path, - ), - ( - "'notAnInteger' is not of type 'integer'", - "type", - "integer", - "notAnInteger", - deque(["foo"]), - {"type": "integer"}, - deque(["additionalProperties", "type"]), - ), - ) - - -class MetaSchemaTestsMixin(object): - # TODO: These all belong upstream - def test_invalid_properties(self): - with self.assertRaises(exceptions.SchemaError): - self.Validator.check_schema({"properties": {"test": object()}}) - - def test_minItems_invalid_string(self): - with self.assertRaises(exceptions.SchemaError): - # needs to be an integer - self.Validator.check_schema({"minItems": "1"}) - - def test_enum_allows_empty_arrays(self): - """ - Technically, all the spec says is they SHOULD have elements, not MUST. - - See https://github.com/Julian/jsonschema/issues/529. - """ - self.Validator.check_schema({"enum": []}) - - def test_enum_allows_non_unique_items(self): - """ - Technically, all the spec says is they SHOULD be unique, not MUST. - - See https://github.com/Julian/jsonschema/issues/529. - """ - self.Validator.check_schema({"enum": [12, 12]}) - - -class ValidatorTestMixin(MetaSchemaTestsMixin, object): - def test_valid_instances_are_valid(self): - schema, instance = self.valid - self.assertTrue(self.Validator(schema).is_valid(instance)) - - def test_invalid_instances_are_not_valid(self): - schema, instance = self.invalid - self.assertFalse(self.Validator(schema).is_valid(instance)) - - def test_non_existent_properties_are_ignored(self): - self.Validator({object(): object()}).validate(instance=object()) - - def test_it_creates_a_ref_resolver_if_not_provided(self): - self.assertIsInstance( - self.Validator({}).resolver, - validators.RefResolver, - ) - - def test_it_delegates_to_a_ref_resolver(self): - ref, schema = "someCoolRef", {"type": "integer"} - resolver = validators.RefResolver("", {}, store={ref: schema}) - validator = self.Validator({"$ref": ref}, resolver=resolver) - - with self.assertRaises(exceptions.ValidationError): - validator.validate(None) - - def test_it_delegates_to_a_legacy_ref_resolver(self): - """ - Legacy RefResolvers support only the context manager form of - resolution. - """ - - class LegacyRefResolver(object): - @contextmanager - def resolving(this, ref): - self.assertEqual(ref, "the ref") - yield {"type": "integer"} - - resolver = LegacyRefResolver() - schema = {"$ref": "the ref"} - - with self.assertRaises(exceptions.ValidationError): - self.Validator(schema, resolver=resolver).validate(None) - - def test_is_type_is_true_for_valid_type(self): - self.assertTrue(self.Validator({}).is_type("foo", "string")) - - def test_is_type_is_false_for_invalid_type(self): - self.assertFalse(self.Validator({}).is_type("foo", "array")) - - def test_is_type_evades_bool_inheriting_from_int(self): - self.assertFalse(self.Validator({}).is_type(True, "integer")) - self.assertFalse(self.Validator({}).is_type(True, "number")) - - @unittest.skipIf(PY3, "In Python 3 json.load always produces unicode") - def test_string_a_bytestring_is_a_string(self): - self.Validator({"type": "string"}).validate(b"foo") - - def test_patterns_can_be_native_strings(self): - """ - See https://github.com/Julian/jsonschema/issues/611. - """ - self.Validator({"pattern": "foo"}).validate("foo") - - def test_it_can_validate_with_decimals(self): - schema = {"items": {"type": "number"}} - Validator = validators.extend( - self.Validator, - type_checker=self.Validator.TYPE_CHECKER.redefine( - "number", - lambda checker, thing: isinstance( - thing, (int, float, Decimal), - ) and not isinstance(thing, bool), - ) - ) - - validator = Validator(schema) - validator.validate([1, 1.1, Decimal(1) / Decimal(8)]) - - invalid = ["foo", {}, [], True, None] - self.assertEqual( - [error.instance for error in validator.iter_errors(invalid)], - invalid, - ) - - def test_it_returns_true_for_formats_it_does_not_know_about(self): - validator = self.Validator( - {"format": "carrot"}, format_checker=FormatChecker(), - ) - validator.validate("bugs") - - def test_it_does_not_validate_formats_by_default(self): - validator = self.Validator({}) - self.assertIsNone(validator.format_checker) - - def test_it_validates_formats_if_a_checker_is_provided(self): - checker = FormatChecker() - bad = ValueError("Bad!") - - @checker.checks("foo", raises=ValueError) - def check(value): - if value == "good": - return True - elif value == "bad": - raise bad - else: # pragma: no cover - self.fail("What is {}? [Baby Don't Hurt Me]".format(value)) - - validator = self.Validator( - {"format": "foo"}, format_checker=checker, - ) - - validator.validate("good") - with self.assertRaises(exceptions.ValidationError) as cm: - validator.validate("bad") - - # Make sure original cause is attached - self.assertIs(cm.exception.cause, bad) - - def test_non_string_custom_type(self): - non_string_type = object() - schema = {"type": [non_string_type]} - Crazy = validators.extend( - self.Validator, - type_checker=self.Validator.TYPE_CHECKER.redefine( - non_string_type, - lambda checker, thing: isinstance(thing, int), - ) - ) - Crazy(schema).validate(15) - - def test_it_properly_formats_tuples_in_errors(self): - """ - A tuple instance properly formats validation errors for uniqueItems. - - See https://github.com/Julian/jsonschema/pull/224 - """ - TupleValidator = validators.extend( - self.Validator, - type_checker=self.Validator.TYPE_CHECKER.redefine( - "array", - lambda checker, thing: isinstance(thing, tuple), - ) - ) - with self.assertRaises(exceptions.ValidationError) as e: - TupleValidator({"uniqueItems": True}).validate((1, 1)) - self.assertIn("(1, 1) has non-unique elements", str(e.exception)) - - -class AntiDraft6LeakMixin(object): - """ - Make sure functionality from draft 6 doesn't leak backwards in time. - """ - - def test_True_is_not_a_schema(self): - with self.assertRaises(exceptions.SchemaError) as e: - self.Validator.check_schema(True) - self.assertIn("True is not of type", str(e.exception)) - - def test_False_is_not_a_schema(self): - with self.assertRaises(exceptions.SchemaError) as e: - self.Validator.check_schema(False) - self.assertIn("False is not of type", str(e.exception)) - - @unittest.skip(bug(523)) - def test_True_is_not_a_schema_even_if_you_forget_to_check(self): - resolver = validators.RefResolver("", {}) - with self.assertRaises(Exception) as e: - self.Validator(True, resolver=resolver).validate(12) - self.assertNotIsInstance(e.exception, exceptions.ValidationError) - - @unittest.skip(bug(523)) - def test_False_is_not_a_schema_even_if_you_forget_to_check(self): - resolver = validators.RefResolver("", {}) - with self.assertRaises(Exception) as e: - self.Validator(False, resolver=resolver).validate(12) - self.assertNotIsInstance(e.exception, exceptions.ValidationError) - - -class TestDraft3Validator(AntiDraft6LeakMixin, ValidatorTestMixin, TestCase): - Validator = validators.Draft3Validator - valid = {}, {} - invalid = {"type": "integer"}, "foo" - - def test_any_type_is_valid_for_type_any(self): - validator = self.Validator({"type": "any"}) - validator.validate(object()) - - def test_any_type_is_redefinable(self): - """ - Sigh, because why not. - """ - Crazy = validators.extend( - self.Validator, - type_checker=self.Validator.TYPE_CHECKER.redefine( - "any", lambda checker, thing: isinstance(thing, int), - ) - ) - validator = Crazy({"type": "any"}) - validator.validate(12) - with self.assertRaises(exceptions.ValidationError): - validator.validate("foo") - - def test_is_type_is_true_for_any_type(self): - self.assertTrue(self.Validator({}).is_valid(object(), {"type": "any"})) - - def test_is_type_does_not_evade_bool_if_it_is_being_tested(self): - self.assertTrue(self.Validator({}).is_type(True, "boolean")) - self.assertTrue(self.Validator({}).is_valid(True, {"type": "any"})) - - -class TestDraft4Validator(AntiDraft6LeakMixin, ValidatorTestMixin, TestCase): - Validator = validators.Draft4Validator - valid = {}, {} - invalid = {"type": "integer"}, "foo" - - -class TestDraft6Validator(ValidatorTestMixin, TestCase): - Validator = validators.Draft6Validator - valid = {}, {} - invalid = {"type": "integer"}, "foo" - - -class TestDraft7Validator(ValidatorTestMixin, TestCase): - Validator = validators.Draft7Validator - valid = {}, {} - invalid = {"type": "integer"}, "foo" - - -class TestValidatorFor(SynchronousTestCase): - def test_draft_3(self): - schema = {"$schema": "http://json-schema.org/draft-03/schema"} - self.assertIs( - validators.validator_for(schema), - validators.Draft3Validator, - ) - - schema = {"$schema": "http://json-schema.org/draft-03/schema#"} - self.assertIs( - validators.validator_for(schema), - validators.Draft3Validator, - ) - - def test_draft_4(self): - schema = {"$schema": "http://json-schema.org/draft-04/schema"} - self.assertIs( - validators.validator_for(schema), - validators.Draft4Validator, - ) - - schema = {"$schema": "http://json-schema.org/draft-04/schema#"} - self.assertIs( - validators.validator_for(schema), - validators.Draft4Validator, - ) - - def test_draft_6(self): - schema = {"$schema": "http://json-schema.org/draft-06/schema"} - self.assertIs( - validators.validator_for(schema), - validators.Draft6Validator, - ) - - schema = {"$schema": "http://json-schema.org/draft-06/schema#"} - self.assertIs( - validators.validator_for(schema), - validators.Draft6Validator, - ) - - def test_draft_7(self): - schema = {"$schema": "http://json-schema.org/draft-07/schema"} - self.assertIs( - validators.validator_for(schema), - validators.Draft7Validator, - ) - - schema = {"$schema": "http://json-schema.org/draft-07/schema#"} - self.assertIs( - validators.validator_for(schema), - validators.Draft7Validator, - ) - - def test_True(self): - self.assertIs( - validators.validator_for(True), - validators._LATEST_VERSION, - ) - - def test_False(self): - self.assertIs( - validators.validator_for(False), - validators._LATEST_VERSION, - ) - - def test_custom_validator(self): - Validator = validators.create( - meta_schema={"id": "meta schema id"}, - version="12", - id_of=lambda s: s.get("id", ""), - ) - schema = {"$schema": "meta schema id"} - self.assertIs( - validators.validator_for(schema), - Validator, - ) - - def test_custom_validator_draft6(self): - Validator = validators.create( - meta_schema={"$id": "meta schema $id"}, - version="13", - ) - schema = {"$schema": "meta schema $id"} - self.assertIs( - validators.validator_for(schema), - Validator, - ) - - def test_validator_for_jsonschema_default(self): - self.assertIs(validators.validator_for({}), validators._LATEST_VERSION) - - def test_validator_for_custom_default(self): - self.assertIs(validators.validator_for({}, default=None), None) - - def test_warns_if_meta_schema_specified_was_not_found(self): - self.assertWarns( - category=DeprecationWarning, - message=( - "The metaschema specified by $schema was not found. " - "Using the latest draft to validate, but this will raise " - "an error in the future." - ), - # https://tm.tl/9363 :'( - filename=sys.modules[self.assertWarns.__module__].__file__, - - f=validators.validator_for, - schema={u"$schema": "unknownSchema"}, - default={}, - ) - - def test_does_not_warn_if_meta_schema_is_unspecified(self): - validators.validator_for(schema={}, default={}), - self.assertFalse(self.flushWarnings()) - - -class TestValidate(SynchronousTestCase): - def assertUses(self, schema, Validator): - result = [] - self.patch(Validator, "check_schema", result.append) - validators.validate({}, schema) - self.assertEqual(result, [schema]) - - def test_draft3_validator_is_chosen(self): - self.assertUses( - schema={"$schema": "http://json-schema.org/draft-03/schema#"}, - Validator=validators.Draft3Validator, - ) - # Make sure it works without the empty fragment - self.assertUses( - schema={"$schema": "http://json-schema.org/draft-03/schema"}, - Validator=validators.Draft3Validator, - ) - - def test_draft4_validator_is_chosen(self): - self.assertUses( - schema={"$schema": "http://json-schema.org/draft-04/schema#"}, - Validator=validators.Draft4Validator, - ) - # Make sure it works without the empty fragment - self.assertUses( - schema={"$schema": "http://json-schema.org/draft-04/schema"}, - Validator=validators.Draft4Validator, - ) - - def test_draft6_validator_is_chosen(self): - self.assertUses( - schema={"$schema": "http://json-schema.org/draft-06/schema#"}, - Validator=validators.Draft6Validator, - ) - # Make sure it works without the empty fragment - self.assertUses( - schema={"$schema": "http://json-schema.org/draft-06/schema"}, - Validator=validators.Draft6Validator, - ) - - def test_draft7_validator_is_chosen(self): - self.assertUses( - schema={"$schema": "http://json-schema.org/draft-07/schema#"}, - Validator=validators.Draft7Validator, - ) - # Make sure it works without the empty fragment - self.assertUses( - schema={"$schema": "http://json-schema.org/draft-07/schema"}, - Validator=validators.Draft7Validator, - ) - - def test_draft7_validator_is_the_default(self): - self.assertUses(schema={}, Validator=validators.Draft7Validator) - - def test_validation_error_message(self): - with self.assertRaises(exceptions.ValidationError) as e: - validators.validate(12, {"type": "string"}) - self.assertRegexpMatches( - str(e.exception), - "(?s)Failed validating u?'.*' in schema.*On instance", - ) - - def test_schema_error_message(self): - with self.assertRaises(exceptions.SchemaError) as e: - validators.validate(12, {"type": 12}) - self.assertRegexpMatches( - str(e.exception), - "(?s)Failed validating u?'.*' in metaschema.*On schema", - ) - - def test_it_uses_best_match(self): - # This is a schema that best_match will recurse into - schema = {"oneOf": [{"type": "string"}, {"type": "array"}]} - with self.assertRaises(exceptions.ValidationError) as e: - validators.validate(12, schema) - self.assertIn("12 is not of type", str(e.exception)) - - -class TestRefResolver(SynchronousTestCase): - - base_uri = "" - stored_uri = "foo://stored" - stored_schema = {"stored": "schema"} - - def setUp(self): - self.referrer = {} - self.store = {self.stored_uri: self.stored_schema} - self.resolver = validators.RefResolver( - self.base_uri, self.referrer, self.store, - ) - - def test_it_does_not_retrieve_schema_urls_from_the_network(self): - ref = validators.Draft3Validator.META_SCHEMA["id"] - self.patch( - self.resolver, - "resolve_remote", - lambda *args, **kwargs: self.fail("Should not have been called!"), - ) - with self.resolver.resolving(ref) as resolved: - pass - self.assertEqual(resolved, validators.Draft3Validator.META_SCHEMA) - - def test_it_resolves_local_refs(self): - ref = "#/properties/foo" - self.referrer["properties"] = {"foo": object()} - with self.resolver.resolving(ref) as resolved: - self.assertEqual(resolved, self.referrer["properties"]["foo"]) - - def test_it_resolves_local_refs_with_id(self): - schema = {"id": "http://bar/schema#", "a": {"foo": "bar"}} - resolver = validators.RefResolver.from_schema( - schema, - id_of=lambda schema: schema.get(u"id", u""), - ) - with resolver.resolving("#/a") as resolved: - self.assertEqual(resolved, schema["a"]) - with resolver.resolving("http://bar/schema#/a") as resolved: - self.assertEqual(resolved, schema["a"]) - - def test_it_retrieves_stored_refs(self): - with self.resolver.resolving(self.stored_uri) as resolved: - self.assertIs(resolved, self.stored_schema) - - self.resolver.store["cached_ref"] = {"foo": 12} - with self.resolver.resolving("cached_ref#/foo") as resolved: - self.assertEqual(resolved, 12) - - def test_it_retrieves_unstored_refs_via_requests(self): - ref = "http://bar#baz" - schema = {"baz": 12} - - if "requests" in sys.modules: - self.addCleanup( - sys.modules.__setitem__, "requests", sys.modules["requests"], - ) - sys.modules["requests"] = ReallyFakeRequests({"http://bar": schema}) - - with self.resolver.resolving(ref) as resolved: - self.assertEqual(resolved, 12) - - def test_it_retrieves_unstored_refs_via_urlopen(self): - ref = "http://bar#baz" - schema = {"baz": 12} - - if "requests" in sys.modules: - self.addCleanup( - sys.modules.__setitem__, "requests", sys.modules["requests"], - ) - sys.modules["requests"] = None - - @contextmanager - def fake_urlopen(url): - self.assertEqual(url, "http://bar") - yield BytesIO(json.dumps(schema).encode("utf8")) - - self.addCleanup(setattr, validators, "urlopen", validators.urlopen) - validators.urlopen = fake_urlopen - - with self.resolver.resolving(ref) as resolved: - pass - self.assertEqual(resolved, 12) - - def test_it_retrieves_local_refs_via_urlopen(self): - with tempfile.NamedTemporaryFile(delete=False, mode="wt") as tempf: - self.addCleanup(os.remove, tempf.name) - json.dump({"foo": "bar"}, tempf) - - ref = "file://{}#foo".format(pathname2url(tempf.name)) - with self.resolver.resolving(ref) as resolved: - self.assertEqual(resolved, "bar") - - def test_it_can_construct_a_base_uri_from_a_schema(self): - schema = {"id": "foo"} - resolver = validators.RefResolver.from_schema( - schema, - id_of=lambda schema: schema.get(u"id", u""), - ) - self.assertEqual(resolver.base_uri, "foo") - self.assertEqual(resolver.resolution_scope, "foo") - with resolver.resolving("") as resolved: - self.assertEqual(resolved, schema) - with resolver.resolving("#") as resolved: - self.assertEqual(resolved, schema) - with resolver.resolving("foo") as resolved: - self.assertEqual(resolved, schema) - with resolver.resolving("foo#") as resolved: - self.assertEqual(resolved, schema) - - def test_it_can_construct_a_base_uri_from_a_schema_without_id(self): - schema = {} - resolver = validators.RefResolver.from_schema(schema) - self.assertEqual(resolver.base_uri, "") - self.assertEqual(resolver.resolution_scope, "") - with resolver.resolving("") as resolved: - self.assertEqual(resolved, schema) - with resolver.resolving("#") as resolved: - self.assertEqual(resolved, schema) - - def test_custom_uri_scheme_handlers(self): - def handler(url): - self.assertEqual(url, ref) - return schema - - schema = {"foo": "bar"} - ref = "foo://bar" - resolver = validators.RefResolver("", {}, handlers={"foo": handler}) - with resolver.resolving(ref) as resolved: - self.assertEqual(resolved, schema) - - def test_cache_remote_on(self): - response = [object()] - - def handler(url): - try: - return response.pop() - except IndexError: # pragma: no cover - self.fail("Response must not have been cached!") - - ref = "foo://bar" - resolver = validators.RefResolver( - "", {}, cache_remote=True, handlers={"foo": handler}, - ) - with resolver.resolving(ref): - pass - with resolver.resolving(ref): - pass - - def test_cache_remote_off(self): - response = [object()] - - def handler(url): - try: - return response.pop() - except IndexError: # pragma: no cover - self.fail("Handler called twice!") - - ref = "foo://bar" - resolver = validators.RefResolver( - "", {}, cache_remote=False, handlers={"foo": handler}, - ) - with resolver.resolving(ref): - pass - - def test_if_you_give_it_junk_you_get_a_resolution_error(self): - error = ValueError("Oh no! What's this?") - - def handler(url): - raise error - - ref = "foo://bar" - resolver = validators.RefResolver("", {}, handlers={"foo": handler}) - with self.assertRaises(exceptions.RefResolutionError) as err: - with resolver.resolving(ref): - self.fail("Shouldn't get this far!") # pragma: no cover - self.assertEqual(err.exception, exceptions.RefResolutionError(error)) - - def test_helpful_error_message_on_failed_pop_scope(self): - resolver = validators.RefResolver("", {}) - resolver.pop_scope() - with self.assertRaises(exceptions.RefResolutionError) as exc: - resolver.pop_scope() - self.assertIn("Failed to pop the scope", str(exc.exception)) - - -def sorted_errors(errors): - def key(error): - return ( - [str(e) for e in error.path], - [str(e) for e in error.schema_path], - ) - return sorted(errors, key=key) - - -@attr.s -class ReallyFakeRequests(object): - - _responses = attr.ib() - - def get(self, url): - response = self._responses.get(url) - if url is None: # pragma: no cover - raise ValueError("Unknown URL: " + repr(url)) - return _ReallyFakeJSONResponse(json.dumps(response)) - - -@attr.s -class _ReallyFakeJSONResponse(object): - - _response = attr.ib() - - def json(self): - return json.loads(self._response) diff --git a/lib/spack/external/_vendoring/jsonschema/validators.py b/lib/spack/external/_vendoring/jsonschema/validators.py index 1dc420c70d2..75eab02d688 100644 --- a/lib/spack/external/_vendoring/jsonschema/validators.py +++ b/lib/spack/external/_vendoring/jsonschema/validators.py @@ -8,16 +8,16 @@ import json import numbers -from six import add_metaclass +from _vendoring.six import add_metaclass -from jsonschema import ( +from _vendoring.jsonschema import ( _legacy_validators, _types, _utils, _validators, exceptions, ) -from jsonschema.compat import ( +from _vendoring.jsonschema.compat import ( Sequence, int_types, iteritems, @@ -33,7 +33,7 @@ # Sigh. https://gitlab.com/pycqa/flake8/issues/280 # https://github.com/pyga/ebb-lint/issues/7 # Imported for backwards compatibility. -from jsonschema.exceptions import ErrorTree +from _vendoring.jsonschema.exceptions import ErrorTree ErrorTree diff --git a/lib/spack/external/_vendoring/macholib/MachO.py b/lib/spack/external/_vendoring/macholib/MachO.py index daa36b0d3c3..ed55a4a9358 100644 --- a/lib/spack/external/_vendoring/macholib/MachO.py +++ b/lib/spack/external/_vendoring/macholib/MachO.py @@ -7,7 +7,7 @@ import struct import sys -from macholib.util import fileview +from _vendoring.macholib.util import fileview from .mach_o import ( FAT_MAGIC, @@ -41,7 +41,7 @@ from .ptypes import sizeof try: - from macholib.compat import bytes + from _vendoring.macholib.compat import bytes except ImportError: pass diff --git a/lib/spack/external/_vendoring/macholib/MachOGraph.py b/lib/spack/external/_vendoring/macholib/MachOGraph.py index 8943ed8bd3b..666ff7cae04 100644 --- a/lib/spack/external/_vendoring/macholib/MachOGraph.py +++ b/lib/spack/external/_vendoring/macholib/MachOGraph.py @@ -5,11 +5,11 @@ import os import sys -from altgraph.ObjectGraph import ObjectGraph +from _vendoring.altgraph.ObjectGraph import ObjectGraph -from macholib.dyld import dyld_find -from macholib.itergraphreport import itergraphreport -from macholib.MachO import MachO +from _vendoring.macholib.dyld import dyld_find +from _vendoring.macholib.itergraphreport import itergraphreport +from _vendoring.macholib.MachO import MachO __all__ = ["MachOGraph"] diff --git a/lib/spack/external/_vendoring/macholib/MachOStandalone.py b/lib/spack/external/_vendoring/macholib/MachOStandalone.py index 6ce154227c5..ad84cdd7d34 100644 --- a/lib/spack/external/_vendoring/macholib/MachOStandalone.py +++ b/lib/spack/external/_vendoring/macholib/MachOStandalone.py @@ -1,9 +1,9 @@ import os from collections import deque -from macholib.dyld import framework_info -from macholib.MachOGraph import MachOGraph, MissingMachO -from macholib.util import ( +from _vendoring.macholib.dyld import framework_info +from _vendoring.macholib.MachOGraph import MachOGraph, MissingMachO +from _vendoring.macholib.util import ( flipwritable, has_filename_filter, in_system_path, diff --git a/lib/spack/external/_vendoring/macholib/SymbolTable.py b/lib/spack/external/_vendoring/macholib/SymbolTable.py index 006abab59fd..759eb464faf 100644 --- a/lib/spack/external/_vendoring/macholib/SymbolTable.py +++ b/lib/spack/external/_vendoring/macholib/SymbolTable.py @@ -5,7 +5,7 @@ import sys -from macholib.mach_o import ( +from _vendoring.macholib.mach_o import ( MH_CIGAM_64, MH_MAGIC_64, dylib_module, diff --git a/lib/spack/external/_vendoring/macholib/__main__.py b/lib/spack/external/_vendoring/macholib/__main__.py index dd3cc116108..8ad8e53c267 100644 --- a/lib/spack/external/_vendoring/macholib/__main__.py +++ b/lib/spack/external/_vendoring/macholib/__main__.py @@ -3,8 +3,8 @@ import os import sys -from macholib import macho_dump, macho_standalone -from macholib.util import is_platform_file +from _vendoring.macholib import macho_dump, macho_standalone +from _vendoring.macholib.util import is_platform_file gCommand = None @@ -43,10 +43,10 @@ def walk_tree(callback, paths): def print_usage(fp): print("Usage:", file=fp) - print(" python -mmacholib [help|--help]", file=fp) - print(" python -mmacholib dump FILE ...", file=fp) - print(" python -mmacholib find DIR ...", file=fp) - print(" python -mmacholib standalone DIR ...", file=fp) + print(" python -m_vendoring.macholib [help|--help]", file=fp) + print(" python -m_vendoring.macholib dump FILE ...", file=fp) + print(" python -m_vendoring.macholib find DIR ...", file=fp) + print(" python -m_vendoring.macholib standalone DIR ...", file=fp) def main(): diff --git a/lib/spack/external/_vendoring/macholib/_cmdline.py b/lib/spack/external/_vendoring/macholib/_cmdline.py index 9304fb62577..56a42e08f08 100644 --- a/lib/spack/external/_vendoring/macholib/_cmdline.py +++ b/lib/spack/external/_vendoring/macholib/_cmdline.py @@ -6,7 +6,7 @@ import os import sys -from macholib.util import is_platform_file +from _vendoring.macholib.util import is_platform_file def check_file(fp, path, callback): diff --git a/lib/spack/external/_vendoring/macholib/dyld.py b/lib/spack/external/_vendoring/macholib/dyld.py index fcb23198cb8..c8b84cb615b 100644 --- a/lib/spack/external/_vendoring/macholib/dyld.py +++ b/lib/spack/external/_vendoring/macholib/dyld.py @@ -8,8 +8,8 @@ import sys from itertools import chain -from macholib.dylib import dylib_info -from macholib.framework import framework_info +from _vendoring.macholib.dylib import dylib_info +from _vendoring.macholib.framework import framework_info __all__ = ["dyld_find", "framework_find", "framework_info", "dylib_info"] diff --git a/lib/spack/external/_vendoring/macholib/mach_o.py b/lib/spack/external/_vendoring/macholib/mach_o.py index bfe61571729..8af7ba731ac 100644 --- a/lib/spack/external/_vendoring/macholib/mach_o.py +++ b/lib/spack/external/_vendoring/macholib/mach_o.py @@ -13,7 +13,7 @@ import time -from macholib.ptypes import ( +from _vendoring.macholib.ptypes import ( Structure, p_int32, p_int64, diff --git a/lib/spack/external/_vendoring/macholib/macho_dump.py b/lib/spack/external/_vendoring/macholib/macho_dump.py index bca5d777ae8..fda8072c4e3 100644 --- a/lib/spack/external/_vendoring/macholib/macho_dump.py +++ b/lib/spack/external/_vendoring/macholib/macho_dump.py @@ -4,9 +4,9 @@ import sys -from macholib._cmdline import main as _main -from macholib.mach_o import CPU_TYPE_NAMES, MH_CIGAM_64, MH_MAGIC_64, get_cpu_subtype -from macholib.MachO import MachO +from _vendoring.macholib._cmdline import main as _main +from _vendoring.macholib.mach_o import CPU_TYPE_NAMES, MH_CIGAM_64, MH_MAGIC_64, get_cpu_subtype +from _vendoring.macholib.MachO import MachO ARCH_MAP = { ("<", "64-bit"): "x86_64", @@ -45,7 +45,7 @@ def print_file(fp, path): def main(): print( - "WARNING: 'macho_dump' is deprecated, use 'python -mmacholib dump' " "instead" + "WARNING: 'macho_dump' is deprecated, use 'python -m_vendoring.macholib dump' " "instead" ) _main(print_file) diff --git a/lib/spack/external/_vendoring/macholib/macho_find.py b/lib/spack/external/_vendoring/macholib/macho_find.py index a963c36dcc3..1fe315b8234 100644 --- a/lib/spack/external/_vendoring/macholib/macho_find.py +++ b/lib/spack/external/_vendoring/macholib/macho_find.py @@ -1,7 +1,7 @@ #!/usr/bin/env python from __future__ import print_function -from macholib._cmdline import main as _main +from _vendoring.macholib._cmdline import main as _main def print_file(fp, path): @@ -10,7 +10,7 @@ def print_file(fp, path): def main(): print( - "WARNING: 'macho_find' is deprecated, " "use 'python -mmacholib dump' instead" + "WARNING: 'macho_find' is deprecated, " "use 'python -m_vendoring.macholib dump' instead" ) _main(print_file) diff --git a/lib/spack/external/_vendoring/macholib/macho_standalone.py b/lib/spack/external/_vendoring/macholib/macho_standalone.py index 0bb29e802f3..bc527cd3a52 100644 --- a/lib/spack/external/_vendoring/macholib/macho_standalone.py +++ b/lib/spack/external/_vendoring/macholib/macho_standalone.py @@ -3,8 +3,8 @@ import os import sys -from macholib.MachOStandalone import MachOStandalone -from macholib.util import strip_files +from _vendoring.macholib.MachOStandalone import MachOStandalone +from _vendoring.macholib.util import strip_files def standaloneApp(path): @@ -18,7 +18,7 @@ def standaloneApp(path): def main(): print( "WARNING: 'macho_standalone' is deprecated, use " - "'python -mmacholib standalone' instead" + "'python -m_vendoring.macholib standalone' instead" ) if not sys.argv[1:]: raise SystemExit("usage: %s [appbundle ...]" % (sys.argv[0],)) diff --git a/lib/spack/external/_vendoring/macholib/util.py b/lib/spack/external/_vendoring/macholib/util.py index d5ab33544af..105e515aaf5 100644 --- a/lib/spack/external/_vendoring/macholib/util.py +++ b/lib/spack/external/_vendoring/macholib/util.py @@ -4,7 +4,7 @@ import struct import sys -from macholib import mach_o +from _vendoring.macholib import mach_o MAGIC = [ struct.pack("!L", getattr(mach_o, "MH_" + _)) diff --git a/lib/spack/external/_vendoring/markupsafe/__init__.py b/lib/spack/external/_vendoring/markupsafe/__init__.py index d331ac36228..e6868f1cbaf 100644 --- a/lib/spack/external/_vendoring/markupsafe/__init__.py +++ b/lib/spack/external/_vendoring/markupsafe/__init__.py @@ -4,7 +4,7 @@ import typing as t if t.TYPE_CHECKING: - import typing_extensions as te + import _vendoring.typing_extensions as te class HasHTML(te.Protocol): def __html__(self) -> str: diff --git a/lib/spack/external/_vendoring/pyrsistent/__init__.py b/lib/spack/external/_vendoring/pyrsistent/__init__.py index be299658f3f..7ba067c2a78 100644 --- a/lib/spack/external/_vendoring/pyrsistent/__init__.py +++ b/lib/spack/external/_vendoring/pyrsistent/__init__.py @@ -1,35 +1,35 @@ # -*- coding: utf-8 -*- -from pyrsistent._pmap import pmap, m, PMap +from _vendoring.pyrsistent._pmap import pmap, m, PMap -from pyrsistent._pvector import pvector, v, PVector +from _vendoring.pyrsistent._pvector import pvector, v, PVector -from pyrsistent._pset import pset, s, PSet +from _vendoring.pyrsistent._pset import pset, s, PSet -from pyrsistent._pbag import pbag, b, PBag +from _vendoring.pyrsistent._pbag import pbag, b, PBag -from pyrsistent._plist import plist, l, PList +from _vendoring.pyrsistent._plist import plist, l, PList -from pyrsistent._pdeque import pdeque, dq, PDeque +from _vendoring.pyrsistent._pdeque import pdeque, dq, PDeque -from pyrsistent._checked_types import ( +from _vendoring.pyrsistent._checked_types import ( CheckedPMap, CheckedPVector, CheckedPSet, InvariantException, CheckedKeyTypeError, CheckedValueTypeError, CheckedType, optional) -from pyrsistent._field_common import ( +from _vendoring.pyrsistent._field_common import ( field, PTypeError, pset_field, pmap_field, pvector_field) -from pyrsistent._precord import PRecord +from _vendoring.pyrsistent._precord import PRecord -from pyrsistent._pclass import PClass, PClassMeta +from _vendoring.pyrsistent._pclass import PClass, PClassMeta -from pyrsistent._immutable import immutable +from _vendoring.pyrsistent._immutable import immutable -from pyrsistent._helpers import freeze, thaw, mutant +from _vendoring.pyrsistent._helpers import freeze, thaw, mutant -from pyrsistent._transformations import inc, discard, rex, ny +from _vendoring.pyrsistent._transformations import inc, discard, rex, ny -from pyrsistent._toolz import get_in +from _vendoring.pyrsistent._toolz import get_in __all__ = ('pmap', 'm', 'PMap', diff --git a/lib/spack/external/_vendoring/pyrsistent/_checked_types.py b/lib/spack/external/_vendoring/pyrsistent/_checked_types.py index 8ab8c2a8cc7..f44667ddc2e 100644 --- a/lib/spack/external/_vendoring/pyrsistent/_checked_types.py +++ b/lib/spack/external/_vendoring/pyrsistent/_checked_types.py @@ -3,9 +3,9 @@ from abc import abstractmethod, ABCMeta from collections.abc import Iterable -from pyrsistent._pmap import PMap, pmap -from pyrsistent._pset import PSet, pset -from pyrsistent._pvector import PythonPVector, python_pvector +from _vendoring.pyrsistent._pmap import PMap, pmap +from _vendoring.pyrsistent._pset import PSet, pset +from _vendoring.pyrsistent._pvector import PythonPVector, python_pvector class CheckedType(object): diff --git a/lib/spack/external/_vendoring/pyrsistent/_field_common.py b/lib/spack/external/_vendoring/pyrsistent/_field_common.py index 9ddfe29d2d9..2b17433b067 100644 --- a/lib/spack/external/_vendoring/pyrsistent/_field_common.py +++ b/lib/spack/external/_vendoring/pyrsistent/_field_common.py @@ -1,6 +1,6 @@ import sys -from pyrsistent._checked_types import ( +from _vendoring.pyrsistent._checked_types import ( CheckedPMap, CheckedPSet, CheckedPVector, @@ -11,8 +11,8 @@ maybe_parse_user_type, maybe_parse_many_user_types, ) -from pyrsistent._checked_types import optional as optional_type -from pyrsistent._checked_types import wrap_invariant +from _vendoring.pyrsistent._checked_types import optional as optional_type +from _vendoring.pyrsistent._checked_types import wrap_invariant import inspect PY2 = sys.version_info[0] < 3 diff --git a/lib/spack/external/_vendoring/pyrsistent/_helpers.py b/lib/spack/external/_vendoring/pyrsistent/_helpers.py index 1320e657689..2858dd219f2 100644 --- a/lib/spack/external/_vendoring/pyrsistent/_helpers.py +++ b/lib/spack/external/_vendoring/pyrsistent/_helpers.py @@ -1,11 +1,11 @@ from functools import wraps -from pyrsistent._pmap import PMap, pmap -from pyrsistent._pset import PSet, pset -from pyrsistent._pvector import PVector, pvector +from _vendoring.pyrsistent._pmap import PMap, pmap +from _vendoring.pyrsistent._pset import PSet, pset +from _vendoring.pyrsistent._pvector import PVector, pvector def freeze(o, strict=True): """ - Recursively convert simple Python containers into pyrsistent versions + Recursively convert simple Python containers into _vendoring.pyrsistent versions of those containers. - list is converted to pvector, recursively @@ -47,7 +47,7 @@ def freeze(o, strict=True): def thaw(o, strict=True): """ - Recursively convert pyrsistent containers into simple Python containers. + Recursively convert _vendoring.pyrsistent containers into simple Python containers. - pvector is converted to list, recursively - pmap is converted to dict, recursively on values (but not keys) @@ -59,7 +59,7 @@ def thaw(o, strict=True): - thaw is called on elements of lists - thaw is called on values in dicts - >>> from pyrsistent import s, m, v + >>> from _vendoring.pyrsistent import s, m, v >>> thaw(s(1, 2)) {1, 2} >>> thaw(v(1, m(a=3))) diff --git a/lib/spack/external/_vendoring/pyrsistent/_immutable.py b/lib/spack/external/_vendoring/pyrsistent/_immutable.py index 7c759453360..f4f1f99e09f 100644 --- a/lib/spack/external/_vendoring/pyrsistent/_immutable.py +++ b/lib/spack/external/_vendoring/pyrsistent/_immutable.py @@ -94,7 +94,7 @@ def set(self, **kwargs): print(template) from collections import namedtuple - namespace = dict(namedtuple=namedtuple, __name__='pyrsistent_immutable') + namespace = dict(namedtuple=namedtuple, __name__='_vendoring.pyrsistent_immutable') try: exec(template, namespace) except SyntaxError as e: diff --git a/lib/spack/external/_vendoring/pyrsistent/_pbag.py b/lib/spack/external/_vendoring/pyrsistent/_pbag.py index 9cf5840b72e..fc6c9ca20f6 100644 --- a/lib/spack/external/_vendoring/pyrsistent/_pbag.py +++ b/lib/spack/external/_vendoring/pyrsistent/_pbag.py @@ -1,6 +1,6 @@ from collections.abc import Container, Iterable, Sized, Hashable from functools import reduce -from pyrsistent._pmap import pmap +from _vendoring.pyrsistent._pmap import pmap def _add_to_counters(counters, element): diff --git a/lib/spack/external/_vendoring/pyrsistent/_pclass.py b/lib/spack/external/_vendoring/pyrsistent/_pclass.py index fd31a95d63a..71040da85b9 100644 --- a/lib/spack/external/_vendoring/pyrsistent/_pclass.py +++ b/lib/spack/external/_vendoring/pyrsistent/_pclass.py @@ -1,8 +1,8 @@ -from pyrsistent._checked_types import (InvariantException, CheckedType, _restore_pickle, store_invariants) -from pyrsistent._field_common import ( +from _vendoring.pyrsistent._checked_types import (InvariantException, CheckedType, _restore_pickle, store_invariants) +from _vendoring.pyrsistent._field_common import ( set_fields, check_type, is_field_ignore_extra_complaint, PFIELD_NO_INITIAL, serialize, check_global_invariants ) -from pyrsistent._transformations import transform +from _vendoring.pyrsistent._transformations import transform def _is_pclass(bases): @@ -41,7 +41,7 @@ class PClass(CheckedType, metaclass=PClassMeta): is not a PMap and hence not a collection but rather a plain Python object. - More documentation and examples of PClass usage is available at https://github.com/tobgu/pyrsistent + More documentation and examples of PClass usage is available at https://github.com/tobgu/_vendoring.pyrsistent """ def __new__(cls, **kwargs): # Support *args? result = super(PClass, cls).__new__(cls) @@ -84,7 +84,7 @@ def set(self, *args, **kwargs): Set a field in the instance. Returns a new instance with the updated value. The original instance remains unmodified. Accepts key-value pairs or single string representing the field name and a value. - >>> from pyrsistent import PClass, field + >>> from _vendoring.pyrsistent import PClass, field >>> class AClass(PClass): ... x = field() ... diff --git a/lib/spack/external/_vendoring/pyrsistent/_pdeque.py b/lib/spack/external/_vendoring/pyrsistent/_pdeque.py index bd11bfa0320..d33b4dea9b6 100644 --- a/lib/spack/external/_vendoring/pyrsistent/_pdeque.py +++ b/lib/spack/external/_vendoring/pyrsistent/_pdeque.py @@ -1,7 +1,7 @@ from collections.abc import Sequence, Hashable from itertools import islice, chain from numbers import Integral -from pyrsistent._plist import plist +from _vendoring.pyrsistent._plist import plist class PDeque(object): diff --git a/lib/spack/external/_vendoring/pyrsistent/_pmap.py b/lib/spack/external/_vendoring/pyrsistent/_pmap.py index 81d99c076f5..e257fb0d57c 100644 --- a/lib/spack/external/_vendoring/pyrsistent/_pmap.py +++ b/lib/spack/external/_vendoring/pyrsistent/_pmap.py @@ -1,7 +1,7 @@ from collections.abc import Mapping, Hashable from itertools import chain -from pyrsistent._pvector import pvector -from pyrsistent._transformations import transform +from _vendoring.pyrsistent._pvector import pvector +from _vendoring.pyrsistent._transformations import transform class PMap(object): @@ -256,7 +256,7 @@ def transform(self, *transformations): consists of two parts. One match expression that specifies which elements to transform and one transformation function that performs the actual transformation. - >>> from pyrsistent import freeze, ny + >>> from _vendoring.pyrsistent import freeze, ny >>> news_paper = freeze({'articles': [{'author': 'Sara', 'content': 'A short article'}, ... {'author': 'Steve', 'content': 'A slightly longer article'}], ... 'weather': {'temperature': '11C', 'wind': '5m/s'}}) diff --git a/lib/spack/external/_vendoring/pyrsistent/_precord.py b/lib/spack/external/_vendoring/pyrsistent/_precord.py index 1ee8198a1a3..70850add75e 100644 --- a/lib/spack/external/_vendoring/pyrsistent/_precord.py +++ b/lib/spack/external/_vendoring/pyrsistent/_precord.py @@ -1,8 +1,8 @@ -from pyrsistent._checked_types import CheckedType, _restore_pickle, InvariantException, store_invariants -from pyrsistent._field_common import ( +from _vendoring.pyrsistent._checked_types import CheckedType, _restore_pickle, InvariantException, store_invariants +from _vendoring.pyrsistent._field_common import ( set_fields, check_type, is_field_ignore_extra_complaint, PFIELD_NO_INITIAL, serialize, check_global_invariants ) -from pyrsistent._pmap import PMap, pmap +from _vendoring.pyrsistent._pmap import PMap, pmap class _PRecordMeta(type): @@ -28,7 +28,7 @@ class PRecord(PMap, CheckedType, metaclass=_PRecordMeta): from PRecord. Because it is a PMap it has full support for all Mapping methods such as iteration and element access using subscript notation. - More documentation and examples of PRecord usage is available at https://github.com/tobgu/pyrsistent + More documentation and examples of PRecord usage is available at https://github.com/tobgu/_vendoring.pyrsistent """ def __new__(cls, **kwargs): # Hack total! If these two special attributes exist that means we can create diff --git a/lib/spack/external/_vendoring/pyrsistent/_pset.py b/lib/spack/external/_vendoring/pyrsistent/_pset.py index 4fae8278f0e..4fb3baced20 100644 --- a/lib/spack/external/_vendoring/pyrsistent/_pset.py +++ b/lib/spack/external/_vendoring/pyrsistent/_pset.py @@ -1,6 +1,6 @@ from collections.abc import Set, Hashable import sys -from pyrsistent._pmap import pmap +from _vendoring.pyrsistent._pmap import pmap class PSet(object): diff --git a/lib/spack/external/_vendoring/pyrsistent/_pvector.py b/lib/spack/external/_vendoring/pyrsistent/_pvector.py index 2aff0e8b42b..61157108dfe 100644 --- a/lib/spack/external/_vendoring/pyrsistent/_pvector.py +++ b/lib/spack/external/_vendoring/pyrsistent/_pvector.py @@ -2,7 +2,7 @@ from collections.abc import Sequence, Hashable from numbers import Integral import operator -from pyrsistent._transformations import transform +from _vendoring.pyrsistent._transformations import transform def _bitcount(val): @@ -626,7 +626,7 @@ def transform(self, *transformations): consists of two parts. One match expression that specifies which elements to transform and one transformation function that performs the actual transformation. - >>> from pyrsistent import freeze, ny + >>> from _vendoring.pyrsistent import freeze, ny >>> news_paper = freeze({'articles': [{'author': 'Sara', 'content': 'A short article'}, ... {'author': 'Steve', 'content': 'A slightly longer article'}], ... 'weather': {'temperature': '11C', 'wind': '5m/s'}}) diff --git a/lib/spack/external/_vendoring/pyrsistent/_toolz.py b/lib/spack/external/_vendoring/pyrsistent/_toolz.py index a7faed16535..9b39013ae3a 100644 --- a/lib/spack/external/_vendoring/pyrsistent/_toolz.py +++ b/lib/spack/external/_vendoring/pyrsistent/_toolz.py @@ -56,7 +56,7 @@ def get_in(keys, coll, default=None, no_default=False): ``get_in`` is a generalization of ``operator.getitem`` for nested data structures such as dictionaries and lists. - >>> from pyrsistent import freeze + >>> from _vendoring.pyrsistent import freeze >>> transaction = freeze({'name': 'Alice', ... 'purchase': {'items': ['Apple', 'Orange'], ... 'costs': [0.50, 1.25]}, diff --git a/lib/spack/external/_vendoring/pyrsistent/_transformations.py b/lib/spack/external/_vendoring/pyrsistent/_transformations.py index 7544843aca6..94bb3e08ecb 100644 --- a/lib/spack/external/_vendoring/pyrsistent/_transformations.py +++ b/lib/spack/external/_vendoring/pyrsistent/_transformations.py @@ -117,7 +117,7 @@ def _get_arity(f): def _update_structure(structure, kvs, path, command): - from pyrsistent._pmap import pmap + from _vendoring.pyrsistent._pmap import pmap e = structure.evolver() if not path and command is discard: # Do this in reverse to avoid index problems with vectors. See #92. diff --git a/lib/spack/external/_vendoring/pyrsistent/typing.py b/lib/spack/external/_vendoring/pyrsistent/typing.py index 6a86c831ba4..0981640bb5e 100644 --- a/lib/spack/external/_vendoring/pyrsistent/typing.py +++ b/lib/spack/external/_vendoring/pyrsistent/typing.py @@ -5,8 +5,8 @@ For example, - from pyrsistent import pvector - from pyrsistent.typing import PVector + from _vendoring.pyrsistent import pvector + from _vendoring.pyrsistent.typing import PVector myvector: PVector[str] = pvector(['a', 'b', 'c']) diff --git a/lib/spack/external/_vendoring/ruamel/yaml/__init__.py b/lib/spack/external/_vendoring/ruamel/yaml/__init__.py index 2a2572cd4a1..2f8eeec1ad8 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/__init__.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/__init__.py @@ -4,18 +4,18 @@ from typing import Dict, Any # NOQA _package_data = dict( - full_package_name='ruamel.yaml', + full_package_name='_vendoring.ruamel.yaml', version_info=(0, 17, 21), __version__='0.17.21', version_timestamp='2022-02-12 09:49:22', author='Anthon van der Neut', author_email='a.van.der.neut@ruamel.eu', - description='ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order', # NOQA + description='_vendoring.ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order', # NOQA entry_points=None, since=2014, extras_require={ - ':platform_python_implementation=="CPython" and python_version<"3.11"': ['ruamel.yaml.clib>=0.2.6'], # NOQA - 'jinja2': ['ruamel.yaml.jinja2>=0.2'], + ':platform_python_implementation=="CPython" and python_version<"3.11"': ['_vendoring.ruamel.yaml.clib>=0.2.6'], # NOQA + '_vendoring.jinja2': ['_vendoring.ruamel.yaml._vendoring.jinja2>=0.2'], 'docs': ['ryd'], }, classifiers=[ @@ -54,4 +54,4 @@ except (ImportError, ValueError): # for Jython __with_libyaml__ = False -from ruamel.yaml.main import * # NOQA +from _vendoring.ruamel.yaml.main import * # NOQA diff --git a/lib/spack/external/_vendoring/ruamel/yaml/comments.py b/lib/spack/external/_vendoring/ruamel/yaml/comments.py index 1badeda585d..641a10cc029 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/comments.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/comments.py @@ -10,10 +10,10 @@ import copy -from ruamel.yaml.compat import ordereddict -from ruamel.yaml.compat import MutableSliceableSequence, _F, nprintf # NOQA -from ruamel.yaml.scalarstring import ScalarString -from ruamel.yaml.anchor import Anchor +from _vendoring.ruamel.yaml.compat import ordereddict +from _vendoring.ruamel.yaml.compat import MutableSliceableSequence, _F, nprintf # NOQA +from _vendoring.ruamel.yaml.scalarstring import ScalarString +from _vendoring.ruamel.yaml.anchor import Anchor from collections.abc import MutableSet, Sized, Set, Mapping @@ -375,8 +375,8 @@ def yaml_set_comment_before_after_key( """ expects comment (before/after) to be without `#` and possible have multiple lines """ - from ruamel.yaml.error import CommentMark - from ruamel.yaml.tokens import CommentToken + from _vendoring.ruamel.yaml.error import CommentMark + from _vendoring.ruamel.yaml.tokens import CommentToken def comment_token(s, mark): # type: (Any, Any) -> Any diff --git a/lib/spack/external/_vendoring/ruamel/yaml/compat.py b/lib/spack/external/_vendoring/ruamel/yaml/compat.py index 87d5e359d35..e50ff30dcee 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/compat.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/compat.py @@ -169,7 +169,7 @@ def fp(self, mode='a'): nprint = Nprint() -nprintf = Nprint('/var/tmp/ruamel.yaml.log') +nprintf = Nprint('/var/tmp/_vendoring.ruamel.yaml.log') # char checkers following production rules @@ -197,9 +197,9 @@ def check_anchorname_char(ch): def version_tnf(t1, t2=None): # type: (Any, Any) -> Any """ - return True if ruamel.yaml version_info < t1, None if t2 is specified and bigger else False + return True if _vendoring.ruamel.yaml version_info < t1, None if t2 is specified and bigger else False """ - from ruamel.yaml import version_info # NOQA + from _vendoring.ruamel.yaml import version_info # NOQA if version_info < t1: return True diff --git a/lib/spack/external/_vendoring/ruamel/yaml/composer.py b/lib/spack/external/_vendoring/ruamel/yaml/composer.py index bad132aae82..2fd6e312074 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/composer.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/composer.py @@ -2,10 +2,10 @@ import warnings -from ruamel.yaml.error import MarkedYAMLError, ReusedAnchorWarning -from ruamel.yaml.compat import _F, nprint, nprintf # NOQA +from _vendoring.ruamel.yaml.error import MarkedYAMLError, ReusedAnchorWarning +from _vendoring.ruamel.yaml.compat import _F, nprint, nprintf # NOQA -from ruamel.yaml.events import ( +from _vendoring.ruamel.yaml.events import ( StreamStartEvent, StreamEndEvent, MappingStartEvent, @@ -15,7 +15,7 @@ AliasEvent, ScalarEvent, ) -from ruamel.yaml.nodes import MappingNode, ScalarNode, SequenceNode +from _vendoring.ruamel.yaml.nodes import MappingNode, ScalarNode, SequenceNode if False: # MYPY from typing import Any, Dict, Optional, List # NOQA diff --git a/lib/spack/external/_vendoring/ruamel/yaml/configobjwalker.py b/lib/spack/external/_vendoring/ruamel/yaml/configobjwalker.py index cbc6148038e..2254a3cd515 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/configobjwalker.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/configobjwalker.py @@ -2,7 +2,7 @@ import warnings -from ruamel.yaml.util import configobj_walker as new_configobj_walker +from _vendoring.ruamel.yaml.util import configobj_walker as new_configobj_walker if False: # MYPY from typing import Any # NOQA @@ -10,5 +10,5 @@ def configobj_walker(cfg): # type: (Any) -> Any - warnings.warn('configobj_walker has moved to ruamel.yaml.util, please update your code') + warnings.warn('configobj_walker has moved to _vendoring.ruamel.yaml.util, please update your code') return new_configobj_walker(cfg) diff --git a/lib/spack/external/_vendoring/ruamel/yaml/constructor.py b/lib/spack/external/_vendoring/ruamel/yaml/constructor.py index 6aa6371779b..5085c997d2e 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/constructor.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/constructor.py @@ -9,29 +9,29 @@ from collections.abc import Hashable, MutableSequence, MutableMapping # fmt: off -from ruamel.yaml.error import (MarkedYAMLError, MarkedYAMLFutureWarning, +from _vendoring.ruamel.yaml.error import (MarkedYAMLError, MarkedYAMLFutureWarning, MantissaNoDotYAML1_1Warning) -from ruamel.yaml.nodes import * # NOQA -from ruamel.yaml.nodes import (SequenceNode, MappingNode, ScalarNode) -from ruamel.yaml.compat import (_F, builtins_module, # NOQA +from _vendoring.ruamel.yaml.nodes import * # NOQA +from _vendoring.ruamel.yaml.nodes import (SequenceNode, MappingNode, ScalarNode) +from _vendoring.ruamel.yaml.compat import (_F, builtins_module, # NOQA nprint, nprintf, version_tnf) -from ruamel.yaml.compat import ordereddict +from _vendoring.ruamel.yaml.compat import ordereddict -from ruamel.yaml.comments import * # NOQA -from ruamel.yaml.comments import (CommentedMap, CommentedOrderedMap, CommentedSet, +from _vendoring.ruamel.yaml.comments import * # NOQA +from _vendoring.ruamel.yaml.comments import (CommentedMap, CommentedOrderedMap, CommentedSet, CommentedKeySeq, CommentedSeq, TaggedScalar, CommentedKeyMap, C_KEY_PRE, C_KEY_EOL, C_KEY_POST, C_VALUE_PRE, C_VALUE_EOL, C_VALUE_POST, ) -from ruamel.yaml.scalarstring import (SingleQuotedScalarString, DoubleQuotedScalarString, +from _vendoring.ruamel.yaml.scalarstring import (SingleQuotedScalarString, DoubleQuotedScalarString, LiteralScalarString, FoldedScalarString, PlainScalarString, ScalarString,) -from ruamel.yaml.scalarint import ScalarInt, BinaryInt, OctalInt, HexInt, HexCapsInt -from ruamel.yaml.scalarfloat import ScalarFloat -from ruamel.yaml.scalarbool import ScalarBoolean -from ruamel.yaml.timestamp import TimeStamp -from ruamel.yaml.util import timestamp_regexp, create_timestamp +from _vendoring.ruamel.yaml.scalarint import ScalarInt, BinaryInt, OctalInt, HexInt, HexCapsInt +from _vendoring.ruamel.yaml.scalarfloat import ScalarFloat +from _vendoring.ruamel.yaml.scalarbool import ScalarBoolean +from _vendoring.ruamel.yaml.timestamp import TimeStamp +from _vendoring.ruamel.yaml.util import timestamp_regexp, create_timestamp if False: # MYPY from typing import Any, Dict, List, Set, Generator, Union, Optional # NOQA @@ -1282,7 +1282,7 @@ def construct_rt_sequence(self, node, seqtyp, deep=False): if node.comment: nprintf('nc3', node.comment) if node.anchor: - from ruamel.yaml.serializer import templated_id + from _vendoring.ruamel.yaml.serializer import templated_id if not templated_id(node.anchor): seqtyp.yaml_set_anchor(node.anchor) @@ -1418,7 +1418,7 @@ def construct_mapping(self, node, maptyp, deep=False): # type: ignore for cmnt in self.comments(node.comment, 0): maptyp.ca.pre.append(cmnt) if node.anchor: - from ruamel.yaml.serializer import templated_id + from _vendoring.ruamel.yaml.serializer import templated_id if not templated_id(node.anchor): maptyp.yaml_set_anchor(node.anchor) @@ -1517,7 +1517,7 @@ def construct_setting(self, node, typ, deep=False): if node.comment: nprintf('nc6', node.comment) if node.anchor: - from ruamel.yaml.serializer import templated_id + from _vendoring.ruamel.yaml.serializer import templated_id if not templated_id(node.anchor): typ.yaml_set_anchor(node.anchor) @@ -1592,8 +1592,8 @@ def construct_yaml_object(self, node, cls): else: data.__dict__.update(state) if node.anchor: - from ruamel.yaml.serializer import templated_id - from ruamel.yaml.anchor import Anchor + from _vendoring.ruamel.yaml.serializer import templated_id + from _vendoring.ruamel.yaml.anchor import Anchor if not templated_id(node.anchor): if not hasattr(data, Anchor.attrib): @@ -1691,7 +1691,7 @@ def construct_undefined(self, node): data.yaml_set_tag(node.tag) yield data if node.anchor: - from ruamel.yaml.serializer import templated_id + from _vendoring.ruamel.yaml.serializer import templated_id if not templated_id(node.anchor): data.yaml_set_anchor(node.anchor) @@ -1704,7 +1704,7 @@ def construct_undefined(self, node): data2.yaml_set_tag(node.tag) yield data2 if node.anchor: - from ruamel.yaml.serializer import templated_id + from _vendoring.ruamel.yaml.serializer import templated_id if not templated_id(node.anchor): data2.yaml_set_anchor(node.anchor, always_dump=True) @@ -1719,7 +1719,7 @@ def construct_undefined(self, node): data3.yaml_set_tag(node.tag) yield data3 if node.anchor: - from ruamel.yaml.serializer import templated_id + from _vendoring.ruamel.yaml.serializer import templated_id if not templated_id(node.anchor): data3.yaml_set_anchor(node.anchor) diff --git a/lib/spack/external/_vendoring/ruamel/yaml/cyaml.py b/lib/spack/external/_vendoring/ruamel/yaml/cyaml.py index 0ab2828dc2f..2f65d7ed9eb 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/cyaml.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/cyaml.py @@ -1,14 +1,14 @@ # coding: utf-8 -from _ruamel_yaml import CParser, CEmitter # type: ignore +from __vendoring.ruamel.yaml import CParser, CEmitter # type: ignore -from ruamel.yaml.constructor import Constructor, BaseConstructor, SafeConstructor -from ruamel.yaml.representer import Representer, SafeRepresenter, BaseRepresenter -from ruamel.yaml.resolver import Resolver, BaseResolver +from _vendoring.ruamel.yaml.constructor import Constructor, BaseConstructor, SafeConstructor +from _vendoring.ruamel.yaml.representer import Representer, SafeRepresenter, BaseRepresenter +from _vendoring.ruamel.yaml.resolver import Resolver, BaseResolver if False: # MYPY from typing import Any, Union, Optional # NOQA - from ruamel.yaml.compat import StreamTextType, StreamType, VersionType # NOQA + from _vendoring.ruamel.yaml.compat import StreamTextType, StreamType, VersionType # NOQA __all__ = ['CBaseLoader', 'CSafeLoader', 'CLoader', 'CBaseDumper', 'CSafeDumper', 'CDumper'] diff --git a/lib/spack/external/_vendoring/ruamel/yaml/dumper.py b/lib/spack/external/_vendoring/ruamel/yaml/dumper.py index 7e9bf01dedb..e53715c3d8a 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/dumper.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/dumper.py @@ -1,18 +1,18 @@ # coding: utf-8 -from ruamel.yaml.emitter import Emitter -from ruamel.yaml.serializer import Serializer -from ruamel.yaml.representer import ( +from _vendoring.ruamel.yaml.emitter import Emitter +from _vendoring.ruamel.yaml.serializer import Serializer +from _vendoring.ruamel.yaml.representer import ( Representer, SafeRepresenter, BaseRepresenter, RoundTripRepresenter, ) -from ruamel.yaml.resolver import Resolver, BaseResolver, VersionedResolver +from _vendoring.ruamel.yaml.resolver import Resolver, BaseResolver, VersionedResolver if False: # MYPY from typing import Any, Dict, List, Union, Optional # NOQA - from ruamel.yaml.compat import StreamType, VersionType # NOQA + from _vendoring.ruamel.yaml.compat import StreamType, VersionType # NOQA __all__ = ['BaseDumper', 'SafeDumper', 'Dumper', 'RoundTripDumper'] diff --git a/lib/spack/external/_vendoring/ruamel/yaml/emitter.py b/lib/spack/external/_vendoring/ruamel/yaml/emitter.py index f9611ee1918..67d6e1f4aa7 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/emitter.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/emitter.py @@ -8,17 +8,17 @@ # mapping ::= MAPPING-START (node node)* MAPPING-END import sys -from ruamel.yaml.error import YAMLError, YAMLStreamError -from ruamel.yaml.events import * # NOQA +from _vendoring.ruamel.yaml.error import YAMLError, YAMLStreamError +from _vendoring.ruamel.yaml.events import * # NOQA # fmt: off -from ruamel.yaml.compat import _F, nprint, dbg, DBG_EVENT, \ +from _vendoring.ruamel.yaml.compat import _F, nprint, dbg, DBG_EVENT, \ check_anchorname_char, nprintf # NOQA # fmt: on if False: # MYPY from typing import Any, Dict, List, Union, Text, Tuple, Optional # NOQA - from ruamel.yaml.compat import StreamType # NOQA + from _vendoring.ruamel.yaml.compat import StreamType # NOQA __all__ = ['Emitter', 'EmitterError'] diff --git a/lib/spack/external/_vendoring/ruamel/yaml/error.py b/lib/spack/external/_vendoring/ruamel/yaml/error.py index 30b114a01b3..1a43eba1f2c 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/error.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/error.py @@ -3,7 +3,7 @@ import warnings import textwrap -from ruamel.yaml.compat import _F +from _vendoring.ruamel.yaml.compat import _F if False: # MYPY from typing import Any, Dict, Optional, List, Text # NOQA @@ -240,11 +240,11 @@ class ReusedAnchorWarning(YAMLWarning): class UnsafeLoaderWarning(YAMLWarning): text = """ The default 'Loader' for 'load(stream)' without further arguments can be unsafe. -Use 'load(stream, Loader=ruamel.yaml.Loader)' explicitly if that is OK. +Use 'load(stream, Loader=_vendoring.ruamel.yaml.Loader)' explicitly if that is OK. Alternatively include the following in your code: import warnings - warnings.simplefilter('ignore', ruamel.yaml.error.UnsafeLoaderWarning) + warnings.simplefilter('ignore', _vendoring.ruamel.yaml.error.UnsafeLoaderWarning) In most other cases you should consider using 'safe_load(stream)'""" pass @@ -273,7 +273,7 @@ def __str__(self): or alternatively include the following in your code: import warnings - warnings.simplefilter('ignore', ruamel.yaml.error.MantissaNoDotYAML1_1Warning) + warnings.simplefilter('ignore', _vendoring.ruamel.yaml.error.MantissaNoDotYAML1_1Warning) """.format( self.flt, line, col diff --git a/lib/spack/external/_vendoring/ruamel/yaml/events.py b/lib/spack/external/_vendoring/ruamel/yaml/events.py index 2a895ff3593..f1df4d19cf7 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/events.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/events.py @@ -1,6 +1,6 @@ # coding: utf-8 -from ruamel.yaml.compat import _F +from _vendoring.ruamel.yaml.compat import _F # Abstract classes. diff --git a/lib/spack/external/_vendoring/ruamel/yaml/loader.py b/lib/spack/external/_vendoring/ruamel/yaml/loader.py index 7234ee12143..97d0632bcf3 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/loader.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/loader.py @@ -1,20 +1,20 @@ # coding: utf-8 -from ruamel.yaml.reader import Reader -from ruamel.yaml.scanner import Scanner, RoundTripScanner -from ruamel.yaml.parser import Parser, RoundTripParser -from ruamel.yaml.composer import Composer -from ruamel.yaml.constructor import ( +from _vendoring.ruamel.yaml.reader import Reader +from _vendoring.ruamel.yaml.scanner import Scanner, RoundTripScanner +from _vendoring.ruamel.yaml.parser import Parser, RoundTripParser +from _vendoring.ruamel.yaml.composer import Composer +from _vendoring.ruamel.yaml.constructor import ( BaseConstructor, SafeConstructor, Constructor, RoundTripConstructor, ) -from ruamel.yaml.resolver import VersionedResolver +from _vendoring.ruamel.yaml.resolver import VersionedResolver if False: # MYPY from typing import Any, Dict, List, Union, Optional # NOQA - from ruamel.yaml.compat import StreamTextType, VersionType # NOQA + from _vendoring.ruamel.yaml.compat import StreamTextType, VersionType # NOQA __all__ = ['BaseLoader', 'SafeLoader', 'Loader', 'RoundTripLoader'] diff --git a/lib/spack/external/_vendoring/ruamel/yaml/main.py b/lib/spack/external/_vendoring/ruamel/yaml/main.py index 20bd8d3eb1b..bb4c81aa44a 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/main.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/main.py @@ -7,39 +7,39 @@ from importlib import import_module -import ruamel.yaml -from ruamel.yaml.error import UnsafeLoaderWarning, YAMLError # NOQA +import _vendoring.ruamel.yaml +from _vendoring.ruamel.yaml.error import UnsafeLoaderWarning, YAMLError # NOQA -from ruamel.yaml.tokens import * # NOQA -from ruamel.yaml.events import * # NOQA -from ruamel.yaml.nodes import * # NOQA +from _vendoring.ruamel.yaml.tokens import * # NOQA +from _vendoring.ruamel.yaml.events import * # NOQA +from _vendoring.ruamel.yaml.nodes import * # NOQA -from ruamel.yaml.loader import BaseLoader, SafeLoader, Loader, RoundTripLoader # NOQA -from ruamel.yaml.dumper import BaseDumper, SafeDumper, Dumper, RoundTripDumper # NOQA -from ruamel.yaml.compat import StringIO, BytesIO, with_metaclass, nprint, nprintf # NOQA -from ruamel.yaml.resolver import VersionedResolver, Resolver # NOQA -from ruamel.yaml.representer import ( +from _vendoring.ruamel.yaml.loader import BaseLoader, SafeLoader, Loader, RoundTripLoader # NOQA +from _vendoring.ruamel.yaml.dumper import BaseDumper, SafeDumper, Dumper, RoundTripDumper # NOQA +from _vendoring.ruamel.yaml.compat import StringIO, BytesIO, with_metaclass, nprint, nprintf # NOQA +from _vendoring.ruamel.yaml.resolver import VersionedResolver, Resolver # NOQA +from _vendoring.ruamel.yaml.representer import ( BaseRepresenter, SafeRepresenter, Representer, RoundTripRepresenter, ) -from ruamel.yaml.constructor import ( +from _vendoring.ruamel.yaml.constructor import ( BaseConstructor, SafeConstructor, Constructor, RoundTripConstructor, ) -from ruamel.yaml.loader import Loader as UnsafeLoader -from ruamel.yaml.comments import CommentedMap, CommentedSeq, C_PRE +from _vendoring.ruamel.yaml.loader import Loader as UnsafeLoader +from _vendoring.ruamel.yaml.comments import CommentedMap, CommentedSeq, C_PRE if False: # MYPY from typing import List, Set, Dict, Union, Any, Callable, Optional, Text # NOQA - from ruamel.yaml.compat import StreamType, StreamTextType, VersionType # NOQA + from _vendoring.ruamel.yaml.compat import StreamType, StreamTextType, VersionType # NOQA from pathlib import Path try: - from _ruamel_yaml import CParser, CEmitter # type: ignore + from __vendoring.ruamel.yaml import CParser, CEmitter # type: ignore except: # NOQA CParser = CEmitter = None @@ -74,7 +74,7 @@ def __init__(self, *, typ=None, pure=False, output=None, plug_ins=None): # inpu for pu in ([] if plug_ins is None else plug_ins) + self.official_plug_ins(): file_name = pu.replace(os.sep, '.') self.plug_ins.append(import_module(file_name)) - self.Resolver = ruamel.yaml.resolver.VersionedResolver # type: Any + self.Resolver = _vendoring.ruamel.yaml.resolver.VersionedResolver # type: Any self.allow_unicode = True self.Reader = None # type: Any self.Representer = None # type: Any @@ -89,37 +89,37 @@ def __init__(self, *, typ=None, pure=False, output=None, plug_ins=None): # inpu setup_rt = True elif 'safe' in self.typ: self.Emitter = ( - ruamel.yaml.emitter.Emitter if pure or CEmitter is None else CEmitter + _vendoring.ruamel.yaml.emitter.Emitter if pure or CEmitter is None else CEmitter ) - self.Representer = ruamel.yaml.representer.SafeRepresenter - self.Parser = ruamel.yaml.parser.Parser if pure or CParser is None else CParser - self.Composer = ruamel.yaml.composer.Composer - self.Constructor = ruamel.yaml.constructor.SafeConstructor + self.Representer = _vendoring.ruamel.yaml.representer.SafeRepresenter + self.Parser = _vendoring.ruamel.yaml.parser.Parser if pure or CParser is None else CParser + self.Composer = _vendoring.ruamel.yaml.composer.Composer + self.Constructor = _vendoring.ruamel.yaml.constructor.SafeConstructor elif 'base' in self.typ: - self.Emitter = ruamel.yaml.emitter.Emitter - self.Representer = ruamel.yaml.representer.BaseRepresenter - self.Parser = ruamel.yaml.parser.Parser if pure or CParser is None else CParser - self.Composer = ruamel.yaml.composer.Composer - self.Constructor = ruamel.yaml.constructor.BaseConstructor + self.Emitter = _vendoring.ruamel.yaml.emitter.Emitter + self.Representer = _vendoring.ruamel.yaml.representer.BaseRepresenter + self.Parser = _vendoring.ruamel.yaml.parser.Parser if pure or CParser is None else CParser + self.Composer = _vendoring.ruamel.yaml.composer.Composer + self.Constructor = _vendoring.ruamel.yaml.constructor.BaseConstructor elif 'unsafe' in self.typ: self.Emitter = ( - ruamel.yaml.emitter.Emitter if pure or CEmitter is None else CEmitter + _vendoring.ruamel.yaml.emitter.Emitter if pure or CEmitter is None else CEmitter ) - self.Representer = ruamel.yaml.representer.Representer - self.Parser = ruamel.yaml.parser.Parser if pure or CParser is None else CParser - self.Composer = ruamel.yaml.composer.Composer - self.Constructor = ruamel.yaml.constructor.Constructor + self.Representer = _vendoring.ruamel.yaml.representer.Representer + self.Parser = _vendoring.ruamel.yaml.parser.Parser if pure or CParser is None else CParser + self.Composer = _vendoring.ruamel.yaml.composer.Composer + self.Constructor = _vendoring.ruamel.yaml.constructor.Constructor elif 'rtsc' in self.typ: self.default_flow_style = False # no optimized rt-dumper yet - self.Emitter = ruamel.yaml.emitter.Emitter - self.Serializer = ruamel.yaml.serializer.Serializer - self.Representer = ruamel.yaml.representer.RoundTripRepresenter - self.Scanner = ruamel.yaml.scanner.RoundTripScannerSC + self.Emitter = _vendoring.ruamel.yaml.emitter.Emitter + self.Serializer = _vendoring.ruamel.yaml.serializer.Serializer + self.Representer = _vendoring.ruamel.yaml.representer.RoundTripRepresenter + self.Scanner = _vendoring.ruamel.yaml.scanner.RoundTripScannerSC # no optimized rt-parser yet - self.Parser = ruamel.yaml.parser.RoundTripParserSC - self.Composer = ruamel.yaml.composer.Composer - self.Constructor = ruamel.yaml.constructor.RoundTripConstructor + self.Parser = _vendoring.ruamel.yaml.parser.RoundTripParserSC + self.Composer = _vendoring.ruamel.yaml.composer.Composer + self.Constructor = _vendoring.ruamel.yaml.constructor.RoundTripConstructor self.comment_handling = C_PRE else: setup_rt = True @@ -127,14 +127,14 @@ def __init__(self, *, typ=None, pure=False, output=None, plug_ins=None): # inpu if setup_rt: self.default_flow_style = False # no optimized rt-dumper yet - self.Emitter = ruamel.yaml.emitter.Emitter - self.Serializer = ruamel.yaml.serializer.Serializer - self.Representer = ruamel.yaml.representer.RoundTripRepresenter - self.Scanner = ruamel.yaml.scanner.RoundTripScanner + self.Emitter = _vendoring.ruamel.yaml.emitter.Emitter + self.Serializer = _vendoring.ruamel.yaml.serializer.Serializer + self.Representer = _vendoring.ruamel.yaml.representer.RoundTripRepresenter + self.Scanner = _vendoring.ruamel.yaml.scanner.RoundTripScanner # no optimized rt-parser yet - self.Parser = ruamel.yaml.parser.RoundTripParser - self.Composer = ruamel.yaml.composer.Composer - self.Constructor = ruamel.yaml.constructor.RoundTripConstructor + self.Parser = _vendoring.ruamel.yaml.parser.RoundTripParser + self.Composer = _vendoring.ruamel.yaml.composer.Composer + self.Constructor = _vendoring.ruamel.yaml.constructor.RoundTripConstructor del setup_rt self.stream = None self.canonical = None @@ -477,20 +477,20 @@ def get_constructor_parser(self, stream): """ if self.Parser is not CParser: if self.Reader is None: - self.Reader = ruamel.yaml.reader.Reader + self.Reader = _vendoring.ruamel.yaml.reader.Reader if self.Scanner is None: - self.Scanner = ruamel.yaml.scanner.Scanner + self.Scanner = _vendoring.ruamel.yaml.scanner.Scanner self.reader.stream = stream else: if self.Reader is not None: if self.Scanner is None: - self.Scanner = ruamel.yaml.scanner.Scanner - self.Parser = ruamel.yaml.parser.Parser + self.Scanner = _vendoring.ruamel.yaml.scanner.Scanner + self.Parser = _vendoring.ruamel.yaml.parser.Parser self.reader.stream = stream elif self.Scanner is not None: if self.Reader is None: - self.Reader = ruamel.yaml.reader.Reader - self.Parser = ruamel.yaml.parser.Parser + self.Reader = _vendoring.ruamel.yaml.reader.Reader + self.Parser = _vendoring.ruamel.yaml.parser.Parser self.reader.stream = stream else: # combined C level reader>scanner>parser @@ -498,8 +498,8 @@ def get_constructor_parser(self, stream): # if you just initialise the CParser, to much of resolver.py # is actually used rslvr = self.Resolver - # if rslvr is ruamel.yaml.resolver.VersionedResolver: - # rslvr = ruamel.yaml.resolver.Resolver + # if rslvr is _vendoring.ruamel.yaml.resolver.VersionedResolver: + # rslvr = _vendoring.ruamel.yaml.resolver.Resolver class XLoader(self.Parser, self.Constructor, rslvr): # type: ignore def __init__(selfx, stream, version=self.version, preserve_quotes=None): @@ -640,7 +640,7 @@ def get_serializer_representer_emitter(self, stream, tlca): # we have only .Serializer to deal with (vs .Reader & .Scanner), much simpler if self.Emitter is not CEmitter: if self.Serializer is None: - self.Serializer = ruamel.yaml.serializer.Serializer + self.Serializer = _vendoring.ruamel.yaml.serializer.Serializer self.emitter.stream = stream self.emitter.top_level_colon_align = tlca if self.scalar_after_indicator is not None: @@ -648,7 +648,7 @@ def get_serializer_representer_emitter(self, stream, tlca): return self.serializer, self.representer, self.emitter if self.Serializer is not None: # cannot set serializer with CEmitter - self.Emitter = ruamel.yaml.emitter.Emitter + self.Emitter = _vendoring.ruamel.yaml.emitter.Emitter self.emitter.stream = stream self.emitter.top_level_colon_align = tlca if self.scalar_after_indicator is not None: @@ -657,9 +657,9 @@ def get_serializer_representer_emitter(self, stream, tlca): # C routines rslvr = ( - ruamel.yaml.resolver.BaseResolver + _vendoring.ruamel.yaml.resolver.BaseResolver if 'base' in self.typ - else ruamel.yaml.resolver.Resolver + else _vendoring.ruamel.yaml.resolver.Resolver ) class XDumper(CEmitter, self.Representer, rslvr): # type: ignore @@ -743,7 +743,7 @@ def official_plug_ins(self): single file installers that are not properly emulating a file-system (issue 324) no plug-ins will be found. If any are packaged, you know which file that are and you can explicitly provide it during instantiation: - yaml = ruamel.yaml.YAML(plug_ins=['ruamel/yaml/jinja2/__plug_in__']) + yaml = _vendoring.ruamel.yaml.YAML(plug_ins=['_vendoring.ruamel.yaml/_vendoring.jinja2/__plug_in__']) """ try: bd = os.path.dirname(__file__) @@ -982,7 +982,7 @@ def f_y(constructor, node): ######################################################################################## def warn_deprecation(fun, method, arg=''): # type: (Any, Any, str) -> None - from ruamel.yaml.compat import _F + from _vendoring.ruamel.yaml.compat import _F warnings.warn( _F( @@ -1469,7 +1469,7 @@ def add_implicit_resolver( if hasattr(Loader, 'add_implicit_resolver'): Loader.add_implicit_resolver(tag, regexp, first) elif issubclass( - Loader, (BaseLoader, SafeLoader, ruamel.yaml.loader.Loader, RoundTripLoader) + Loader, (BaseLoader, SafeLoader, _vendoring.ruamel.yaml.loader.Loader, RoundTripLoader) ): Resolver.add_implicit_resolver(tag, regexp, first) else: @@ -1478,7 +1478,7 @@ def add_implicit_resolver( if hasattr(Dumper, 'add_implicit_resolver'): Dumper.add_implicit_resolver(tag, regexp, first) elif issubclass( - Dumper, (BaseDumper, SafeDumper, ruamel.yaml.dumper.Dumper, RoundTripDumper) + Dumper, (BaseDumper, SafeDumper, _vendoring.ruamel.yaml.dumper.Dumper, RoundTripDumper) ): Resolver.add_implicit_resolver(tag, regexp, first) else: @@ -1501,7 +1501,7 @@ def add_path_resolver(tag, path, kind=None, Loader=None, Dumper=None, resolver=R if hasattr(Loader, 'add_path_resolver'): Loader.add_path_resolver(tag, path, kind) elif issubclass( - Loader, (BaseLoader, SafeLoader, ruamel.yaml.loader.Loader, RoundTripLoader) + Loader, (BaseLoader, SafeLoader, _vendoring.ruamel.yaml.loader.Loader, RoundTripLoader) ): Resolver.add_path_resolver(tag, path, kind) else: @@ -1510,7 +1510,7 @@ def add_path_resolver(tag, path, kind=None, Loader=None, Dumper=None, resolver=R if hasattr(Dumper, 'add_path_resolver'): Dumper.add_path_resolver(tag, path, kind) elif issubclass( - Dumper, (BaseDumper, SafeDumper, ruamel.yaml.dumper.Dumper, RoundTripDumper) + Dumper, (BaseDumper, SafeDumper, _vendoring.ruamel.yaml.dumper.Dumper, RoundTripDumper) ): Resolver.add_path_resolver(tag, path, kind) else: @@ -1560,7 +1560,7 @@ def add_multi_constructor(tag_prefix, multi_constructor, Loader=None, constructo BaseConstructor.add_multi_constructor(tag_prefix, multi_constructor) elif issubclass(Loader, SafeLoader): SafeConstructor.add_multi_constructor(tag_prefix, multi_constructor) - elif issubclass(Loader, ruamel.yaml.loader.Loader): + elif issubclass(Loader, _vendoring.ruamel.yaml.loader.Loader): Constructor.add_multi_constructor(tag_prefix, multi_constructor) elif issubclass(Loader, RoundTripLoader): RoundTripConstructor.add_multi_constructor(tag_prefix, multi_constructor) diff --git a/lib/spack/external/_vendoring/ruamel/yaml/nodes.py b/lib/spack/external/_vendoring/ruamel/yaml/nodes.py index c76bb4e2cc7..c4365900184 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/nodes.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/nodes.py @@ -2,7 +2,7 @@ import sys -from ruamel.yaml.compat import _F +from _vendoring.ruamel.yaml.compat import _F if False: # MYPY from typing import Dict, Any, Text # NOQA diff --git a/lib/spack/external/_vendoring/ruamel/yaml/parser.py b/lib/spack/external/_vendoring/ruamel/yaml/parser.py index a2fab43ce71..dbcca0103f6 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/parser.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/parser.py @@ -74,13 +74,13 @@ # and for Jython too -from ruamel.yaml.error import MarkedYAMLError -from ruamel.yaml.tokens import * # NOQA -from ruamel.yaml.events import * # NOQA -from ruamel.yaml.scanner import Scanner, RoundTripScanner, ScannerError # NOQA -from ruamel.yaml.scanner import BlankLineComment -from ruamel.yaml.comments import C_PRE, C_POST, C_SPLIT_ON_FIRST_BLANK -from ruamel.yaml.compat import _F, nprint, nprintf # NOQA +from _vendoring.ruamel.yaml.error import MarkedYAMLError +from _vendoring.ruamel.yaml.tokens import * # NOQA +from _vendoring.ruamel.yaml.events import * # NOQA +from _vendoring.ruamel.yaml.scanner import Scanner, RoundTripScanner, ScannerError # NOQA +from _vendoring.ruamel.yaml.scanner import BlankLineComment +from _vendoring.ruamel.yaml.comments import C_PRE, C_POST, C_SPLIT_ON_FIRST_BLANK +from _vendoring.ruamel.yaml.compat import _F, nprint, nprintf # NOQA if False: # MYPY from typing import Any, Dict, Optional, List, Optional # NOQA diff --git a/lib/spack/external/_vendoring/ruamel/yaml/reader.py b/lib/spack/external/_vendoring/ruamel/yaml/reader.py index 4aac40a4f7f..380f2af61fb 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/reader.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/reader.py @@ -21,13 +21,13 @@ import codecs -from ruamel.yaml.error import YAMLError, FileMark, StringMark, YAMLStreamError -from ruamel.yaml.compat import _F # NOQA -from ruamel.yaml.util import RegExp +from _vendoring.ruamel.yaml.error import YAMLError, FileMark, StringMark, YAMLStreamError +from _vendoring.ruamel.yaml.compat import _F # NOQA +from _vendoring.ruamel.yaml.util import RegExp if False: # MYPY from typing import Any, Dict, Optional, List, Union, Text, Tuple, Optional # NOQA -# from ruamel.yaml.compat import StreamTextType # NOQA +# from _vendoring.ruamel.yaml.compat import StreamTextType # NOQA __all__ = ['Reader', 'ReaderError'] diff --git a/lib/spack/external/_vendoring/ruamel/yaml/representer.py b/lib/spack/external/_vendoring/ruamel/yaml/representer.py index 820559b5c4a..0c4c6c25718 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/representer.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/representer.py @@ -1,17 +1,17 @@ # coding: utf-8 -from ruamel.yaml.error import * # NOQA -from ruamel.yaml.nodes import * # NOQA -from ruamel.yaml.compat import ordereddict -from ruamel.yaml.compat import _F, nprint, nprintf # NOQA -from ruamel.yaml.scalarstring import ( +from _vendoring.ruamel.yaml.error import * # NOQA +from _vendoring.ruamel.yaml.nodes import * # NOQA +from _vendoring.ruamel.yaml.compat import ordereddict +from _vendoring.ruamel.yaml.compat import _F, nprint, nprintf # NOQA +from _vendoring.ruamel.yaml.scalarstring import ( LiteralScalarString, FoldedScalarString, SingleQuotedScalarString, DoubleQuotedScalarString, PlainScalarString, ) -from ruamel.yaml.comments import ( +from _vendoring.ruamel.yaml.comments import ( CommentedMap, CommentedOrderedMap, CommentedSeq, @@ -22,11 +22,11 @@ merge_attrib, TaggedScalar, ) -from ruamel.yaml.scalarint import ScalarInt, BinaryInt, OctalInt, HexInt, HexCapsInt -from ruamel.yaml.scalarfloat import ScalarFloat -from ruamel.yaml.scalarbool import ScalarBoolean -from ruamel.yaml.timestamp import TimeStamp -from ruamel.yaml.anchor import Anchor +from _vendoring.ruamel.yaml.scalarint import ScalarInt, BinaryInt, OctalInt, HexInt, HexCapsInt +from _vendoring.ruamel.yaml.scalarfloat import ScalarFloat +from _vendoring.ruamel.yaml.scalarbool import ScalarBoolean +from _vendoring.ruamel.yaml.timestamp import TimeStamp +from _vendoring.ruamel.yaml.anchor import Anchor import datetime import sys diff --git a/lib/spack/external/_vendoring/ruamel/yaml/resolver.py b/lib/spack/external/_vendoring/ruamel/yaml/resolver.py index 969b9a928db..bd547139a4f 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/resolver.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/resolver.py @@ -4,12 +4,12 @@ if False: # MYPY from typing import Any, Dict, List, Union, Text, Optional # NOQA - from ruamel.yaml.compat import VersionType # NOQA + from _vendoring.ruamel.yaml.compat import VersionType # NOQA -from ruamel.yaml.compat import _DEFAULT_YAML_VERSION, _F # NOQA -from ruamel.yaml.error import * # NOQA -from ruamel.yaml.nodes import MappingNode, ScalarNode, SequenceNode # NOQA -from ruamel.yaml.util import RegExp # NOQA +from _vendoring.ruamel.yaml.compat import _DEFAULT_YAML_VERSION, _F # NOQA +from _vendoring.ruamel.yaml.error import * # NOQA +from _vendoring.ruamel.yaml.nodes import MappingNode, ScalarNode, SequenceNode # NOQA +from _vendoring.ruamel.yaml.util import RegExp # NOQA __all__ = ['BaseResolver', 'Resolver', 'VersionedResolver'] diff --git a/lib/spack/external/_vendoring/ruamel/yaml/scalarbool.py b/lib/spack/external/_vendoring/ruamel/yaml/scalarbool.py index 60242b43836..a32be10a245 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/scalarbool.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/scalarbool.py @@ -9,7 +9,7 @@ You can use these in an if statement, but not when testing equivalence """ -from ruamel.yaml.anchor import Anchor +from _vendoring.ruamel.yaml.anchor import Anchor if False: # MYPY from typing import Text, Any, Dict, List # NOQA diff --git a/lib/spack/external/_vendoring/ruamel/yaml/scalarfloat.py b/lib/spack/external/_vendoring/ruamel/yaml/scalarfloat.py index b9f8bdfb889..bba92682c8c 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/scalarfloat.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/scalarfloat.py @@ -1,7 +1,7 @@ # coding: utf-8 import sys -from ruamel.yaml.anchor import Anchor +from _vendoring.ruamel.yaml.anchor import Anchor if False: # MYPY from typing import Text, Any, Dict, List # NOQA diff --git a/lib/spack/external/_vendoring/ruamel/yaml/scalarint.py b/lib/spack/external/_vendoring/ruamel/yaml/scalarint.py index 1572b0f16c3..2ce2a0717dc 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/scalarint.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/scalarint.py @@ -1,6 +1,6 @@ # coding: utf-8 -from ruamel.yaml.anchor import Anchor +from _vendoring.ruamel.yaml.anchor import Anchor if False: # MYPY from typing import Text, Any, Dict, List # NOQA diff --git a/lib/spack/external/_vendoring/ruamel/yaml/scalarstring.py b/lib/spack/external/_vendoring/ruamel/yaml/scalarstring.py index 7538ab71551..2ca39a3ac1d 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/scalarstring.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/scalarstring.py @@ -1,6 +1,6 @@ # coding: utf-8 -from ruamel.yaml.anchor import Anchor +from _vendoring.ruamel.yaml.anchor import Anchor if False: # MYPY from typing import Text, Any, Dict, List # NOQA @@ -121,7 +121,7 @@ def walk_tree(base, map=None): You can also provide an explicit (ordered) mapping for multiple transforms (first of which is executed): - map = ruamel.yaml.compat.ordereddict + map = _vendoring.ruamel.yaml.compat.ordereddict map['\n'] = preserve_literal map[':'] = SingleQuotedScalarString walk_tree(data, map=map) diff --git a/lib/spack/external/_vendoring/ruamel/yaml/scanner.py b/lib/spack/external/_vendoring/ruamel/yaml/scanner.py index 61cae63103b..a3cd833cf32 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/scanner.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/scanner.py @@ -29,13 +29,13 @@ # import inspect -from ruamel.yaml.error import MarkedYAMLError, CommentMark # NOQA -from ruamel.yaml.tokens import * # NOQA -from ruamel.yaml.compat import _F, check_anchorname_char, nprint, nprintf # NOQA +from _vendoring.ruamel.yaml.error import MarkedYAMLError, CommentMark # NOQA +from _vendoring.ruamel.yaml.tokens import * # NOQA +from _vendoring.ruamel.yaml.compat import _F, check_anchorname_char, nprint, nprintf # NOQA if False: # MYPY from typing import Any, Dict, Optional, List, Union, Text # NOQA - from ruamel.yaml.compat import VersionType # NOQA + from _vendoring.ruamel.yaml.compat import VersionType # NOQA __all__ = ['Scanner', 'RoundTripScanner', 'ScannerError'] diff --git a/lib/spack/external/_vendoring/ruamel/yaml/serializer.py b/lib/spack/external/_vendoring/ruamel/yaml/serializer.py index cc2329dcc4e..7acbfd18164 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/serializer.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/serializer.py @@ -1,10 +1,10 @@ # coding: utf-8 -from ruamel.yaml.error import YAMLError -from ruamel.yaml.compat import nprint, DBG_NODE, dbg, nprintf # NOQA -from ruamel.yaml.util import RegExp +from _vendoring.ruamel.yaml.error import YAMLError +from _vendoring.ruamel.yaml.compat import nprint, DBG_NODE, dbg, nprintf # NOQA +from _vendoring.ruamel.yaml.util import RegExp -from ruamel.yaml.events import ( +from _vendoring.ruamel.yaml.events import ( StreamStartEvent, StreamEndEvent, MappingStartEvent, @@ -16,11 +16,11 @@ DocumentStartEvent, DocumentEndEvent, ) -from ruamel.yaml.nodes import MappingNode, ScalarNode, SequenceNode +from _vendoring.ruamel.yaml.nodes import MappingNode, ScalarNode, SequenceNode if False: # MYPY from typing import Any, Dict, Union, Text, Optional # NOQA - from ruamel.yaml.compat import VersionType # NOQA + from _vendoring.ruamel.yaml.compat import VersionType # NOQA __all__ = ['Serializer', 'SerializerError'] diff --git a/lib/spack/external/_vendoring/ruamel/yaml/tokens.py b/lib/spack/external/_vendoring/ruamel/yaml/tokens.py index bc302ba3162..702bec0d55d 100644 --- a/lib/spack/external/_vendoring/ruamel/yaml/tokens.py +++ b/lib/spack/external/_vendoring/ruamel/yaml/tokens.py @@ -1,6 +1,6 @@ # coding: utf-8 -from ruamel.yaml.compat import _F, nprintf # NOQA +from _vendoring.ruamel.yaml.compat import _F, nprintf # NOQA if False: # MYPY from typing import Text, Any, Dict, Optional, List # NOQA diff --git a/lib/spack/external/_vendoring/six.py b/lib/spack/external/_vendoring/six.py index 4e15675d8b5..6373c58a3d0 100644 --- a/lib/spack/external/_vendoring/six.py +++ b/lib/spack/external/_vendoring/six.py @@ -513,7 +513,7 @@ def add_move(move): def remove_move(name): - """Remove item from six.moves.""" + """Remove item from _vendoring.six.moves.""" try: delattr(_MovedItems, name) except AttributeError: diff --git a/lib/spack/external/_vendoring/typing_extensions.py b/lib/spack/external/_vendoring/typing_extensions.py index 194731cd3c6..3c2c2e942b7 100644 --- a/lib/spack/external/_vendoring/typing_extensions.py +++ b/lib/spack/external/_vendoring/typing_extensions.py @@ -194,7 +194,7 @@ def __subclasscheck__(self, cls): class _FinalForm(typing._SpecialForm, _root=True): def __repr__(self): - return 'typing_extensions.' + self._name + return '_vendoring.typing_extensions.' + self._name def __getitem__(self, parameters): item = typing._type_check(parameters, @@ -321,7 +321,7 @@ def IntVar(name): class _LiteralForm(typing._SpecialForm, _root=True): def __repr__(self): - return 'typing_extensions.' + self._name + return '_vendoring.typing_extensions.' + self._name def __getitem__(self, parameters): return typing._GenericAlias(self, parameters) @@ -405,7 +405,7 @@ class _ExtensionsGenericMeta(GenericMeta): def __subclasscheck__(self, subclass): """This mimics a more modern GenericMeta.__subclasscheck__() logic (that does not have problems with recursion) to work around interactions - between collections, typing, and typing_extensions on older + between collections, typing, and _vendoring.typing_extensions on older versions of Python, see https://github.com/python/typing/issues/501. """ if self.__origin__ is not None: @@ -629,7 +629,7 @@ def func(x: Proto) -> int: func(C()) # Passes static type check See PEP 544 for details. Protocol classes decorated with - @typing_extensions.runtime act as simple-minded runtime protocol that checks + @_vendoring.typing_extensions.runtime act as simple-minded runtime protocol that checks only the presence of given attributes, ignoring their type signatures. Protocol classes can be generic, they are defined as:: @@ -985,7 +985,7 @@ def func(x: Proto) -> int: func(C()) # Passes static type check See PEP 544 for details. Protocol classes decorated with - @typing_extensions.runtime act as simple-minded runtime protocol that checks + @_vendoring.typing_extensions.runtime act as simple-minded runtime protocol that checks only the presence of given attributes, ignoring their type signatures. Protocol classes can be generic, they are defined as:: @@ -1334,7 +1334,7 @@ def copy_with(self, params): return _AnnotatedAlias(new_type, self.__metadata__) def __repr__(self): - return (f"typing_extensions.Annotated[{typing._type_repr(self.__origin__)}, " + return (f"_vendoring.typing_extensions.Annotated[{typing._type_repr(self.__origin__)}, " f"{', '.join(repr(a) for a in self.__metadata__)}]") def __reduce__(self): @@ -1629,7 +1629,7 @@ def get_args(tp): elif sys.version_info[:2] >= (3, 9): class _TypeAliasForm(typing._SpecialForm, _root=True): def __repr__(self): - return 'typing_extensions.' + self._name + return '_vendoring.typing_extensions.' + self._name @_TypeAliasForm def TypeAlias(self, parameters): @@ -1648,7 +1648,7 @@ def TypeAlias(self, parameters): elif sys.version_info[:2] >= (3, 7): class _TypeAliasForm(typing._SpecialForm, _root=True): def __repr__(self): - return 'typing_extensions.' + self._name + return '_vendoring.typing_extensions.' + self._name TypeAlias = _TypeAliasForm('TypeAlias', doc="""Special marker indicating that an assignment should @@ -1667,7 +1667,7 @@ class _TypeAliasMeta(typing.TypingMeta): """Metaclass for TypeAlias""" def __repr__(self): - return 'typing_extensions.TypeAlias' + return '_vendoring.typing_extensions.TypeAlias' class _TypeAliasBase(typing._FinalTypingBase, metaclass=_TypeAliasMeta, _root=True): """Special marker indicating that an assignment should @@ -1689,7 +1689,7 @@ def __subclasscheck__(self, cls): raise TypeError("TypeAlias cannot be used with issubclass().") def __repr__(self): - return 'typing_extensions.TypeAlias' + return '_vendoring.typing_extensions.TypeAlias' TypeAlias = _TypeAliasBase(_root=True) @@ -1836,7 +1836,7 @@ def __init__(self, name, *, bound=None, covariant=False, contravariant=False): def_mod = sys._getframe(1).f_globals.get('__name__', '__main__') except (AttributeError, ValueError): def_mod = None - if def_mod != 'typing_extensions': + if def_mod != '_vendoring.typing_extensions': self.__module__ = def_mod def __repr__(self): @@ -1952,7 +1952,7 @@ def Concatenate(self, parameters): elif sys.version_info[:2] >= (3, 7): class _ConcatenateForm(typing._SpecialForm, _root=True): def __repr__(self): - return 'typing_extensions.' + self._name + return '_vendoring.typing_extensions.' + self._name def __getitem__(self, parameters): return _concatenate_getitem(self, parameters) @@ -1975,7 +1975,7 @@ class _ConcatenateAliasMeta(typing.TypingMeta): """Metaclass for Concatenate.""" def __repr__(self): - return 'typing_extensions.Concatenate' + return '_vendoring.typing_extensions.Concatenate' class _ConcatenateAliasBase(typing._FinalTypingBase, metaclass=_ConcatenateAliasMeta, @@ -1999,7 +1999,7 @@ def __subclasscheck__(self, cls): raise TypeError("Concatenate cannot be used with issubclass().") def __repr__(self): - return 'typing_extensions.Concatenate' + return '_vendoring.typing_extensions.Concatenate' def __getitem__(self, parameters): return _concatenate_getitem(self, parameters) @@ -2013,7 +2013,7 @@ def __getitem__(self, parameters): elif sys.version_info[:2] >= (3, 9): class _TypeGuardForm(typing._SpecialForm, _root=True): def __repr__(self): - return 'typing_extensions.' + self._name + return '_vendoring.typing_extensions.' + self._name @_TypeGuardForm def TypeGuard(self, parameters): @@ -2066,7 +2066,7 @@ def is_str(val: Union[str, float]): class _TypeGuardForm(typing._SpecialForm, _root=True): def __repr__(self): - return 'typing_extensions.' + self._name + return '_vendoring.typing_extensions.' + self._name def __getitem__(self, parameters): item = typing._type_check(parameters, @@ -2221,7 +2221,7 @@ def __mro_entries__(self, bases): raise TypeError(f"Cannot subclass {self!r}") def __repr__(self): - return f'typing_extensions.{self._name}' + return f'_vendoring.typing_extensions.{self._name}' def __reduce__(self): return self._name @@ -2255,7 +2255,7 @@ def LiteralString(self, params): Example:: - from typing_extensions import LiteralString + from _vendoring.typing_extensions import LiteralString def query(sql: LiteralString) -> ...: ... @@ -2273,7 +2273,7 @@ class _LiteralString(typing._FinalTypingBase, _root=True): Example:: - from typing_extensions import LiteralString + from _vendoring.typing_extensions import LiteralString def query(sql: LiteralString) -> ...: ... @@ -2351,7 +2351,7 @@ def Never(self, params): This can be used to define a function that should never be called, or a function that never returns:: - from typing_extensions import Never + from _vendoring.typing_extensions import Never def never_call_me(arg: Never) -> None: pass @@ -2376,7 +2376,7 @@ class _Never(typing._FinalTypingBase, _root=True): This can be used to define a function that should never be called, or a function that never returns:: - from typing_extensions import Never + from _vendoring.typing_extensions import Never def never_call_me(arg: Never) -> None: pass @@ -2410,7 +2410,7 @@ def __subclasscheck__(self, cls): elif sys.version_info[:2] >= (3, 9): class _ExtensionsSpecialForm(typing._SpecialForm, _root=True): def __repr__(self): - return 'typing_extensions.' + self._name + return '_vendoring.typing_extensions.' + self._name @_ExtensionsSpecialForm def Required(self, parameters): @@ -2452,7 +2452,7 @@ class Movie(TypedDict): elif sys.version_info[:2] >= (3, 7): class _RequiredForm(typing._SpecialForm, _root=True): def __repr__(self): - return 'typing_extensions.' + self._name + return '_vendoring.typing_extensions.' + self._name def __getitem__(self, parameters): item = typing._type_check(parameters, @@ -2567,7 +2567,7 @@ class Movie(TypedDict): if sys.version_info[:2] >= (3, 9): class _UnpackSpecialForm(typing._SpecialForm, _root=True): def __repr__(self): - return 'typing_extensions.' + self._name + return '_vendoring.typing_extensions.' + self._name class _UnpackAlias(typing._GenericAlias, _root=True): __class__ = typing.TypeVar @@ -2596,7 +2596,7 @@ class _UnpackAlias(typing._GenericAlias, _root=True): class _UnpackForm(typing._SpecialForm, _root=True): def __repr__(self): - return 'typing_extensions.' + self._name + return '_vendoring.typing_extensions.' + self._name def __getitem__(self, parameters): item = typing._type_check(parameters, @@ -2736,7 +2736,7 @@ def __init__(self, name): def_mod = sys._getframe(1).f_globals.get('__name__', '__main__') except (AttributeError, ValueError): def_mod = None - if def_mod != 'typing_extensions': + if def_mod != '_vendoring.typing_extensions': self.__module__ = def_mod self.__unpacked__ = Unpack[self] @@ -2831,7 +2831,7 @@ def dataclass_transform( Example: - from typing_extensions import dataclass_transform + from _vendoring.typing_extensions import dataclass_transform _T = TypeVar("_T") diff --git a/lib/spack/external/patches/jsonschema.attr.patch b/lib/spack/external/patches/jsonschema.attr.patch new file mode 100644 index 00000000000..92b6ccd894a --- /dev/null +++ b/lib/spack/external/patches/jsonschema.attr.patch @@ -0,0 +1,60 @@ +diff --git a/lib/spack/external/_vendoring/jsonschema/_types.py b/lib/spack/external/_vendoring/jsonschema/_types.py +index 4c05bf773b..cfd21cfcf7 100644 +--- a/lib/spack/external/_vendoring/jsonschema/_types.py ++++ b/lib/spack/external/_vendoring/jsonschema/_types.py +@@ -45,7 +45,7 @@ def is_any(checker, instance): + return True + + +-@attr.s(frozen=True) ++@_vendoring.attr.s(frozen=True) + class TypeChecker(object): + """ + A ``type`` property checker. +@@ -61,7 +61,7 @@ class TypeChecker(object): + + The initial mapping of types to their checking functions. + """ +- _type_checkers = attr.ib(default=pmap(), converter=pmap) ++ _type_checkers = _vendoring.attr.ib(default=pmap(), converter=pmap) + + def is_type(self, instance, type): + """ +@@ -131,7 +131,7 @@ def redefine_many(self, definitions=()): + + A new `TypeChecker` instance. + """ +- return attr.evolve( ++ return _vendoring.attr.evolve( + self, type_checkers=self._type_checkers.update(definitions), + ) + +@@ -162,7 +162,7 @@ def remove(self, *types): + checkers = checkers.remove(each) + except KeyError: + raise UndefinedTypeCheck(each) +- return attr.evolve(self, type_checkers=checkers) ++ return _vendoring.attr.evolve(self, type_checkers=checkers) + + + draft3_type_checker = TypeChecker( +diff --git a/lib/spack/external/_vendoring/jsonschema/exceptions.py b/lib/spack/external/_vendoring/jsonschema/exceptions.py +index 492c2c174a..1d891701c0 100644 +--- a/lib/spack/external/_vendoring/jsonschema/exceptions.py ++++ b/lib/spack/external/_vendoring/jsonschema/exceptions.py +@@ -149,13 +149,13 @@ class SchemaError(_Error): + _word_for_instance_in_error_message = "schema" + + +-@attr.s(hash=True) ++@_vendoring.attr.s(hash=True) + class RefResolutionError(Exception): + """ + A ref could not be resolved. + """ + +- _cause = attr.ib() ++ _cause = _vendoring.attr.ib() + + def __str__(self): + return str(self._cause) diff --git a/lib/spack/external/patches/jsonschema.vendoring.patch b/lib/spack/external/patches/jsonschema.vendoring.patch new file mode 100644 index 00000000000..7385b4a0d5f --- /dev/null +++ b/lib/spack/external/patches/jsonschema.vendoring.patch @@ -0,0 +1,13 @@ +diff --git a/lib/spack/external/_vendoring/jsonschema/_utils.py b/lib/spack/external/_vendoring/jsonschema/_utils.py +index eeab638f22..452eecc96f 100644 +--- a/lib/spack/external/_vendoring/jsonschema/_utils.py ++++ b/lib/spack/external/_vendoring/jsonschema/_utils.py +@@ -51,7 +51,7 @@ def load_schema(name): + Load a schema from ./schemas/``name``.json and return it. + """ + +- data = pkgutil.get_data("jsonschema", "schemas/{0}.json".format(name)) ++ data = pkgutil.get_data("_vendoring.jsonschema", "schemas/{0}.json".format(name)) + return json.loads(data.decode("utf-8")) + + diff --git a/lib/spack/spack/bootstrap/_common.py b/lib/spack/spack/bootstrap/_common.py index ade85ff5457..ee79f988fa5 100644 --- a/lib/spack/spack/bootstrap/_common.py +++ b/lib/spack/spack/bootstrap/_common.py @@ -12,7 +12,7 @@ import warnings from typing import Optional, Sequence, Union -from typing_extensions import TypedDict +from _vendoring.typing_extensions import TypedDict import archspec.cpu diff --git a/lib/spack/spack/ci/gitlab.py b/lib/spack/spack/ci/gitlab.py index 15d46ada01a..7215fdb051b 100644 --- a/lib/spack/spack/ci/gitlab.py +++ b/lib/spack/spack/ci/gitlab.py @@ -6,7 +6,7 @@ import shutil from typing import List, Optional -import ruamel.yaml +import _vendoring.ruamel.yaml import llnl.util.tty as tty @@ -422,4 +422,4 @@ def main_script_replacements(cmd): syaml.anchorify(sorted_output) with open(output_file, "w", encoding="utf-8") as f: - ruamel.yaml.YAML().dump(sorted_output, f) + _vendoring.ruamel.yaml.YAML().dump(sorted_output, f) diff --git a/lib/spack/spack/config.py b/lib/spack/spack/config.py index 85ea55a5847..717dfa0c511 100644 --- a/lib/spack/spack/config.py +++ b/lib/spack/spack/config.py @@ -37,7 +37,7 @@ import sys from typing import Any, Callable, Dict, Generator, List, NamedTuple, Optional, Tuple, Union -import jsonschema +from _vendoring import jsonschema from llnl.util import filesystem, lang, tty diff --git a/lib/spack/spack/container/__init__.py b/lib/spack/spack/container/__init__.py index b134aea05d0..d70d575d4bb 100644 --- a/lib/spack/spack/container/__init__.py +++ b/lib/spack/spack/container/__init__.py @@ -6,7 +6,7 @@ """ import warnings -import jsonschema +import _vendoring.jsonschema import spack.environment as ev import spack.schema.env as env @@ -83,5 +83,5 @@ def validate(configuration_file): ) warnings.warn(msg) - jsonschema.validate(config, schema=env.schema) + _vendoring.jsonschema.validate(config, schema=env.schema) return config diff --git a/lib/spack/spack/container/writers.py b/lib/spack/spack/container/writers.py index e521527be6c..ddd5b2ea344 100644 --- a/lib/spack/spack/container/writers.py +++ b/lib/spack/spack/container/writers.py @@ -9,7 +9,7 @@ from collections import namedtuple from typing import Optional -import jsonschema +import _vendoring.jsonschema import spack.environment as ev import spack.error @@ -201,7 +201,7 @@ def manifest(self): manifest = {"spack": manifest} # Validate the manifest file - jsonschema.validate(manifest, schema=spack.schema.env.schema) + _vendoring.jsonschema.validate(manifest, schema=spack.schema.env.schema) return syaml.dump(manifest, default_flow_style=False).strip() diff --git a/lib/spack/spack/cray_manifest.py b/lib/spack/spack/cray_manifest.py index 573e0614304..44918b2068a 100644 --- a/lib/spack/spack/cray_manifest.py +++ b/lib/spack/spack/cray_manifest.py @@ -8,8 +8,8 @@ import warnings from typing import Any, Dict, Iterable, List, Optional -import jsonschema -import jsonschema.exceptions +from _vendoring import jsonschema +from _vendoring.jsonschema import exceptions import llnl.util.tty as tty @@ -227,7 +227,7 @@ def read(path, apply_updates): json_data = json.load(json_file) jsonschema.validate(json_data, manifest_schema) - except (jsonschema.exceptions.ValidationError, decode_exception_type) as e: + except (exceptions.ValidationError, decode_exception_type) as e: raise ManifestValidationError("error parsing manifest JSON:", str(e)) from e specs = entries_to_specs(json_data["specs"]) diff --git a/lib/spack/spack/deptypes.py b/lib/spack/spack/deptypes.py index b8249e0e727..c4b4d5a7b4a 100644 --- a/lib/spack/spack/deptypes.py +++ b/lib/spack/spack/deptypes.py @@ -5,7 +5,7 @@ from typing import Iterable, List, Tuple, Union -from typing_extensions import Literal +from _vendoring.typing_extensions import Literal #: Type hint for the low-level dependency input (enum.Flag is too slow) DepFlag = int diff --git a/lib/spack/spack/detection/test.py b/lib/spack/spack/detection/test.py index 0d21ce4376b..97114f37e06 100644 --- a/lib/spack/spack/detection/test.py +++ b/lib/spack/spack/detection/test.py @@ -85,11 +85,11 @@ def _mock_layout(self) -> Generator[List[str], None, None]: self.tmpdir.cleanup() def _create_executable_scripts(self, mock_executables: MockExecutables) -> List[pathlib.Path]: - import jinja2 + import _vendoring.jinja2 relative_paths = mock_executables.executables script = mock_executables.script - script_template = jinja2.Template("#!/bin/bash\n{{ script }}\n") + script_template = _vendoring.jinja2.Template("#!/bin/bash\n{{ script }}\n") result = [] for mock_exe_path in relative_paths: rel_path = pathlib.Path(mock_exe_path) diff --git a/lib/spack/spack/filesystem_view.py b/lib/spack/spack/filesystem_view.py index bc2c6725c7a..11641b08bdf 100644 --- a/lib/spack/spack/filesystem_view.py +++ b/lib/spack/spack/filesystem_view.py @@ -12,7 +12,7 @@ import tempfile from typing import Callable, Dict, List, Optional -from typing_extensions import Literal +from _vendoring.typing_extensions import Literal from llnl.string import comma_or from llnl.util import tty diff --git a/lib/spack/spack/modules/common.py b/lib/spack/spack/modules/common.py index b38ffba186c..f310e6feed9 100644 --- a/lib/spack/spack/modules/common.py +++ b/lib/spack/spack/modules/common.py @@ -872,12 +872,12 @@ def write(self, overwrite=False): # Get the template for the module template_name = self._get_template() - import jinja2 + import _vendoring.jinja2 try: env = tengine.make_environment() template = env.get_template(template_name) - except jinja2.TemplateNotFound: + except _vendoring.jinja2.TemplateNotFound: # If the template was not found raise an exception with a little # more information msg = "template '{0}' was not found for '{1}'" diff --git a/lib/spack/spack/operating_systems/linux_distro.py b/lib/spack/spack/operating_systems/linux_distro.py index 808b39ec9d7..bc11dd4df05 100644 --- a/lib/spack/spack/operating_systems/linux_distro.py +++ b/lib/spack/spack/operating_systems/linux_distro.py @@ -38,7 +38,7 @@ class LinuxDistro(OperatingSystem): def __init__(self): try: # This will throw an error if imported on a non-Linux platform. - import distro + from _vendoring import distro distname, version = distro.id(), distro.version() except ImportError: diff --git a/lib/spack/spack/package_base.py b/lib/spack/spack/package_base.py index c4e7fc20f5f..98459a86402 100644 --- a/lib/spack/spack/package_base.py +++ b/lib/spack/spack/package_base.py @@ -23,7 +23,7 @@ import traceback from typing import Any, Callable, Dict, Iterable, List, Optional, Set, Tuple, Type, TypeVar, Union -from typing_extensions import Literal +from _vendoring.typing_extensions import Literal import llnl.util.filesystem as fsys import llnl.util.tty as tty diff --git a/lib/spack/spack/relocate.py b/lib/spack/spack/relocate.py index 2e1481ee4cb..4be813676c4 100644 --- a/lib/spack/spack/relocate.py +++ b/lib/spack/spack/relocate.py @@ -8,8 +8,8 @@ import sys from typing import Dict, Iterable, List, Optional -import macholib.mach_o -import macholib.MachO +import _vendoring.macholib.mach_o +import _vendoring.macholib.MachO import llnl.util.filesystem as fs import llnl.util.lang @@ -132,7 +132,7 @@ def _macholib_get_paths(cur_path): """Get rpaths, dependent libraries, and library id of mach-o objects.""" headers = [] try: - headers = macholib.MachO.MachO(cur_path).headers + headers = _vendoring.macholib.MachO.MachO(cur_path).headers except ValueError: pass if not headers: @@ -147,9 +147,9 @@ def _macholib_get_paths(cur_path): tty.warn("File is a stub, not a full library: {0}".format(cur_path)) commands = headers[-1].commands - LC_ID_DYLIB = macholib.mach_o.LC_ID_DYLIB - LC_LOAD_DYLIB = macholib.mach_o.LC_LOAD_DYLIB - LC_RPATH = macholib.mach_o.LC_RPATH + LC_ID_DYLIB = _vendoring.macholib.mach_o.LC_ID_DYLIB + LC_LOAD_DYLIB = _vendoring.macholib.mach_o.LC_LOAD_DYLIB + LC_RPATH = _vendoring.macholib.mach_o.LC_RPATH ident = None rpaths = [] diff --git a/lib/spack/spack/schema/__init__.py b/lib/spack/spack/schema/__init__.py index 45474dfdc78..b495ff1e074 100644 --- a/lib/spack/spack/schema/__init__.py +++ b/lib/spack/spack/schema/__init__.py @@ -6,8 +6,8 @@ import typing import warnings -import jsonschema -import jsonschema.validators +from _vendoring import jsonschema +from _vendoring.jsonschema import validators from spack.error import SpecSyntaxError @@ -66,7 +66,7 @@ def _deprecated_properties(validator, deprecated, instance, schema): yield jsonschema.ValidationError("\n".join(errors)) -Validator = jsonschema.validators.extend( +Validator = validators.extend( jsonschema.Draft7Validator, {"additionalKeysAreSpecs": _validate_spec, "deprecatedProperties": _deprecated_properties}, ) diff --git a/lib/spack/spack/schema/mirrors.py b/lib/spack/spack/schema/mirrors.py index 45e1f5adbf9..d69259057e0 100644 --- a/lib/spack/spack/schema/mirrors.py +++ b/lib/spack/spack/schema/mirrors.py @@ -9,7 +9,7 @@ """ from typing import Any, Dict -import jsonschema +import _vendoring.jsonschema #: Common properties for connection specification connection = { @@ -123,4 +123,4 @@ def check_access_pair(name, section): check_access_pair(name, section.get("push")) if errors: - raise jsonschema.ValidationError("\n".join(errors)) + raise _vendoring.jsonschema.ValidationError("\n".join(errors)) diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py index a5b1b0c8f03..e2e2d365264 100644 --- a/lib/spack/spack/spec.py +++ b/lib/spack/spack/spec.py @@ -74,7 +74,7 @@ overload, ) -from typing_extensions import Literal +from _vendoring.typing_extensions import Literal import archspec.cpu diff --git a/lib/spack/spack/tengine.py b/lib/spack/spack/tengine.py index 6bda66dda50..c5cebcc4387 100644 --- a/lib/spack/spack/tengine.py +++ b/lib/spack/spack/tengine.py @@ -69,7 +69,7 @@ def to_dict(self): def make_environment(dirs: Optional[Tuple[str, ...]] = None): """Returns a configured environment for template rendering.""" # Import at this scope to avoid slowing Spack startup down - import jinja2 + import _vendoring.jinja2 if dirs is None: # Default directories where to search for templates @@ -78,9 +78,9 @@ def make_environment(dirs: Optional[Tuple[str, ...]] = None): dirs = tuple(canonicalize_path(d) for d in itertools.chain(builtins, extensions)) # Loader for the templates - loader = jinja2.FileSystemLoader(dirs) + loader = _vendoring.jinja2.FileSystemLoader(dirs) # Environment of the template engine - env = jinja2.Environment(loader=loader, trim_blocks=True, lstrip_blocks=True) + env = _vendoring.jinja2.Environment(loader=loader, trim_blocks=True, lstrip_blocks=True) # Custom filters _set_filters(env) return env diff --git a/lib/spack/spack/test/cmd/ci.py b/lib/spack/spack/test/cmd/ci.py index d2894a08a79..4cd70c58353 100644 --- a/lib/spack/spack/test/cmd/ci.py +++ b/lib/spack/spack/test/cmd/ci.py @@ -7,7 +7,7 @@ import shutil from typing import NamedTuple -import jsonschema +import _vendoring.jsonschema import pytest from llnl.util.filesystem import mkdirp, working_dir @@ -860,7 +860,7 @@ def test_push_to_build_cache( ) index_fetcher = spack.binary_distribution.DefaultIndexFetcher(url_and_version, None) result = index_fetcher.conditional_fetch() - jsonschema.validate(json.loads(result.data), db_idx_schema) + _vendoring.jsonschema.validate(json.loads(result.data), db_idx_schema) # Now that index is regenerated, validate "buildcache list" output assert "patchelf" in buildcache_cmd("list", output=str) diff --git a/lib/spack/spack/test/concretization/core.py b/lib/spack/spack/test/concretization/core.py index 6241f148e05..04bfbf23f09 100644 --- a/lib/spack/spack/test/concretization/core.py +++ b/lib/spack/spack/test/concretization/core.py @@ -4,7 +4,7 @@ import os import sys -import jinja2 +import _vendoring.jinja2 import pytest import archspec.cpu @@ -266,7 +266,7 @@ def change(self, changes=None): del sys.modules["spack.pkg.changing"] # Change the recipe - t = jinja2.Template(changing_template) + t = _vendoring.jinja2.Template(changing_template) changing_pkg_str = t.render(**context) package_py = packages_dir / "changing" / "package.py" package_py.parent.mkdir(parents=True, exist_ok=True) diff --git a/lib/spack/spack/test/database.py b/lib/spack/spack/test/database.py index 7fe94a43bb1..7000068f46f 100644 --- a/lib/spack/spack/test/database.py +++ b/lib/spack/spack/test/database.py @@ -24,7 +24,7 @@ except ImportError: _use_uuid = False -import jsonschema +import _vendoring.jsonschema import llnl.util.lock as lk from llnl.util.tty.colify import colify @@ -487,7 +487,7 @@ def test_005_db_exists(database): with open(index_file, encoding="utf-8") as fd: index_object = json.load(fd) - jsonschema.validate(index_object, schema) + _vendoring.jsonschema.validate(index_object, schema) def test_010_all_install_sanity(database): @@ -783,7 +783,7 @@ def test_old_external_entries_prefix(mutable_database): with open(spack.store.STORE.db._index_path, "r", encoding="utf-8") as f: db_obj = json.loads(f.read()) - jsonschema.validate(db_obj, schema) + _vendoring.jsonschema.validate(db_obj, schema) s = spack.concretize.concretize_one("externaltool") diff --git a/lib/spack/spack/test/schema.py b/lib/spack/spack/test/schema.py index dfd3bce8378..2bc3348ba51 100644 --- a/lib/spack/spack/test/schema.py +++ b/lib/spack/spack/test/schema.py @@ -5,8 +5,8 @@ import json import os -import jsonschema import pytest +from _vendoring import jsonschema import spack.paths import spack.schema diff --git a/lib/spack/spack/test/spec_yaml.py b/lib/spack/spack/test/spec_yaml.py index a3b09a2e66f..3652d960673 100644 --- a/lib/spack/spack/test/spec_yaml.py +++ b/lib/spack/spack/test/spec_yaml.py @@ -15,8 +15,8 @@ import os import pickle +import _vendoring.ruamel.yaml import pytest -import ruamel.yaml import spack.concretize import spack.config @@ -449,7 +449,7 @@ def test_anchorify_1(): # Check if anchors are used out = io.StringIO() - ruamel.yaml.YAML().dump(after, out) + _vendoring.ruamel.yaml.YAML().dump(after, out) assert ( out.getvalue() == """\ @@ -472,7 +472,7 @@ def test_anchorify_2(): # Check if anchors are used out = io.StringIO() - ruamel.yaml.YAML().dump(after, out) + _vendoring.ruamel.yaml.YAML().dump(after, out) assert ( out.getvalue() == """\ diff --git a/lib/spack/spack/traverse.py b/lib/spack/spack/traverse.py index 0d408a23972..479075dcf49 100644 --- a/lib/spack/spack/traverse.py +++ b/lib/spack/spack/traverse.py @@ -17,7 +17,7 @@ overload, ) -from typing_extensions import Literal +from _vendoring.typing_extensions import Literal import spack.deptypes as dt import spack.spec diff --git a/lib/spack/spack/url_buildcache.py b/lib/spack/spack/url_buildcache.py index 29caa91806d..4d520ffe2d2 100644 --- a/lib/spack/spack/url_buildcache.py +++ b/lib/spack/spack/url_buildcache.py @@ -14,7 +14,7 @@ from tempfile import TemporaryDirectory from typing import Any, Dict, List, Optional, Tuple, Type -import jsonschema +import _vendoring.jsonschema import llnl.util.filesystem as fsys import llnl.util.tty as tty @@ -132,7 +132,7 @@ def to_dict(self): @classmethod def from_dict(cls, manifest_json: Dict[str, Any]) -> "BuildcacheManifest": - jsonschema.validate(manifest_json, buildcache_manifest_schema) + _vendoring.jsonschema.validate(manifest_json, buildcache_manifest_schema) return BuildcacheManifest( layout_version=manifest_json["version"], data=[BlobRecord.from_dict(blob_json) for blob_json in manifest_json["data"]], diff --git a/lib/spack/spack/util/executable.py b/lib/spack/spack/util/executable.py index e61a1af7ec5..a8b34437493 100644 --- a/lib/spack/spack/util/executable.py +++ b/lib/spack/spack/util/executable.py @@ -9,7 +9,7 @@ from pathlib import Path, PurePath from typing import Callable, Dict, List, Optional, Sequence, TextIO, Type, Union, overload -from typing_extensions import Literal +from _vendoring.typing_extensions import Literal import llnl.util.tty as tty diff --git a/lib/spack/spack/util/spack_yaml.py b/lib/spack/spack/util/spack_yaml.py index 0a1549e6d25..356451c9bed 100644 --- a/lib/spack/spack/util/spack_yaml.py +++ b/lib/spack/spack/util/spack_yaml.py @@ -18,8 +18,7 @@ import re from typing import IO, Any, Callable, Dict, List, Optional, Union -import ruamel.yaml -from ruamel.yaml import comments, constructor, emitter, error, representer +from _vendoring.ruamel.yaml import YAML, comments, constructor, emitter, error, representer from llnl.util.tty.color import cextra, clen, colorize @@ -332,7 +331,7 @@ class ConfigYAML: """Handles the loading and dumping of Spack's YAML files.""" def __init__(self, yaml_type: YAMLType) -> None: - self.yaml = ruamel.yaml.YAML(typ="rt", pure=True) + self.yaml = YAML(typ="rt", pure=True) if yaml_type == YAMLType.GENERIC_YAML: self.yaml.Representer = SafeRepresenter elif yaml_type == YAMLType.ANNOTATED_SPACK_CONFIG_FILE: diff --git a/lib/spack/spack/util/typing.py b/lib/spack/spack/util/typing.py index ea1e863dc13..8a484ca865d 100644 --- a/lib/spack/spack/util/typing.py +++ b/lib/spack/spack/util/typing.py @@ -4,7 +4,7 @@ from typing import Any -from typing_extensions import Protocol +from _vendoring.typing_extensions import Protocol class SupportsRichComparison(Protocol): diff --git a/lib/spack/spack_installable/main.py b/lib/spack/spack_installable/main.py index 86041d4cead..136d814c6ad 100644 --- a/lib/spack/spack_installable/main.py +++ b/lib/spack/spack_installable/main.py @@ -10,10 +10,8 @@ def get_spack_sys_paths(spack_prefix): """Given a spack prefix, return all the paths Spack needs to function.""" spack_libs = os.path.join(spack_prefix, "lib", "spack") external_libs = os.path.join(spack_libs, "external") - vendored_libs = os.path.join(external_libs, "_vendoring") - # spack externals take precedence, then vendored packages, then spack itself - return [external_libs, vendored_libs, spack_libs] + return [external_libs, spack_libs] def main(argv=None): diff --git a/pyproject.toml b/pyproject.toml index e5f3978308b..321f4a02ddc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -251,7 +251,20 @@ protected-files = ["__init__.py", "README.rst", "vendor.txt"] patches-dir = "lib/spack/external/patches" [tool.vendoring.transformations] -substitute = [] +substitute = [ + { match = "typing_extensions", replace = "_vendoring.typing_extensions" }, + { match = "ruamel.yaml", replace = "_vendoring.ruamel.yaml" }, + { match = "altgraph", replace = "_vendoring.altgraph" }, + { match = "macholib", replace = "_vendoring.macholib" }, + { match = "from six", replace = "from _vendoring.six" }, + { match = "markupsafe", replace = "_vendoring.markupsafe" }, + { match = "jinja2", replace = "_vendoring.jinja2" }, + { match = "pyrsistent", replace = "_vendoring.pyrsistent" }, + { match = "import attr\n", replace = "import _vendoring.attr\n" }, + { match = "from attr", replace = "from _vendoring.attr" }, + { match = "import jsonschema", replace = "import _vendoring.jsonschema" }, + { match = "from jsonschema", replace = "from _vendoring.jsonschema" }, +] drop = [ # contains unnecessary scripts "bin/", @@ -270,6 +283,8 @@ drop = [ # ruamel.yaml installs unneded files "ruamel.*.pth", "pvectorc.*.so", + # Trim jsonschema tests + "jsonschema/tests", ] [tool.vendoring.typing-stubs] diff --git a/var/spack/repos/spack_repo/builtin/packages/gcc_runtime/package.py b/var/spack/repos/spack_repo/builtin/packages/gcc_runtime/package.py index 2c12f6eee99..cd5118a2cdd 100644 --- a/var/spack/repos/spack_repo/builtin/packages/gcc_runtime/package.py +++ b/var/spack/repos/spack_repo/builtin/packages/gcc_runtime/package.py @@ -6,7 +6,7 @@ import os import re -from macholib import MachO, mach_o +from _vendoring.macholib import MachO, mach_o from spack.package import * from spack.util.elf import delete_needed_from_elf, parse_elf