omegaconf 2.4.0.dev12__tar.gz → 2.4.0.dev14__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {omegaconf-2.4.0.dev12/omegaconf.egg-info → omegaconf-2.4.0.dev14}/PKG-INFO +2 -5
- omegaconf-2.4.0.dev14/build_helpers/__init__.py +5 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/build_helpers/get_vendored.py +46 -30
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/__init__.py +3 -2
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/_impl.py +20 -4
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/_utils.py +325 -35
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/base.py +219 -58
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/basecontainer.py +183 -42
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/dictconfig.py +11 -2
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/grammar_visitor.py +2 -1
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/listconfig.py +50 -23
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/nodes.py +42 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/omegaconf.py +530 -83
- omegaconf-2.4.0.dev14/omegaconf/tupleconfig.py +522 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/version.py +2 -1
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14/omegaconf.egg-info}/PKG-INFO +2 -5
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf.egg-info/SOURCES.txt +7 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf.egg-info/requires.txt +1 -4
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/pyproject.toml +24 -27
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/requirements/dev.txt +1 -4
- omegaconf-2.4.0.dev14/setup.cfg +7 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/__init__.py +0 -5
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/interpolation/test_custom_resolvers.py +3 -1
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/interpolation/test_interpolation.py +10 -5
- omegaconf-2.4.0.dev14/tests/interpolation/test_resolver_annotation_validation.py +522 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/structured_conf/data/attr_classes.py +21 -1
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/structured_conf/data/dataclasses.py +23 -1
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/structured_conf/data/dataclasses_pre_311.py +23 -1
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/structured_conf/test_structured_basic.py +375 -3
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/structured_conf/test_structured_config.py +76 -12
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_base_config.py +1 -1
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_basic_ops_dict.py +12 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_basic_ops_list.py +105 -6
- omegaconf-2.4.0.dev14/tests/test_basic_ops_tuple.py +411 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_container_unions.py +102 -21
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_create.py +22 -8
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_errors.py +11 -16
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_merge.py +148 -55
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_nested_containers.py +20 -8
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_nodes.py +6 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_omegaconf.py +5 -0
- omegaconf-2.4.0.dev14/tests/test_structured_config_unions.py +614 -0
- omegaconf-2.4.0.dev14/tests/test_tuple_integration.py +186 -0
- omegaconf-2.4.0.dev14/tests/test_tuple_merge.py +163 -0
- omegaconf-2.4.0.dev14/tests/test_tuple_structured.py +205 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_unions.py +73 -2
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_update.py +283 -2
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_utils.py +43 -4
- omegaconf-2.4.0.dev12/build_helpers/__init__.py +0 -3
- omegaconf-2.4.0.dev12/setup.cfg +0 -12
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/LICENSE +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/MANIFEST.in +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/README.md +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/build_helpers/bin/antlr-4.11.1-complete.jar +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/build_helpers/build_helpers.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/build_helpers/test_helpers.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/_yaml.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/errors.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/grammar/OmegaConfGrammarLexer.g4 +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/grammar/OmegaConfGrammarParser.g4 +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/grammar/__init__.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/grammar/gen/OmegaConfGrammarLexer.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/grammar/gen/OmegaConfGrammarParser.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/grammar/gen/OmegaConfGrammarParserListener.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/grammar/gen/OmegaConfGrammarParserVisitor.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/grammar/gen/__init__.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/grammar_parser.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/py.typed +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/resolvers/__init__.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/resolvers/oc/__init__.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/resolvers/oc/dict.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/typing.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/__init__.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/BufferedTokenStream.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/CommonTokenFactory.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/CommonTokenStream.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/FileStream.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/InputStream.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/IntervalSet.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/LL1Analyzer.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/Lexer.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/ListTokenSource.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/Parser.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/ParserInterpreter.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/ParserRuleContext.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/PredictionContext.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/Recognizer.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/RuleContext.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/StdinStream.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/Token.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/TokenStreamRewriter.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/Utils.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/__init__.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/_pygrun.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/ATN.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/ATNConfig.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/ATNConfigSet.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/ATNDeserializationOptions.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/ATNDeserializer.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/ATNSimulator.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/ATNState.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/ATNType.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/LexerATNSimulator.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/LexerAction.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/LexerActionExecutor.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/ParserATNSimulator.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/PredictionMode.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/SemanticContext.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/Transition.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/__init__.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/dfa/DFA.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/dfa/DFASerializer.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/dfa/DFAState.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/dfa/__init__.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/error/DiagnosticErrorListener.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/error/ErrorListener.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/error/ErrorStrategy.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/error/Errors.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/error/__init__.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/tree/Chunk.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/tree/ParseTreeMatch.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/tree/ParseTreePattern.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/tree/ParseTreePatternMatcher.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/tree/RuleTagToken.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/tree/TokenTagToken.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/tree/Tree.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/tree/Trees.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/tree/__init__.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/xpath/XPath.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/xpath/XPathLexer.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/xpath/__init__.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf.egg-info/dependency_links.txt +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf.egg-info/top_level.txt +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/requirements/base.txt +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/requirements/docs.txt +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/setup.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/conftest.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/data/2.0.6.pickle +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/data/2.1.0.rc1.pickle +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/data/load.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/data/save.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/examples/__init__.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/examples/dataclass_postponed_annotations.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/examples/test_dataclass_example.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/examples/test_postponed_annotations.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/interpolation/__init__.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/interpolation/built_in_resolvers/__init__.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/interpolation/built_in_resolvers/test_oc_create.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/interpolation/built_in_resolvers/test_oc_decode.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/interpolation/built_in_resolvers/test_oc_deprecated.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/interpolation/built_in_resolvers/test_oc_dict.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/interpolation/built_in_resolvers/test_oc_env.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/interpolation/built_in_resolvers/test_oc_select.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/structured_conf/__init__.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/structured_conf/data/__init__.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_compare_dictconfig_vs_dict.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_config_eq.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_get_full_key.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_grammar.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_matrix.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_readonly.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_select.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_serialization.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_struct.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_to_container.py +0 -0
- {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_to_yaml.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: omegaconf
|
|
3
|
-
Version: 2.4.0.
|
|
3
|
+
Version: 2.4.0.dev14
|
|
4
4
|
Summary: A flexible configuration library
|
|
5
5
|
Home-page: https://github.com/omry/omegaconf
|
|
6
6
|
Author: Omry Yadan
|
|
@@ -22,19 +22,16 @@ Requires-Dist: PyYAML>=5.1.0; extra == "dev"
|
|
|
22
22
|
Requires-Dist: sphinx; extra == "dev"
|
|
23
23
|
Requires-Dist: sphinx-tabs; extra == "dev"
|
|
24
24
|
Requires-Dist: attrs; extra == "dev"
|
|
25
|
-
Requires-Dist: black[jupyter]==26.3.1; extra == "dev"
|
|
26
25
|
Requires-Dist: build; extra == "dev"
|
|
27
26
|
Requires-Dist: bump-my-version; extra == "dev"
|
|
28
27
|
Requires-Dist: coveralls; extra == "dev"
|
|
29
|
-
Requires-Dist: flake8==7.3.0; extra == "dev"
|
|
30
|
-
Requires-Dist: isort==5.13.2; extra == "dev"
|
|
31
28
|
Requires-Dist: nox[pbs]; extra == "dev"
|
|
32
29
|
Requires-Dist: pre-commit; extra == "dev"
|
|
33
|
-
Requires-Dist: pyflakes; extra == "dev"
|
|
34
30
|
Requires-Dist: pyrefly==0.62.0; extra == "dev"
|
|
35
31
|
Requires-Dist: pytest; extra == "dev"
|
|
36
32
|
Requires-Dist: pytest-benchmark; extra == "dev"
|
|
37
33
|
Requires-Dist: pytest-mock; extra == "dev"
|
|
34
|
+
Requires-Dist: ruff==0.15.22; extra == "dev"
|
|
38
35
|
Requires-Dist: towncrier; extra == "dev"
|
|
39
36
|
Requires-Dist: twine; extra == "dev"
|
|
40
37
|
Requires-Dist: pydevd; extra == "dev"
|
|
@@ -6,10 +6,12 @@ from itertools import chain
|
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
from typing import Callable, FrozenSet, Generator, List, Set, Tuple, Union
|
|
8
8
|
|
|
9
|
-
WHITELIST = {
|
|
9
|
+
WHITELIST = {"README.txt", "__init__.py", "vendor.txt"}
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
def delete_all(
|
|
12
|
+
def delete_all(
|
|
13
|
+
*paths: Path, whitelist: Union[Set[str], FrozenSet[str]] = frozenset()
|
|
14
|
+
) -> None:
|
|
13
15
|
"""Clear all the items in each of the indicated paths, except for elements listed
|
|
14
16
|
in the whitelist"""
|
|
15
17
|
for item in paths:
|
|
@@ -34,13 +36,15 @@ def iter_subtree(path: Path, depth: int = 0) -> Generator[Tuple[Path, int], None
|
|
|
34
36
|
|
|
35
37
|
def patch_vendor_imports(file: Path, replacements: List[Callable[[str], str]]) -> None:
|
|
36
38
|
"""Apply a list of replacements/patches to a given file"""
|
|
37
|
-
text = file.read_text(
|
|
39
|
+
text = file.read_text("utf8")
|
|
38
40
|
for replacement in replacements:
|
|
39
41
|
text = replacement(text)
|
|
40
|
-
file.write_text(text,
|
|
42
|
+
file.write_text(text, "utf8")
|
|
41
43
|
|
|
42
44
|
|
|
43
|
-
def find_vendored_libs(
|
|
45
|
+
def find_vendored_libs(
|
|
46
|
+
vendor_dir: Path, whitelist: Set[str]
|
|
47
|
+
) -> Tuple[List[str], List[Path]]:
|
|
44
48
|
vendored_libs = []
|
|
45
49
|
paths = []
|
|
46
50
|
for item in vendor_dir.iterdir():
|
|
@@ -56,23 +60,31 @@ def find_vendored_libs(vendor_dir: Path, whitelist: Set[str]) -> Tuple[List[str]
|
|
|
56
60
|
|
|
57
61
|
def vendor(vendor_dir: Path, relative_imports: bool = False) -> None:
|
|
58
62
|
# target package is <parent>.<vendor_dir>; foo/vendor -> foo.vendor
|
|
59
|
-
pkgname = f
|
|
63
|
+
pkgname = f"{vendor_dir.parent.name}.{vendor_dir.name}"
|
|
60
64
|
|
|
61
65
|
# remove everything
|
|
62
66
|
delete_all(*vendor_dir.iterdir(), whitelist=WHITELIST)
|
|
63
67
|
|
|
64
68
|
# install with pip
|
|
65
|
-
subprocess.run(
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
subprocess.run(
|
|
70
|
+
[
|
|
71
|
+
"pip",
|
|
72
|
+
"install",
|
|
73
|
+
"-t",
|
|
74
|
+
str(vendor_dir),
|
|
75
|
+
"-r",
|
|
76
|
+
str(vendor_dir / "vendor.txt"),
|
|
77
|
+
"--no-compile",
|
|
78
|
+
"--no-deps",
|
|
79
|
+
]
|
|
80
|
+
)
|
|
70
81
|
|
|
71
82
|
# delete stuff that's not needed
|
|
72
83
|
delete_all(
|
|
73
|
-
*vendor_dir.glob(
|
|
74
|
-
*vendor_dir.glob(
|
|
75
|
-
vendor_dir /
|
|
84
|
+
*vendor_dir.glob("*.dist-info"),
|
|
85
|
+
*vendor_dir.glob("*.egg-info"),
|
|
86
|
+
vendor_dir / "bin",
|
|
87
|
+
)
|
|
76
88
|
|
|
77
89
|
vendored_libs, paths = find_vendored_libs(vendor_dir, WHITELIST)
|
|
78
90
|
|
|
@@ -81,41 +93,45 @@ def vendor(vendor_dir: Path, relative_imports: bool = False) -> None:
|
|
|
81
93
|
for lib in vendored_libs:
|
|
82
94
|
replacements += (
|
|
83
95
|
partial( # import bar -> import foo.vendor.bar
|
|
84
|
-
re.compile(r
|
|
85
|
-
r
|
|
96
|
+
re.compile(r"(^\s*)import {}\n".format(lib), flags=re.M).sub,
|
|
97
|
+
r"\1from {} import {}\n".format(pkgname, lib),
|
|
86
98
|
),
|
|
87
99
|
partial( # from bar -> from foo.vendor.bar
|
|
88
|
-
re.compile(r
|
|
89
|
-
r
|
|
100
|
+
re.compile(r"(^\s*)from {}(\.|\s+)".format(lib), flags=re.M).sub,
|
|
101
|
+
r"\1from {}.{}\2".format(pkgname, lib),
|
|
90
102
|
),
|
|
91
103
|
)
|
|
92
104
|
|
|
93
105
|
for file, depth in chain.from_iterable(map(iter_subtree, paths)):
|
|
94
106
|
if relative_imports:
|
|
95
|
-
pkgname =
|
|
107
|
+
pkgname = "." * (depth - 1)
|
|
96
108
|
replacements = []
|
|
97
109
|
for lib in vendored_libs:
|
|
98
110
|
replacements += (
|
|
99
111
|
partial(
|
|
100
|
-
re.compile(r
|
|
101
|
-
r
|
|
112
|
+
re.compile(r"(^\s*)import {}\n".format(lib), flags=re.M).sub,
|
|
113
|
+
r"\1from {} import {}\n".format(pkgname, ""),
|
|
102
114
|
),
|
|
103
115
|
partial(
|
|
104
|
-
re.compile(r
|
|
105
|
-
r
|
|
116
|
+
re.compile(r"^from {}(\s+)".format(lib), flags=re.M).sub,
|
|
117
|
+
r"from .{}\1".format(pkgname),
|
|
106
118
|
),
|
|
107
119
|
partial(
|
|
108
|
-
re.compile(r
|
|
109
|
-
r
|
|
120
|
+
re.compile(r"(^\s*)from {}(\.+)".format(lib), flags=re.M).sub,
|
|
121
|
+
r"\1from {}\2".format(pkgname),
|
|
110
122
|
),
|
|
111
123
|
)
|
|
112
124
|
patch_vendor_imports(file, replacements)
|
|
113
125
|
|
|
114
126
|
|
|
115
|
-
if __name__ ==
|
|
127
|
+
if __name__ == "__main__":
|
|
116
128
|
# this assumes this is a script in `build_helpers`
|
|
117
|
-
|
|
118
|
-
vendor_dir =
|
|
119
|
-
assert (vendor_dir /
|
|
120
|
-
|
|
129
|
+
repo_root = Path(__file__).resolve().parent.parent
|
|
130
|
+
vendor_dir = repo_root / "omegaconf" / "vendor"
|
|
131
|
+
assert (vendor_dir / "vendor.txt").exists(), (
|
|
132
|
+
"omegaconf/vendor/vendor.txt file not found"
|
|
133
|
+
)
|
|
134
|
+
assert (vendor_dir / "__init__.py").exists(), (
|
|
135
|
+
"omegaconf/vendor/__init__.py file not found"
|
|
136
|
+
)
|
|
121
137
|
vendor(vendor_dir, relative_imports=True)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from .base import Container, DictKeyType,
|
|
1
|
+
from .base import Container, DictKeyType, Node, SCMode, UnionNode
|
|
2
2
|
from .dictconfig import DictConfig
|
|
3
3
|
from .errors import (
|
|
4
4
|
KeyValidationError,
|
|
@@ -30,6 +30,7 @@ from .omegaconf import (
|
|
|
30
30
|
open_dict,
|
|
31
31
|
read_write,
|
|
32
32
|
)
|
|
33
|
+
from .tupleconfig import TupleConfig
|
|
33
34
|
from .typing import Antlr4ParserRuleContext
|
|
34
35
|
from .version import __version__
|
|
35
36
|
|
|
@@ -43,12 +44,12 @@ __all__ = [
|
|
|
43
44
|
"Container",
|
|
44
45
|
"UnionNode",
|
|
45
46
|
"ListConfig",
|
|
47
|
+
"TupleConfig",
|
|
46
48
|
"DictConfig",
|
|
47
49
|
"DictKeyType",
|
|
48
50
|
"OmegaConf",
|
|
49
51
|
"Resolver",
|
|
50
52
|
"SCMode",
|
|
51
|
-
"ListMergeMode",
|
|
52
53
|
"flag_override",
|
|
53
54
|
"read_write",
|
|
54
55
|
"open_dict",
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
from typing import Any
|
|
2
2
|
|
|
3
|
-
from omegaconf import Container, DictConfig, ListConfig, Node, ValueNode
|
|
4
|
-
from omegaconf.errors import
|
|
3
|
+
from omegaconf import Container, DictConfig, ListConfig, Node, TupleConfig, ValueNode
|
|
4
|
+
from omegaconf.errors import (
|
|
5
|
+
ConfigKeyError,
|
|
6
|
+
ConfigTypeError,
|
|
7
|
+
InterpolationToMissingValueError,
|
|
8
|
+
)
|
|
5
9
|
from omegaconf.nodes import InterpolationResultNode
|
|
6
10
|
|
|
7
11
|
from ._utils import (
|
|
8
12
|
_DEFAULT_MARKER_,
|
|
9
13
|
_ensure_container,
|
|
10
14
|
_get_value,
|
|
15
|
+
_is_missing_literal,
|
|
11
16
|
is_primitive_container,
|
|
12
17
|
is_structured_config,
|
|
13
18
|
)
|
|
@@ -26,8 +31,19 @@ def _resolve_container_value(cfg: Container, key: Any) -> None:
|
|
|
26
31
|
resolved_value
|
|
27
32
|
):
|
|
28
33
|
resolved = _ensure_container(resolved_value)
|
|
34
|
+
if isinstance(cfg, TupleConfig) and _is_missing_literal(_get_value(resolved)):
|
|
35
|
+
cfg._format_and_raise(
|
|
36
|
+
key=key,
|
|
37
|
+
value=_get_value(resolved),
|
|
38
|
+
cause=InterpolationToMissingValueError(
|
|
39
|
+
"TupleConfig interpolation resolved to a missing value"
|
|
40
|
+
),
|
|
41
|
+
)
|
|
29
42
|
if isinstance(resolved, Container) and isinstance(node, ValueNode):
|
|
30
|
-
cfg
|
|
43
|
+
if isinstance(cfg, TupleConfig):
|
|
44
|
+
cfg._set_item_for_resolution(key, resolved)
|
|
45
|
+
else:
|
|
46
|
+
cfg[key] = resolved
|
|
31
47
|
else:
|
|
32
48
|
node._set_value(_get_value(resolved))
|
|
33
49
|
else:
|
|
@@ -44,7 +60,7 @@ def _resolve(cfg: Node) -> Node:
|
|
|
44
60
|
for k in list(cfg.keys()):
|
|
45
61
|
_resolve_container_value(cfg, k)
|
|
46
62
|
|
|
47
|
-
elif isinstance(cfg, ListConfig):
|
|
63
|
+
elif isinstance(cfg, (ListConfig, TupleConfig)):
|
|
48
64
|
for i in range(len(cfg)):
|
|
49
65
|
_resolve_container_value(cfg, i)
|
|
50
66
|
|