59 lines
2 KiB
Python
59 lines
2 KiB
Python
|
|
# ================================================================
|
||
|
|
# 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)
|
||
|
|
)
|