|
@@ -0,0 +1,67 @@
|
|
|
+import plac
|
|
|
+import subprocess
|
|
|
+import re
|
|
|
+from pathlib import Path
|
|
|
+from datetime import datetime
|
|
|
+import config
|
|
|
+
|
|
|
+cfg = config.config()
|
|
|
+imr_dir = cfg.portal_dir + '\\System\\IQD'
|
|
|
+catalog_dir = cfg.portal_dir + '\\System\\Catalogs'
|
|
|
+
|
|
|
+export_translation = {
|
|
|
+ 'csv': 'x_ascii.flt',
|
|
|
+ 'xls': 'x_excel.flt',
|
|
|
+ 'sql': 'x_sql.flt',
|
|
|
+ 'txt': 'x_text.flt',
|
|
|
+ 'iqd': 'x_iqd.flt',
|
|
|
+ 'ims': 'ims'
|
|
|
+}
|
|
|
+min_filesize = 2000 # 1 kB
|
|
|
+
|
|
|
+
|
|
|
+@plac.pos('imr_file', '', type=str)
|
|
|
+@plac.opt('export_format', '', type=str)
|
|
|
+@plac.opt('export_dir', '', type=str)
|
|
|
+@plac.opt('catalog', '', type=str)
|
|
|
+def export(imr_file, export_format='csv', export_dir=None, catalog=None):
|
|
|
+ imr_full_filename = imr_dir + '\\' + imr_file
|
|
|
+ export_filename = Path(imr_full_filename).name[:-3] + export_format
|
|
|
+ if export_dir is None:
|
|
|
+ export_dir = str(Path(imr_full_filename).parent)
|
|
|
+ export_full_filename = f'{export_dir}\\{export_filename}'
|
|
|
+ if catalog is None:
|
|
|
+ catalog = catalog_name(imr_file)
|
|
|
+ if catalog[-4:] != '.cat':
|
|
|
+ catalog = catalog + '.cat'
|
|
|
+ catalog_full_filename = f'{catalog_dir}\\{catalog}'
|
|
|
+ start = datetime.now().timestamp()
|
|
|
+ cmd = f'"{cfg.cognos_dir}\\runmac32.exe" "{cfg.tools_dir}\\impromptu.mac" "{imr_full_filename}","{catalog_full_filename}","{export_full_filename}","{export_translation[export_format]}"'
|
|
|
+ print(f"Exportiere '{imr_file}' als '{export_format}' nach '{export_dir}'...", end='')
|
|
|
+
|
|
|
+ p = subprocess.Popen(cmd)
|
|
|
+ p.wait()
|
|
|
+ if Path(export_full_filename).exists():
|
|
|
+ export_stat = Path(export_full_filename).stat()
|
|
|
+ if export_stat.st_mtime > start and export_stat.st_size > min_filesize:
|
|
|
+ print('erfolgreich.')
|
|
|
+ filesize_kb = round(export_stat.st_size / 1024)
|
|
|
+ stop = datetime.now().timestamp()
|
|
|
+ delta = round((stop - start))
|
|
|
+ print(str(filesize_kb) + ' KB in ' + str(delta // 60) + ':' + str(delta % 60).zfill(2) + ' min geschrieben.')
|
|
|
+ return
|
|
|
+ print('fehlgeschlagen.')
|
|
|
+
|
|
|
+
|
|
|
+def catalog_name(imr_file):
|
|
|
+ p = re.compile(r'catalogs\\([^\.]+)\.cat', re.IGNORECASE)
|
|
|
+ with open(imr_dir + '\\' + imr_file, 'r', errors='ignore') as f:
|
|
|
+ for line in f.readlines():
|
|
|
+ m = p.search(line)
|
|
|
+ if m:
|
|
|
+ return p.match(m.group()).groups()[0].lower()
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ # plac.call(export)
|
|
|
+ export('Belege\\current_date_Prognose.imr', 'ims')
|