From d3b8cb3e20e3e230881ac767af75389668be6d4b Mon Sep 17 00:00:00 2001
From: Sebastian Eibl <sebastian.eibl@fau.de>
Date: Mon, 13 Jul 2020 14:57:33 +0200
Subject: [PATCH] [API] improved interface of merge sqlitedb script

---
 python/waLBerla/tools/sqlitedb/merge.py | 46 +++++++++++++++----------
 1 file changed, 28 insertions(+), 18 deletions(-)
 mode change 100644 => 100755 python/waLBerla/tools/sqlitedb/merge.py

diff --git a/python/waLBerla/tools/sqlitedb/merge.py b/python/waLBerla/tools/sqlitedb/merge.py
old mode 100644
new mode 100755
index c63582e66..840c4019c
--- a/python/waLBerla/tools/sqlitedb/merge.py
+++ b/python/waLBerla/tools/sqlitedb/merge.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 
 import sqlite3
 
@@ -109,21 +109,31 @@ def mergeSqliteFiles ( targetFile, fileToMerge ):
 
 
 if __name__ == "__main__":
-    import sys
-    import os
+    import argparse
+    from pathlib import Path
+    import re
     import shutil
-    if ( len(sys.argv) < 2 ):
-        print( "Usage: mergeSqliteFiles <targetFile>" )
-    else:
-       isFirstFile = True
-       for r,d,f in os.walk('.'):
-          for file in f:
-             print(r, file)
-             if r != '.' and file.endswith('.sqlite'):
-                if isFirstFile:
-                   print( 'Copying ' + os.path.join(r,file) )
-                   shutil.copy( os.path.join(r,file), sys.argv[1] )
-                   isFirstFile = False
-                else:
-                   print( 'Merging ' + os.path.join(r,file) )
-                   mergeSqliteFiles( sys.argv[1], os.path.join(r,file) )
+
+    parser = argparse.ArgumentParser()
+    parser.add_argument('output_file', type=Path)
+    parser.add_argument('input_folder', type=Path)
+    parser.add_argument('-r', '--recursive', action='store_true', help='Take all subfolders into account.')
+    parser.add_argument('-f', '--filter', default='.*', dest='regex', help='Only files matching this regex are accepted.')
+    args = parser.parse_args()
+
+    regex = re.compile(args.regex)
+
+    if not args.input_folder.is_dir():
+        raise ValueError(f'{args.input_folder} is not a folder')
+
+    search_pattern = '**/*.sqlite' if args.recursive else '*.sqlite'
+
+    files = filter(lambda x: regex.match(x.name), args.input_folder.glob(search_pattern))
+    try:
+        first_file = next(files)
+        print(f'Copying {first_file}')
+        shutil.copy(str(first_file.resolve()), str(args.output_file.resolve()))
+    except StopIteration:
+        raise ValueError(f'{args.input_folder} has no matching sqlite files')
+    for file in files:
+        mergeSqliteFiles(str(args.output_file.resolve()), str(file.resolve()))
-- 
GitLab