ampp-folder-organizer/folder-linker-v1.0.py

59 lines
2 KiB
Python
Raw Normal View History

# ================================================================
# AMPP Framelight X — Dragon-Wind Folder Linker
# v1.0
#
# Replaces folder-organizer-v3.5.py.
#
# Dragon-Wind pre-creates all AMPP folder paths at upload time and
# stores the resulting folder:id. This script simply looks up that
# folder:id by filename and links the freshly-ingested asset to it.
#
# Result: zero folder creation logic here — no prefix parsing,
# no hierarchy walks, no duplicate-folder edge cases.
#
# Requirements:
# - WILD_DRAGON_API must be reachable from the AMPP node.
# - Asset must have been uploaded through Dragon-Wind (if not,
# the 404 path is handled gracefully — asset is skipped).
#
# Configuration:
# Set WILD_DRAGON_API to your Dragon-Wind MAM API base URL.
# ================================================================
import json
import urllib.parse
WILD_DRAGON_API = "https://wild-dragon.wilddragon.net" # update if needed
asset_id = str(asset.Id)
asset_name = str(job.AssetName)
try:
encoded_name = urllib.parse.quote(asset_name, safe="")
resp = httpClient.sendAsync(
"GET",
WILD_DRAGON_API + "/api/v1/ampp/folder-for/" + encoded_name
)
if not isinstance(resp, dict):
raise ValueError("Unexpected response type from Dragon-Wind: " + str(type(resp)))
folder_id = str(resp.get("folder_id", "")).strip()
if not folder_id:
# Asset was not uploaded through Dragon-Wind — skip gracefully.
# To handle legacy assets still using filename prefixes, you can
# re-enable folder-organizer-v3.5.py here as a fallback.
pass
else:
link_body = json.dumps(
{"folder:id": folder_id, "asset:id": asset_id},
separators=(',', ':')
)
httpClient.sendAsync("POST", "api/v1/store/folder/references", link_body)
except Exception as ex:
raise Exception(
"Dragon-Wind folder link failed for '" + asset_name + "': " + str(ex)
)