Coverage for /home/airflow/.local/lib/python3.12/site-packages/airflow/api_fastapi/core_api/datamodels/config.py: 70%

21 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 14:22 +0000

1# Licensed to the Apache Software Foundation (ASF) under one 

2# or more contributor license agreements. See the NOTICE file 

3# distributed with this work for additional information 

4# regarding copyright ownership. The ASF licenses this file 

5# to you under the Apache License, Version 2.0 (the 

6# "License"); you may not use this file except in compliance 

7# with the License. You may obtain a copy of the License at 

8# 

9# http://www.apache.org/licenses/LICENSE-2.0 

10# 

11# Unless required by applicable law or agreed to in writing, 

12# software distributed under the License is distributed on an 

13# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 

14# KIND, either express or implied. See the License for the 

15# specific language governing permissions and limitations 

16# under the License. 

17from __future__ import annotations 

18 

19from airflow.api_fastapi.core_api.base import StrictBaseModel 

20 

21 

22class ConfigOption(StrictBaseModel): 

23 """Config option.""" 

24 

25 key: str 

26 value: str | tuple[str, str] 

27 

28 @property 

29 def text_format(self): 

30 if isinstance(self.value, tuple): 

31 return f"{self.key} = {self.value[0]} {self.value[1]}" 

32 return f"{self.key} = {self.value}" 

33 

34 

35class ConfigSection(StrictBaseModel): 

36 """Config Section Schema.""" 

37 

38 name: str 

39 options: list[ConfigOption] 

40 

41 @property 

42 def text_format(self): 

43 """ 

44 Convert the config section to text format. 

45 

46 Example: 

47 ``` 

48 [section_name] 

49 key1 = value1 

50 key2 = value2 

51 ``` 

52 """ 

53 return f"[{self.name}]\n" + "\n".join(option.text_format for option in self.options) + "\n" 

54 

55 

56class Config(StrictBaseModel): 

57 """List of config sections with their options.""" 

58 

59 sections: list[ConfigSection] 

60 

61 @property 

62 def text_format(self): 

63 # convert all config sections to text 

64 return "\n".join(section.text_format for section in self.sections)