vs-metadata/deploy.py (39 lines of code) (raw):
#!/usr/bin/env python
import requests
from argparse import ArgumentParser
import xml.etree.cElementTree as ET
def get_group_name(root_node):
"""
extracts the main name of the metadata group from the provided xml document.
:param root_node:
:return:
"""
name_node = root_node.find("{http://xml.vidispine.com/schema/vidispine}name")
if name_node is None:
raise Exception("Could not find a name node in the document")
if name_node.text != "":
return name_node.text
else:
raise Exception("Name node was empty")
###START MAIN
parser = ArgumentParser(description="Deploy the given metadata definition XML to Vidispine")
parser.add_argument('--proto',type=str,help="http or https", default="http")
parser.add_argument('--host',type=str,help="Host that vidispine is running on", default="localhost")
parser.add_argument('--port',type=int,help="port that Vidisine is running on", default=8080)
parser.add_argument('--user',type=str,help="username for Vidispine", default="admin")
parser.add_argument('--passwd',type=str,help="password for Vidispine")
parser.add_argument('--file', type=str,help="file to send")
args = parser.parse_args()
raw_content = None
if args.file is None:
print("You must specify a file to send with --file. Use --help for more information.")
exit(1)
with open(args.file, "r") as f:
raw_content = f.read()
if raw_content is None:
print("Could not read {0}".format(args.file))
exit(2)
parsed_content = ET.fromstring(raw_content)
group_name = get_group_name(parsed_content)
url_to_send = "{0}://{1}:{2}/API/metadata-field/field-group/{3}".format(args.proto, args.host, args.port, group_name)
print("Sending to {0}...".format(url_to_send))
response = requests.put(url_to_send, data=raw_content, auth=(args.user, args.passwd), headers={"Content-Type":"application/xml"}, verify=False)
if response.status_code==200:
print("Successfully sent")
else:
print("Vidispine returned a {0} error:".format(response.status_code))
print(response.text)
exit(3)