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

docs: Update models to avoid including lazy defaults in the rendered man pages

Lazy defaults may return different results under different circumstances
and we always want man pages rendered consistently.
This commit is contained in:
Daniel Mach 2023-12-01 16:20:55 +01:00
parent 00331e5149
commit 608fc76cd2
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()