Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-pyacoustid for
openSUSE:Factory checked in at 2022-10-06 07:42:16
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pyacoustid (Old)
and /work/SRC/openSUSE:Factory/.python-pyacoustid.new.2275 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pyacoustid"
Thu Oct 6 07:42:16 2022 rev:4 rq:1008175 version:1.2.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pyacoustid/python-pyacoustid.changes
2019-05-27 08:39:42.699039953 +0200
+++
/work/SRC/openSUSE:Factory/.python-pyacoustid.new.2275/python-pyacoustid.changes
2022-10-06 07:42:27.336720902 +0200
@@ -1,0 +2,14 @@
+Tue Oct 4 23:44:14 UTC 2022 - Yogalakshmi Arunachalam <[email protected]>
+
+- Update to version 1.2.2
+ Fix a regression in the previous version that caused a KeyError crash when
calling submit.
+
+- Update to version 1.2.1
+ The meta parameter to some API functions can now be a list (instead of just
a single string).
+
+- Update to version 1.2.0
+ Add a force_fpcalc option to fingerprint_file and match. Avoid leaving a
dangling socket after communicating with the server.
+ Fix a crash when passing a memoryview object to the fingerprinter. API
requests can now optionally time out. More reliably find the library
+ on Windows on Python 3.8. Add a hash_fingerprint function to the low-level
library.
+
+-------------------------------------------------------------------
Old:
----
pyacoustid-1.1.7.tar.gz
New:
----
pyacoustid-1.2.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pyacoustid.spec ++++++
--- /var/tmp/diff_new_pack.cvqRQN/_old 2022-10-06 07:42:28.504723502 +0200
+++ /var/tmp/diff_new_pack.cvqRQN/_new 2022-10-06 07:42:28.512723519 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-pyacoustid
#
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2022 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-pyacoustid
-Version: 1.1.7
+Version: 1.2.2
Release: 0
Summary: Bindings for Chromaprint acoustic fingerprinting and the
Acoustid API
License: MIT
++++++ pyacoustid-1.1.7.tar.gz -> pyacoustid-1.2.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyacoustid-1.1.7/PKG-INFO
new/pyacoustid-1.2.2/PKG-INFO
--- old/pyacoustid-1.1.7/PKG-INFO 2019-05-25 14:47:25.000000000 +0200
+++ new/pyacoustid-1.2.2/PKG-INFO 2021-09-01 15:35:41.777999200 +0200
@@ -1,208 +1,228 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: pyacoustid
-Version: 1.1.7
+Version: 1.2.2
Summary: bindings for Chromaprint acoustic fingerprinting and the Acoustid API
Home-page: https://github.com/sampsyo/pyacoustid
Author: Adrian Sampson
Author-email: [email protected]
License: MIT
-Description: Chromaprint and Acoustid for Python
- ===================================
-
- `Chromaprint`_ and its associated `Acoustid`_ Web service make up a
- high-quality, open-source acoustic fingerprinting system. This package
provides
- Python bindings for both the fingerprinting algorithm library, which
is written
- in C but portable, and the Web service, which provides fingerprint
lookups.
-
- .. _Chromaprint: http://acoustid.org/
- .. _Acoustid: http://acoustid.org/chromaprint
-
-
- Installation
- ------------
-
- This library works with Python 2 (2.7+, possibly also 2.6) and Python 3
- (3.3+).
-
- First, install the `Chromaprint`_ fingerprinting library by `Lukas
Lalinsky`__.
- (The library itself depends on an FFT library, but it's smart enough
to use an
- algorithm from software you probably already have installed; see the
Chromaprint
- page for details.) This module can use either the Chromaprint dynamic
library or
- the ``fpcalc`` command-line tool, which itself depends on
`libavcodec`_. If you
- use ``fpcalc``, either ensure that it is on your ``$PATH`` or set the
``FPCALC``
- environment variable to its location.
-
- __ lukas_
- .. _lukas: http://oxygene.sk/lukas/
- .. _libavcodec: http://ffmpeg.org/
-
- Then you can install this library from `PyPI`_ using `pip`_::
-
- $ pip install pyacoustid
-
- This library uses `audioread`_ to do audio decoding when not using
``fpcalc``
- and `requests`_ to talk to the HTTP API (pip should automatically
install
- these dependencies).
-
- .. _pip: http://www.pip-installer.org/
- .. _PyPI: http://pypi.python.org/
- .. _audioread: https://github.com/sampsyo/audioread
- .. _requests: http://python-requests.org
-
-
- Running
- -------
-
- You can run the included demonstration script, ``aidmatch.py``, to
test your
- installation::
-
- $ python aidmatch.py mysterious_music.mp3
-
- This will show the top metadata match from Acoustid's database. The
script uses
- `audioread`_ to decode music, so it should transparently use a media
library
- available on your system (GStreamer, FFmpeg, MAD, or Core Audio).
-
-
- Using in Your Code
- ------------------
-
- The simplest way to use pyacoustid to identify audio files is to call
the
- ``match`` function::
-
- >>> import acoustid
- >>> for score, recording_id, title, artist in
acoustid.match(apikey, path):
- >>> ...
-
- This convenience function uses `audioread`_ to decode audio and parses
the
- response for you, pulling out the most important track metadata. It
returns in
- iterable over tuples of relevant information. Everything happens in
one fell
- swoop. There are also a number of "smaller" functions you can use to
perform
- parts of the process:
-
- - ``fingerprint(samplerate, channels, pcmiter)``: Generate a
fingerprint for raw
- audio data. Specify the audio parameters and give an iterable
containing
- blocks of PCM data.
- - ``fingerprint_file(path)``: Using either the Chromaprint dynamic
library or
- the ``fpcalc`` command-line tool, fingerprint an audio file. Returns
a pair
- consisting of the file's duration and its fingerprint.
- - ``lookup(apikey, fingerprint, duration)``: Make a request to the
`Acoustid`_
- API to look up the fingerprint returned by the previous function. An
API key
- is required, as is the length, in seconds, of the source audio.
Returns a
- parsed JSON response.
- - ``parse_lookup_result(data)``: Given a parsed JSON response, return
an
- iterator over tuples containing the match score (a float between 0
and 1), the
- MusicBrainz recording ID, title, and artist name for each match.
-
- The module internally performs thread-safe API rate limiting to 3
queries per
- second whenever the Web API is called, in accordance with the `Web
service
- documentation`_.
-
- If you're running your own Acoustid database server, you can set the
base URL
- for all API calls with the ``set_base_url`` function.
-
- Calls to the library can raise ``AcoustidError`` exceptions of two
subtypes:
- ``FingerprintGenerationError`` and ``WebServiceError``. Catch these
exceptions
- if you want to proceed when audio can't be decoded or no match is
found on the
- server. ``NoBackendError``, a subclass of
``FingerprintGenerationError``, is
- used when the Chromaprint library or fpcalc command-line tool cannot
be found.
-
- .. _Web service documentation: http://acoustid.org/webservice
-
-
- Version History
- ---------------
-
- 1.1.7
- Include a LICENSE file.
-
- 1.1.6
- In submission, avoid an error on non-integer durations.
- A new function, `get_submission_status`, abstracts the API endpoint
for
- monitoring submissions using the (new) result from the `submit`
function.
-
- 1.1.5
- Fix compatibility with Python 3 in the `submit` function.
- Errors in `submit` are now also handled correctly (i.e., they raise
an
- informative `WebServiceError` instead of a `TypeError`).
-
- 1.1.4
- Fix an error on versions of the `fpcalc` tool that report the
duration as a
- fractional number.
-
- 1.1.3
- Accept `bytearray` objects in addition to other bytes-like types.
-
- 1.1.2
- Fix a possible crash on Unicode text in Python 2 in a non-Unicode
locale.
- Look for version "1" of the Chromaprint shared library file.
-
- 1.1.1
- Fix a possible setup error on Python 3 (thanks to Simon Chopin).
-
- 1.1.0
- Include ``fpcalc.py`` script in source distributions.
- Add Python 3 support (thanks to Igor Tsarev).
-
- 1.0.0
- Include ``fpcalc.py``, a script mimicking the ``fpcalc`` program
from the
- Chromaprint package.
- Handle a ``UnicodeDecodeError`` raised when using the ``fpcalc``
backend on
- Windows with Unicode filenames.
- Standard error output from ``fpcalc`` is suppressed.
-
- 0.7
- Properly encode Unicode parameters (resolves a ``UnicodeEncodeError``
- in fingerprint submission).
- Parse all recordings for each Acoustid lookup result.
-
- 0.6
- Add a new function, ``fingerprint_file``, that automatically selects
a
- backend for fingerprinting a single file.
-
- 0.5
- Fix response parsing when recording has no artists or title.
- Fix compatibility with Python < 2.7.
- Add specific ``NoBackendError`` exception.
-
- 0.4
- Fingerprinting can now fall back to using the ``fpcalc``
command-line tool
- instead of the Chromaprint dynamic library so the library can be
used with
- the binary distributions (thanks to Lukas Lalinsky).
- Fingerprint submission (thanks to Alastair Porter).
- Data chunks can now be buffers as well as bytestrings (fixes
compatibility
- with pymad).
-
- 0.3
- Configurable API base URL.
- Result parser now generates all results instead of returning just
one.
- Find the chromaprint library on Cygwin.
- New module names: ``chromaprint`` and ``acoustid`` (no package).
-
- 0.2
- Compress HTTP requests and responses.
- Limit audio decoding to 120 seconds.
- Return score from convenience function.
-
- 0.1
- Initial release.
-
-
- Credits
- -------
-
- This library is by Adrian Sampson. Chromaprint and Acoustid are by
`Lukas
- Lalinsky`__. This package includes the original `ctypes`_-based
bindings
- written by Lukas. The entire library is made available under the `MIT
license`_.
- pyacoustid was written to be used with `beets`_, which you should
probably check
- out.
-
- __ lukas_
- .. _ctypes: http://docs.python.org/library/ctypes.html
- .. _beets: http://beets.radbox.org/
- .. _MIT license: http://www.opensource.org/licenses/mit-license.php
-
Platform: ALL
Classifier: Topic :: Multimedia :: Sound/Audio :: Conversion
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 3
+License-File: LICENSE
+
+Chromaprint and Acoustid for Python
+===================================
+
+`Chromaprint`_ and its associated `Acoustid`_ Web service make up a
+high-quality, open-source acoustic fingerprinting system. This package provides
+Python bindings for both the fingerprinting algorithm library, which is written
+in C but portable, and the Web service, which provides fingerprint lookups.
+
+.. _Chromaprint: http://acoustid.org/chromaprint
+.. _Acoustid: http://acoustid.org/
+
+
+Installation
+------------
+
+This library works with Python 2 (2.7+, possibly also 2.6) and Python 3
+(3.3+).
+
+First, install the `Chromaprint`_ fingerprinting library by `Lukas Lalinsky`__.
+(The library itself depends on an FFT library, but it's smart enough to use an
+algorithm from software you probably already have installed; see the
Chromaprint
+page for details.) This module can use either the Chromaprint dynamic library
or
+the ``fpcalc`` command-line tool, which itself depends on `libavcodec`_. If you
+use ``fpcalc``, either ensure that it is on your ``$PATH`` or set the
``FPCALC``
+environment variable to its location.
+
+__ lukas_
+.. _lukas: http://oxygene.sk/lukas/
+.. _libavcodec: http://ffmpeg.org/
+
+Then you can install this library from `PyPI`_ using `pip`_::
+
+ $ pip install pyacoustid
+
+This library uses `audioread`_ to do audio decoding when not using ``fpcalc``
+and `requests`_ to talk to the HTTP API (pip should automatically install
+these dependencies).
+
+.. _pip: http://www.pip-installer.org/
+.. _PyPI: http://pypi.python.org/
+.. _audioread: https://github.com/sampsyo/audioread
+.. _requests: http://python-requests.org
+
+
+Running
+-------
+
+You can run the included demonstration script, ``aidmatch.py``, to test your
+installation::
+
+ $ python aidmatch.py mysterious_music.mp3
+
+This will show the top metadata match from Acoustid's database. The script uses
+`audioread`_ to decode music, so it should transparently use a media library
+available on your system (GStreamer, FFmpeg, MAD, or Core Audio).
+
+
+Using in Your Code
+------------------
+
+The simplest way to use pyacoustid to identify audio files is to call the
+``match`` function::
+
+ >>> import acoustid
+ >>> for score, recording_id, title, artist in acoustid.match(apikey, path):
+ >>> ...
+
+This convenience function uses `audioread`_ to decode audio and parses the
+response for you, pulling out the most important track metadata. It returns in
+iterable over tuples of relevant information. Everything happens in one fell
+swoop. There are also a number of "smaller" functions you can use to perform
+parts of the process:
+
+- ``fingerprint(samplerate, channels, pcmiter)``: Generate a fingerprint for
raw
+ audio data. Specify the audio parameters and give an iterable containing
+ blocks of PCM data.
+- ``fingerprint_file(path)``: Using either the Chromaprint dynamic library or
+ the ``fpcalc`` command-line tool, fingerprint an audio file. (You can use
+ ``force_fpcalc`` to use only the latter.) Returns a pair consisting of the
+ file's duration and its fingerprint.
+- ``lookup(apikey, fingerprint, duration)``: Make a request to the `Acoustid`_
+ API to look up the fingerprint returned by the previous function. An API key
+ is required, as is the length, in seconds, of the source audio. Returns a
+ parsed JSON response.
+- ``parse_lookup_result(data)``: Given a parsed JSON response, return an
+ iterator over tuples containing the match score (a float between 0 and 1),
the
+ MusicBrainz recording ID, title, and artist name for each match.
+
+The module internally performs thread-safe API rate limiting to 3 queries per
+second whenever the Web API is called, in accordance with the `Web service
+documentation`_.
+
+If you're running your own Acoustid database server, you can set the base URL
+for all API calls with the ``set_base_url`` function.
+
+Calls to the library can raise ``AcoustidError`` exceptions of two subtypes:
+``FingerprintGenerationError`` and ``WebServiceError``. Catch these exceptions
+if you want to proceed when audio can't be decoded or no match is found on the
+server. ``NoBackendError``, a subclass of ``FingerprintGenerationError``, is
+used when the Chromaprint library or fpcalc command-line tool cannot be found.
+
+.. _Web service documentation: http://acoustid.org/webservice
+
+
+Version History
+---------------
+
+1.2.2
+ Fix a regression in the previous version that caused a `KeyError` crash when
+ calling `submit`.
+
+1.2.1
+ The `meta` parameter to some API functions can now be a list (instead of
+ just a single string).
+
+1.2.0
+ Add a `force_fpcalc` option to `fingerprint_file` and `match`.
+ Avoid leaving a dangling socket after communicating with the server.
+ Fix a crash when passing a `memoryview` object to the fingerprinter.
+ API requests can now optionally time out.
+ More reliably find the library on Windows on Python 3.8.
+ Add a `hash_fingerprint` function to the low-level library.
+
+1.1.7
+ Include a LICENSE file.
+
+1.1.6
+ In submission, avoid an error on non-integer durations.
+ A new function, `get_submission_status`, abstracts the API endpoint for
+ monitoring submissions using the (new) result from the `submit` function.
+
+1.1.5
+ Fix compatibility with Python 3 in the `submit` function.
+ Errors in `submit` are now also handled correctly (i.e., they raise an
+ informative `WebServiceError` instead of a `TypeError`).
+
+1.1.4
+ Fix an error on versions of the `fpcalc` tool that report the duration as a
+ fractional number.
+
+1.1.3
+ Accept `bytearray` objects in addition to other bytes-like types.
+
+1.1.2
+ Fix a possible crash on Unicode text in Python 2 in a non-Unicode locale.
+ Look for version "1" of the Chromaprint shared library file.
+
+1.1.1
+ Fix a possible setup error on Python 3 (thanks to Simon Chopin).
+
+1.1.0
+ Include ``fpcalc.py`` script in source distributions.
+ Add Python 3 support (thanks to Igor Tsarev).
+
+1.0.0
+ Include ``fpcalc.py``, a script mimicking the ``fpcalc`` program from the
+ Chromaprint package.
+ Handle a ``UnicodeDecodeError`` raised when using the ``fpcalc`` backend on
+ Windows with Unicode filenames.
+ Standard error output from ``fpcalc`` is suppressed.
+
+0.7
+ Properly encode Unicode parameters (resolves a ``UnicodeEncodeError``
+ in fingerprint submission).
+ Parse all recordings for each Acoustid lookup result.
+
+0.6
+ Add a new function, ``fingerprint_file``, that automatically selects a
+ backend for fingerprinting a single file.
+
+0.5
+ Fix response parsing when recording has no artists or title.
+ Fix compatibility with Python < 2.7.
+ Add specific ``NoBackendError`` exception.
+
+0.4
+ Fingerprinting can now fall back to using the ``fpcalc`` command-line tool
+ instead of the Chromaprint dynamic library so the library can be used with
+ the binary distributions (thanks to Lukas Lalinsky).
+ Fingerprint submission (thanks to Alastair Porter).
+ Data chunks can now be buffers as well as bytestrings (fixes compatibility
+ with pymad).
+
+0.3
+ Configurable API base URL.
+ Result parser now generates all results instead of returning just one.
+ Find the chromaprint library on Cygwin.
+ New module names: ``chromaprint`` and ``acoustid`` (no package).
+
+0.2
+ Compress HTTP requests and responses.
+ Limit audio decoding to 120 seconds.
+ Return score from convenience function.
+
+0.1
+ Initial release.
+
+
+Credits
+-------
+
+This library is by Adrian Sampson. Chromaprint and Acoustid are by `Lukas
+Lalinsky`__. This package includes the original `ctypes`_-based bindings
+written by Lukas. The entire library is made available under the `MIT
license`_.
+pyacoustid was written to be used with `beets`_, which you should probably
check
+out.
+
+__ lukas_
+.. _ctypes: http://docs.python.org/library/ctypes.html
+.. _beets: http://beets.radbox.org/
+.. _MIT license: http://www.opensource.org/licenses/mit-license.php
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyacoustid-1.1.7/README.rst
new/pyacoustid-1.2.2/README.rst
--- old/pyacoustid-1.1.7/README.rst 2019-05-25 14:46:32.000000000 +0200
+++ new/pyacoustid-1.2.2/README.rst 2021-09-01 15:35:26.000000000 +0200
@@ -6,8 +6,8 @@
Python bindings for both the fingerprinting algorithm library, which is written
in C but portable, and the Web service, which provides fingerprint lookups.
-.. _Chromaprint: http://acoustid.org/
-.. _Acoustid: http://acoustid.org/chromaprint
+.. _Chromaprint: http://acoustid.org/chromaprint
+.. _Acoustid: http://acoustid.org/
Installation
@@ -75,8 +75,9 @@
audio data. Specify the audio parameters and give an iterable containing
blocks of PCM data.
- ``fingerprint_file(path)``: Using either the Chromaprint dynamic library or
- the ``fpcalc`` command-line tool, fingerprint an audio file. Returns a pair
- consisting of the file's duration and its fingerprint.
+ the ``fpcalc`` command-line tool, fingerprint an audio file. (You can use
+ ``force_fpcalc`` to use only the latter.) Returns a pair consisting of the
+ file's duration and its fingerprint.
- ``lookup(apikey, fingerprint, duration)``: Make a request to the `Acoustid`_
API to look up the fingerprint returned by the previous function. An API key
is required, as is the length, in seconds, of the source audio. Returns a
@@ -104,6 +105,22 @@
Version History
---------------
+1.2.2
+ Fix a regression in the previous version that caused a `KeyError` crash when
+ calling `submit`.
+
+1.2.1
+ The `meta` parameter to some API functions can now be a list (instead of
+ just a single string).
+
+1.2.0
+ Add a `force_fpcalc` option to `fingerprint_file` and `match`.
+ Avoid leaving a dangling socket after communicating with the server.
+ Fix a crash when passing a `memoryview` object to the fingerprinter.
+ API requests can now optionally time out.
+ More reliably find the library on Windows on Python 3.8.
+ Add a `hash_fingerprint` function to the low-level library.
+
1.1.7
Include a LICENSE file.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyacoustid-1.1.7/acoustid.py
new/pyacoustid-1.2.2/acoustid.py
--- old/pyacoustid-1.1.7/acoustid.py 2018-11-20 22:19:28.000000000 +0100
+++ new/pyacoustid-1.2.2/acoustid.py 2021-09-01 15:35:26.000000000 +0200
@@ -38,7 +38,7 @@
API_BASE_URL = 'http://api.acoustid.org/v2/'
-DEFAULT_META = 'recordings'
+DEFAULT_META = ['recordings']
REQUEST_INTERVAL = 0.33 # 3 requests/second.
MAX_AUDIO_LENGTH = 120 # Seconds.
FPCALC_COMMAND = 'fpcalc'
@@ -112,10 +112,12 @@
"""Get the URL of the submission API endpoint."""
return API_BASE_URL + 'submit'
+
def _get_submission_status_url():
"""Get the URL of the submission status API endpoint."""
return API_BASE_URL + 'submission_status'
+
# Compressed HTTP request bodies.
def _compress(data):
@@ -166,22 +168,32 @@
@_rate_limit
-def _api_request(url, params):
+def _api_request(url, params, timeout=None):
"""Makes a POST request for the URL with the given form parameters,
which are encoded as compressed form data, and returns a parsed JSON
response. May raise a WebServiceError if the request fails.
+ If the specified timeout passes, then raises a TimeoutError.
"""
headers = {
'Accept-Encoding': 'gzip',
"Content-Type": "application/x-www-form-urlencoded"
}
- session = requests.Session()
- session.mount('http://', CompressedHTTPAdapter())
- try:
- response = session.post(url, data=params, headers=headers)
- except requests.exceptions.RequestException as exc:
- raise WebServiceError("HTTP request failed: {0}".format(exc))
+ with requests.Session() as session:
+ session.mount('http://', CompressedHTTPAdapter())
+ try:
+ if isinstance(params.get('meta'), list):
+ params['meta'] = ' '.join(params['meta'])
+ response = session.post(url,
+ data=params,
+ headers=headers,
+ timeout=timeout)
+ except requests.exceptions.RequestException as exc:
+ raise WebServiceError("HTTP request failed: {0}".format(exc))
+ except requests.exceptions.ReadTimeout:
+ raise WebServiceError(
+ "HTTP request timed out ({0}s)".format(timeout)
+ )
try:
return response.json()
@@ -216,9 +228,12 @@
raise FingerprintGenerationError("fingerprint calculation failed")
-def lookup(apikey, fingerprint, duration, meta=DEFAULT_META):
+def lookup(apikey, fingerprint, duration, meta=DEFAULT_META, timeout=None):
"""Look up a fingerprint with the Acoustid Web service. Returns the
- Python object reflecting the response JSON data.
+ Python object reflecting the response JSON data. To get more data
+ back, ``meta`` can be a list of keywords from this list: recordings,
+ recordingids, releases, releaseids, releasegroups, releasegroupids,
+ tracks, compress, usermeta, sources.
"""
params = {
'format': 'json',
@@ -227,7 +242,7 @@
'fingerprint': fingerprint,
'meta': meta,
}
- return _api_request(_get_lookup_url(), params)
+ return _api_request(_get_lookup_url(), params, timeout)
def parse_lookup_result(data):
@@ -314,33 +329,40 @@
return duration, fp
-def fingerprint_file(path, maxlength=MAX_AUDIO_LENGTH):
+def fingerprint_file(path, maxlength=MAX_AUDIO_LENGTH, force_fpcalc=False):
"""Fingerprint a file either using the Chromaprint dynamic library
- or the fpcalc command-line tool, whichever is available. Returns the
- duration and the fingerprint.
+ or the fpcalc command-line tool, whichever is available (unless
+ ``force_fpcalc`` is specified). Returns the duration and the
+ fingerprint.
"""
path = os.path.abspath(os.path.expanduser(path))
- if have_audioread and have_chromaprint:
+ if have_audioread and have_chromaprint and not force_fpcalc:
return _fingerprint_file_audioread(path, maxlength)
else:
return _fingerprint_file_fpcalc(path, maxlength)
-def match(apikey, path, meta=DEFAULT_META, parse=True):
+def match(apikey, path, meta=DEFAULT_META, parse=True, force_fpcalc=False,
+ timeout=None):
"""Look up the metadata for an audio file. If ``parse`` is true,
then ``parse_lookup_result`` is used to return an iterator over
small tuple of relevant information; otherwise, the full parsed JSON
- response is returned.
+ response is returned. Fingerprinting uses either the Chromaprint
+ library or the fpcalc command-line tool; if ``force_fpcalc`` is
+ true, only the latter will be used. To get more data back, ``meta``
+ can be a list of keywords from this list: recordings, recordingids,
+ releases, releaseids, releasegroups, releasegroupids, tracks,
+ compress, usermeta, sources.
"""
- duration, fp = fingerprint_file(path)
- response = lookup(apikey, fp, duration, meta)
+ duration, fp = fingerprint_file(path, force_fpcalc=force_fpcalc)
+ response = lookup(apikey, fp, duration, meta, timeout)
if parse:
return parse_lookup_result(response)
else:
return response
-def submit(apikey, userkey, data):
+def submit(apikey, userkey, data, timeout=None):
"""Submit a fingerprint to the acoustid server. The ``apikey`` and
``userkey`` parameters are API keys for the application and the
submitting user, respectively.
@@ -378,7 +400,7 @@
for k, v in d.items():
args["%s.%s" % (k, i)] = v
- response = _api_request(_get_submit_url(), args)
+ response = _api_request(_get_submit_url(), args, timeout)
if response.get('status') != 'ok':
try:
code = response['error']['code']
@@ -388,7 +410,8 @@
raise WebServiceError("error {0}: {1}".format(code, message))
return response
-def get_submission_status(apikey, submission_id):
+
+def get_submission_status(apikey, submission_id, timeout=None):
"""Get the status of a submission to the acoustid server.
``submission_id`` is the id of a fingerprint submission, as returned
in the response object of a call to the ``submit`` endpoint.
@@ -398,4 +421,4 @@
'client': apikey,
'id': submission_id,
}
- return _api_request(_get_submission_status_url(), params)
+ return _api_request(_get_submission_status_url(), params, timeout)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyacoustid-1.1.7/chromaprint.py
new/pyacoustid-1.2.2/chromaprint.py
--- old/pyacoustid-1.1.7/chromaprint.py 2018-08-22 15:41:03.000000000 +0200
+++ new/pyacoustid-1.2.2/chromaprint.py 2020-05-02 16:58:26.000000000 +0200
@@ -6,14 +6,17 @@
import sys
import ctypes
-
+import ctypes.util
if sys.version_info[0] >= 3:
BUFFER_TYPES = (memoryview, bytearray,)
+ BYTES_TYPE = bytes
elif sys.version_info[1] >= 7:
BUFFER_TYPES = (buffer, memoryview, bytearray,) # noqa: F821
+ BYTES_TYPE = str
else:
BUFFER_TYPES = (buffer, bytearray,) # noqa: F821
+ BYTES_TYPE = str
# Find the base library and declare prototypes.
@@ -29,12 +32,27 @@
return ('libchromaprint.so.1', 'libchromaprint.so.0')
-for name in _guess_lib_name():
+def _load_library(name):
+ """Try to load a dynamic library with ctypes, or return None if the
+ library is not available.
+ """
+ if sys.platform == 'win32':
+ # On Windows since Python 3.8, we need an extra call to
+ # `find_library` to search standard library paths.
+ name = ctypes.util.find_library(name)
+ if not name:
+ return None
+
try:
- _libchromaprint = ctypes.cdll.LoadLibrary(name)
- break
+ return ctypes.cdll.LoadLibrary(name)
except OSError:
- pass
+ return None
+
+
+for name in _guess_lib_name():
+ _libchromaprint = _load_library(name)
+ if _libchromaprint:
+ break
else:
raise ImportError("couldn't find libchromaprint")
@@ -75,6 +93,11 @@
ctypes.POINTER(ctypes.c_int), ctypes.c_int)
_libchromaprint.chromaprint_encode_fingerprint.restype = ctypes.c_int
+_libchromaprint.chromaprint_hash_fingerprint.argtypes = \
+ (ctypes.POINTER(ctypes.c_int32), ctypes.c_int,
+ ctypes.POINTER(ctypes.c_uint32))
+_libchromaprint.chromaprint_hash_fingerprint.restype = ctypes.c_int
+
_libchromaprint.chromaprint_dealloc.argtypes = (ctypes.c_void_p,)
_libchromaprint.chromaprint_dealloc.restype = None
@@ -119,7 +142,7 @@
either a bytestring or a buffer object.
"""
if isinstance(data, BUFFER_TYPES):
- data = str(data)
+ data = BYTES_TYPE(data)
elif not isinstance(data, bytes):
raise TypeError('data must be bytes, buffer, or memoryview')
_check(_libchromaprint.chromaprint_feed(
@@ -166,3 +189,23 @@
result = result_ptr[:result_size.value]
_libchromaprint.chromaprint_dealloc(result_ptr)
return result
+
+
+def hash_fingerprint(fingerprint):
+ """Generate a single 32-bit hash for a raw decoded fingerprint (list of
integers).
+
+ If two fingerprints are similar, their hashes generated by this function
+ will also be similar. If they are significantly different, their hashes
+ will most likely be significantly different as well, but you can't rely
+ on that.
+ You compare two hashes by counting the bits in which they differ.
+ """
+
+ fp_array = (ctypes.c_int * len(fingerprint))()
+ for i in range(len(fingerprint)):
+ fp_array[i] = fingerprint[i]
+ result_hash = ctypes.c_uint32()
+ _check(_libchromaprint.chromaprint_hash_fingerprint(
+ fp_array, len(fingerprint), ctypes.byref(result_hash)
+ ))
+ return result_hash.value
Binary files old/pyacoustid-1.1.7/pyacoustid.egg-info/.pbr.json.icloud and
new/pyacoustid-1.2.2/pyacoustid.egg-info/.pbr.json.icloud differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyacoustid-1.1.7/pyacoustid.egg-info/PKG-INFO
new/pyacoustid-1.2.2/pyacoustid.egg-info/PKG-INFO
--- old/pyacoustid-1.1.7/pyacoustid.egg-info/PKG-INFO 2019-05-25
14:47:25.000000000 +0200
+++ new/pyacoustid-1.2.2/pyacoustid.egg-info/PKG-INFO 2021-09-01
15:35:41.000000000 +0200
@@ -1,208 +1,228 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: pyacoustid
-Version: 1.1.7
+Version: 1.2.2
Summary: bindings for Chromaprint acoustic fingerprinting and the Acoustid API
Home-page: https://github.com/sampsyo/pyacoustid
Author: Adrian Sampson
Author-email: [email protected]
License: MIT
-Description: Chromaprint and Acoustid for Python
- ===================================
-
- `Chromaprint`_ and its associated `Acoustid`_ Web service make up a
- high-quality, open-source acoustic fingerprinting system. This package
provides
- Python bindings for both the fingerprinting algorithm library, which
is written
- in C but portable, and the Web service, which provides fingerprint
lookups.
-
- .. _Chromaprint: http://acoustid.org/
- .. _Acoustid: http://acoustid.org/chromaprint
-
-
- Installation
- ------------
-
- This library works with Python 2 (2.7+, possibly also 2.6) and Python 3
- (3.3+).
-
- First, install the `Chromaprint`_ fingerprinting library by `Lukas
Lalinsky`__.
- (The library itself depends on an FFT library, but it's smart enough
to use an
- algorithm from software you probably already have installed; see the
Chromaprint
- page for details.) This module can use either the Chromaprint dynamic
library or
- the ``fpcalc`` command-line tool, which itself depends on
`libavcodec`_. If you
- use ``fpcalc``, either ensure that it is on your ``$PATH`` or set the
``FPCALC``
- environment variable to its location.
-
- __ lukas_
- .. _lukas: http://oxygene.sk/lukas/
- .. _libavcodec: http://ffmpeg.org/
-
- Then you can install this library from `PyPI`_ using `pip`_::
-
- $ pip install pyacoustid
-
- This library uses `audioread`_ to do audio decoding when not using
``fpcalc``
- and `requests`_ to talk to the HTTP API (pip should automatically
install
- these dependencies).
-
- .. _pip: http://www.pip-installer.org/
- .. _PyPI: http://pypi.python.org/
- .. _audioread: https://github.com/sampsyo/audioread
- .. _requests: http://python-requests.org
-
-
- Running
- -------
-
- You can run the included demonstration script, ``aidmatch.py``, to
test your
- installation::
-
- $ python aidmatch.py mysterious_music.mp3
-
- This will show the top metadata match from Acoustid's database. The
script uses
- `audioread`_ to decode music, so it should transparently use a media
library
- available on your system (GStreamer, FFmpeg, MAD, or Core Audio).
-
-
- Using in Your Code
- ------------------
-
- The simplest way to use pyacoustid to identify audio files is to call
the
- ``match`` function::
-
- >>> import acoustid
- >>> for score, recording_id, title, artist in
acoustid.match(apikey, path):
- >>> ...
-
- This convenience function uses `audioread`_ to decode audio and parses
the
- response for you, pulling out the most important track metadata. It
returns in
- iterable over tuples of relevant information. Everything happens in
one fell
- swoop. There are also a number of "smaller" functions you can use to
perform
- parts of the process:
-
- - ``fingerprint(samplerate, channels, pcmiter)``: Generate a
fingerprint for raw
- audio data. Specify the audio parameters and give an iterable
containing
- blocks of PCM data.
- - ``fingerprint_file(path)``: Using either the Chromaprint dynamic
library or
- the ``fpcalc`` command-line tool, fingerprint an audio file. Returns
a pair
- consisting of the file's duration and its fingerprint.
- - ``lookup(apikey, fingerprint, duration)``: Make a request to the
`Acoustid`_
- API to look up the fingerprint returned by the previous function. An
API key
- is required, as is the length, in seconds, of the source audio.
Returns a
- parsed JSON response.
- - ``parse_lookup_result(data)``: Given a parsed JSON response, return
an
- iterator over tuples containing the match score (a float between 0
and 1), the
- MusicBrainz recording ID, title, and artist name for each match.
-
- The module internally performs thread-safe API rate limiting to 3
queries per
- second whenever the Web API is called, in accordance with the `Web
service
- documentation`_.
-
- If you're running your own Acoustid database server, you can set the
base URL
- for all API calls with the ``set_base_url`` function.
-
- Calls to the library can raise ``AcoustidError`` exceptions of two
subtypes:
- ``FingerprintGenerationError`` and ``WebServiceError``. Catch these
exceptions
- if you want to proceed when audio can't be decoded or no match is
found on the
- server. ``NoBackendError``, a subclass of
``FingerprintGenerationError``, is
- used when the Chromaprint library or fpcalc command-line tool cannot
be found.
-
- .. _Web service documentation: http://acoustid.org/webservice
-
-
- Version History
- ---------------
-
- 1.1.7
- Include a LICENSE file.
-
- 1.1.6
- In submission, avoid an error on non-integer durations.
- A new function, `get_submission_status`, abstracts the API endpoint
for
- monitoring submissions using the (new) result from the `submit`
function.
-
- 1.1.5
- Fix compatibility with Python 3 in the `submit` function.
- Errors in `submit` are now also handled correctly (i.e., they raise
an
- informative `WebServiceError` instead of a `TypeError`).
-
- 1.1.4
- Fix an error on versions of the `fpcalc` tool that report the
duration as a
- fractional number.
-
- 1.1.3
- Accept `bytearray` objects in addition to other bytes-like types.
-
- 1.1.2
- Fix a possible crash on Unicode text in Python 2 in a non-Unicode
locale.
- Look for version "1" of the Chromaprint shared library file.
-
- 1.1.1
- Fix a possible setup error on Python 3 (thanks to Simon Chopin).
-
- 1.1.0
- Include ``fpcalc.py`` script in source distributions.
- Add Python 3 support (thanks to Igor Tsarev).
-
- 1.0.0
- Include ``fpcalc.py``, a script mimicking the ``fpcalc`` program
from the
- Chromaprint package.
- Handle a ``UnicodeDecodeError`` raised when using the ``fpcalc``
backend on
- Windows with Unicode filenames.
- Standard error output from ``fpcalc`` is suppressed.
-
- 0.7
- Properly encode Unicode parameters (resolves a ``UnicodeEncodeError``
- in fingerprint submission).
- Parse all recordings for each Acoustid lookup result.
-
- 0.6
- Add a new function, ``fingerprint_file``, that automatically selects
a
- backend for fingerprinting a single file.
-
- 0.5
- Fix response parsing when recording has no artists or title.
- Fix compatibility with Python < 2.7.
- Add specific ``NoBackendError`` exception.
-
- 0.4
- Fingerprinting can now fall back to using the ``fpcalc``
command-line tool
- instead of the Chromaprint dynamic library so the library can be
used with
- the binary distributions (thanks to Lukas Lalinsky).
- Fingerprint submission (thanks to Alastair Porter).
- Data chunks can now be buffers as well as bytestrings (fixes
compatibility
- with pymad).
-
- 0.3
- Configurable API base URL.
- Result parser now generates all results instead of returning just
one.
- Find the chromaprint library on Cygwin.
- New module names: ``chromaprint`` and ``acoustid`` (no package).
-
- 0.2
- Compress HTTP requests and responses.
- Limit audio decoding to 120 seconds.
- Return score from convenience function.
-
- 0.1
- Initial release.
-
-
- Credits
- -------
-
- This library is by Adrian Sampson. Chromaprint and Acoustid are by
`Lukas
- Lalinsky`__. This package includes the original `ctypes`_-based
bindings
- written by Lukas. The entire library is made available under the `MIT
license`_.
- pyacoustid was written to be used with `beets`_, which you should
probably check
- out.
-
- __ lukas_
- .. _ctypes: http://docs.python.org/library/ctypes.html
- .. _beets: http://beets.radbox.org/
- .. _MIT license: http://www.opensource.org/licenses/mit-license.php
-
Platform: ALL
Classifier: Topic :: Multimedia :: Sound/Audio :: Conversion
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 3
+License-File: LICENSE
+
+Chromaprint and Acoustid for Python
+===================================
+
+`Chromaprint`_ and its associated `Acoustid`_ Web service make up a
+high-quality, open-source acoustic fingerprinting system. This package provides
+Python bindings for both the fingerprinting algorithm library, which is written
+in C but portable, and the Web service, which provides fingerprint lookups.
+
+.. _Chromaprint: http://acoustid.org/chromaprint
+.. _Acoustid: http://acoustid.org/
+
+
+Installation
+------------
+
+This library works with Python 2 (2.7+, possibly also 2.6) and Python 3
+(3.3+).
+
+First, install the `Chromaprint`_ fingerprinting library by `Lukas Lalinsky`__.
+(The library itself depends on an FFT library, but it's smart enough to use an
+algorithm from software you probably already have installed; see the
Chromaprint
+page for details.) This module can use either the Chromaprint dynamic library
or
+the ``fpcalc`` command-line tool, which itself depends on `libavcodec`_. If you
+use ``fpcalc``, either ensure that it is on your ``$PATH`` or set the
``FPCALC``
+environment variable to its location.
+
+__ lukas_
+.. _lukas: http://oxygene.sk/lukas/
+.. _libavcodec: http://ffmpeg.org/
+
+Then you can install this library from `PyPI`_ using `pip`_::
+
+ $ pip install pyacoustid
+
+This library uses `audioread`_ to do audio decoding when not using ``fpcalc``
+and `requests`_ to talk to the HTTP API (pip should automatically install
+these dependencies).
+
+.. _pip: http://www.pip-installer.org/
+.. _PyPI: http://pypi.python.org/
+.. _audioread: https://github.com/sampsyo/audioread
+.. _requests: http://python-requests.org
+
+
+Running
+-------
+
+You can run the included demonstration script, ``aidmatch.py``, to test your
+installation::
+
+ $ python aidmatch.py mysterious_music.mp3
+
+This will show the top metadata match from Acoustid's database. The script uses
+`audioread`_ to decode music, so it should transparently use a media library
+available on your system (GStreamer, FFmpeg, MAD, or Core Audio).
+
+
+Using in Your Code
+------------------
+
+The simplest way to use pyacoustid to identify audio files is to call the
+``match`` function::
+
+ >>> import acoustid
+ >>> for score, recording_id, title, artist in acoustid.match(apikey, path):
+ >>> ...
+
+This convenience function uses `audioread`_ to decode audio and parses the
+response for you, pulling out the most important track metadata. It returns in
+iterable over tuples of relevant information. Everything happens in one fell
+swoop. There are also a number of "smaller" functions you can use to perform
+parts of the process:
+
+- ``fingerprint(samplerate, channels, pcmiter)``: Generate a fingerprint for
raw
+ audio data. Specify the audio parameters and give an iterable containing
+ blocks of PCM data.
+- ``fingerprint_file(path)``: Using either the Chromaprint dynamic library or
+ the ``fpcalc`` command-line tool, fingerprint an audio file. (You can use
+ ``force_fpcalc`` to use only the latter.) Returns a pair consisting of the
+ file's duration and its fingerprint.
+- ``lookup(apikey, fingerprint, duration)``: Make a request to the `Acoustid`_
+ API to look up the fingerprint returned by the previous function. An API key
+ is required, as is the length, in seconds, of the source audio. Returns a
+ parsed JSON response.
+- ``parse_lookup_result(data)``: Given a parsed JSON response, return an
+ iterator over tuples containing the match score (a float between 0 and 1),
the
+ MusicBrainz recording ID, title, and artist name for each match.
+
+The module internally performs thread-safe API rate limiting to 3 queries per
+second whenever the Web API is called, in accordance with the `Web service
+documentation`_.
+
+If you're running your own Acoustid database server, you can set the base URL
+for all API calls with the ``set_base_url`` function.
+
+Calls to the library can raise ``AcoustidError`` exceptions of two subtypes:
+``FingerprintGenerationError`` and ``WebServiceError``. Catch these exceptions
+if you want to proceed when audio can't be decoded or no match is found on the
+server. ``NoBackendError``, a subclass of ``FingerprintGenerationError``, is
+used when the Chromaprint library or fpcalc command-line tool cannot be found.
+
+.. _Web service documentation: http://acoustid.org/webservice
+
+
+Version History
+---------------
+
+1.2.2
+ Fix a regression in the previous version that caused a `KeyError` crash when
+ calling `submit`.
+
+1.2.1
+ The `meta` parameter to some API functions can now be a list (instead of
+ just a single string).
+
+1.2.0
+ Add a `force_fpcalc` option to `fingerprint_file` and `match`.
+ Avoid leaving a dangling socket after communicating with the server.
+ Fix a crash when passing a `memoryview` object to the fingerprinter.
+ API requests can now optionally time out.
+ More reliably find the library on Windows on Python 3.8.
+ Add a `hash_fingerprint` function to the low-level library.
+
+1.1.7
+ Include a LICENSE file.
+
+1.1.6
+ In submission, avoid an error on non-integer durations.
+ A new function, `get_submission_status`, abstracts the API endpoint for
+ monitoring submissions using the (new) result from the `submit` function.
+
+1.1.5
+ Fix compatibility with Python 3 in the `submit` function.
+ Errors in `submit` are now also handled correctly (i.e., they raise an
+ informative `WebServiceError` instead of a `TypeError`).
+
+1.1.4
+ Fix an error on versions of the `fpcalc` tool that report the duration as a
+ fractional number.
+
+1.1.3
+ Accept `bytearray` objects in addition to other bytes-like types.
+
+1.1.2
+ Fix a possible crash on Unicode text in Python 2 in a non-Unicode locale.
+ Look for version "1" of the Chromaprint shared library file.
+
+1.1.1
+ Fix a possible setup error on Python 3 (thanks to Simon Chopin).
+
+1.1.0
+ Include ``fpcalc.py`` script in source distributions.
+ Add Python 3 support (thanks to Igor Tsarev).
+
+1.0.0
+ Include ``fpcalc.py``, a script mimicking the ``fpcalc`` program from the
+ Chromaprint package.
+ Handle a ``UnicodeDecodeError`` raised when using the ``fpcalc`` backend on
+ Windows with Unicode filenames.
+ Standard error output from ``fpcalc`` is suppressed.
+
+0.7
+ Properly encode Unicode parameters (resolves a ``UnicodeEncodeError``
+ in fingerprint submission).
+ Parse all recordings for each Acoustid lookup result.
+
+0.6
+ Add a new function, ``fingerprint_file``, that automatically selects a
+ backend for fingerprinting a single file.
+
+0.5
+ Fix response parsing when recording has no artists or title.
+ Fix compatibility with Python < 2.7.
+ Add specific ``NoBackendError`` exception.
+
+0.4
+ Fingerprinting can now fall back to using the ``fpcalc`` command-line tool
+ instead of the Chromaprint dynamic library so the library can be used with
+ the binary distributions (thanks to Lukas Lalinsky).
+ Fingerprint submission (thanks to Alastair Porter).
+ Data chunks can now be buffers as well as bytestrings (fixes compatibility
+ with pymad).
+
+0.3
+ Configurable API base URL.
+ Result parser now generates all results instead of returning just one.
+ Find the chromaprint library on Cygwin.
+ New module names: ``chromaprint`` and ``acoustid`` (no package).
+
+0.2
+ Compress HTTP requests and responses.
+ Limit audio decoding to 120 seconds.
+ Return score from convenience function.
+
+0.1
+ Initial release.
+
+
+Credits
+-------
+
+This library is by Adrian Sampson. Chromaprint and Acoustid are by `Lukas
+Lalinsky`__. This package includes the original `ctypes`_-based bindings
+written by Lukas. The entire library is made available under the `MIT
license`_.
+pyacoustid was written to be used with `beets`_, which you should probably
check
+out.
+
+__ lukas_
+.. _ctypes: http://docs.python.org/library/ctypes.html
+.. _beets: http://beets.radbox.org/
+.. _MIT license: http://www.opensource.org/licenses/mit-license.php
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyacoustid-1.1.7/pyacoustid.egg-info/SOURCES.txt
new/pyacoustid-1.2.2/pyacoustid.egg-info/SOURCES.txt
--- old/pyacoustid-1.1.7/pyacoustid.egg-info/SOURCES.txt 2019-05-25
14:47:25.000000000 +0200
+++ new/pyacoustid-1.2.2/pyacoustid.egg-info/SOURCES.txt 2021-09-01
15:35:41.000000000 +0200
@@ -6,9 +6,9 @@
chromaprint.py
fpcalc.py
setup.py
-pyacoustid.egg-info/.pbr.json.icloud
pyacoustid.egg-info/PKG-INFO
pyacoustid.egg-info/SOURCES.txt
pyacoustid.egg-info/dependency_links.txt
+pyacoustid.egg-info/pbr.json
pyacoustid.egg-info/requires.txt
pyacoustid.egg-info/top_level.txt
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyacoustid-1.1.7/pyacoustid.egg-info/pbr.json
new/pyacoustid-1.2.2/pyacoustid.egg-info/pbr.json
--- old/pyacoustid-1.1.7/pyacoustid.egg-info/pbr.json 1970-01-01
01:00:00.000000000 +0100
+++ new/pyacoustid-1.2.2/pyacoustid.egg-info/pbr.json 2017-04-08
18:23:35.000000000 +0200
@@ -0,0 +1 @@
+{"is_release": false, "git_version": "0d56b1d"}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyacoustid-1.1.7/setup.py
new/pyacoustid-1.2.2/setup.py
--- old/pyacoustid-1.1.7/setup.py 2019-05-25 14:46:06.000000000 +0200
+++ new/pyacoustid-1.2.2/setup.py 2021-09-01 15:35:26.000000000 +0200
@@ -31,7 +31,7 @@
setup(name='pyacoustid',
- version='1.1.7',
+ version='1.2.2',
description=('bindings for Chromaprint acoustic fingerprinting and the '
'Acoustid API'),
author='Adrian Sampson',