#!/usr/bin/env python
#
-# Copyright © 2018 Nick Bowler
+# Copyright © 2018-2019 Nick Bowler
#
# Tool to fetch album art for a release from the Cover Art Archive.
#
import sys
import os
+umask = os.umask(0)
+os.umask(umask)
+
progname = "caa-fetcher"
-version = "0"
+version = "1"
musicbrainzngs.set_useragent(progname, version)
parser = argparse.ArgumentParser(
description='Download album artwork from the Cover Art Archive'
)
+# NamedTemporaryFile workalike which allows control of the file mode...
+def open_tmp(prefix="tmp", suffix="", dir=".", mode=0o600):
+ names = tempfile._get_candidate_names()
+ for seq in range(100):
+ name = os.path.join(dir, "%s%s%s" % (prefix, next(names), suffix))
+ try:
+ f = open(name, "x+", mode)
+ except FileExistsError:
+ continue
+ return tempfile._TemporaryFileWrapper(f, name)
+ return None
+
class VersionAction(argparse.Action):
def __init__(self, **kw):
super().__init__(nargs=0, help="show a version message and exit", **kw)
def __call__(self, parser, namespace, values, option_string=None):
print("%s %s" % (progname, version))
- print('''Copyright © 2018 Nick Bowler
+ print('''Copyright © 2019 Nick Bowler
License WTFPL2: Do What The Fuck You Want To Public License, version 2.
This is free software: you are free to do what the fuck you want to.
There is NO WARRANTY, to the extent permitted by law.''')
print("%s already exists, skipping..." % outname)
continue
- outfile = tempfile.NamedTemporaryFile(suffix=ext, dir=".")
+ outfile = open_tmp(suffix=ext, dir=".", mode=0o666)
rc = os.spawnlp(os.P_WAIT, 'wget', 'wget', '-O', outfile.name, c["image"])
if rc:
failed = True
+
os.link(outfile.name, outname)
outfile.close()