Skip to content
This repository has been archived by the owner on Jan 13, 2024. It is now read-only.

Commit

Permalink
add regular expression while deciphering encrypting data
Browse files Browse the repository at this point in the history
  • Loading branch information
sdpython committed Nov 22, 2015
1 parent 5066c4b commit 7978355
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 15 deletions.
5 changes: 5 additions & 0 deletions _unittests/ut_filehelper/test_backup_file.py
Expand Up @@ -140,5 +140,10 @@ def test_backup_file(self):
c1 = f.read()
self.assertEqual(c1, c2)

detemp = os.path.join(temp, "retrieved")
s = enc.retrieve_all(detemp, regex=".*[.]py")
assert len(s) > 0


if __name__ == "__main__":
unittest.main()
16 changes: 12 additions & 4 deletions src/pyquickhelper/cli/encryption_cli.py
Expand Up @@ -39,18 +39,26 @@ def get_parser(encrypt):
'--map',
default="crypt_map.txt",
help='mapping between raw files and crypted files')
else:
parser.add_argument(
'-r',
'--regex',
default="",
help='the script can retrieve only a subpart of the data defined by a regular expression')

return parser


def do_main(source, dest, password, encrypt,
crypt_file, crypt_map, fLOG=None):
crypt_file, crypt_map, regex=None, fLOG=None):
"""
Encrypt or decrypt of folder, see @see cl EncryptedBackup.
@param source source of files to encrypt or decrypt
@param dest destination
@param password password
@param encrypt boolean, True to encrypt
@param regex regular expression to filter in files to retrieve
@param fLOG logging function
"""
if not os.path.exists(source):
Expand Down Expand Up @@ -95,7 +103,7 @@ def do_main(source, dest, password, encrypt,
fLOG=fLOG)

print("start restoration")
enc.retrieve_all(source)
enc.retrieve_all(source, regex=regex)


def encrypt():
Expand All @@ -111,8 +119,7 @@ def encrypt():

if args is not None:
do_main(source=args.source, dest=args.dest, password=args.password,
encrypt=True, crypt_file=args.status, crypt_map=args.map,
fLOG=print)
encrypt=True, crypt_file=args.status, crypt_map=args.map, fLOG=print)


def decrypt():
Expand All @@ -129,6 +136,7 @@ def decrypt():
if args is not None:
do_main(source=args.dest, dest=args.source, password=args.password,
encrypt=False, crypt_file=None, crypt_map=None,
regex=args.regex if args.regex else None,
fLOG=print)

if __name__ == "__main__":
Expand Down
26 changes: 18 additions & 8 deletions src/pyquickhelper/filehelper/encrypted_backup.py
Expand Up @@ -400,24 +400,34 @@ def retrieve(self, path, filename=None, root=None):
byt.write(data)
return byt.getvalue()

def retrieve_all(self, dest):
def retrieve_all(self, dest, regex=None):
"""
retrieve all backuped files
@param dest destination
@param regex retrieve a subset matching the regular expression
@return list of restored files
"""
rema = re.compile(regex) if regex else None

def match(na):
if rema:
return rema.search(na)
else:
return True

self.fLOG("load mapping")
self.load_mapping()
self.fLOG("number of files", len(self.Mapping))
done = []
for k, v in sorted(self.Mapping.items()):
name = self.retrieve(k, root=dest)
size = os.stat(name).st_size
self.fLOG("[download % 8d bytes name=%s -- fullname=%s -- to=%s]" % (
size,
os.path.split(name)[-1],
dest,
os.path.dirname(name)))
done.append(name)
if match(name):
size = os.stat(name).st_size
self.fLOG("[download % 8d bytes name=%s -- fullname=%s -- to=%s]" % (
size,
os.path.split(name)[-1],
dest,
os.path.dirname(name)))
done.append(name)
return done
7 changes: 4 additions & 3 deletions src/pyquickhelper/loghelper/repositories/pygit_helper.py
Expand Up @@ -83,12 +83,13 @@ def __str__(self):
"""
return self.name


def get_cmd_git():
"""
get the command line used to run git
@return string
.. versionadded:: 1.3
"""
if sys.platform.startswith("win32"):
Expand Down Expand Up @@ -219,7 +220,7 @@ def get_repo_log(path=None, file_detail=False, commandline=True):
else:
cmd = get_cmd_git()
cmd += ' log --pretty=format:"<logentry revision=\\"%h\\"><author>%an</author><date>%ci</date><msg>%s</msg><hash>%H</hash></logentry>" ' + \
path
path

enc = sys.stdout.encoding if sys.version_info[
0] != 2 and sys.stdout is not None else "utf8"
Expand Down

0 comments on commit 7978355

Please sign in to comment.