5
5
import logging
6
6
import os
7
7
import shutil
8
+ from typing import Set , Iterator , Tuple
8
9
9
10
from aws_lambda_builders .utils import copytree
10
11
@@ -124,14 +125,9 @@ def __init__(self, source_dir, artifact_dir, destination_dir):
124
125
self .dest_dir = destination_dir
125
126
126
127
def execute (self ):
127
- source = set (os .listdir (self .source_dir ))
128
- artifact = set (os .listdir (self .artifact_dir ))
129
- dependencies = artifact - source
130
-
131
- for name in dependencies :
132
- dependencies_source = os .path .join (self .artifact_dir , name )
133
- new_destination = os .path .join (self .dest_dir , name )
128
+ deps_manager = DependencyManager (self .source_dir , self .artifact_dir , self .dest_dir )
134
129
130
+ for dependencies_source , new_destination in deps_manager .yield_source_dest ():
135
131
if os .path .isdir (dependencies_source ):
136
132
copytree (dependencies_source , new_destination )
137
133
else :
@@ -153,14 +149,9 @@ def __init__(self, source_dir, artifact_dir, destination_dir):
153
149
self .dest_dir = destination_dir
154
150
155
151
def execute (self ):
156
- source = set (os .listdir (self .source_dir ))
157
- artifact = set (os .listdir (self .artifact_dir ))
158
- dependencies = artifact - source
159
-
160
- for name in dependencies :
161
- dependencies_source = os .path .join (self .artifact_dir , name )
162
- new_destination = os .path .join (self .dest_dir , name )
152
+ deps_manager = DependencyManager (self .source_dir , self .artifact_dir , self .dest_dir )
163
153
154
+ for dependencies_source , new_destination in deps_manager .yield_source_dest ():
164
155
# shutil.move can't create subfolders if this is the first file in that folder
165
156
if os .path .isfile (dependencies_source ):
166
157
os .makedirs (os .path .dirname (new_destination ), exist_ok = True )
@@ -197,3 +188,36 @@ def execute(self):
197
188
shutil .rmtree (target_path )
198
189
else :
199
190
os .remove (target_path )
191
+
192
+
193
+ class DependencyManager :
194
+ """
195
+ Class for handling the management of dependencies between directories
196
+ """
197
+
198
+ # Ignore these files when comparing against which dependencies to move
199
+ # This allows for the installation of dependencies in the source directory
200
+ IGNORE_LIST = ["node_modules" ]
201
+
202
+ def __init__ (self , source_dir , artifact_dir , destination_dir ) -> None :
203
+ self ._source_dir : str = source_dir
204
+ self ._artifact_dir : str = artifact_dir
205
+ self ._dest_dir : str = destination_dir
206
+ self ._dependencies : Set [str ] = set ()
207
+
208
+ def yield_source_dest (self ) -> Iterator [Tuple [str , str ]]:
209
+ self ._set_dependencies ()
210
+ for dep in self ._dependencies :
211
+ yield os .path .join (self ._artifact_dir , dep ), os .path .join (self ._dest_dir , dep )
212
+
213
+ def _set_dependencies (self ) -> None :
214
+ source = self ._get_source_files_exclude_deps ()
215
+ artifact = set (os .listdir (self ._artifact_dir ))
216
+ self ._dependencies = artifact - source
217
+
218
+ def _get_source_files_exclude_deps (self ) -> Set [str ]:
219
+ source_files = set (os .listdir (self ._source_dir ))
220
+ for item in self .IGNORE_LIST :
221
+ if item in source_files :
222
+ source_files .remove (item )
223
+ return source_files
0 commit comments