def main(argv):
    parser = argparse.ArgumentParser()
    parser.add_argument("datafile")
    parser.add_argument("--sections", default="")
    asmyoutube.add_auth_args(parser)
    args = parser.parse_args(argv[1:])
    yt_service = asmyoutube.get_authenticated_service(args)

    entry_data = asmmetadata.parse_file(open(args.datafile, "rb"))

    if args.sections:
        included_sections = set(
            [x.lower().strip() for x in args.sections.split(",")])
        included_entries = []
        for entry in entry_data.entries:
            if entry["section"]["key"] in included_sections:
                included_entries.append(entry)
        entry_data.entries = included_entries

    try:
        update_youtube_info(yt_service, entry_data)
    except KeyboardInterrupt:
        print "Interrupted"
        return os.EX_DATAERR

    return os.EX_OK
def main(argv=sys.argv):
    parser = argparse.ArgumentParser()
    parser.add_argument("datafile")
    parser.add_argument(
        "--privacy", default="public",
        choices=["public", "private", "unlisted"])
    parser.add_argument("--section", default="")
    asmyoutube.add_auth_args(parser)
    args = parser.parse_args(argv[1:])
    yt_service = asmyoutube.get_authenticated_service(args)

    entry_data = asmmetadata.parse_file(open(args.datafile, "rb"))

    result = os.EX_OK

    sections = []
    if args.section:
        sections = [x.strip() for x in args.section.split(",")]

    try:
        update_youtube_playlists(
            yt_service, entry_data, sections, args.privacy)
    except KeyboardInterrupt:
        result = os.DATAERR
        print "Interrupted"
    except Exception, e:
        result = os.EX_SOFTWARE
        print "EXCEPTION Unknown exception happened: %s" % e
def main(argv):
    parser = argparse.ArgumentParser(description='Upload videos to Youtube.')
    parser.add_argument('metadata_file', metavar="metadata-file")
    parser.add_argument('files_root', metavar="files-root")
    parser.add_argument('--video-postfix', default=".mp4")
    parser.add_argument('--dry-run', action="store_true")
    parser.add_argument('--media-vod-directory')
    parser.add_argument(
        '--privacy', default="public", choices=["public", "unlisted", "private"])
    args = parser.parse_args(argv[1:])

    files_root = args.files_root
    video_postfix = args.video_postfix
    media_vod_directory = args.media_vod_directory
    privacy = args.privacy

    sleep_function = time.sleep
    if args.dry_run:
        sleep_function = lambda x : None
        call_and_capture_output = call_and_capture_output_fake
    else:
        call_and_capture_output = call_and_capture_output_real

    metadata = asmmetadata.parse_file(open(args.metadata_file, "rb"))

    state = State(
        files_root=files_root,
        media_vod_directory=media_vod_directory)

    try:
        for entry in metadata.entries:
            handle_entry(
                call_and_capture_output, sleep_function, privacy, state, entry)
    except:
        asmmetadata.print_metadata(
            open(args.metadata_file, "wb"), metadata)
        raise
    asmmetadata.print_metadata(
        open(args.metadata_file, "wb"), metadata)
    if args.dry_run:
        return 1
    return os.EX_OK
def main(argv):
    parser = argparse.ArgumentParser()
    parser.add_argument("datafile")
    parser.add_argument("attribute_name", metavar="attribute-name")
    parser.add_argument("value_prefix", metavar="value-prefix")
    parser.add_argument("directory")
    parser.add_argument("section", type=unicode)
    args = parser.parse_args(argv[1:])

    entry_data = asmmetadata.parse_file(open(args.datafile, "rb"))

    section = entry_data.getSection(args.section)

    for _, _, filenames in os.walk(args.directory):
        filenames = [x.decode("utf-8") for x in filenames]
        # Just get the filenames.
        break

    for entry in section["entries"]:
        best_matches = select_best_candidates(entry, filenames)
        not_used_matches = []
        if len(best_matches) == 0:
            sys.stderr.write("NO MATCH: %s\n" % entry["title"])
            continue
        elif len(best_matches) > 1:
            best_match = select_bestest_match(entry, best_matches)
        else:
            best_match, = best_matches
        not_used_matches = best_matches[:]
        not_used_matches.remove(best_match)
        print("%s -> %s" % (asmmetadata.get_entry_key(entry), best_match))
        if len(not_used_matches) > 0:
            print("  UNUSED: %s" % ", ".join(not_used_matches))
        entry[args.attribute_name] = "%s:%s%s" % (
            args.attribute_name, args.value_prefix, best_match)
        for match in best_matches:
            filenames.remove(match)
    if len(filenames) > 0:
        print("EXTRA: %s" % ", ".join(filenames))
    asmmetadata.print_metadata(open(args.datafile, "wb"), entry_data)
import asmmetadata
import os
import os.path
import subprocess
import sys

target_directory = sys.argv[1]
if not os.path.exists(target_directory):
    print "Target directory %s does not exist!" % target_directory
    sys.exit(1)

entry_data = asmmetadata.parse_file(sys.stdin)

for entry in entry_data.entries:
    if 'sceneorg' not in entry:
        continue
    sceneorg_path = entry['sceneorg']
    section_directory = entry['section']['key'].replace("-", "_")
    file_directory = asmmetadata.normalize_key("%s by %s" % (entry['title'], entry['author'])).replace("-", "_")
    download_directory = os.path.join(
        target_directory,
        section_directory,
        file_directory,
        )
    if not os.path.exists(download_directory):
        os.makedirs(download_directory)
    download_file = os.path.join(
        download_directory,
        os.path.basename(sceneorg_path)
        )
    download_url = "ftp://ftp.scene.org/pub%s" % sceneorg_path
    entries = compo.getElementsByTagName("entry")
    for entry in entries:
        entry_id = entry.getAttribute("id")
        entry_position_str = entry.getAttribute("place") or '0'
        techniques = entry.getAttribute("techniques")
        if len(techniques) == 0:
            techniques = None
        platform = entry.getAttribute("platform")
        if len(platform) == 0:
            platform = None
        entry_position = int(entry_position_str) or None
        iddata[entry_id] = (entry_position, techniques, platform)

import asmmetadata

parsed = asmmetadata.parse_file(open(args.datafile))

for entry in parsed.entries:
    if 'pms-id' not in entry:
        continue
    _, _, pms_id = entry['pms-id'].split("/")
    if pms_id not in iddata:
        # This probably means that results of a category are not public.
        continue
    place, techniques, platform = iddata[pms_id]
    entry['position'] = place
    if techniques is not None:
        # techniques = techniques.replace("\\", "\\\\")
        # techniques = techniques.replace("\n", "\\n")
        entry['techniques'] = techniques
    if platform is not None:
import argparse
import asmmetadata
import requests
import sys
import xml.dom.minidom

parser = argparse.ArgumentParser()
parser.add_argument("metadata_file")
parser.add_argument("elaine_vods_url")
parser.add_argument("elaine_pms_vodlist_url")
args = parser.parse_args()

metadata_fp = open(args.metadata_file, "rb")
metadata = asmmetadata.parse_file(metadata_fp)

vodlist_result = requests.get(args.elaine_pms_vodlist_url)
if vodlist_result.status_code != 200:
    sys.stderr.write(
        "Vodlist request to %s failed\n" % args.elaine_pms_vodlist_url)
    sys.exit(1)
vodlist = vodlist_result.text

elaine_pms_map = {}

for line in vodlist.split("\n"):
    elaine_id, pms_id = (line.split(":", 1) + ["", ""])[:2]
    if not pms_id:
        continue
    elaine_pms_map[elaine_id] = pms_id

vod_xml_result = requests.get(args.elaine_vods_url)
import argparse
import asmmetadata
import re
import shutil
import tempfile
import util
import xml.dom.minidom

parser = argparse.ArgumentParser()
parser.add_argument("asmdatafile", type=argparse.FileType("r+b"))
parser.add_argument("elainexml", type=util.argparseTypeUrlOpenable)
args = parser.parse_args()

doc = xml.dom.minidom.parse(args.elainexml)
metadata_filename = args.asmdatafile.name
event_data = asmmetadata.parse_file(args.asmdatafile)
args.asmdatafile.close()

items = doc.getElementsByTagName("item")


def get_languaged_tag(item, tagname):
    nodes = item.getElementsByTagName(tagname)
    values = {}
    for node in nodes:
        value = None
        if node.firstChild is not None:
            value = node.firstChild.nodeValue
        language = node.getAttribute("xml:lang")
        values[language] = value
    return values
    cut_region = (cut_left, cut_top, cut_left + cut_width, cut_top + cut_height)
    cropped = inphoto.crop(cut_region)
    scaled = cropped.resize((args.width, args.height), Image.ANTIALIAS)

    full_title = "%s by %s" % (entry['title'], entry['author'])

    section_name = asmmetadata.normalize_key(entry['section']['name'])
    thumbnail_path = os.path.join(args.data_root, "thumbnails", "small", section_name)
    basename = asmmetadata.normalize_key(full_title)
    jpeg_file = os.path.join(thumbnail_path, basename + ".jpeg")
    scaled.save(jpeg_file)
    png_file = os.path.join(thumbnail_path, basename + ".png")
    scaled.save(png_file)

entry_data = asmmetadata.parse_file(args.asmmetadata)
for entry in entry_data.entries:
    section = asmmetadata.normalize_key( entry['section']['name'])
    if "photos" not in section:
        continue

    section_name = asmmetadata.normalize_key(entry['section']['name'])
    file_base = os.path.join(args.data_root, section_name)
    full_title = "%s by %s" % (entry['title'], entry['author'])
    basename = asmmetadata.normalize_key(full_title)
    source_file = os.path.join(file_base, basename + ".jpeg")

    if not os.path.isfile(source_file):
        continue

    create_small_thumbnail_file(args, source_file, entry)