def exclude(self, path): """ encrypt paths for snapshots.takeSnapshot exclude list. After encoding the path a wildcard would not match anymore so all paths with wildcards are ignored. Only single and double asterisk that will match a full file or folder name will work. """ if tools.patternHasNotEncryptableWildcard(path): return None enc = '' m = self.re_asterisk.search(path) if not m is None: path_ = path[:] while True: #search for foo/*, foo/*/bar, */bar or **/bar #but not foo* or foo/*bar m = self.re_separate_asterisk.search(path_) if m is None: return None if m.group(1): if not m.group(1).endswith(os.sep): return None enc = os.path.join(enc, self.path(m.group(1))) enc = os.path.join(enc, m.group(2)) if m.group(3): if not m.group(3).startswith(os.sep): return None m1 = self.re_asterisk.search(m.group(3)) if m1 is None: enc = os.path.join(enc, self.path(m.group(3))) break else: path_ = m.group(3) continue else: break else: enc = self.path(path) if os.path.isabs(path): return os.path.join(os.sep, enc) return enc
def test_patternHasNotEncryptableWildcard(self): self.assertFalse(tools.patternHasNotEncryptableWildcard('foo')) self.assertFalse(tools.patternHasNotEncryptableWildcard('/foo')) self.assertFalse(tools.patternHasNotEncryptableWildcard('foo/*/bar')) self.assertFalse(tools.patternHasNotEncryptableWildcard('foo/**/bar')) self.assertFalse(tools.patternHasNotEncryptableWildcard('*/foo')) self.assertFalse(tools.patternHasNotEncryptableWildcard('**/foo')) self.assertFalse(tools.patternHasNotEncryptableWildcard('foo/*')) self.assertFalse(tools.patternHasNotEncryptableWildcard('foo/**')) self.assertTrue(tools.patternHasNotEncryptableWildcard('foo?')) self.assertTrue(tools.patternHasNotEncryptableWildcard('foo[1-2]')) self.assertTrue(tools.patternHasNotEncryptableWildcard('foo*')) self.assertTrue(tools.patternHasNotEncryptableWildcard('*foo')) self.assertTrue(tools.patternHasNotEncryptableWildcard('**foo')) self.assertTrue(tools.patternHasNotEncryptableWildcard('*.foo')) self.assertTrue(tools.patternHasNotEncryptableWildcard('foo*bar')) self.assertTrue(tools.patternHasNotEncryptableWildcard('foo**bar')) self.assertTrue(tools.patternHasNotEncryptableWildcard('foo*/bar')) self.assertTrue(tools.patternHasNotEncryptableWildcard('foo**/bar')) self.assertTrue(tools.patternHasNotEncryptableWildcard('foo/*bar')) self.assertTrue(tools.patternHasNotEncryptableWildcard('foo/**bar')) self.assertTrue(tools.patternHasNotEncryptableWildcard('foo/*/bar*')) self.assertTrue(tools.patternHasNotEncryptableWildcard('*foo/*/bar'))