"""
Spotfire IronPython cleaner. Deletes CSV/XLSX at Document.Properties['ExportPath'].
"""
import os
def err_out(msg, path):
print("ERROR: " + msg)
html = '<table style="border-collapse: collapse; width: 100%; font-family: Arial, sans-serif;">'
html += '<thead><tr><th style="background-color: white; color: darkgreen; padding: 12px; border: 1px solid #ddd;">File Name</th>'
html += '<th style="background-color: white; color: darkgreen; padding: 12px; border: 1px solid #ddd;">Extension</th>'
html += '<th style="background-color: white; color: darkgreen; padding: 12px; border: 1px solid #ddd;">Action / Status</th>'
html += '<th style="background-color: white; color: darkgreen; padding: 12px; border: 1px solid #ddd;">Detail</th></tr></thead>'
html += '<tbody><tr><td colspan="4" style="padding: 8px; border: 1px solid #ddd; color: red;">ERROR: %s</td></tr></tbody></table>' % msg
if 'SpecLogOutput' in globals():
SpecLogOutput('Export Visualization Contents to folder: ' + path, html)
def CleanExportLocation():
target = None
if 'Document' in globals():
try:
target = Document.Properties['ExportPath']
except Exception: pass
if not target or str(target).strip() == "":
err_out("ExportPath property is missing or empty.", "[Undefined path]")
return
if not os.path.exists(target):
err_out("Target folder does not exist: " + str(target), str(target))
return
print("Cleaning folder: " + str(target))
html = '<table style="border-collapse: collapse; width: 100%; font-family: Arial, sans-serif;">'
html += '<thead><tr><th style="background-color: white; color: darkgreen; padding: 12px; border: 1px solid #ddd;">File Name</th>'
html += '<th style="background-color: white; color: darkgreen; padding: 12px; border: 1px solid #ddd;">Extension</th>'
html += '<th style="background-color: white; color: darkgreen; padding: 12px; border: 1px solid #ddd;">Action / Status</th>'
html += '<th style="background-color: white; color: darkgreen; padding: 12px; border: 1px solid #ddd;">Detail</th></tr></thead><tbody>'
try:
files = os.listdir(target)
except Exception as ex:
err_out("Failed to list files: " + str(ex), str(target))
return
print("\n--- PRE-CLEANUP SCAN ---")
del_targets = []
for f in files:
fpath = os.path.join(target, f)
if os.path.isfile(fpath):
ext = os.path.splitext(f)[1].lower()
if ext in (".csv", ".xlsx"):
del_targets.append((f, ext, fpath))
print(" - " + f + " [TARGETED FOR DELETION]")
else:
print(" - " + f + " [SKIPPED]")
html += '<tr><td style="padding: 8px; border: 1px solid #ddd;">%s</td><td style="padding: 8px; border: 1px solid #ddd;">%s</td><td style="padding: 8px; border: 1px solid #ddd; color: blue;">Skipped</td><td style="padding: 8px; border: 1px solid #ddd;">File preserved</td></tr>' % (f, ext)
else:
print(" - " + f + "/ [SKIPPED]")
html += '<tr><td style="padding: 8px; border: 1px solid #ddd;">%s/</td><td style="padding: 8px; border: 1px solid #ddd;">[Folder]</td><td style="padding: 8px; border: 1px solid #ddd; color: blue;">Skipped</td><td style="padding: 8px; border: 1px solid #ddd;">Directory bypassed</td></tr>' % f
print("------------------------\n")
csv_del, xlsx_del, errors = 0, 0, 0
print("--- DELETIONS ---")
for f, ext, fpath in del_targets:
try:
os.remove(fpath)
if ext == ".csv": csv_del += 1
else: xlsx_del += 1
print(" [DELETED] " + f)
html += '<tr><td style="padding: 8px; border: 1px solid #ddd;">%s</td><td style="padding: 8px; border: 1px solid #ddd;">%s</td><td style="padding: 8px; border: 1px solid #ddd; color: green;">Deleted</td><td style="padding: 8px; border: 1px solid #ddd;">Removed</td></tr>' % (f, ext)
except Exception as ex:
errors += 1
print(" [ERROR] " + f + ": " + str(ex))
html += '<tr><td style="padding: 8px; border: 1px solid #ddd; color: red;">%s</td><td style="padding: 8px; border: 1px solid #ddd;">%s</td><td style="padding: 8px; border: 1px solid #ddd; color: red;">Error</td><td style="padding: 8px; border: 1px solid #ddd; color: red;">%s</td></tr>' % (f, ext, str(ex))
html += '</tbody><tfoot><tr><td colspan="4" style="background-color: #f0f0f0; padding: 10px; border: 1px solid #ddd;">'
html += '<strong>Cleanup Summary:</strong> Checked: %d | Deleted: %d (CSV: %d, XLSX: %d) | Errors: %d</td></tr></tfoot></table>' % (len(files), csv_del + xlsx_del, csv_del, xlsx_del, errors)
print("\nSUMMARY: Deleted %d files, Errors: %d" % (csv_del + xlsx_del, errors))
if 'SpecLogOutput' in globals():
SpecLogOutput('Export Visualization Contents to folder: ' + target, html)
CleanExportLocation()