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.
Files changed (166) hide show
  1. {omegaconf-2.4.0.dev12/omegaconf.egg-info → omegaconf-2.4.0.dev14}/PKG-INFO +2 -5
  2. omegaconf-2.4.0.dev14/build_helpers/__init__.py +5 -0
  3. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/build_helpers/get_vendored.py +46 -30
  4. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/__init__.py +3 -2
  5. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/_impl.py +20 -4
  6. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/_utils.py +325 -35
  7. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/base.py +219 -58
  8. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/basecontainer.py +183 -42
  9. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/dictconfig.py +11 -2
  10. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/grammar_visitor.py +2 -1
  11. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/listconfig.py +50 -23
  12. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/nodes.py +42 -0
  13. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/omegaconf.py +530 -83
  14. omegaconf-2.4.0.dev14/omegaconf/tupleconfig.py +522 -0
  15. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/version.py +2 -1
  16. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14/omegaconf.egg-info}/PKG-INFO +2 -5
  17. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf.egg-info/SOURCES.txt +7 -0
  18. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf.egg-info/requires.txt +1 -4
  19. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/pyproject.toml +24 -27
  20. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/requirements/dev.txt +1 -4
  21. omegaconf-2.4.0.dev14/setup.cfg +7 -0
  22. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/__init__.py +0 -5
  23. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/interpolation/test_custom_resolvers.py +3 -1
  24. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/interpolation/test_interpolation.py +10 -5
  25. omegaconf-2.4.0.dev14/tests/interpolation/test_resolver_annotation_validation.py +522 -0
  26. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/structured_conf/data/attr_classes.py +21 -1
  27. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/structured_conf/data/dataclasses.py +23 -1
  28. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/structured_conf/data/dataclasses_pre_311.py +23 -1
  29. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/structured_conf/test_structured_basic.py +375 -3
  30. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/structured_conf/test_structured_config.py +76 -12
  31. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_base_config.py +1 -1
  32. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_basic_ops_dict.py +12 -0
  33. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_basic_ops_list.py +105 -6
  34. omegaconf-2.4.0.dev14/tests/test_basic_ops_tuple.py +411 -0
  35. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_container_unions.py +102 -21
  36. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_create.py +22 -8
  37. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_errors.py +11 -16
  38. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_merge.py +148 -55
  39. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_nested_containers.py +20 -8
  40. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_nodes.py +6 -0
  41. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_omegaconf.py +5 -0
  42. omegaconf-2.4.0.dev14/tests/test_structured_config_unions.py +614 -0
  43. omegaconf-2.4.0.dev14/tests/test_tuple_integration.py +186 -0
  44. omegaconf-2.4.0.dev14/tests/test_tuple_merge.py +163 -0
  45. omegaconf-2.4.0.dev14/tests/test_tuple_structured.py +205 -0
  46. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_unions.py +73 -2
  47. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_update.py +283 -2
  48. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_utils.py +43 -4
  49. omegaconf-2.4.0.dev12/build_helpers/__init__.py +0 -3
  50. omegaconf-2.4.0.dev12/setup.cfg +0 -12
  51. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/LICENSE +0 -0
  52. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/MANIFEST.in +0 -0
  53. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/README.md +0 -0
  54. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/build_helpers/bin/antlr-4.11.1-complete.jar +0 -0
  55. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/build_helpers/build_helpers.py +0 -0
  56. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/build_helpers/test_helpers.py +0 -0
  57. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/_yaml.py +0 -0
  58. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/errors.py +0 -0
  59. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/grammar/OmegaConfGrammarLexer.g4 +0 -0
  60. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/grammar/OmegaConfGrammarParser.g4 +0 -0
  61. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/grammar/__init__.py +0 -0
  62. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/grammar/gen/OmegaConfGrammarLexer.py +0 -0
  63. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/grammar/gen/OmegaConfGrammarParser.py +0 -0
  64. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/grammar/gen/OmegaConfGrammarParserListener.py +0 -0
  65. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/grammar/gen/OmegaConfGrammarParserVisitor.py +0 -0
  66. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/grammar/gen/__init__.py +0 -0
  67. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/grammar_parser.py +0 -0
  68. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/py.typed +0 -0
  69. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/resolvers/__init__.py +0 -0
  70. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/resolvers/oc/__init__.py +0 -0
  71. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/resolvers/oc/dict.py +0 -0
  72. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/typing.py +0 -0
  73. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/__init__.py +0 -0
  74. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/BufferedTokenStream.py +0 -0
  75. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/CommonTokenFactory.py +0 -0
  76. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/CommonTokenStream.py +0 -0
  77. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/FileStream.py +0 -0
  78. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/InputStream.py +0 -0
  79. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/IntervalSet.py +0 -0
  80. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/LL1Analyzer.py +0 -0
  81. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/Lexer.py +0 -0
  82. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/ListTokenSource.py +0 -0
  83. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/Parser.py +0 -0
  84. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/ParserInterpreter.py +0 -0
  85. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/ParserRuleContext.py +0 -0
  86. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/PredictionContext.py +0 -0
  87. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/Recognizer.py +0 -0
  88. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/RuleContext.py +0 -0
  89. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/StdinStream.py +0 -0
  90. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/Token.py +0 -0
  91. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/TokenStreamRewriter.py +0 -0
  92. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/Utils.py +0 -0
  93. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/__init__.py +0 -0
  94. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/_pygrun.py +0 -0
  95. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/ATN.py +0 -0
  96. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/ATNConfig.py +0 -0
  97. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/ATNConfigSet.py +0 -0
  98. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/ATNDeserializationOptions.py +0 -0
  99. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/ATNDeserializer.py +0 -0
  100. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/ATNSimulator.py +0 -0
  101. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/ATNState.py +0 -0
  102. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/ATNType.py +0 -0
  103. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/LexerATNSimulator.py +0 -0
  104. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/LexerAction.py +0 -0
  105. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/LexerActionExecutor.py +0 -0
  106. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/ParserATNSimulator.py +0 -0
  107. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/PredictionMode.py +0 -0
  108. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/SemanticContext.py +0 -0
  109. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/Transition.py +0 -0
  110. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/atn/__init__.py +0 -0
  111. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/dfa/DFA.py +0 -0
  112. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/dfa/DFASerializer.py +0 -0
  113. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/dfa/DFAState.py +0 -0
  114. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/dfa/__init__.py +0 -0
  115. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/error/DiagnosticErrorListener.py +0 -0
  116. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/error/ErrorListener.py +0 -0
  117. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/error/ErrorStrategy.py +0 -0
  118. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/error/Errors.py +0 -0
  119. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/error/__init__.py +0 -0
  120. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/tree/Chunk.py +0 -0
  121. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/tree/ParseTreeMatch.py +0 -0
  122. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/tree/ParseTreePattern.py +0 -0
  123. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/tree/ParseTreePatternMatcher.py +0 -0
  124. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/tree/RuleTagToken.py +0 -0
  125. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/tree/TokenTagToken.py +0 -0
  126. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/tree/Tree.py +0 -0
  127. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/tree/Trees.py +0 -0
  128. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/tree/__init__.py +0 -0
  129. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/xpath/XPath.py +0 -0
  130. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/xpath/XPathLexer.py +0 -0
  131. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf/vendor/antlr4/xpath/__init__.py +0 -0
  132. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf.egg-info/dependency_links.txt +0 -0
  133. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/omegaconf.egg-info/top_level.txt +0 -0
  134. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/requirements/base.txt +0 -0
  135. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/requirements/docs.txt +0 -0
  136. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/setup.py +0 -0
  137. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/conftest.py +0 -0
  138. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/data/2.0.6.pickle +0 -0
  139. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/data/2.1.0.rc1.pickle +0 -0
  140. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/data/load.py +0 -0
  141. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/data/save.py +0 -0
  142. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/examples/__init__.py +0 -0
  143. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/examples/dataclass_postponed_annotations.py +0 -0
  144. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/examples/test_dataclass_example.py +0 -0
  145. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/examples/test_postponed_annotations.py +0 -0
  146. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/interpolation/__init__.py +0 -0
  147. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/interpolation/built_in_resolvers/__init__.py +0 -0
  148. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/interpolation/built_in_resolvers/test_oc_create.py +0 -0
  149. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/interpolation/built_in_resolvers/test_oc_decode.py +0 -0
  150. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/interpolation/built_in_resolvers/test_oc_deprecated.py +0 -0
  151. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/interpolation/built_in_resolvers/test_oc_dict.py +0 -0
  152. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/interpolation/built_in_resolvers/test_oc_env.py +0 -0
  153. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/interpolation/built_in_resolvers/test_oc_select.py +0 -0
  154. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/structured_conf/__init__.py +0 -0
  155. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/structured_conf/data/__init__.py +0 -0
  156. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_compare_dictconfig_vs_dict.py +0 -0
  157. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_config_eq.py +0 -0
  158. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_get_full_key.py +0 -0
  159. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_grammar.py +0 -0
  160. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_matrix.py +0 -0
  161. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_readonly.py +0 -0
  162. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_select.py +0 -0
  163. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_serialization.py +0 -0
  164. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_struct.py +0 -0
  165. {omegaconf-2.4.0.dev12 → omegaconf-2.4.0.dev14}/tests/test_to_container.py +0 -0
  166. {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.dev12
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"
@@ -0,0 +1,5 @@
1
+ # ruff: noqa: F401, I001
2
+
3
+ # Order of imports is important (see warning otherwise when running tests)
4
+ import setuptools
5
+ import distutils
@@ -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 = {'README.txt', '__init__.py', 'vendor.txt'}
9
+ WHITELIST = {"README.txt", "__init__.py", "vendor.txt"}
10
10
 
11
11
 
12
- def delete_all(*paths: Path, whitelist: Union[Set[str], FrozenSet[str]] = frozenset()) -> None:
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('utf8')
39
+ text = file.read_text("utf8")
38
40
  for replacement in replacements:
39
41
  text = replacement(text)
40
- file.write_text(text, 'utf8')
42
+ file.write_text(text, "utf8")
41
43
 
42
44
 
43
- def find_vendored_libs(vendor_dir: Path, whitelist: Set[str]) -> Tuple[List[str], List[Path]]:
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'{vendor_dir.parent.name}.{vendor_dir.name}'
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
- 'pip', 'install', '-t', str(vendor_dir),
67
- '-r', str(vendor_dir / 'vendor.txt'),
68
- '--no-compile', '--no-deps'
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('*.dist-info'),
74
- *vendor_dir.glob('*.egg-info'),
75
- vendor_dir / 'bin')
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'(^\s*)import {}\n'.format(lib), flags=re.M).sub,
85
- r'\1from {} import {}\n'.format(pkgname, lib)
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'(^\s*)from {}(\.|\s+)'.format(lib), flags=re.M).sub,
89
- r'\1from {}.{}\2'.format(pkgname, lib)
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 = '.' * (depth - 1)
107
+ pkgname = "." * (depth - 1)
96
108
  replacements = []
97
109
  for lib in vendored_libs:
98
110
  replacements += (
99
111
  partial(
100
- re.compile(r'(^\s*)import {}\n'.format(lib), flags=re.M).sub,
101
- r'\1from {} import {}\n'.format(pkgname, "")
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'^from {}(\s+)'.format(lib), flags=re.M).sub,
105
- r'from .{}\1'.format(pkgname)
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'(^\s*)from {}(\.+)'.format(lib), flags=re.M).sub,
109
- r'\1from {}\2'.format(pkgname)
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__ == '__main__':
127
+ if __name__ == "__main__":
116
128
  # this assumes this is a script in `build_helpers`
117
- here = Path('__file__').resolve().parent
118
- vendor_dir = here / 'omegaconf' / 'vendor'
119
- assert (vendor_dir / 'vendor.txt').exists(), 'omegaconf/vendor/vendor.txt file not found'
120
- assert (vendor_dir / '__init__.py').exists(), 'omegaconf/vendor/__init__.py file not found'
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, ListMergeMode, Node, SCMode, UnionNode
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 ConfigKeyError, ConfigTypeError
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[key] = resolved
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