#!/usr/bin/env python3 """ MetaVox Metadata Cleanup Script Verwijdert metadata-velddefinities via de OCS API. """ import json import sys import time import requests from requests.auth import HTTPBasicAuth NC_URL = "{{ nextcloud_url }}" NC_USER = "{{ nextcloud_admin_user }}" NC_PASS = "{{ nextcloud_admin_password }}" TIMEOUT = {{ http_timeout }} WEB_API_BASE = f"{NC_URL}/index.php/apps/metavox/api" OCS_BASE = f"{NC_URL}/ocs/v2.php/apps/metavox/api/v1" AUTH = HTTPBasicAuth(NC_USER, NC_PASS) HEADERS = { "OCS-APIRequest": "true", "Accept": "application/json", } TF_FIELDS = json.loads("""{{ teamfolder_metadata_fields | to_json }}""") FILE_FIELDS = json.loads("""{{ file_metadata_fields | to_json }}""") FIELD_NAMES_TO_DELETE = set(f["name"] for f in TF_FIELDS + FILE_FIELDS) def get_all_fields(): url = f"{OCS_BASE}/groupfolder-fields" try: resp = requests.get(url, auth=AUTH, headers=HEADERS, timeout=TIMEOUT) if resp.status_code == 200: data = resp.json() if "ocs" in data and "data" in data["ocs"]: return data["ocs"]["data"] except Exception as e: print(f"[ERROR] Ophalen velden: {e}") return [] def delete_field(field_id): url = f"{WEB_API_BASE}/groupfolder-fields/{field_id}" try: resp = requests.delete(url, auth=AUTH, headers=HEADERS, timeout=TIMEOUT) return resp.status_code in [200, 204, 404] except Exception as e: print(f" [ERROR] Verwijderen veld {field_id}: {e}") return False def main(): print("MetaVox Metadata Cleanup") print("=" * 40) fields = get_all_fields() print(f"Gevonden: {len(fields)} velden totaal") deleted = 0 skipped = 0 for field in fields: fname = field.get("field_name", "") fid = field.get("id") if fname in FIELD_NAMES_TO_DELETE and fid: if delete_field(fid): deleted += 1 else: print(f" [FAIL] Kon veld '{fname}' (id={fid}) niet verwijderen") else: skipped += 1 print(f"\n{deleted} velden deleted, {skipped} overgeslagen") if __name__ == "__main__": main()