1
0
mirror of https://github.com/openSUSE/osc.git synced 2024-12-25 01:16:14 +01:00

Merge pull request #1455 from dmach/man-avoid-lazy-defaults

docs: Update models to avoid including lazy defaults in the rendered man pages
This commit is contained in:
Daniel Mach 2023-12-04 09:18:47 +01:00 committed by GitHub
commit d4bf0deb5a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 0 deletions

View File

@ -1324,6 +1324,10 @@ def _model_to_rst(cls, title=None, description=None, sections=None, output_file=
if field.default is None:
return None
if field.default_is_lazy:
# lazy default may return different results under different circumstances -> return nothing
return None
ini_type = field.extra.get("ini_type", None)
if ini_type:
return None

View File

@ -79,6 +79,9 @@ class Field(property):
# model sets it to None if it equals to NotSet (for better usability)
self.default = default
# a flag indicating, whether the default is a callable with lazy evalution
self.default_is_lazy = callable(self.default)
# whether the field was set
self.is_set = False

View File

@ -60,6 +60,19 @@ class Test(unittest.TestCase):
self.assertRaises(TypeError, TestModel)
def test_lazy_default(self):
class TestModel(BaseModel):
field: List[str] = Field(default=lambda: ["string"])
m = TestModel()
self.assertEqual(m.field, ["string"])
def test_lazy_default_invalid_type(self):
class TestModel(BaseModel):
field: List[str] = Field(default=lambda: None)
self.assertRaises(TypeError, TestModel)
def test_is_set(self):
class TestModel(BaseModel):
field: Optional[str] = Field()