浏览代码

Merge pull request #2225 from mnowster/2221-blank-env-vars

2221 allow empty environment keys
Daniel Nephin 10 年之前
父节点
当前提交
3725c3ab7e
共有 3 个文件被更改,包括 19 次插入3 次删除
  1. 1 1
      compose/config/fields_schema.json
  2. 1 2
      compose/config/validation.py
  3. 17 0
      tests/unit/config/config_test.py

+ 1 - 1
compose/config/fields_schema.json

@@ -41,7 +41,7 @@
               "type": "object",
               "patternProperties": {
                 "^[^-]+$": {
-                  "type": ["string", "number", "boolean"],
+                  "type": ["string", "number", "boolean", "null"],
                   "format": "environment"
                 }
               },

+ 1 - 2
compose/config/validation.py

@@ -136,7 +136,7 @@ def process_errors(errors, service_name=None):
             if len(validator) >= 2:
                 first_type = anglicize_validator(validator[0])
                 last_type = anglicize_validator(validator[-1])
-                types_from_validator = "{}{}".format(first_type, ", ".join(validator[1:-1]))
+                types_from_validator = ", ".join([first_type] + validator[1:-1])
 
                 msg = "{} or {}".format(
                     types_from_validator,
@@ -156,7 +156,6 @@ def process_errors(errors, service_name=None):
         Inspecting the context value of a ValidationError gives us information about
         which sub schema failed and which kind of error it is.
         """
-
         required = [context for context in error.context if context.validator == 'required']
         if required:
             return required[0].message

+ 17 - 0
tests/unit/config/config_test.py

@@ -449,6 +449,23 @@ class InterpolationTest(unittest.TestCase):
         self.assertIn('in service "web"', cm.exception.msg)
         self.assertIn('"${"', cm.exception.msg)
 
+    def test_empty_environment_key_allowed(self):
+        service_dict = config.load(
+            build_config_details(
+                {
+                    'web': {
+                        'build': '.',
+                        'environment': {
+                            'POSTGRES_PASSWORD': ''
+                        },
+                    },
+                },
+                '.',
+                None,
+            )
+        )[0]
+        self.assertEquals(service_dict['environment']['POSTGRES_PASSWORD'], '')
+
 
 class VolumeConfigTest(unittest.TestCase):
     def test_no_binding(self):