stash/pkg/plugin/examples/python/pyplugin.py

123 lines
2.4 KiB
Python

import json
import sys
import time
import log
from stash_interface import StashInterface
# raw plugins may accept the plugin input from stdin, or they can elect
# to ignore it entirely. In this case it optionally reads from the
# command-line parameters.
def main():
input = None
if len(sys.argv) < 2:
input = readJSONInput()
log.LogDebug("Raw input: %s" % json.dumps(input))
else:
log.LogDebug("Using command line inputs")
mode = sys.argv[1]
log.LogDebug("Command line inputs: {}".format(sys.argv[1:]))
input = {}
input['args'] = {
"mode": mode
}
# just some hard-coded values
input['server_connection'] = {
"Scheme": "http",
"Port": 9999,
}
output = {}
run(input, output)
out = json.dumps(output)
print(out + "\n")
def readJSONInput():
input = sys.stdin.read()
return json.loads(input)
def run(input, output):
modeArg = input['args']["mode"]
try:
if modeArg == "" or modeArg == "add":
client = StashInterface(input["server_connection"])
addTag(client)
elif modeArg == "remove":
client = StashInterface(input["server_connection"])
removeTag(client)
elif modeArg == "long":
doLongTask()
elif modeArg == "indef":
doIndefiniteTask()
except Exception as e:
raise
#output["error"] = str(e)
#return
output["output"] = "ok"
def doLongTask():
total = 100
upTo = 0
log.LogInfo("Doing long task")
while upTo < total:
time.sleep(1)
log.LogProgress(float(upTo) / float(total))
upTo = upTo + 1
def doIndefiniteTask():
log.LogWarning("Sleeping indefinitely")
while True:
time.sleep(1)
def addTag(client):
tagName = "Hawwwwt"
tagID = client.findTagIdWithName(tagName)
if tagID == None:
tagID = client.createTagWithName(tagName)
scene = client.findRandomSceneId()
if scene == None:
raise Exception("no scenes to add tag to")
tagIds = []
for t in scene["tags"]:
tagIds.append(t["id"])
# remove first to ensure we don't re-add the same id
try:
tagIds.remove(tagID)
except ValueError:
pass
tagIds.append(tagID)
input = {
"id": scene["id"],
"tag_ids": tagIds
}
log.LogInfo("Adding tag to scene {}".format(scene["id"]))
client.updateScene(input)
def removeTag(client):
tagName = "Hawwwwt"
tagID = client.findTagIdWithName(tagName)
if tagID == None:
log.LogInfo("Tag does not exist. Nothing to remove")
return
log.LogInfo("Destroying tag")
client.destroyTag(tagID)
main()