omegaconf 2.4.0.dev2__tar.gz → 2.4.0.dev4__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.dev2/omegaconf.egg-info → omegaconf-2.4.0.dev4}/PKG-INFO +17 -4
  2. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/build_helpers/build_helpers.py +9 -10
  3. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/_utils.py +65 -3
  4. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/base.py +16 -28
  5. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/basecontainer.py +5 -8
  6. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/grammar/gen/OmegaConfGrammarLexer.py +1 -1
  7. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/grammar/gen/OmegaConfGrammarParser.py +1 -1
  8. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/grammar/gen/OmegaConfGrammarParserListener.py +1 -1
  9. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/grammar/gen/OmegaConfGrammarParserVisitor.py +1 -1
  10. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/grammar_parser.py +4 -2
  11. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/grammar_visitor.py +1 -1
  12. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/nodes.py +1 -2
  13. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/omegaconf.py +8 -12
  14. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/version.py +4 -4
  15. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4/omegaconf.egg-info}/PKG-INFO +17 -4
  16. omegaconf-2.4.0.dev4/pydevd_plugins/__init__.py +3 -0
  17. omegaconf-2.4.0.dev4/pydevd_plugins/extensions/__init__.py +3 -0
  18. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/pyproject.toml +1 -1
  19. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/setup.py +4 -2
  20. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/__init__.py +1 -2
  21. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/interpolation/built_in_resolvers/test_oc_decode.py +2 -2
  22. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_compare_dictconfig_vs_dict.py +1 -0
  23. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_create.py +1 -0
  24. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_errors.py +1 -1
  25. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_grammar.py +2 -2
  26. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_nodes.py +49 -2
  27. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_omegaconf.py +10 -6
  28. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_to_yaml.py +9 -4
  29. omegaconf-2.4.0.dev2/pydevd_plugins/__init__.py +0 -6
  30. omegaconf-2.4.0.dev2/pydevd_plugins/extensions/__init__.py +0 -6
  31. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/LICENSE +0 -0
  32. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/MANIFEST.in +0 -0
  33. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/README.md +0 -0
  34. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/build_helpers/__init__.py +0 -0
  35. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/build_helpers/bin/antlr-4.11.1-complete.jar +0 -0
  36. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/build_helpers/get_vendored.py +0 -0
  37. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/build_helpers/test_helpers.py +0 -0
  38. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/__init__.py +0 -0
  39. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/_impl.py +0 -0
  40. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/dictconfig.py +0 -0
  41. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/errors.py +0 -0
  42. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/grammar/OmegaConfGrammarLexer.g4 +0 -0
  43. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/grammar/OmegaConfGrammarParser.g4 +0 -0
  44. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/grammar/__init__.py +0 -0
  45. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/grammar/gen/__init__.py +0 -0
  46. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/listconfig.py +0 -0
  47. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/py.typed +0 -0
  48. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/resolvers/__init__.py +0 -0
  49. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/resolvers/oc/__init__.py +0 -0
  50. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/resolvers/oc/dict.py +0 -0
  51. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/typing.py +0 -0
  52. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/__init__.py +0 -0
  53. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/BufferedTokenStream.py +0 -0
  54. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/CommonTokenFactory.py +0 -0
  55. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/CommonTokenStream.py +0 -0
  56. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/FileStream.py +0 -0
  57. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/InputStream.py +0 -0
  58. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/IntervalSet.py +0 -0
  59. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/LL1Analyzer.py +0 -0
  60. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/Lexer.py +0 -0
  61. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/ListTokenSource.py +0 -0
  62. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/Parser.py +0 -0
  63. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/ParserInterpreter.py +0 -0
  64. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/ParserRuleContext.py +0 -0
  65. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/PredictionContext.py +0 -0
  66. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/Recognizer.py +0 -0
  67. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/RuleContext.py +0 -0
  68. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/StdinStream.py +0 -0
  69. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/Token.py +0 -0
  70. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/TokenStreamRewriter.py +0 -0
  71. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/Utils.py +0 -0
  72. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/__init__.py +0 -0
  73. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/_pygrun.py +0 -0
  74. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/atn/ATN.py +0 -0
  75. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/atn/ATNConfig.py +0 -0
  76. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/atn/ATNConfigSet.py +0 -0
  77. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/atn/ATNDeserializationOptions.py +0 -0
  78. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/atn/ATNDeserializer.py +0 -0
  79. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/atn/ATNSimulator.py +0 -0
  80. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/atn/ATNState.py +0 -0
  81. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/atn/ATNType.py +0 -0
  82. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/atn/LexerATNSimulator.py +0 -0
  83. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/atn/LexerAction.py +0 -0
  84. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/atn/LexerActionExecutor.py +0 -0
  85. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/atn/ParserATNSimulator.py +0 -0
  86. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/atn/PredictionMode.py +0 -0
  87. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/atn/SemanticContext.py +0 -0
  88. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/atn/Transition.py +0 -0
  89. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/atn/__init__.py +0 -0
  90. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/dfa/DFA.py +0 -0
  91. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/dfa/DFASerializer.py +0 -0
  92. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/dfa/DFAState.py +0 -0
  93. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/dfa/__init__.py +0 -0
  94. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/error/DiagnosticErrorListener.py +0 -0
  95. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/error/ErrorListener.py +0 -0
  96. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/error/ErrorStrategy.py +0 -0
  97. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/error/Errors.py +0 -0
  98. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/error/__init__.py +0 -0
  99. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/tree/Chunk.py +0 -0
  100. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/tree/ParseTreeMatch.py +0 -0
  101. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/tree/ParseTreePattern.py +0 -0
  102. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/tree/ParseTreePatternMatcher.py +0 -0
  103. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/tree/RuleTagToken.py +0 -0
  104. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/tree/TokenTagToken.py +0 -0
  105. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/tree/Tree.py +0 -0
  106. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/tree/Trees.py +0 -0
  107. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/tree/__init__.py +0 -0
  108. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/xpath/XPath.py +0 -0
  109. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/xpath/XPathLexer.py +0 -0
  110. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf/vendor/antlr4/xpath/__init__.py +0 -0
  111. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf.egg-info/SOURCES.txt +0 -0
  112. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf.egg-info/dependency_links.txt +0 -0
  113. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf.egg-info/requires.txt +0 -0
  114. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/omegaconf.egg-info/top_level.txt +0 -0
  115. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/pydevd_plugins/extensions/pydevd_plugin_omegaconf.py +0 -0
  116. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/requirements/base.txt +0 -0
  117. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/setup.cfg +0 -0
  118. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/conftest.py +0 -0
  119. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/data/2.0.6.pickle +0 -0
  120. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/data/2.1.0.rc1.pickle +0 -0
  121. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/data/load.py +0 -0
  122. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/data/save.py +0 -0
  123. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/examples/__init__.py +0 -0
  124. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/examples/dataclass_postponed_annotations.py +0 -0
  125. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/examples/test_dataclass_example.py +0 -0
  126. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/examples/test_postponed_annotations.py +0 -0
  127. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/interpolation/__init__.py +0 -0
  128. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/interpolation/built_in_resolvers/__init__.py +0 -0
  129. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/interpolation/built_in_resolvers/test_oc_create.py +0 -0
  130. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/interpolation/built_in_resolvers/test_oc_deprecated.py +0 -0
  131. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/interpolation/built_in_resolvers/test_oc_dict.py +0 -0
  132. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/interpolation/built_in_resolvers/test_oc_env.py +0 -0
  133. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/interpolation/built_in_resolvers/test_oc_select.py +0 -0
  134. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/interpolation/test_custom_resolvers.py +0 -0
  135. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/interpolation/test_interpolation.py +0 -0
  136. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/structured_conf/__init__.py +0 -0
  137. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/structured_conf/data/__init__.py +0 -0
  138. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/structured_conf/data/attr_classes.py +0 -0
  139. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/structured_conf/data/dataclasses.py +0 -0
  140. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/structured_conf/data/dataclasses_pre_311.py +0 -0
  141. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/structured_conf/test_structured_basic.py +0 -0
  142. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/structured_conf/test_structured_config.py +0 -0
  143. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_base_config.py +0 -0
  144. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_basic_ops_dict.py +0 -0
  145. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_basic_ops_list.py +0 -0
  146. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_config_eq.py +0 -0
  147. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_get_full_key.py +0 -0
  148. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_matrix.py +0 -0
  149. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_merge.py +0 -0
  150. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_nested_containers.py +0 -0
  151. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_pydev_resolver_plugin.py +0 -0
  152. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_readonly.py +0 -0
  153. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_select.py +0 -0
  154. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_serialization.py +0 -0
  155. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_struct.py +0 -0
  156. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_to_container.py +0 -0
  157. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_unions.py +0 -0
  158. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_update.py +0 -0
  159. {omegaconf-2.4.0.dev2 → omegaconf-2.4.0.dev4}/tests/test_utils.py +0 -0
@@ -1,23 +1,36 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: omegaconf
3
- Version: 2.4.0.dev2
3
+ Version: 2.4.0.dev4
4
4
  Summary: A flexible configuration library
5
5
  Home-page: https://github.com/omry/omegaconf
6
6
  Author: Omry Yadan
7
7
  Author-email: omry@yadan.net
8
8
  Keywords: yaml configuration config
9
- Classifier: Programming Language :: Python :: 3.8
10
9
  Classifier: Programming Language :: Python :: 3.9
11
10
  Classifier: Programming Language :: Python :: 3.10
12
11
  Classifier: Programming Language :: Python :: 3.11
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Programming Language :: Python :: 3.13
14
+ Classifier: Programming Language :: Python :: 3.14
13
15
  Classifier: License :: OSI Approved :: BSD License
14
16
  Classifier: Operating System :: OS Independent
15
- Requires-Python: >=3.8
17
+ Requires-Python: >=3.9
16
18
  Description-Content-Type: text/markdown
17
19
  License-File: LICENSE
18
20
  Requires-Dist: PyYAML>=5.1.0
19
21
  Requires-Dist: dataclasses; python_version == "3.6"
20
22
  Requires-Dist: typing-extensions; python_version <= "3.9"
23
+ Dynamic: author
24
+ Dynamic: author-email
25
+ Dynamic: classifier
26
+ Dynamic: description
27
+ Dynamic: description-content-type
28
+ Dynamic: home-page
29
+ Dynamic: keywords
30
+ Dynamic: license-file
31
+ Dynamic: requires-dist
32
+ Dynamic: requires-python
33
+ Dynamic: summary
21
34
 
22
35
  # OmegaConf
23
36
  | | Description |
@@ -1,4 +1,3 @@
1
- import codecs
2
1
  import distutils.log
3
2
  import errno
4
3
  import os
@@ -64,26 +63,26 @@ class ANTLRCommand(Command): # type: ignore # pragma: no cover
64
63
  build_dir = Path(__file__).parent.absolute()
65
64
  project_root = build_dir.parent
66
65
  lib = "antlr4"
67
- pkgname = 'omegaconf.vendor'
66
+ pkgname = "omegaconf.vendor"
68
67
 
69
68
  replacements = [
70
69
  partial( # import antlr4 -> import omegaconf.vendor.antlr4
71
- re.compile(r'(^\s*)import {}\n'.format(lib), flags=re.M).sub,
72
- r'\1from {} import {}\n'.format(pkgname, lib)
70
+ re.compile(r"(^\s*)import {}\n".format(lib), flags=re.M).sub,
71
+ r"\1from {} import {}\n".format(pkgname, lib),
73
72
  ),
74
73
  partial( # from antlr4 -> from fomegaconf.vendor.antlr4
75
- re.compile(r'(^\s*)from {}(\.|\s+)'.format(lib), flags=re.M).sub,
76
- r'\1from {}.{}\2'.format(pkgname, lib)
74
+ re.compile(r"(^\s*)from {}(\.|\s+)".format(lib), flags=re.M).sub,
75
+ r"\1from {}.{}\2".format(pkgname, lib),
77
76
  ),
78
77
  ]
79
78
 
80
79
  path = project_root / "omegaconf" / "grammar" / "gen"
81
80
  for item in path.iterdir():
82
81
  if item.is_file() and item.name.endswith(".py"):
83
- text = item.read_text('utf8')
82
+ text = item.read_text("utf8")
84
83
  for replacement in replacements:
85
84
  text = replacement(text)
86
- item.write_text(text, 'utf8')
85
+ item.write_text(text, "utf8")
87
86
 
88
87
 
89
88
  class BuildPyCommand(build_py.build_py): # pragma: no cover
@@ -148,7 +147,7 @@ class DevelopCommand(develop.develop): # pragma: no cover
148
147
 
149
148
  class SDistCommand(sdist.sdist): # pragma: no cover
150
149
  def run(self) -> None:
151
- if not self.dry_run: # type: ignore
150
+ if not self.dry_run:
152
151
  self.run_command("clean")
153
152
  run_antlr(self)
154
153
  sdist.sdist.run(self)
@@ -196,7 +195,7 @@ def find(
196
195
 
197
196
  def find_version(*file_paths: str) -> str:
198
197
  root = Path(__file__).parent.parent.absolute()
199
- with codecs.open(root / Path(*file_paths), "r") as fp: # type: ignore
198
+ with open(root / Path(*file_paths), "r", encoding="utf-8") as fp:
200
199
  version_file = fp.read()
201
200
  version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", version_file, re.M)
202
201
  if version_match:
@@ -114,6 +114,7 @@ _DEFAULT_MARKER_: Any = Marker("_DEFAULT_MARKER_")
114
114
 
115
115
  class OmegaConfDumper(BaseDumper): # type: ignore
116
116
  str_representer_added = False
117
+ pathlib_representers_added = False
117
118
 
118
119
  @staticmethod
119
120
  def str_representer(dumper: yaml.Dumper, data: str) -> yaml.ScalarNode:
@@ -124,11 +125,51 @@ class OmegaConfDumper(BaseDumper): # type: ignore
124
125
  style=("'" if with_quotes else None),
125
126
  )
126
127
 
128
+ @staticmethod
129
+ def pathlib_path_representer(dumper: yaml.Dumper, data: Any) -> yaml.Node:
130
+ # Use old pathlib.Path tag for cross-version compatibility
131
+ # Extract constructor args from __reduce__ and use sequence representation
132
+ return dumper.represent_sequence( # pragma: no cover
133
+ "tag:yaml.org,2002:python/object/apply:pathlib.Path",
134
+ [str(data)],
135
+ )
136
+
137
+ @staticmethod
138
+ def pathlib_posix_path_representer(dumper: yaml.Dumper, data: Any) -> yaml.Node:
139
+ # Use old pathlib.PosixPath tag for cross-version compatibility
140
+ return dumper.represent_sequence(
141
+ "tag:yaml.org,2002:python/object/apply:pathlib.PosixPath",
142
+ [str(data)],
143
+ )
144
+
145
+ @staticmethod
146
+ def pathlib_windows_path_representer(dumper: yaml.Dumper, data: Any) -> yaml.Node:
147
+ # Use old pathlib.WindowsPath tag for cross-version compatibility
148
+ return dumper.represent_sequence( # pragma: no cover
149
+ "tag:yaml.org,2002:python/object/apply:pathlib.WindowsPath",
150
+ [str(data)],
151
+ )
152
+
127
153
 
128
154
  def get_omega_conf_dumper() -> Type[OmegaConfDumper]:
129
155
  if not OmegaConfDumper.str_representer_added:
130
156
  OmegaConfDumper.add_representer(str, OmegaConfDumper.str_representer)
131
157
  OmegaConfDumper.str_representer_added = True
158
+
159
+ # Add representers for pathlib types to ensure cross-version compatibility.
160
+ # Python 3.13+ uses pathlib._local.* internally, so we normalize to old pathlib.* tags
161
+ if not OmegaConfDumper.pathlib_representers_added:
162
+ from pathlib import Path, PosixPath, WindowsPath
163
+
164
+ OmegaConfDumper.add_representer(Path, OmegaConfDumper.pathlib_path_representer)
165
+ OmegaConfDumper.add_representer(
166
+ PosixPath, OmegaConfDumper.pathlib_posix_path_representer
167
+ )
168
+ OmegaConfDumper.add_representer(
169
+ WindowsPath, OmegaConfDumper.pathlib_windows_path_representer
170
+ )
171
+ OmegaConfDumper.pathlib_representers_added = True
172
+
132
173
  return OmegaConfDumper
133
174
 
134
175
 
@@ -190,6 +231,20 @@ def get_yaml_loader() -> Any:
190
231
  lambda loader, node: pathlib.WindowsPath(*loader.construct_sequence(node)),
191
232
  )
192
233
 
234
+ # Python 3.13+ uses internal pathlib._local module
235
+ loader.add_constructor(
236
+ "tag:yaml.org,2002:python/object/apply:pathlib._local.Path",
237
+ lambda loader, node: pathlib.Path(*loader.construct_sequence(node)),
238
+ )
239
+ loader.add_constructor(
240
+ "tag:yaml.org,2002:python/object/apply:pathlib._local.PosixPath",
241
+ lambda loader, node: pathlib.PosixPath(*loader.construct_sequence(node)),
242
+ )
243
+ loader.add_constructor(
244
+ "tag:yaml.org,2002:python/object/apply:pathlib._local.WindowsPath",
245
+ lambda loader, node: pathlib.WindowsPath(*loader.construct_sequence(node)),
246
+ )
247
+
193
248
  return loader
194
249
 
195
250
 
@@ -350,7 +405,7 @@ def get_attr_data(obj: Any, allow_objects: Optional[bool] = None) -> Dict[str, A
350
405
  value = MISSING
351
406
  if is_union_annotation(type_) and not is_supported_union_annotation(type_):
352
407
  e = ConfigValueError(
353
- f"Unions of containers are not supported:\n{name}: {type_str(type_)}"
408
+ f"Unions of containers are not supported:\n{name}: {type_str(type_)}" # noqa: E231
354
409
  )
355
410
  format_and_raise(node=None, key=None, value=value, cause=e, msg=str(e))
356
411
 
@@ -409,7 +464,7 @@ def get_dataclass_data(
409
464
 
410
465
  if is_union_annotation(type_) and not is_supported_union_annotation(type_):
411
466
  e = ConfigValueError(
412
- f"Unions of containers are not supported:\n{name}: {type_str(type_)}"
467
+ f"Unions of containers are not supported:\n{name}: {type_str(type_)}" # noqa: E231
413
468
  )
414
469
  format_and_raise(node=None, key=None, value=value, cause=e, msg=str(e))
415
470
  try:
@@ -941,7 +996,14 @@ def type_str(t: Any, include_module_name: bool = False) -> str:
941
996
  and t.__module__ != "typing"
942
997
  and not t.__module__.startswith("omegaconf.")
943
998
  ):
944
- module_prefix = str(t.__module__) + "."
999
+ module_name = str(t.__module__)
1000
+ if isinstance(t, type) and issubclass(t, pathlib.PurePath):
1001
+ # Python 3.13+ uses pathlib._local internally, normalize to pathlib for # Path types
1002
+ # Normalize pathlib._local to pathlib for cross-version compatibility
1003
+ if module_name == "pathlib._local": # pragma: no cover
1004
+ module_name = "pathlib"
1005
+
1006
+ module_prefix = module_name + "."
945
1007
  else:
946
1008
  module_prefix = ""
947
1009
  ret = module_prefix + ret
@@ -237,8 +237,7 @@ class Node(ABC):
237
237
  assert False
238
238
 
239
239
  @abstractmethod
240
- def _get_full_key(self, key: Optional[Union[DictKeyType, int]]) -> str:
241
- ...
240
+ def _get_full_key(self, key: Optional[Union[DictKeyType, int]]) -> str: ...
242
241
 
243
242
  def _dereference_node(self) -> "Node":
244
243
  node = self._dereference_node_impl(throw_on_resolution_failure=True)
@@ -306,32 +305,27 @@ class Node(ABC):
306
305
  return self._value() is None
307
306
 
308
307
  @abstractmethod
309
- def __eq__(self, other: Any) -> bool:
310
- ...
308
+ def __eq__(self, other: Any) -> bool: ...
311
309
 
312
310
  @abstractmethod
313
- def __ne__(self, other: Any) -> bool:
314
- ...
311
+ def __ne__(self, other: Any) -> bool: ...
315
312
 
316
313
  @abstractmethod
317
- def __hash__(self) -> int:
318
- ...
314
+ def __hash__(self) -> int: ...
319
315
 
320
316
  @abstractmethod
321
- def _value(self) -> Any:
322
- ...
317
+ def _value(self) -> Any: ...
323
318
 
324
319
  @abstractmethod
325
- def _set_value(self, value: Any, flags: Optional[Dict[str, bool]] = None) -> None:
326
- ...
320
+ def _set_value(
321
+ self, value: Any, flags: Optional[Dict[str, bool]] = None
322
+ ) -> None: ...
327
323
 
328
324
  @abstractmethod
329
- def _is_optional(self) -> bool:
330
- ...
325
+ def _is_optional(self) -> bool: ...
331
326
 
332
327
  @abstractmethod
333
- def _is_interpolation(self) -> bool:
334
- ...
328
+ def _is_interpolation(self) -> bool: ...
335
329
 
336
330
  def _key(self) -> Any:
337
331
  return self._metadata.key
@@ -414,8 +408,7 @@ class Container(Box):
414
408
  validate_key: bool = True,
415
409
  throw_on_missing_value: bool = False,
416
410
  throw_on_missing_key: bool = False,
417
- ) -> Union[Optional[Node], List[Optional[Node]]]:
418
- ...
411
+ ) -> Union[Optional[Node], List[Optional[Node]]]: ...
419
412
 
420
413
  @abstractmethod
421
414
  def _get_node(
@@ -425,24 +418,19 @@ class Container(Box):
425
418
  validate_key: bool = True,
426
419
  throw_on_missing_value: bool = False,
427
420
  throw_on_missing_key: bool = False,
428
- ) -> Union[Optional[Node], List[Optional[Node]]]:
429
- ...
421
+ ) -> Union[Optional[Node], List[Optional[Node]]]: ...
430
422
 
431
423
  @abstractmethod
432
- def __delitem__(self, key: Any) -> None:
433
- ...
424
+ def __delitem__(self, key: Any) -> None: ...
434
425
 
435
426
  @abstractmethod
436
- def __setitem__(self, key: Any, value: Any) -> None:
437
- ...
427
+ def __setitem__(self, key: Any, value: Any) -> None: ...
438
428
 
439
429
  @abstractmethod
440
- def __iter__(self) -> Iterator[Any]:
441
- ...
430
+ def __iter__(self) -> Iterator[Any]: ...
442
431
 
443
432
  @abstractmethod
444
- def __getitem__(self, key_or_index: Any) -> Any:
445
- ...
433
+ def __getitem__(self, key_or_index: Any) -> Any: ...
446
434
 
447
435
  def _resolve_key_and_root(self, key: str) -> Tuple["Container", str]:
448
436
  orig = key
@@ -167,8 +167,7 @@ class BaseContainer(Container, ABC):
167
167
  self.__dict__.update(d)
168
168
 
169
169
  @abstractmethod
170
- def __delitem__(self, key: Any) -> None:
171
- ...
170
+ def __delitem__(self, key: Any) -> None: ...
172
171
 
173
172
  def __len__(self) -> int:
174
173
  if self._is_none() or self._is_missing() or self._is_interpolation():
@@ -722,12 +721,10 @@ class BaseContainer(Container, ABC):
722
721
  return _is_interpolation(self.__dict__["_content"])
723
722
 
724
723
  @abstractmethod
725
- def _validate_get(self, key: Any, value: Any = None) -> None:
726
- ...
724
+ def _validate_get(self, key: Any, value: Any = None) -> None: ...
727
725
 
728
726
  @abstractmethod
729
- def _validate_set(self, key: Any, value: Any) -> None:
730
- ...
727
+ def _validate_set(self, key: Any, value: Any) -> None: ...
731
728
 
732
729
  def _value(self) -> Any:
733
730
  return self.__dict__["_content"]
@@ -741,9 +738,9 @@ class BaseContainer(Container, ABC):
741
738
 
742
739
  def _slice_to_str(x: slice) -> str:
743
740
  if x.step is not None:
744
- return f"{x.start}:{x.stop}:{x.step}"
741
+ return f"{x.start}:{x.stop}:{x.step}" # noqa: E231
745
742
  else:
746
- return f"{x.start}:{x.stop}"
743
+ return f"{x.start}:{x.stop}" # noqa: E231
747
744
 
748
745
  def prepand(
749
746
  full_key: str,
@@ -1,4 +1,4 @@
1
- # Generated from /home/homestar/dev/omegaconf/omegaconf/grammar/OmegaConfGrammarLexer.g4 by ANTLR 4.11.1
1
+ # Generated from /home/runner/work/omegaconf/omegaconf/omegaconf/grammar/OmegaConfGrammarLexer.g4 by ANTLR 4.11.1
2
2
  from omegaconf.vendor.antlr4 import *
3
3
  from io import StringIO
4
4
  import sys
@@ -1,4 +1,4 @@
1
- # Generated from /home/homestar/dev/omegaconf/omegaconf/grammar/OmegaConfGrammarParser.g4 by ANTLR 4.11.1
1
+ # Generated from /home/runner/work/omegaconf/omegaconf/omegaconf/grammar/OmegaConfGrammarParser.g4 by ANTLR 4.11.1
2
2
  # encoding: utf-8
3
3
  from omegaconf.vendor.antlr4 import *
4
4
  from io import StringIO
@@ -1,4 +1,4 @@
1
- # Generated from /home/homestar/dev/omegaconf/omegaconf/grammar/OmegaConfGrammarParser.g4 by ANTLR 4.11.1
1
+ # Generated from /home/runner/work/omegaconf/omegaconf/omegaconf/grammar/OmegaConfGrammarParser.g4 by ANTLR 4.11.1
2
2
  from omegaconf.vendor.antlr4 import *
3
3
  if __name__ is not None and "." in __name__:
4
4
  from .OmegaConfGrammarParser import OmegaConfGrammarParser
@@ -1,4 +1,4 @@
1
- # Generated from /home/homestar/dev/omegaconf/omegaconf/grammar/OmegaConfGrammarParser.g4 by ANTLR 4.11.1
1
+ # Generated from /home/runner/work/omegaconf/omegaconf/omegaconf/grammar/OmegaConfGrammarParser.g4 by ANTLR 4.11.1
2
2
  from omegaconf.vendor.antlr4 import *
3
3
  if __name__ is not None and "." in __name__:
4
4
  from .OmegaConfGrammarParser import OmegaConfGrammarParser
@@ -28,8 +28,10 @@ _node_inter = f"\\${{\\s*{_node_path}\\s*}}" # node interpolation ${foo.bar}
28
28
  _id = "[a-zA-Z_][\\w\\-]*" # foo, foo_bar, foo-bar, abc123
29
29
  _resolver_name = f"({_id}(\\.{_id})*)?" # foo, ns.bar3, ns_1.ns_2.b0z
30
30
  _arg = r"[a-zA-Z_0-9/\-\+.$%*@?|]+" # string representing a resolver argument
31
- _args = f"{_arg}(\\s*,\\s*{_arg})*" # list of resolver arguments
32
- _resolver_inter = f"\\${{\\s*{_resolver_name}\\s*:\\s*{_args}?\\s*}}" # ${foo:bar}
31
+ _args = f"{_arg}(\\s*,\\s*{_arg})*" # list of resolver arguments # noqa: E231
32
+ _resolver_inter = (
33
+ f"\\${{\\s*{_resolver_name}\\s*:\\s*{_args}?\\s*}}" # ${foo:bar} # noqa: E231
34
+ )
33
35
  _inter = f"({_node_inter}|{_resolver_inter})" # any kind of interpolation
34
36
  _outer = "([^$]|\\$(?!{))+" # any character except $ (unless not followed by {)
35
37
  SIMPLE_INTERPOLATION_PATTERN = re.compile(
@@ -251,7 +251,7 @@ class GrammarVisitor(OmegaConfGrammarParserVisitor):
251
251
  warnings.warn(
252
252
  f"In the sequence `{txt}` some elements are missing: please replace "
253
253
  f"them with empty quoted strings. "
254
- f"See https://github.com/omry/omegaconf/issues/572 for details.",
254
+ f"See https://github.com/omry/omegaconf/issues/572 for details.", # noqa: E231
255
255
  category=UserWarning,
256
256
  )
257
257
 
@@ -76,8 +76,7 @@ class ValueNode(Node):
76
76
  return self._validate_and_convert_impl(value)
77
77
 
78
78
  @abstractmethod
79
- def _validate_and_convert_impl(self, value: Any) -> Any:
80
- ...
79
+ def _validate_and_convert_impl(self, value: Any) -> Any: ...
81
80
 
82
81
  def __str__(self) -> str:
83
82
  return str(self._val)
@@ -1,4 +1,5 @@
1
1
  """OmegaConf module"""
2
+
2
3
  import copy
3
4
  import inspect
4
5
  import io
@@ -129,8 +130,7 @@ class OmegaConf:
129
130
  obj: str,
130
131
  parent: Optional[BaseContainer] = None,
131
132
  flags: Optional[Dict[str, bool]] = None,
132
- ) -> Union[DictConfig, ListConfig]:
133
- ...
133
+ ) -> Union[DictConfig, ListConfig]: ...
134
134
 
135
135
  @staticmethod
136
136
  @overload
@@ -138,8 +138,7 @@ class OmegaConf:
138
138
  obj: Union[List[Any], Tuple[Any, ...]],
139
139
  parent: Optional[BaseContainer] = None,
140
140
  flags: Optional[Dict[str, bool]] = None,
141
- ) -> ListConfig:
142
- ...
141
+ ) -> ListConfig: ...
143
142
 
144
143
  @staticmethod
145
144
  @overload
@@ -147,8 +146,7 @@ class OmegaConf:
147
146
  obj: DictConfig,
148
147
  parent: Optional[BaseContainer] = None,
149
148
  flags: Optional[Dict[str, bool]] = None,
150
- ) -> DictConfig:
151
- ...
149
+ ) -> DictConfig: ...
152
150
 
153
151
  @staticmethod
154
152
  @overload
@@ -156,8 +154,7 @@ class OmegaConf:
156
154
  obj: ListConfig,
157
155
  parent: Optional[BaseContainer] = None,
158
156
  flags: Optional[Dict[str, bool]] = None,
159
- ) -> ListConfig:
160
- ...
157
+ ) -> ListConfig: ...
161
158
 
162
159
  @staticmethod
163
160
  @overload
@@ -165,8 +162,7 @@ class OmegaConf:
165
162
  obj: Optional[Dict[Any, Any]] = None,
166
163
  parent: Optional[BaseContainer] = None,
167
164
  flags: Optional[Dict[str, bool]] = None,
168
- ) -> DictConfig:
169
- ...
165
+ ) -> DictConfig: ...
170
166
 
171
167
  @staticmethod
172
168
  def create( # noqa F811
@@ -376,7 +372,7 @@ class OmegaConf:
376
372
  f"to be an interpolation. Nested interpolations are not supported for "
377
373
  f"resolvers registered with `[legacy_]register_resolver()`, please use "
378
374
  f"`register_new_resolver()` instead (see "
379
- f"https://github.com/omry/omegaconf/issues/426 for migration instructions)."
375
+ f"https://github.com/omry/omegaconf/issues/426 for migration instructions)." # noqa: E231
380
376
  )
381
377
  key = args_str
382
378
  val = cache[key] if key in cache else resolver(*args_unesc)
@@ -489,7 +485,7 @@ class OmegaConf:
489
485
  Returns a bool: True if resolver is removed and False if not removed.
490
486
 
491
487
  .. warning:
492
- This method can remove deafult resolvers as well.
488
+ This method can remove default resolvers as well.
493
489
 
494
490
  :param name: Name of the resolver.
495
491
  :return: A bool (``True`` if resolver is removed, ``False`` if not found before removing).
@@ -1,14 +1,14 @@
1
1
  import sys # pragma: no cover
2
2
 
3
- __version__ = "2.4.0.dev2"
3
+ __version__ = "2.4.0.dev4"
4
4
 
5
- msg = """OmegaConf 2.4 and above is compatible with Python 3.8 and newer.
5
+ msg = """OmegaConf 2.4 and above is compatible with Python 3.9 and newer.
6
6
  You have the following options:
7
- 1. Upgrade to Python 3.8 or newer.
7
+ 1. Upgrade to Python 3.9 or newer.
8
8
  This is highly recommended. new features will not be added to OmegaConf 2.3.
9
9
  2. Continue using OmegaConf 2.3:
10
10
  You can pip install 'OmegaConf<2.4' to do that.
11
11
  """
12
12
 
13
- if sys.version_info < (3, 8):
13
+ if sys.version_info < (3, 9):
14
14
  raise ImportError(msg) # pragma: no cover
@@ -1,23 +1,36 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: omegaconf
3
- Version: 2.4.0.dev2
3
+ Version: 2.4.0.dev4
4
4
  Summary: A flexible configuration library
5
5
  Home-page: https://github.com/omry/omegaconf
6
6
  Author: Omry Yadan
7
7
  Author-email: omry@yadan.net
8
8
  Keywords: yaml configuration config
9
- Classifier: Programming Language :: Python :: 3.8
10
9
  Classifier: Programming Language :: Python :: 3.9
11
10
  Classifier: Programming Language :: Python :: 3.10
12
11
  Classifier: Programming Language :: Python :: 3.11
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Programming Language :: Python :: 3.13
14
+ Classifier: Programming Language :: Python :: 3.14
13
15
  Classifier: License :: OSI Approved :: BSD License
14
16
  Classifier: Operating System :: OS Independent
15
- Requires-Python: >=3.8
17
+ Requires-Python: >=3.9
16
18
  Description-Content-Type: text/markdown
17
19
  License-File: LICENSE
18
20
  Requires-Dist: PyYAML>=5.1.0
19
21
  Requires-Dist: dataclasses; python_version == "3.6"
20
22
  Requires-Dist: typing-extensions; python_version <= "3.9"
23
+ Dynamic: author
24
+ Dynamic: author-email
25
+ Dynamic: classifier
26
+ Dynamic: description
27
+ Dynamic: description-content-type
28
+ Dynamic: home-page
29
+ Dynamic: keywords
30
+ Dynamic: license-file
31
+ Dynamic: requires-dist
32
+ Dynamic: requires-python
33
+ Dynamic: summary
21
34
 
22
35
  # OmegaConf
23
36
  | | Description |
@@ -0,0 +1,3 @@
1
+ import pkgutil
2
+
3
+ __path__ = pkgutil.extend_path(__path__, __name__)
@@ -0,0 +1,3 @@
1
+ import pkgutil
2
+
3
+ __path__ = pkgutil.extend_path(__path__, __name__)
@@ -14,7 +14,7 @@ exclude = '''
14
14
  '''
15
15
 
16
16
  [tool.pytest.ini_options]
17
- addopts = "--import-mode=append -Werror -W 'ignore:pkg_resources is deprecated as an API:DeprecationWarning' -W 'ignore:Deprecated call to `pkg_resources:DeprecationWarning'"
17
+ addopts = "--import-mode=append -Werror"
18
18
  pythonpath = ["."]
19
19
 
20
20
  [tool.towncrier]
@@ -70,12 +70,14 @@ with open("README.md", "r") as fh:
70
70
  "pydevd_plugins.extensions",
71
71
  ]
72
72
  + vendored_packages,
73
- python_requires=">=3.8",
73
+ python_requires=">=3.9",
74
74
  classifiers=[
75
- "Programming Language :: Python :: 3.8",
76
75
  "Programming Language :: Python :: 3.9",
77
76
  "Programming Language :: Python :: 3.10",
78
77
  "Programming Language :: Python :: 3.11",
78
+ "Programming Language :: Python :: 3.12",
79
+ "Programming Language :: Python :: 3.13",
80
+ "Programming Language :: Python :: 3.14",
79
81
  "License :: OSI Approved :: BSD License",
80
82
  "Operating System :: OS Independent",
81
83
  ],
@@ -22,8 +22,7 @@ class IllegalType:
22
22
  T = TypeVar("T")
23
23
 
24
24
 
25
- class IllegalTypeGeneric(Generic[T]):
26
- ...
25
+ class IllegalTypeGeneric(Generic[T]): ...
27
26
 
28
27
 
29
28
  class NonCopyableIllegalType:
@@ -49,7 +49,7 @@ def test_decode(monkeypatch: Any, value: Optional[str], expected: Any) -> None:
49
49
  {
50
50
  # The node of interest is "node" (others are used to test interpolations).
51
51
  "parent": {
52
- "node": f"${{oc.decode:'{value}'}}",
52
+ "node": f"${{oc.decode:'{value}'}}", # noqa: E231
53
53
  "sibling": 1,
54
54
  },
55
55
  "uncle": 2,
@@ -100,6 +100,6 @@ def test_decode_none() -> None:
100
100
  ],
101
101
  )
102
102
  def test_decode_error(monkeypatch: Any, value: Any, exc: Any) -> None:
103
- c = OmegaConf.create({"x": f"${{oc.decode:{value}}}"})
103
+ c = OmegaConf.create({"x": f"${{oc.decode:{value}}}"}) # noqa: E231
104
104
  with exc:
105
105
  c.x
@@ -18,6 +18,7 @@ We have separate test classes for the following cases:
18
18
  TestPrimitiveTypeDunderMethods: for DictConfig where key_type is primitive
19
19
  TestEnumTypeDunderMethods: for DictConfig where key_type is Enum
20
20
  """
21
+
21
22
  from copy import deepcopy
22
23
  from enum import Enum
23
24
  from typing import Any, Dict, Optional
@@ -1,4 +1,5 @@
1
1
  """Testing for OmegaConf"""
2
+
2
3
  import platform
3
4
  import re
4
5
  import sys
@@ -1663,7 +1663,7 @@ def test_resolver_error(restore_resolvers: Any, register_func: Any) -> None:
1663
1663
  c = OmegaConf.create({"div_by_zero": "${div:1,0}"})
1664
1664
  expected_msg = dedent(
1665
1665
  """\
1666
- ZeroDivisionError raised while resolving interpolation: float division( by zero)?
1666
+ ZeroDivisionError raised while resolving interpolation: (float )?division( by zero)?
1667
1667
  full_key: div_by_zero
1668
1668
  object_type=dict"""
1669
1669
  )
@@ -191,9 +191,9 @@ PARAMS_SINGLE_ELEMENT_NO_INTERPOLATION: List[Tuple[str, str, Any]] = [
191
191
  ),
192
192
  (
193
193
  "dict_unquoted_key",
194
- rf"{{a0-null-1-3.14-NaN- {TAB}-true-False-{UNQUOTED_SPECIAL}\(\)\[\]\{{\}}\:\=\ \{TAB}\,:0}}",
194
+ rf"{{a0-null-1-3.14-NaN- {TAB}-true-False-{UNQUOTED_SPECIAL}\(\)\[\]\{{\}}\:\=\ \{TAB}\,:0}}", # noqa: E231
195
195
  {
196
- rf"a0-null-1-3.14-NaN- {TAB}-true-False-{UNQUOTED_SPECIAL}()[]{{}}:= {TAB},": 0
196
+ rf"a0-null-1-3.14-NaN- {TAB}-true-False-{UNQUOTED_SPECIAL}()[]{{}}:= {TAB},": 0 # noqa: E231
197
197
  },
198
198
  ),
199
199
  (