1111# 2. cd build
1212# 3. ninja man/nm-settings-docs-dbus.xml
1313from __future__ import annotations
14- from argparse import ArgumentParser
15- from pathlib import Path
16- from xml .etree .ElementTree import parse , Element
1714
18- from typing import List , Optional
19- from re import compile as regex_compile
20- from re import Pattern
21- from jinja2 import Environment
2215import builtins
2316import keyword
17+ from argparse import ArgumentParser
18+ from functools import cached_property
19+ from pathlib import Path
20+ from re import Pattern
21+ from re import compile as regex_compile
2422from textwrap import fill
23+ from typing import List , Optional
24+ from xml .etree .ElementTree import Element , parse
2525
26+ from jinja2 import Environment
2627
2728dbus_to_python_extra_typing_imports = {
2829 "as" : ("List" , ),
8182 'id' : 'pretty_id' ,
8283}
8384
85+ datatypes_extra_imports : dict [str , list [str ]] = {
86+ 'wireguard' : ['WireguardPeers' ],
87+ 'bridge' : ['Vlans' ],
88+ 'team' : ['LinkWatchers' ],
89+ 'ip4_config' : ['AddressData' , 'RouteData' ],
90+ 'ip6_config' : ['AddressData' , 'RouteData' ],
91+ }
92+
8493
8594def must_replace_name (name : str ) -> bool :
8695 return (keyword .iskeyword (name )
@@ -126,6 +135,17 @@ def __init__(self, name: str, description: str, name_upper: str,
126135
127136 self .properties : List [NmSettingPropertyIntrospection ] = []
128137
138+ @cached_property
139+ def snake_name (self ) -> str :
140+ return self .name_upper .lower ()
141+
142+ @cached_property
143+ def datatypes_imports (self ) -> list [str ]:
144+ try :
145+ return datatypes_extra_imports [self .snake_name ]
146+ except KeyError :
147+ return []
148+
129149
130150def extract_and_format_option_description (node : Element ) -> str :
131151 paragraphs : list [str ] = []
@@ -179,7 +199,9 @@ def generate_introspection(root: Element) -> List[NmSettingsIntrospection]:
179199from dataclasses import dataclass, field
180200from typing import {{ setting.typing_imports|sort|join(', ') }}
181201from .base import NetworkManagerSettingsMixin
182-
202+ {% if setting.datatypes_imports -%}
203+ from .datatypes import {{ setting.datatypes_imports|sort|join(', ') }}
204+ {% endif %}
183205
184206@dataclass
185207class {{ setting.python_class_name }}(NetworkManagerSettingsMixin):
@@ -206,15 +228,14 @@ def main(
206228 tree = parse (settings_xml_path )
207229 introspection = generate_introspection (tree .getroot ())
208230
209- settings_dir = Path ('sdbus_async/networkmanager/settings/' )
231+ settings_dir = Path ('./ sdbus_async/networkmanager/settings/' )
210232 for setting in introspection :
211- setting_sake_name = setting .name_upper .lower ()
212233
213234 if regex_filter is not None :
214- if not regex_filter .match (setting_sake_name ):
235+ if not regex_filter .match (setting . snake_name ):
215236 continue
216237
217- setting_py_file = settings_dir / (setting_sake_name + '.py' )
238+ setting_py_file = settings_dir / (setting . snake_name + '.py' )
218239 with open (setting_py_file , mode = 'w' ) as f :
219240 f .write (settings_template .render (setting = setting ))
220241
0 commit comments