Fix get_schema to preserve the definition order

although it will no longer pick up fields of superclasses.
This commit is contained in:
Oleh Prypin
2022-09-09 22:13:11 +02:00
parent 5b853510ee
commit 9ac7322b00
2 changed files with 15 additions and 3 deletions

View File

@@ -207,8 +207,7 @@ def get_schema(cls: type) -> PlainConfigSchema:
See mkdocs/config/defaults.py for an example.
"""
all_items = ((k, getattr(cls, k)) for k in dir(cls) if not k.startswith('_'))
return tuple((k, v) for k, v in all_items if isinstance(v, BaseConfigOption))
return tuple((k, v) for k, v in cls.__dict__.items() if isinstance(v, BaseConfigOption))
@contextmanager

View File

@@ -2,7 +2,7 @@ import os
import unittest
from mkdocs import exceptions
from mkdocs.config import base, defaults
from mkdocs.config import base, config_options, defaults
from mkdocs.config.base import ValidationError
from mkdocs.config.config_options import BaseConfigOption
from mkdocs.tests.base import change_dir, tempdir
@@ -268,3 +268,16 @@ class ConfigBaseTests(unittest.TestCase):
self.assertEqual(cfg['docs_dir'], docs_dir)
self.assertEqual(cfg.config_file_path, config_fname)
self.assertIsInstance(cfg.config_file_path, str)
def test_get_schema(self):
class FooConfig:
z = config_options.URL()
aa = config_options.Type(int)
self.assertEqual(
base.get_schema(FooConfig),
(
('z', FooConfig.z),
('aa', FooConfig.aa),
),
)