mirror of
https://github.com/clinton-hall/nzbToMedia.git
synced 2024-11-14 17:40:24 -08:00
56c6773c6b
Updates colorama to 0.4.6 Adds confuse version 1.7.0 Updates jellyfish to 0.9.0 Adds mediafile 0.10.1 Updates munkres to 1.1.4 Updates musicbrainzngs to 0.7.1 Updates mutagen to 1.46.0 Updates pyyaml to 6.0 Updates unidecode to 1.3.6
188 lines
6.4 KiB
Python
188 lines
6.4 KiB
Python
# This file is part of the musicbrainzngs library
|
|
# Copyright (C) Alastair Porter, Wieland Hoffmann, and others
|
|
# This file is distributed under a BSD-2-Clause type license.
|
|
# See the COPYING file for more information.
|
|
|
|
__all__ = [
|
|
'set_caa_hostname', 'get_image_list', 'get_release_group_image_list',
|
|
'get_release_group_image_front', 'get_image_front', 'get_image_back',
|
|
'get_image'
|
|
]
|
|
|
|
import json
|
|
|
|
from musicbrainzngs import compat
|
|
from musicbrainzngs import musicbrainz
|
|
from musicbrainzngs.util import _unicode
|
|
|
|
hostname = "coverartarchive.org"
|
|
https = True
|
|
|
|
|
|
def set_caa_hostname(new_hostname, use_https=False):
|
|
"""Set the base hostname for Cover Art Archive requests.
|
|
Defaults to 'coverartarchive.org', accessing over https.
|
|
For backwards compatibility, `use_https` is False by default.
|
|
|
|
:param str new_hostname: The hostname (and port) of the CAA server to connect to
|
|
:param bool use_https: `True` if the host should be accessed using https. Default is `False`
|
|
"""
|
|
global hostname
|
|
global https
|
|
hostname = new_hostname
|
|
https = use_https
|
|
|
|
|
|
def _caa_request(mbid, imageid=None, size=None, entitytype="release"):
|
|
""" Make a CAA request.
|
|
|
|
:param imageid: ``front``, ``back`` or a number from the listing obtained
|
|
with :meth:`get_image_list`.
|
|
:type imageid: str
|
|
|
|
:param size: "250", "500", "1200"
|
|
:type size: str or None
|
|
|
|
:param entitytype: ``release`` or ``release-group``
|
|
:type entitytype: str
|
|
"""
|
|
# Construct the full URL for the request, including hostname and
|
|
# query string.
|
|
path = [entitytype, mbid]
|
|
if imageid and size:
|
|
path.append("%s-%s" % (imageid, size))
|
|
elif imageid:
|
|
path.append(imageid)
|
|
url = compat.urlunparse((
|
|
'https' if https else 'http',
|
|
hostname,
|
|
'/%s' % '/'.join(path),
|
|
'',
|
|
'',
|
|
''
|
|
))
|
|
musicbrainz._log.debug("GET request for %s" % (url, ))
|
|
|
|
# Set up HTTP request handler and URL opener.
|
|
httpHandler = compat.HTTPHandler(debuglevel=0)
|
|
handlers = [httpHandler]
|
|
|
|
opener = compat.build_opener(*handlers)
|
|
|
|
# Make request.
|
|
req = musicbrainz._MusicbrainzHttpRequest("GET", url, None)
|
|
# Useragent isn't needed for CAA, but we'll add it if it exists
|
|
if musicbrainz._useragent != "":
|
|
req.add_header('User-Agent', musicbrainz._useragent)
|
|
musicbrainz._log.debug("requesting with UA %s" % musicbrainz._useragent)
|
|
|
|
resp = musicbrainz._safe_read(opener, req, None)
|
|
|
|
# TODO: The content type declared by the CAA for JSON files is
|
|
# 'applicaiton/octet-stream'. This is not useful to detect whether the
|
|
# content is JSON, so default to decoding JSON if no imageid was supplied.
|
|
# http://tickets.musicbrainz.org/browse/CAA-75
|
|
if imageid:
|
|
# If we asked for an image, return the image
|
|
return resp
|
|
else:
|
|
# Otherwise it's json
|
|
data = _unicode(resp)
|
|
return json.loads(data)
|
|
|
|
|
|
def get_image_list(releaseid):
|
|
"""Get the list of cover art associated with a release.
|
|
|
|
The return value is the deserialized response of the `JSON listing
|
|
<http://musicbrainz.org/doc/Cover_Art_Archive/API#.2Frelease.2F.7Bmbid.7D.2F>`_
|
|
returned by the Cover Art Archive API.
|
|
|
|
If an error occurs then a :class:`~musicbrainzngs.ResponseError` will
|
|
be raised with one of the following HTTP codes:
|
|
|
|
* 400: `Releaseid` is not a valid UUID
|
|
* 404: No release exists with an MBID of `releaseid`
|
|
* 503: Ratelimit exceeded
|
|
"""
|
|
return _caa_request(releaseid)
|
|
|
|
|
|
def get_release_group_image_list(releasegroupid):
|
|
"""Get the list of cover art associated with a release group.
|
|
|
|
The return value is the deserialized response of the `JSON listing
|
|
<http://musicbrainz.org/doc/Cover_Art_Archive/API#.2Frelease-group.2F.7Bmbid.7D.2F>`_
|
|
returned by the Cover Art Archive API.
|
|
|
|
If an error occurs then a :class:`~musicbrainzngs.ResponseError` will
|
|
be raised with one of the following HTTP codes:
|
|
|
|
* 400: `Releaseid` is not a valid UUID
|
|
* 404: No release exists with an MBID of `releaseid`
|
|
* 503: Ratelimit exceeded
|
|
"""
|
|
return _caa_request(releasegroupid, entitytype="release-group")
|
|
|
|
|
|
def get_release_group_image_front(releasegroupid, size=None):
|
|
"""Download the front cover art for a release group.
|
|
The `size` argument and the possible error conditions are the same as for
|
|
:meth:`get_image`.
|
|
"""
|
|
return get_image(releasegroupid, "front", size=size,
|
|
entitytype="release-group")
|
|
|
|
|
|
def get_image_front(releaseid, size=None):
|
|
"""Download the front cover art for a release.
|
|
The `size` argument and the possible error conditions are the same as for
|
|
:meth:`get_image`.
|
|
"""
|
|
return get_image(releaseid, "front", size=size)
|
|
|
|
|
|
def get_image_back(releaseid, size=None):
|
|
"""Download the back cover art for a release.
|
|
The `size` argument and the possible error conditions are the same as for
|
|
:meth:`get_image`.
|
|
"""
|
|
return get_image(releaseid, "back", size=size)
|
|
|
|
|
|
def get_image(mbid, coverid, size=None, entitytype="release"):
|
|
"""Download cover art for a release. The coverart file to download
|
|
is specified by the `coverid` argument.
|
|
|
|
If `size` is not specified, download the largest copy present, which can be
|
|
very large.
|
|
|
|
If an error occurs then a :class:`~musicbrainzngs.ResponseError`
|
|
will be raised with one of the following HTTP codes:
|
|
|
|
* 400: `Releaseid` is not a valid UUID or `coverid` is invalid
|
|
* 404: No release exists with an MBID of `releaseid`
|
|
* 503: Ratelimit exceeded
|
|
|
|
:param coverid: ``front``, ``back`` or a number from the listing obtained with
|
|
:meth:`get_image_list`
|
|
:type coverid: int or str
|
|
|
|
:param size: "250", "500", "1200" or None. If it is None, the largest
|
|
available picture will be downloaded. If the image originally
|
|
uploaded to the Cover Art Archive was smaller than the
|
|
requested size, only the original image will be returned.
|
|
:type size: str or None
|
|
|
|
:param entitytype: The type of entity for which to download the cover art.
|
|
This is either ``release`` or ``release-group``.
|
|
:type entitytype: str
|
|
:return: The binary image data
|
|
:type: str
|
|
"""
|
|
if isinstance(coverid, int):
|
|
coverid = "%d" % (coverid, )
|
|
if isinstance(size, int):
|
|
size = "%d" % (size, )
|
|
return _caa_request(mbid, coverid, size=size, entitytype=entitytype)
|