omegaconf 2.4.0.dev10__tar.gz → 2.4.0.dev11__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 (159) hide show
  1. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/MANIFEST.in +2 -0
  2. {omegaconf-2.4.0.dev10/omegaconf.egg-info → omegaconf-2.4.0.dev11}/PKG-INFO +28 -6
  3. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/README.md +5 -5
  4. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/build_helpers/build_helpers.py +4 -4
  5. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/build_helpers/get_vendored.py +1 -1
  6. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/__init__.py +2 -0
  7. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/_impl.py +22 -26
  8. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/_utils.py +256 -194
  9. omegaconf-2.4.0.dev11/omegaconf/_yaml.py +310 -0
  10. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/base.py +113 -9
  11. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/basecontainer.py +109 -20
  12. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/dictconfig.py +22 -5
  13. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/errors.py +1 -2
  14. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/grammar_parser.py +1 -1
  15. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/grammar_visitor.py +19 -8
  16. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/listconfig.py +14 -39
  17. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/nodes.py +51 -1
  18. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/omegaconf.py +485 -30
  19. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/typing.py +4 -4
  20. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/version.py +1 -1
  21. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11/omegaconf.egg-info}/PKG-INFO +28 -6
  22. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf.egg-info/SOURCES.txt +4 -0
  23. omegaconf-2.4.0.dev11/omegaconf.egg-info/requires.txt +23 -0
  24. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/pyproject.toml +25 -4
  25. omegaconf-2.4.0.dev11/requirements/dev.txt +19 -0
  26. omegaconf-2.4.0.dev11/requirements/docs.txt +2 -0
  27. omegaconf-2.4.0.dev11/setup.cfg +12 -0
  28. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/setup.py +22 -7
  29. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/__init__.py +2 -2
  30. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/interpolation/built_in_resolvers/test_oc_create.py +2 -2
  31. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/interpolation/built_in_resolvers/test_oc_select.py +32 -2
  32. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/structured_conf/data/attr_classes.py +33 -7
  33. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/structured_conf/data/dataclasses.py +38 -8
  34. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/structured_conf/data/dataclasses_pre_311.py +38 -8
  35. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/structured_conf/test_structured_basic.py +22 -0
  36. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/structured_conf/test_structured_config.py +174 -3
  37. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_base_config.py +4 -4
  38. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_basic_ops_dict.py +102 -4
  39. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_basic_ops_list.py +56 -1
  40. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_config_eq.py +1 -0
  41. omegaconf-2.4.0.dev11/tests/test_container_unions.py +478 -0
  42. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_create.py +219 -12
  43. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_errors.py +108 -2
  44. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_grammar.py +8 -3
  45. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_merge.py +137 -0
  46. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_nodes.py +94 -2
  47. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_omegaconf.py +143 -31
  48. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_select.py +66 -0
  49. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_serialization.py +50 -0
  50. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_to_yaml.py +53 -2
  51. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_update.py +54 -2
  52. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_utils.py +209 -32
  53. omegaconf-2.4.0.dev10/omegaconf.egg-info/requires.txt +0 -1
  54. omegaconf-2.4.0.dev10/setup.cfg +0 -27
  55. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/LICENSE +0 -0
  56. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/build_helpers/__init__.py +0 -0
  57. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/build_helpers/bin/antlr-4.11.1-complete.jar +0 -0
  58. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/build_helpers/test_helpers.py +0 -0
  59. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/grammar/OmegaConfGrammarLexer.g4 +0 -0
  60. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/grammar/OmegaConfGrammarParser.g4 +0 -0
  61. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/grammar/__init__.py +0 -0
  62. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/grammar/gen/OmegaConfGrammarLexer.py +0 -0
  63. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/grammar/gen/OmegaConfGrammarParser.py +0 -0
  64. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/grammar/gen/OmegaConfGrammarParserListener.py +0 -0
  65. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/grammar/gen/OmegaConfGrammarParserVisitor.py +0 -0
  66. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/grammar/gen/__init__.py +0 -0
  67. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/py.typed +0 -0
  68. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/resolvers/__init__.py +0 -0
  69. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/resolvers/oc/__init__.py +0 -0
  70. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/resolvers/oc/dict.py +0 -0
  71. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/__init__.py +0 -0
  72. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/BufferedTokenStream.py +0 -0
  73. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/CommonTokenFactory.py +0 -0
  74. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/CommonTokenStream.py +0 -0
  75. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/FileStream.py +0 -0
  76. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/InputStream.py +0 -0
  77. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/IntervalSet.py +0 -0
  78. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/LL1Analyzer.py +0 -0
  79. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/Lexer.py +0 -0
  80. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/ListTokenSource.py +0 -0
  81. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/Parser.py +0 -0
  82. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/ParserInterpreter.py +0 -0
  83. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/ParserRuleContext.py +0 -0
  84. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/PredictionContext.py +0 -0
  85. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/Recognizer.py +0 -0
  86. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/RuleContext.py +0 -0
  87. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/StdinStream.py +0 -0
  88. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/Token.py +0 -0
  89. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/TokenStreamRewriter.py +0 -0
  90. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/Utils.py +0 -0
  91. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/__init__.py +0 -0
  92. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/_pygrun.py +0 -0
  93. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/atn/ATN.py +0 -0
  94. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/atn/ATNConfig.py +0 -0
  95. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/atn/ATNConfigSet.py +0 -0
  96. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/atn/ATNDeserializationOptions.py +0 -0
  97. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/atn/ATNDeserializer.py +0 -0
  98. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/atn/ATNSimulator.py +0 -0
  99. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/atn/ATNState.py +0 -0
  100. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/atn/ATNType.py +0 -0
  101. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/atn/LexerATNSimulator.py +0 -0
  102. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/atn/LexerAction.py +0 -0
  103. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/atn/LexerActionExecutor.py +0 -0
  104. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/atn/ParserATNSimulator.py +0 -0
  105. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/atn/PredictionMode.py +0 -0
  106. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/atn/SemanticContext.py +0 -0
  107. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/atn/Transition.py +0 -0
  108. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/atn/__init__.py +0 -0
  109. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/dfa/DFA.py +0 -0
  110. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/dfa/DFASerializer.py +0 -0
  111. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/dfa/DFAState.py +0 -0
  112. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/dfa/__init__.py +0 -0
  113. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/error/DiagnosticErrorListener.py +0 -0
  114. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/error/ErrorListener.py +0 -0
  115. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/error/ErrorStrategy.py +0 -0
  116. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/error/Errors.py +0 -0
  117. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/error/__init__.py +0 -0
  118. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/tree/Chunk.py +0 -0
  119. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/tree/ParseTreeMatch.py +0 -0
  120. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/tree/ParseTreePattern.py +0 -0
  121. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/tree/ParseTreePatternMatcher.py +0 -0
  122. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/tree/RuleTagToken.py +0 -0
  123. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/tree/TokenTagToken.py +0 -0
  124. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/tree/Tree.py +0 -0
  125. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/tree/Trees.py +0 -0
  126. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/tree/__init__.py +0 -0
  127. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/xpath/XPath.py +0 -0
  128. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/xpath/XPathLexer.py +0 -0
  129. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf/vendor/antlr4/xpath/__init__.py +0 -0
  130. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf.egg-info/dependency_links.txt +0 -0
  131. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/omegaconf.egg-info/top_level.txt +0 -0
  132. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/requirements/base.txt +0 -0
  133. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/conftest.py +0 -0
  134. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/data/2.0.6.pickle +0 -0
  135. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/data/2.1.0.rc1.pickle +0 -0
  136. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/data/load.py +0 -0
  137. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/data/save.py +0 -0
  138. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/examples/__init__.py +0 -0
  139. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/examples/dataclass_postponed_annotations.py +0 -0
  140. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/examples/test_dataclass_example.py +0 -0
  141. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/examples/test_postponed_annotations.py +0 -0
  142. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/interpolation/__init__.py +0 -0
  143. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/interpolation/built_in_resolvers/__init__.py +0 -0
  144. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/interpolation/built_in_resolvers/test_oc_decode.py +0 -0
  145. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/interpolation/built_in_resolvers/test_oc_deprecated.py +0 -0
  146. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/interpolation/built_in_resolvers/test_oc_dict.py +0 -0
  147. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/interpolation/built_in_resolvers/test_oc_env.py +0 -0
  148. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/interpolation/test_custom_resolvers.py +0 -0
  149. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/interpolation/test_interpolation.py +0 -0
  150. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/structured_conf/__init__.py +0 -0
  151. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/structured_conf/data/__init__.py +0 -0
  152. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_compare_dictconfig_vs_dict.py +0 -0
  153. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_get_full_key.py +0 -0
  154. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_matrix.py +0 -0
  155. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_nested_containers.py +0 -0
  156. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_readonly.py +0 -0
  157. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_struct.py +0 -0
  158. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_to_container.py +0 -0
  159. {omegaconf-2.4.0.dev10 → omegaconf-2.4.0.dev11}/tests/test_unions.py +0 -0
@@ -1,5 +1,7 @@
1
1
  include LICENSE
2
2
  include requirements/base.txt
3
+ include requirements/dev.txt
4
+ include requirements/docs.txt
3
5
  recursive-include tests *.py *.pickle
4
6
  recursive-include build_helpers *.py *.jar
5
7
  recursive-include omegaconf *.g4
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omegaconf
3
- Version: 2.4.0.dev10
3
+ Version: 2.4.0.dev11
4
4
  Summary: A flexible configuration library
5
5
  Home-page: https://github.com/omry/omegaconf
6
6
  Author: Omry Yadan
@@ -17,6 +17,27 @@ Requires-Python: >=3.10
17
17
  Description-Content-Type: text/markdown
18
18
  License-File: LICENSE
19
19
  Requires-Dist: PyYAML>=5.1.0
20
+ Provides-Extra: dev
21
+ Requires-Dist: PyYAML>=5.1.0; extra == "dev"
22
+ Requires-Dist: sphinx; extra == "dev"
23
+ Requires-Dist: sphinx-tabs; extra == "dev"
24
+ Requires-Dist: attrs; extra == "dev"
25
+ Requires-Dist: black[jupyter]==26.3.1; extra == "dev"
26
+ Requires-Dist: build; extra == "dev"
27
+ Requires-Dist: bump-my-version; extra == "dev"
28
+ Requires-Dist: coveralls; extra == "dev"
29
+ Requires-Dist: flake8==7.3.0; extra == "dev"
30
+ Requires-Dist: isort==5.13.2; extra == "dev"
31
+ Requires-Dist: nox[pbs]; extra == "dev"
32
+ Requires-Dist: pre-commit; extra == "dev"
33
+ Requires-Dist: pyflakes; extra == "dev"
34
+ Requires-Dist: pyrefly==0.62.0; extra == "dev"
35
+ Requires-Dist: pytest; extra == "dev"
36
+ Requires-Dist: pytest-benchmark; extra == "dev"
37
+ Requires-Dist: pytest-mock; extra == "dev"
38
+ Requires-Dist: towncrier; extra == "dev"
39
+ Requires-Dist: twine; extra == "dev"
40
+ Requires-Dist: pydevd; extra == "dev"
20
41
  Dynamic: author
21
42
  Dynamic: author-email
22
43
  Dynamic: classifier
@@ -25,6 +46,7 @@ Dynamic: description-content-type
25
46
  Dynamic: home-page
26
47
  Dynamic: keywords
27
48
  Dynamic: license-file
49
+ Dynamic: provides-extra
28
50
  Dynamic: requires-dist
29
51
  Dynamic: requires-python
30
52
  Dynamic: summary
@@ -33,8 +55,9 @@ Dynamic: summary
33
55
  | | Description |
34
56
  | --- | --- |
35
57
  | Project | [![PyPI version](https://badge.fury.io/py/omegaconf.svg)](https://badge.fury.io/py/omegaconf)[![Downloads](https://pepy.tech/badge/omegaconf/month)](https://pepy.tech/project/omegaconf)![Python](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-blue) |
36
- | Code quality| [![CircleCI](https://img.shields.io/circleci/build/github/omry/omegaconf?logo=s&token=5de2f8dc2a0dd78438520575431aa533150806e3)](https://circleci.com/gh/omry/omegaconf)[![Coverage Status](https://coveralls.io/repos/github/omry/omegaconf/badge.svg)](https://coveralls.io/github/omry/omegaconf)|
37
- | Docs and support |[![Documentation Status](https://readthedocs.org/projects/omegaconf/badge/?version=2.0_branch)](https://omegaconf.readthedocs.io/en/2.1_branch/)[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/omry/omegaconf/master?filepath=docs%2Fnotebook%2FTutorial.ipynb)|
58
+ | Code quality| [![CircleCI](https://dl.circleci.com/status-badge/img/gh/omry/omegaconf/tree/main.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/omry/omegaconf/tree/main)[![Coverage Status](https://coveralls.io/repos/github/omry/omegaconf/badge.svg)](https://coveralls.io/github/omry/omegaconf)|
59
+ | Docs and support |[![Documentation Status](https://readthedocs.org/projects/omegaconf/badge/?version=2.0_branch)](https://omegaconf.readthedocs.io/en/2.3_branch/)[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/omry/omegaconf/master?filepath=docs%2Fnotebook%2FTutorial.ipynb)[![Zulip chat](https://img.shields.io/badge/chat-Zulip-2e77d0?logo=zulip)](https://hydra-framework.zulipchat.com/)|
60
+ | Backlog | [Issues & PRs backlog](https://omry.github.io/omegaconf/) |
38
61
 
39
62
 
40
63
  OmegaConf is a hierarchical configuration system, with support for merging configurations from multiple sources (YAML config files, dataclasses/objects and CLI arguments)
@@ -51,6 +74,8 @@ OmegaConf 2.4.0.dev is the upcoming development version.
51
74
  * [Documentation](https://omegaconf.readthedocs.io/en/latest/)
52
75
  * [Source code](https://github.com/omry/omegaconf/tree/master)
53
76
 
77
+ Install with `pip install --upgrade --pre omegaconf`
78
+
54
79
  ### Stable (2.3)
55
80
  OmegaConf 2.3 is the current stable version.
56
81
  * [What's new](https://github.com/omry/omegaconf/releases/tag/v2.3.0)
@@ -58,6 +83,3 @@ OmegaConf 2.3 is the current stable version.
58
83
  * [Source code](https://github.com/omry/omegaconf/tree/2.3_branch)
59
84
 
60
85
  Install with `pip install --upgrade omegaconf`
61
-
62
- ## Live tutorial
63
- Run the live tutorial: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/omry/omegaconf/master?filepath=docs%2Fnotebook%2FTutorial.ipynb)
@@ -2,8 +2,9 @@
2
2
  | | Description |
3
3
  | --- | --- |
4
4
  | Project | [![PyPI version](https://badge.fury.io/py/omegaconf.svg)](https://badge.fury.io/py/omegaconf)[![Downloads](https://pepy.tech/badge/omegaconf/month)](https://pepy.tech/project/omegaconf)![Python](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-blue) |
5
- | Code quality| [![CircleCI](https://img.shields.io/circleci/build/github/omry/omegaconf?logo=s&token=5de2f8dc2a0dd78438520575431aa533150806e3)](https://circleci.com/gh/omry/omegaconf)[![Coverage Status](https://coveralls.io/repos/github/omry/omegaconf/badge.svg)](https://coveralls.io/github/omry/omegaconf)|
6
- | Docs and support |[![Documentation Status](https://readthedocs.org/projects/omegaconf/badge/?version=2.0_branch)](https://omegaconf.readthedocs.io/en/2.1_branch/)[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/omry/omegaconf/master?filepath=docs%2Fnotebook%2FTutorial.ipynb)|
5
+ | Code quality| [![CircleCI](https://dl.circleci.com/status-badge/img/gh/omry/omegaconf/tree/main.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/omry/omegaconf/tree/main)[![Coverage Status](https://coveralls.io/repos/github/omry/omegaconf/badge.svg)](https://coveralls.io/github/omry/omegaconf)|
6
+ | Docs and support |[![Documentation Status](https://readthedocs.org/projects/omegaconf/badge/?version=2.0_branch)](https://omegaconf.readthedocs.io/en/2.3_branch/)[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/omry/omegaconf/master?filepath=docs%2Fnotebook%2FTutorial.ipynb)[![Zulip chat](https://img.shields.io/badge/chat-Zulip-2e77d0?logo=zulip)](https://hydra-framework.zulipchat.com/)|
7
+ | Backlog | [Issues & PRs backlog](https://omry.github.io/omegaconf/) |
7
8
 
8
9
 
9
10
  OmegaConf is a hierarchical configuration system, with support for merging configurations from multiple sources (YAML config files, dataclasses/objects and CLI arguments)
@@ -20,6 +21,8 @@ OmegaConf 2.4.0.dev is the upcoming development version.
20
21
  * [Documentation](https://omegaconf.readthedocs.io/en/latest/)
21
22
  * [Source code](https://github.com/omry/omegaconf/tree/master)
22
23
 
24
+ Install with `pip install --upgrade --pre omegaconf`
25
+
23
26
  ### Stable (2.3)
24
27
  OmegaConf 2.3 is the current stable version.
25
28
  * [What's new](https://github.com/omry/omegaconf/releases/tag/v2.3.0)
@@ -27,6 +30,3 @@ OmegaConf 2.3 is the current stable version.
27
30
  * [Source code](https://github.com/omry/omegaconf/tree/2.3_branch)
28
31
 
29
32
  Install with `pip install --upgrade omegaconf`
30
-
31
- ## Live tutorial
32
- Run the live tutorial: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/omry/omegaconf/master?filepath=docs%2Fnotebook%2FTutorial.ipynb)
@@ -7,7 +7,7 @@ import subprocess
7
7
  import sys
8
8
  from functools import partial
9
9
  from pathlib import Path
10
- from typing import List, Optional
10
+ from typing import Any, ClassVar, List, Optional
11
11
 
12
12
  from setuptools import Command
13
13
  from setuptools.command import build_py, develop, sdist
@@ -17,7 +17,7 @@ class ANTLRCommand(Command): # type: ignore # pragma: no cover
17
17
  """Generate parsers using ANTLR."""
18
18
 
19
19
  description = "Run ANTLR"
20
- user_options: List[str] = []
20
+ user_options: ClassVar[Any] = []
21
21
 
22
22
  def run(self) -> None:
23
23
  """Run command."""
@@ -100,7 +100,7 @@ class CleanCommand(Command): # type: ignore # pragma: no cover
100
100
 
101
101
  description = "Cleans out generated and junk files we don't want in the repo"
102
102
  dry_run: bool
103
- user_options: List[str] = []
103
+ user_options: ClassVar[Any] = []
104
104
 
105
105
  def run(self) -> None:
106
106
  root = Path(__file__).parent.parent.absolute()
@@ -211,7 +211,7 @@ def matches(patterns: List[str], path: Path) -> bool:
211
211
  return False
212
212
 
213
213
 
214
- def run_antlr(cmd: Command) -> None: # pragma: no cover
214
+ def run_antlr(cmd: Any) -> None: # pragma: no cover
215
215
  try:
216
216
  cmd.announce("Generating parsers with antlr4", level=distutils.log.INFO)
217
217
  cmd.run_command("antlr")
@@ -76,8 +76,8 @@ def vendor(vendor_dir: Path, relative_imports: bool = False) -> None:
76
76
 
77
77
  vendored_libs, paths = find_vendored_libs(vendor_dir, WHITELIST)
78
78
 
79
+ replacements: List[Callable[[str], str]] = []
79
80
  if not relative_imports:
80
- replacements: List[Callable[[str], str]] = []
81
81
  for lib in vendored_libs:
82
82
  replacements += (
83
83
  partial( # import bar -> import foo.vendor.bar
@@ -15,6 +15,7 @@ from .nodes import (
15
15
  EnumNode,
16
16
  FloatNode,
17
17
  IntegerNode,
18
+ LiteralNode,
18
19
  PathNode,
19
20
  StringNode,
20
21
  ValueNode,
@@ -61,6 +62,7 @@ __all__ = [
61
62
  "BooleanNode",
62
63
  "EnumNode",
63
64
  "FloatNode",
65
+ "LiteralNode",
64
66
  "MISSING",
65
67
  "SI",
66
68
  "II",
@@ -1,7 +1,7 @@
1
1
  from typing import Any
2
2
 
3
- from omegaconf import MISSING, Container, DictConfig, ListConfig, Node, ValueNode
4
- from omegaconf.errors import ConfigTypeError, InterpolationToMissingValueError
3
+ from omegaconf import Container, DictConfig, ListConfig, Node, ValueNode
4
+ from omegaconf.errors import ConfigKeyError, ConfigTypeError
5
5
  from omegaconf.nodes import InterpolationResultNode
6
6
 
7
7
  from ._utils import (
@@ -17,23 +17,19 @@ def _resolve_container_value(cfg: Container, key: Any) -> None:
17
17
  node = cfg._get_child(key)
18
18
  assert isinstance(node, Node)
19
19
  if node._is_interpolation():
20
- try:
21
- resolved = node._dereference_node()
22
- except InterpolationToMissingValueError:
23
- node._set_value(MISSING)
20
+ resolved = node._dereference_node()
21
+ if isinstance(resolved, Container):
22
+ _resolve(resolved)
23
+ if isinstance(resolved, InterpolationResultNode):
24
+ resolved_value = _get_value(resolved)
25
+ if is_primitive_container(resolved_value) or is_structured_config(
26
+ resolved_value
27
+ ):
28
+ resolved = _ensure_container(resolved_value)
29
+ if isinstance(resolved, Container) and isinstance(node, ValueNode):
30
+ cfg[key] = resolved
24
31
  else:
25
- if isinstance(resolved, Container):
26
- _resolve(resolved)
27
- if isinstance(resolved, InterpolationResultNode):
28
- resolved_value = _get_value(resolved)
29
- if is_primitive_container(resolved_value) or is_structured_config(
30
- resolved_value
31
- ):
32
- resolved = _ensure_container(resolved_value)
33
- if isinstance(resolved, Container) and isinstance(node, ValueNode):
34
- cfg[key] = resolved
35
- else:
36
- node._set_value(_get_value(resolved))
32
+ node._set_value(_get_value(resolved))
37
33
  else:
38
34
  _resolve(node)
39
35
 
@@ -41,15 +37,11 @@ def _resolve_container_value(cfg: Container, key: Any) -> None:
41
37
  def _resolve(cfg: Node) -> Node:
42
38
  assert isinstance(cfg, Node)
43
39
  if cfg._is_interpolation():
44
- try:
45
- resolved = cfg._dereference_node()
46
- except InterpolationToMissingValueError:
47
- cfg._set_value(MISSING)
48
- else:
49
- cfg._set_value(resolved._value())
40
+ resolved = cfg._dereference_node()
41
+ cfg._set_value(resolved._value())
50
42
 
51
43
  if isinstance(cfg, DictConfig):
52
- for k in cfg.keys():
44
+ for k in list(cfg.keys()):
53
45
  _resolve_container_value(cfg, k)
54
46
 
55
47
  elif isinstance(cfg, ListConfig):
@@ -102,7 +94,11 @@ def select_node(
102
94
  if not absolute_key and not key.startswith("."):
103
95
  key = f".{key}"
104
96
 
105
- cfg, key = cfg._resolve_key_and_root(key)
97
+ try:
98
+ cfg, key = cfg._resolve_key_and_root(key)
99
+ except ConfigKeyError:
100
+ return None
101
+
106
102
  _root, _last_key, node = cfg._select_impl(
107
103
  key,
108
104
  throw_on_missing=throw_on_missing,