comparison piecrust/processing/base.py @ 35:e4c345dcf33c

More unit tests, fix a bug with the skip patterns.
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 20 Aug 2014 21:46:27 -0700
parents df790a827d38
children 485682a6de50
comparison
equal deleted inserted replaced
34:bdb103c57168 35:e4c345dcf33c
158 '.git*', '.hg*', '.svn'] 158 '.git*', '.hg*', '.svn']
159 159
160 self.skip_patterns = make_re(self.skip_patterns) 160 self.skip_patterns = make_re(self.skip_patterns)
161 self.force_patterns = make_re(self.force_patterns) 161 self.force_patterns = make_re(self.force_patterns)
162 162
163 def filterProcessors(self, authorized_names):
164 self.processors = list(filter(
165 lambda p: p.PROCESSOR_NAME in authorized_names,
166 self.processors))
167
163 def run(self, src_dir_or_file=None): 168 def run(self, src_dir_or_file=None):
164 record = ProcessorPipelineRecord() 169 record = ProcessorPipelineRecord()
165 170
166 # Create the workers. 171 # Create the workers.
167 pool = [] 172 pool = []
219 224
220 def processDirectory(self, ctx, start_dir): 225 def processDirectory(self, ctx, start_dir):
221 for dirpath, dirnames, filenames in os.walk(start_dir): 226 for dirpath, dirnames, filenames in os.walk(start_dir):
222 rel_dirpath = os.path.relpath(dirpath, start_dir) 227 rel_dirpath = os.path.relpath(dirpath, start_dir)
223 dirnames[:] = [d for d in dirnames 228 dirnames[:] = [d for d in dirnames
224 if not re_matchany(os.path.join(rel_dirpath, d), 229 if not re_matchany(d, self.skip_patterns, rel_dirpath)]
225 self.skip_patterns)]
226 230
227 for filename in filenames: 231 for filename in filenames:
228 if re_matchany(os.path.join(rel_dirpath, filename), 232 if re_matchany(filename, self.skip_patterns, rel_dirpath):
229 self.skip_patterns):
230 continue 233 continue
231 self.processFile(ctx, os.path.join(dirpath, filename)) 234 self.processFile(ctx, os.path.join(dirpath, filename))
232 235
233 def processFile(self, ctx, path): 236 def processFile(self, ctx, path):
234 logger.debug("Queuing: %s" % path) 237 logger.debug("Queuing: %s" % path)
326 .replace(r'\?', r'[^/\\]')) 329 .replace(r'\?', r'[^/\\]'))
327 re_patterns.append(escaped_pat) 330 re_patterns.append(escaped_pat)
328 return [re.compile(p) for p in re_patterns] 331 return [re.compile(p) for p in re_patterns]
329 332
330 333
331 def re_matchany(filename, patterns): 334 def re_matchany(filename, patterns, dirname=None):
335 if dirname and dirname != '.':
336 filename = os.path.join(dirname, filename)
337
332 # skip patterns use a forward slash regardless of the platform. 338 # skip patterns use a forward slash regardless of the platform.
333 filename = filename.replace('\\', '/') 339 filename = filename.replace('\\', '/')
334 for pattern in patterns: 340 for pattern in patterns:
335 if pattern.search(filename): 341 if pattern.search(filename):
336 return True 342 return True