All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Added: support for Python 3.13
- Added: support for
tar
,tar.bz2
,tar.xz
archives inaudeer.create_archive()
,audeer.extract_archive()
, andaudeer.extract_archives()
- Fixed: avoid deprecation warnings
in Python>=3.12
by using the
"tar"
filter when extracting tar archives - Removed: support for Python 3.8
- Added:
audeer.script_dir()
which returns the directory of the file where it was called, or the current working directory when called in an interactive session
- Fixed: make estimation of remaining time
in
audeer.progress_bar()
less erratic
- Added:
audeer.unique()
, which returns unique values in the order they appear in a sequence - Added:
maximum_refresh_time
argument toaudeer.progress_bar()
andaudeer.run_tasks()
, which can be used to force an update interval of the progress bar - Fixed: documentation of return value
of
audeer.run_tasks()
- Added:
follow_symlink
keyword argument toaudeer.path()
with default valueFalse
- Added:
follow_symlink
keyword argument toaudeer.rmdir()
with default valueTrue
- Changed:
audeer.path()
does no longer usesos.path.realpath()
, butos.path.abspath()
. This means it does no longer convert symlinks to the real path, but returns the path to the symlink. This provides a speed up ofaudeer.path()
up to 6x as it no longer requires a disk operation. The old behavior ofaudeer.path()
can be achieved by callingaudeer.path(..., follow_symlink=True)
. The output of the following functions is also affected by this change if a symlink is part of their input path:audeer.common_directory()
,audeer.download_url()
,audeer.list_dir_names()
,audeer.list_file_names()
,audeer.mkdir()
,audeer.touch()
- Changed: the
files
argument ofaudeer.create_archive()
can no longer include symbolic links that are located outside ofroot
- Fixed:
audeer.basename_wo_ext()
,audeer.file_extension()
, andaudeer.replace_file_extension()
are no longer affected by existing files and symlinks, but rely only on the provided input string
- Added:
audeer.move()
which can move files and folders and should be used instead ofaudeer.move_file()
- Added:
*paths
argument toaudeer.mkdir()
,audeer.rmdir()
, andaudeer.touch()
. Instead of writingaudeer.mkdir(os.path.join("a", "b"))
, you can now writeaudeer.mkdir("a", "b")
- Added: support for Python 3.12
- Fixed: avoid deprecation warning
by replacing
pkg_resources
internally withimportlib.metadata
- Removed: support for Python 3.7
- Fixed: add missing changelog entry
for version 1.20.0
stating that the return values of
audeer.extract_archive()
andaudeer.extract_archives()
have changed under Windows due to a bug fix
- Added:
audeer.md5()
to calculate MD5 checksum of a file or folder - Added:
short
argument toaudeer.is_uid()
. IfTrue
it checks for a short UID likead855840
- Added: examples to the API documentation of
audeer.create_archive()
,audeer.extract_archive()
,audeer.extract_archives()
- Changed:
audeer.list_file_names()
raises aNotADirectoryError
if the providedpath
argument is a non-existing folder or a folder that is part of a search pattern that does not exists - Changed:
audeer.create_archive()
supports nowNone
asfiles
argument, which will automatically include all files underroot
- Changed:
audeer.create_archive()
now raises aFileNotFoundError
ifroot
or a file infiles
cannot be found,NotADirectoryError
ifroot
is not a directory,RuntimeError
if a file infiles
is not located belowroot
- Changed:
audeer.extract_archive()
andaudeer.extract_archives()
now raise aFileNotFoundError
if an archive cannot be found,IsADirectoryError
if an archive is a directory,NotADirectoryError
ifdestination
is not a directory - Fixed:
audeer.replace_file_extension()
now adds the new file extension to the filename if no original file extension was present instead of replacing the filename - Fixed:
audeer.replace_file_extension()
now returns the original filename when an empty new file extension is provided instead of adding"."
at the end of the filename - Fixed:
audeer.extract_archive()
andaudeer.extract_archives()
now return normalized relative paths also under Windows - Fixed: add raises section
to API documentation of
audeer.list_file_names()
- Fixed: add raises section
to API documentation of
audeer.StrictVersion
- Added:
hidden
argument toaudeer.list_dir_names()
to include hidden folders in results - Added:
remove_from_kwargs
argument toaudeer.deprecated_keyword_argument()
to indicate if the keyword marked as deprecated should be removed fromkwargs
. Default isTrue
- Added:
ext
argument toaudeer.replace_file_extension()
- Added: support for Python 3.10
- Added: support for Python 3.11
- Changed: split API documentation into sub-pages for each function/class
- Fixed: add raises section to docstring of
audeer.list_dir_names()
- Added:
audeer.path()
as replacement foraudeer.safe_path()
- Added:
*paths
argument toaudeer.safe_path()
to join paths - Added:
recursive
argument toaudeer.list_dir_names()
- Added:
recursive
argument toaudeer.list_file_names()
- Added:
audeer.StrictVersion()
- Added:
audeer.LooseVersion()
- Added:
audeer.install_package()
- Added:
audeer.move_file()
- Added:
audeer.touch()
- Deprecated:
audeer.safe_path()
- Fixed: add test for MacOS
- Added: Python 3.9 support
- Removed: Python 3.6 support
- Added:
verbose
argument toaudeer.create_archive()
- Added:
audeer.rmdir()
- Added:
audeer.download_url()
- Changed: default value of
num_workers
argument foraudeer.tun_tasks()
changed fromNone
to1
- Added:
audeer.replace_file_extension()
- Added: usage example to
audeer.progress_bar()
- Added:
basenames
argument toaudeer.list_dir_names()
- Added:
basenames
argument toaudeer.list_file_names()
- Added:
audeer.create_archive()
- Added:
audeer.deprecated_default_value()
- Added:
audeer.is_semantic_version()
- Added:
audeer.sort_versions()
- Added:
audeer.git_repo_version()
- Added:
audeer.git_repo_tags()
- Added:
audeer.list_dir_names()
- Added:
audeer.is_uid()
- Added:
audeer.deprecated_keyword_argument()
decorator - Changed:
audeer.deprecated()
raises now aUserWarning
instead ofDeprecationWarning
- Changed: return member filenames of archives in
audeer.extract_archive()
andaudeer.extract_archives()
- Fixed: multi-line statements in GitHub releases
- Fixed: long description in
setup.cfg
, which is included on pypi.org - Fixed: multi-line statements in GitHub releases
- Added: run tests on Windows
- Removed: deprecated
audb.run_worker_threads()
from docs and code coverage - Fixed: "Edit on Github" link in docs
- Fixed: release instructions for GitHub
- Changed: host documentation on GitHub pages
- Fixed: license specification in Python package
- Added: first public release on GitHub
- Fixed: return actual path
for symbolic links with
audeer.safe_path()
by usingos.path.realpath()
instead ofos.path.abspath()
- Fixed: clean up test scripts
and remove obsolete
tests/test_audeer.py
- Added:
audeer.common_directory()
- Added:
audeer.run_tasks()
- Added:
audeer.uid()
- Changed: use
url
andproject_urls
insetup.cfg
- Changed: switch home page of package to documentation page
- Changed:
audb.extract_archive()
- raises
RuntimeError
for broken archives
- Changed:
- Added:
audb.extract_archive()
- Added:
audb.extract_archives()
- Added: Python 3.8 support
- Removed: Python 3.5 support
- Fixed: wrong homepage link in
setup.cfg
- Added:
mode
argument toaudeer.mkdir()
- Added:
audeer.to_list()
- Added: code coverage
- Removed: deprecated
audeer.generate_dir()
- Removed: deprecated
audeer.basename()
- Fixed: CI again token for automatic package publishing
- Fixed: CI token for automatic package publishing
- Fixed: make
audeer.mkdir()
multiprocessing safe
- Fixed: republish due to broken package
- Added: more docstring examples
- Changed: add extra development section in docs
- Added: automatic Python package publishing
- Fixed: another link to
audeer.configfile
- Fixed: link to
audeer.configfile
- Added:
audeer.format_display_message()
- Added:
audeer.progress_bar()
- Added:
audeer.deprecated()
- Added:
audeer.run_worker_threads()
- Added:
audeer.safe_path
- Changed: introduce
audeer.core
structure - Changed: rename
audeer.generate_dir()
toaudeer.mkdir()
- Changed: rename
audeer.basename
toaudeer.basename_wo_ext
- Removed: all config related code is moved to
audeer.configfile
- Removed: Python 2.7 support
- Changed: update installation commands in doc
- Changed: update documentation building commands in doc
- Fixed: Gitlab CI tests for Python 3.7
- Added: tests for documentation
- Added: documentation deployed as Gitlab pages
- Fixed: inclusion of changelog in doc
- Added: Gitlab CI tests for Python 2.7, 3.6, 3.7
- Added: flake8 PEP8 tests
- Changed: switch to new internal PyPI server
- Changed: switch to use
yaml.safe_load
- Fixed:
generate_dir
for Python 2.7 - Removed:
audeer.wav
in favor of audiofile
- Deprecated:
audeer.wav
in favor of audiofile
- Added: missing requirement toml to
doc/requirements.txt
- Fixed: URL to sphinx-audeering-theme in
doc/requirements.txt
- Added:
always_2d
option towav.read
- Removed:
wav.to_mono
- Added: support for subdirectories in
generate_dir
- Changed: speedup
wav
operations - Deprecated:
wav.to_mono
- Fixed: samples and duration for uncommon audio formats
- Added: support for a lot more audio formats in
wav
- Added:
util.flatten_list
- Changed: improve documentation
- Added: MP3 support (not for writing)
- Changed: make
[channels, samples]
default audio shape - Changed: switch to
sox
for audio file info
- Changed: make Python 2.7 compatible
- Changed: restructure config module
- Added:
config
module
- Fixed: automatic version discovery
- Added:
wav
andutil
module - Added: Initial release