From 2d3526918e59b3bf90a6ff2c1ffe19dc0b3d43b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Floure?= Date: Mon, 5 Aug 2024 11:08:41 +0200 Subject: [PATCH 1/2] [fs2zammad] remove previously (half) imported zammad ticket --- fs2zammad | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/fs2zammad b/fs2zammad index 3f65a7a..8b590c7 100755 --- a/fs2zammad +++ b/fs2zammad @@ -113,6 +113,25 @@ def maybe_create_zammad_user(userdata, zammad_session, attr="login", default=Non return USERMAP[lowercase_email].get(attr, default) +def remove_existing_zammad_tickets_for(rt_id, zammad, retries=3): + try: + matching_zammad_tickets= zammad.ticket.search(f"title: \"[RT-{rt_id}]*\"") + if len(matching_zammad_tickets) >= 1: + print(f"Found existing ticket:") + for zt in matching_zammad_tickets: + print(f"{zt["id"]} {zt["title"]}") + print(f"Deleting Zammad ticket {zt["id"]}") + zammad.ticket.destroy(zt["id"]) + except: + print(f"Failed to cleanup duplicates for RT-{rt_id} .. ({retries} retries left)") + if retries > 0: + print("Sleeping 5 seconds to give Zammad some air...") + time.sleep(5) + remove_existing_zammad_tickets_for(rt_id, zammad, retries - 1) + else: + traceback.print_exc() + raise RuntimeError + # def ensure_user_is_zammad_agent(user, zammad_session): # print(f"Promoting user {user} to Agent") # id = maybe_create_zammad_user(user, zammad_session, "id") @@ -297,6 +316,7 @@ ticket_ids.sort() for id in ticket_ids: try: + remove_existing_zammad_tickets_for(id, zammad, 5) zammad_ticket_id = create_zammad_ticket(id, zammad, h2t, 5) dumpfile = f"processed/{id}" with open(dumpfile, "w") as handle: From 230d8703ff937ee6ceca8538f51f96f9e8c164e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Floure?= Date: Mon, 5 Aug 2024 11:15:52 +0200 Subject: [PATCH 2/2] [fs2zammad] allow arbitrary source directory as CLI arg --- fs2zammad | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/fs2zammad b/fs2zammad index 8b590c7..dc08171 100755 --- a/fs2zammad +++ b/fs2zammad @@ -303,14 +303,21 @@ with open("rt2zammad.json") as handle: h2t = html2text.HTML2Text() zammad = get_zammad_session() +source_directory = "tickets/" +if len(sys.argv) >= 2: + source_directory = sys.argv[1] +if not os.path.isdir(source_directory): + print(f"Could not find source directory {source_directory}. Exiting.") + sys.exit(1) + os.makedirs("users", exist_ok=True) os.makedirs("tickets", exist_ok=True) os.makedirs("attachments", exist_ok=True) os.makedirs("failed", exist_ok=True) os.makedirs("processed", exist_ok=True) -ticket_ids = os.listdir("tickets/") -print(f"Found {len(ticket_ids)} tickets on filesystem.") +ticket_ids = os.listdir(source_directory) +print(f"Found {len(ticket_ids)} tickets on filesystem (source directory: {source_directory})") ticket_ids = list(map(int, ticket_ids)) ticket_ids.sort()