@@ -69,19 +69,20 @@ def information() -> Information:
6969 """
7070 return Information ()
7171
72- def _install_dependencies (self , * , update : bool = False ) -> None :
72+ def _install_dependencies (self , * , update : bool = False , groups : list [ str ] | None = None ) -> None :
7373 """Install/update dependencies using Conan CLI.
7474
7575 Args:
7676 update: If True, check remotes for newer versions/revisions and install those.
7777 If False, use cached versions when available.
78+ groups: Optional list of dependency group names to include
7879 """
7980 operation = 'update' if update else 'install'
8081 logger = getLogger ('cppython.conan' )
8182
8283 try :
8384 # Setup environment and generate conanfile
84- conanfile_path = self ._prepare_installation ()
85+ conanfile_path = self ._prepare_installation (groups = groups )
8586 except Exception as e :
8687 raise ProviderInstallationError ('conan' , f'Failed to prepare { operation } environment: { e } ' , e ) from e
8788
@@ -93,20 +94,27 @@ def _install_dependencies(self, *, update: bool = False) -> None:
9394 except Exception as e :
9495 raise ProviderInstallationError ('conan' , f'Failed to install dependencies: { e } ' , e ) from e
9596
96- def _prepare_installation (self ) -> Path :
97+ def _prepare_installation (self , groups : list [ str ] | None = None ) -> Path :
9798 """Prepare the installation environment and generate conanfile.
9899
100+ Args:
101+ groups: Optional list of dependency group names to include
102+
99103 Returns:
100104 Path to conanfile.py
101105 """
102- # Resolve dependencies and generate conanfile.py
106+ # Resolve base dependencies
103107 resolved_dependencies = [resolve_conan_dependency (req ) for req in self .core_data .cppython_data .dependencies ]
104108
105- # Resolve dependency groups
106- resolved_dependency_groups = {
107- group_name : [resolve_conan_dependency (req ) for req in group_requirements ]
108- for group_name , group_requirements in self .core_data .cppython_data .dependency_groups .items ()
109- }
109+ # Resolve only the requested dependency groups
110+ resolved_dependency_groups = {}
111+ if groups :
112+ for group_name in groups :
113+ if group_name in self .core_data .cppython_data .dependency_groups :
114+ resolved_dependency_groups [group_name ] = [
115+ resolve_conan_dependency (req )
116+ for req in self .core_data .cppython_data .dependency_groups [group_name ]
117+ ]
110118
111119 self .builder .generate_conanfile (
112120 self .core_data .project_data .project_root ,
@@ -180,13 +188,21 @@ def _run_conan_install(self, conanfile_path: Path, update: bool, build_type: str
180188 logger .error ('Conan install failed: %s' , error_msg , exc_info = True )
181189 raise ProviderInstallationError ('conan' , error_msg , e ) from e
182190
183- def install (self ) -> None :
184- """Installs the provider"""
185- self ._install_dependencies (update = False )
191+ def install (self , groups : list [str ] | None = None ) -> None :
192+ """Installs the provider
193+
194+ Args:
195+ groups: Optional list of dependency group names to install
196+ """
197+ self ._install_dependencies (update = False , groups = groups )
198+
199+ def update (self , groups : list [str ] | None = None ) -> None :
200+ """Updates the provider
186201
187- def update (self ) -> None :
188- """Updates the provider"""
189- self ._install_dependencies (update = True )
202+ Args:
203+ groups: Optional list of dependency group names to update
204+ """
205+ self ._install_dependencies (update = True , groups = groups )
190206
191207 @staticmethod
192208 def supported_sync_type (sync_type : type [SyncData ]) -> bool :
0 commit comments