1818 Package ,
1919)
2020from exasol .toolbox .util .git import Git
21+ from noxconfig import PROJECT_CONFIG
2122
2223
2324class PoetryGroup (BaseModel ):
@@ -82,6 +83,12 @@ def groups(self) -> tuple[PoetryGroup, ...]:
8283 return tuple (groups )
8384
8485
86+ def run_command (* args : str , cwd : Path | None = None ) -> subprocess .CompletedProcess :
87+ return subprocess .run (
88+ args , capture_output = True , text = True , cwd = cwd , check = True
89+ ) # nosec: B603 - risk of untrusted input for subprocess call is accepted
90+
91+
8592class PoetryDependencies (BaseModel ):
8693 groups : tuple [PoetryGroup , ...]
8794 working_directory : Path
@@ -111,44 +118,34 @@ def direct_dependencies(
111118 ) -> OrderedDict [str , dict [NormalizedPackageStr , Package ]]:
112119 dependencies = OrderedDict ()
113120 for group in self .groups :
114- command = (
121+ proc = run_command (
115122 "poetry" ,
116123 "show" ,
117124 "--top-level" ,
118125 f"--only={ group .name } " ,
119126 "--no-truncate" ,
120- )
121- output = subprocess .run (
122- command ,
123- capture_output = True ,
124- text = True ,
125127 cwd = self .working_directory ,
126- check = True ,
127128 )
128- result = self ._extract_from_poetry_show (output_text = output .stdout )
129+ result = self ._extract_from_poetry_show (output_text = proc .stdout )
129130 dependencies [group .name ] = result
130131 return dependencies
131132
132133 @property
133134 def all_dependencies (self ) -> OrderedDict [str , dict [NormalizedPackageStr , Package ]]:
134- command = ("poetry" , "show" , "--no-truncate" )
135- output = subprocess .run (
136- command ,
137- capture_output = True ,
138- text = True ,
135+ proc = run_command (
136+ "poetry" ,
137+ "show" ,
138+ "--no-truncate" ,
139139 cwd = self .working_directory ,
140- check = True ,
141140 )
142-
143141 direct_dependencies = self .direct_dependencies .copy ()
144-
145142 transitive_dependencies = {}
146143 names_direct_dependencies = {
147144 package_name
148145 for group_list in direct_dependencies
149146 for package_name in group_list
150147 }
151- for line in output .stdout .splitlines ():
148+ for line in proc .stdout .splitlines ():
152149 dep = self ._extract_from_line (line = line )
153150 if dep and dep .name not in names_direct_dependencies :
154151 transitive_dependencies [dep .normalized_name ] = dep
@@ -169,10 +166,9 @@ def get_dependencies_from_latest_tag() -> (
169166 OrderedDict [str , dict [NormalizedPackageStr , Package ]]
170167):
171168 latest_tag = Git .get_latest_tag ()
172- with tempfile .TemporaryDirectory () as path :
173- tmpdir = Path (path )
174-
175- Git .copy_remote_file_locally (latest_tag , "poetry.lock" , tmpdir )
176- Git .copy_remote_file_locally (latest_tag , PYPROJECT_TOML , tmpdir )
177-
169+ path = PROJECT_CONFIG .root .relative_to (Git .toplevel ())
170+ with tempfile .TemporaryDirectory () as tmpdir_str :
171+ tmpdir = Path (tmpdir_str )
172+ for file in ("poetry.lock" , PYPROJECT_TOML ):
173+ Git .checkout (latest_tag , path / file , tmpdir / file )
178174 return get_dependencies (working_directory = tmpdir )
0 commit comments