audiometa-python 1.1.2__tar.gz → 1.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {audiometa_python-1.1.2/audiometa_python.egg-info → audiometa_python-1.2.0}/PKG-INFO +4 -2
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/README.md +3 -1
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/cli.py +24 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/test_help.py +17 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/utils/os_dependencies_checker/macos.py +12 -6
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/utils/os_dependencies_checker/ubuntu.py +27 -1
- {audiometa_python-1.1.2 → audiometa_python-1.2.0/audiometa_python.egg-info}/PKG-INFO +4 -2
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/pyproject.toml +1 -1
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/LICENSE +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/__main__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/_audio_file.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/exceptions.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/_MetadataManager.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/_rating_supporting/_RatingSupportingMetadataManager.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/_rating_supporting/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/_rating_supporting/id3v2/_Id3v2Manager.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/_rating_supporting/id3v2/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/_rating_supporting/id3v2/_id3v1_preserver.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/_rating_supporting/id3v2/_id3v2_constants.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/_rating_supporting/id3v2/_id3v2_flac_handler.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/_rating_supporting/id3v2/_id3v2_reader.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/_rating_supporting/id3v2/_id3v2_writer.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/_rating_supporting/riff/_RiffManager.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/_rating_supporting/riff/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/_rating_supporting/riff/_riff_bext_chunk.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/_rating_supporting/riff/_riff_constants.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/_rating_supporting/riff/_riff_file_structure.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/_rating_supporting/riff/_riff_info_chunk.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/_rating_supporting/vorbis/_VorbisManager.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/_rating_supporting/vorbis/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/_rating_supporting/vorbis/_vorbis_constants.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/id3v1/_Id3v1Manager.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/id3v1/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/id3v1/_constants.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/id3v1/id3v1_raw_metadata.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/id3v1/id3v1_raw_metadata_key.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/assets/create_test_files.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/common/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/common/audio_file_creator.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/common/external_tool_runner.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/id3v1/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/id3v1/id3v1_header_verifier.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/id3v1/id3v1_metadata_deleter.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/id3v1/id3v1_metadata_getter.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/id3v1/id3v1_metadata_setter.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/id3v2/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/id3v2/id3v2_frame_manual_creator.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/id3v2/id3v2_header_verifier.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/id3v2/id3v2_metadata_deleter.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/id3v2/id3v2_metadata_getter.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/id3v2/id3v2_metadata_setter.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/riff/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/riff/riff_header_verifier.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/riff/riff_manual_metadata_creator.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/riff/riff_metadata_deleter.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/riff/riff_metadata_getter.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/riff/riff_metadata_setter.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/scripts/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/technical_info_inspector.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/temp_file_with_metadata.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/vorbis/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/vorbis/vorbis_header_verifier.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/vorbis/vorbis_metadata_deleter.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/vorbis/vorbis_metadata_getter.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/vorbis/vorbis_metadata_setter.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/conftest.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/error_handling/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/error_handling/test_command_structure_errors.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/error_handling/test_file_access_errors.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/error_handling/test_format_output_errors.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/error_handling/test_input_validation_errors.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/error_handling/test_missing_fields_validation.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/error_handling/test_multiple_files_errors.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/error_handling/test_rating_validation.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/error_handling/test_year_validation.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/read/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/read/test_basic.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/read/test_comprehensive.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/read/test_formats.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/read/test_metadata_content.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/read/test_multiple_files.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/read/test_options.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/read/test_unified.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/test_delete.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/test_formatting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/write/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/write/test_basic.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/write/test_comprehensive.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/write/test_force_format.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/write/test_integer_fields.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/write/test_list_fields.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/write/test_rating.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/write/test_string_fields.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/write/test_validation.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/scenarios/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/scenarios/test_user_scenarios.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/workflows/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/workflows/test_core_workflows.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/workflows/test_deletion_workflows.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/workflows/test_error_handling_workflows.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/workflows/test_format_specific_workflows.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/workflows/test_rating_workflows.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/audio_format/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/audio_format/flac/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/audio_format/flac/test_flac_delete_all.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/audio_format/flac/test_flac_reading_all.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/audio_format/flac/test_flac_reading_field.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/audio_format/flac/test_flac_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/audio_format/mp3/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/audio_format/mp3/test_mp3_delete_all.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/audio_format/mp3/test_mp3_reading_all.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/audio_format/mp3/test_mp3_reading_field.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/audio_format/mp3/test_mp3_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/audio_format/wav/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/audio_format/wav/test_wav_delete_all.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/audio_format/wav/test_wav_reading_all.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/audio_format/wav/test_wav_reading_field.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/audio_format/wav/test_wav_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/conftest.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/delete_all_metadata/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/delete_all_metadata/test_audio_format_all.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/delete_all_metadata/test_audio_format_header_deletion.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/delete_all_metadata/test_basic_functionality.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/delete_all_metadata/test_error_handling.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/encoding/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/encoding/test_encoding.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/encoding/test_special_characters_edge_cases.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/get_full_metadata/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/get_full_metadata/options/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/get_full_metadata/options/test_include_headers.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/get_full_metadata/options/test_include_technical.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/get_full_metadata/test_audio_formats.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/get_full_metadata/test_binary_data_filtering.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/get_full_metadata/test_consistency.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/get_full_metadata/test_edge_cases.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/get_full_metadata/test_error_handling.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/get_full_metadata/test_get_full_metadata.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/get_full_metadata/test_performance.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/get_full_metadata/test_raw_metadata_includes_unsupported_tags.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/get_full_metadata/test_riff_bext.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/get_full_metadata/test_structure.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/album/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/album/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/album/test_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/album/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/album_artists/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/album_artists/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/album_artists/test_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/album_artists/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/artists/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/artists/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/artists/test_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/artists/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/bpm/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/bpm/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/bpm/test_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/bpm/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/comment/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/comment/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/comment/test_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/comment/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/composer/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/composer/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/composer/test_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/composer/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/copyright/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/copyright/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/copyright/test_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/copyright/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/description/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/description/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/description/test_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/description/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/disc_number/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/disc_number/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/disc_number/test_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/disc_number/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/field_not_supported/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/field_not_supported/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/field_not_supported/test_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/field_not_supported/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/genre/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/genre/reading/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/genre/reading/metadata_format/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/genre/reading/metadata_format/test_id3v1_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/genre/reading/metadata_format/test_id3v2_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/genre/reading/metadata_format/test_riff_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/genre/reading/metadata_format/test_vorbis_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/genre/reading/test_smart_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/genre/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/genre/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/isrc/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/isrc/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/isrc/test_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/isrc/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/language/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/language/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/language/test_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/language/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/lyrics/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/lyrics/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/lyrics/test_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/lyrics/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/musicbrainz_artistid/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/musicbrainz_artistid/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/musicbrainz_artistid/test_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/musicbrainz_artistid/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/musicbrainz_trackid/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/musicbrainz_trackid/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/musicbrainz_trackid/test_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/musicbrainz_trackid/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/originator/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/originator/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/originator/test_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/originator/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/publisher/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/publisher/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/publisher/test_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/publisher/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/rating/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/rating/reading/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/rating/reading/test_base_100_proportional.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/rating/reading/test_base_255_non_proportional.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/rating/reading/test_base_255_proportional.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/rating/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/rating/test_error_handling.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/rating/writing/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/rating/writing/metadata_format/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/rating/writing/metadata_format/test_id3v2.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/rating/writing/metadata_format/test_riff.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/rating/writing/metadata_format/test_vorbis.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/rating/writing/test_comprehensive.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/release_date/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/release_date/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/release_date/test_error_handling.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/release_date/test_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/release_date/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/test_metadata_field_validation.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/title/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/title/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/title/test_error_handling.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/title/test_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/title/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/track_number/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/track_number/reading/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/track_number/reading/test_edge_cases.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/track_number/reading/test_metadata_format.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/track_number/test_deleting.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/metadata_field/track_number/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/multiple_values/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/multiple_values/reading/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/multiple_values/reading/metadata_format/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/multiple_values/reading/metadata_format/test_id3v1.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/multiple_values/reading/metadata_format/test_id3v2_3.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/multiple_values/reading/metadata_format/test_id3v2_4.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/multiple_values/reading/metadata_format/test_riff.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/multiple_values/reading/metadata_format/test_vorbis.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/multiple_values/reading/test_performance_large_data.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/multiple_values/reading/test_smart_parsing_scenarios.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/multiple_values/reading/test_unicode_handling.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/multiple_values/writing/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/multiple_values/writing/metadata_format/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/multiple_values/writing/metadata_format/test_id3v1.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/multiple_values/writing/metadata_format/test_id3v2_3.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/multiple_values/writing/metadata_format/test_id3v2_4.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/multiple_values/writing/metadata_format/test_riff.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/multiple_values/writing/metadata_format/test_vorbis.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/multiple_values/writing/test_error_handling.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/multiple_values/writing/test_large_values.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/reading/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/reading/test_read_multiple_metadata.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/reading/test_reading_error_handling.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/real_audio_files/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/real_audio_files/test_reading.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/real_audio_files/test_writing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/conftest.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/test_audio_data_corruption.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/test_file.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/test_invalid_md5.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/test_metadata_combinations/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/test_metadata_combinations/test_md5_invalid_with_metadata_combinations.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/test_metadata_combinations/test_md5_state_precedence.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/test_metadata_combinations/test_md5_unset_with_metadata_combinations.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/test_metadata_combinations/test_md5_validation_fails_with_id3v1.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/test_metadata_combinations/test_md5_validation_with_id3v2_only.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/test_metadata_combinations/test_md5_validation_works_without_id3v1.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/test_metadata_combinations/test_md5_with_metadata_combinations.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/test_unset_md5.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_repair/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_repair/test_delete_original.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_repair/test_invalid_md5/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_repair/test_invalid_md5/test_flipped_md5.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_repair/test_invalid_md5/test_partial_md5.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_repair/test_invalid_md5/test_random_md5.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_repair/test_md5_repair_with_metadata.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_repair/test_non_flac_error.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_repair/test_unset_md5.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/test_bitrate.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/test_channels.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/test_duration_in_sec.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/technical_info/test_sample_rate.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/test_audio_file.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/test_audio_format_readable_after_update_all_metadata_formats.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/writing/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/writing/test_error_handling.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/writing/test_forced_format.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/writing/test_multiple_format_preservation.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/writing/test_partial_update.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/writing/writing_strategies/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/writing/writing_strategies/sync_strategy/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/writing/writing_strategies/sync_strategy/test_flac_sync.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/writing/writing_strategies/sync_strategy/test_mp3_sync.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/writing/writing_strategies/sync_strategy/test_wav_sync.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/writing/writing_strategies/test_cleanup_strategy.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/writing/writing_strategies/test_preserve_strategy.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/writing/writing_strategies/unsupported_fields/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/writing/writing_strategies/unsupported_fields/test_fail_behavior.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/writing/writing_strategies/unsupported_fields/test_no_writing_on_failure.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/writing/writing_strategies/unsupported_fields/test_strategy_specific.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/audio_file/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/audio_file/technical_info/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/audio_file/technical_info/test_bitrate.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/audio_file/technical_info/test_channels.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/audio_file/technical_info/test_duration_in_sec.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/audio_file/technical_info/test_error_handling.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/audio_file/technical_info/test_file_size.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/audio_file/technical_info/test_format_name.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/audio_file/technical_info/test_sample_rate.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/audio_file/test_context_manager.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/audio_file/test_file_validation.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/audio_file/test_is_audio_file.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/audio_file/test_operations.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/audio_file/test_path_handling.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/cli/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/cli/test_expand_file_patterns.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/conftest.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/header_info/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/header_info/test_id3v1.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/header_info/test_id3v2.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/header_info/test_riff.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/header_info/test_riff_info_chunk_fourcc.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/header_info/test_vorbis.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/disc_number/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/disc_number/test_disc_number_validation.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/isrc/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/isrc/test_isrc_format_validation.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/isrc/test_isrc_type_validation.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/multiple_values/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/multiple_values/reading/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/multiple_values/reading/test_smart_parsing.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/multiple_values/writing/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/multiple_values/writing/test_separator_selection.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/multiple_values/writing/test_value_filtering.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/musicbrainz_artistid/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/musicbrainz_artistid/test_musicbrainz_artistid_format_validation.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/musicbrainz_artistid/test_musicbrainz_artistid_type_validation.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/musicbrainz_trackid/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/musicbrainz_trackid/test_musicbrainz_trackid_format_validation.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/musicbrainz_trackid/test_musicbrainz_trackid_type_validation.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/musicbrainz_uuid/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/musicbrainz_uuid/test_uuid_format_validation.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/rating/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/rating/reading/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/rating/reading/test_normalization.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/rating/reading/test_profiles_values.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/rating/test_rating_validation.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/rating/writing/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/rating/writing/test_configuration_error.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/rating/writing/test_validation.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/rating/writing/test_writing_profiles.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/release_date/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/release_date/test_date_format_validation.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/test_type_validation_exception.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/test_validation.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/track_number/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/track_number/test_track_number_validation.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/test_metadata_format_managers_write_and_read.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/metadata_managers/test_riff_configuration_error.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/utils/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/unit/utils/test_raw_metadata_sanitizer.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/utils/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/utils/flac_md5_state.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/utils/id3v1_genre_code_map.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/utils/metadata_format.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/utils/metadata_writing_strategy.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/utils/mutagen_exception_handler.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/utils/os_dependencies_checker/__init__.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/utils/os_dependencies_checker/base.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/utils/os_dependencies_checker/config.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/utils/os_dependencies_checker/windows.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/utils/rating_profiles.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/utils/raw_metadata_sanitizer.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/utils/tool_path_resolver.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/utils/types.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/utils/unified_metadata_key.py +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa_python.egg-info/SOURCES.txt +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa_python.egg-info/dependency_links.txt +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa_python.egg-info/entry_points.txt +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa_python.egg-info/requires.txt +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa_python.egg-info/top_level.txt +0 -0
- {audiometa_python-1.1.2 → audiometa_python-1.2.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: audiometa-python
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2.0
|
|
4
4
|
Summary: A comprehensive Python library for reading and writing audio metadata across multiple formats
|
|
5
5
|
Author: AudioMeta Python Contributors
|
|
6
6
|
Author-email: Andreas Garcia <garcia.andreas.1991@gmail.com>
|
|
@@ -1429,11 +1429,13 @@ AudioMeta provides a powerful command-line interface for quick metadata operatio
|
|
|
1429
1429
|
|
|
1430
1430
|
### Installation {#cli-installation}
|
|
1431
1431
|
|
|
1432
|
-
After installing the package, the `audiometa` command will be available:
|
|
1432
|
+
After installing the package, the `audiometa` command will be available. Commands: `read`, `unified`, `write`, `delete`, `help`. Use `audiometa --help` or `audiometa help` for main help; `audiometa help read` (or another command) for subcommand help.
|
|
1433
1433
|
|
|
1434
1434
|
```bash
|
|
1435
1435
|
pip install audiometa-python
|
|
1436
1436
|
audiometa --help
|
|
1437
|
+
# or: audiometa help
|
|
1438
|
+
# or: audiometa help read
|
|
1437
1439
|
```
|
|
1438
1440
|
|
|
1439
1441
|
### Basic Usage
|
|
@@ -1387,11 +1387,13 @@ AudioMeta provides a powerful command-line interface for quick metadata operatio
|
|
|
1387
1387
|
|
|
1388
1388
|
### Installation {#cli-installation}
|
|
1389
1389
|
|
|
1390
|
-
After installing the package, the `audiometa` command will be available:
|
|
1390
|
+
After installing the package, the `audiometa` command will be available. Commands: `read`, `unified`, `write`, `delete`, `help`. Use `audiometa --help` or `audiometa help` for main help; `audiometa help read` (or another command) for subcommand help.
|
|
1391
1391
|
|
|
1392
1392
|
```bash
|
|
1393
1393
|
pip install audiometa-python
|
|
1394
1394
|
audiometa --help
|
|
1395
|
+
# or: audiometa help
|
|
1396
|
+
# or: audiometa help read
|
|
1395
1397
|
```
|
|
1396
1398
|
|
|
1397
1399
|
### Basic Usage
|
|
@@ -378,6 +378,14 @@ Examples:
|
|
|
378
378
|
|
|
379
379
|
subparsers = parser.add_subparsers(dest="command", help="Available commands")
|
|
380
380
|
|
|
381
|
+
help_parser = subparsers.add_parser("help", help="Show help and exit")
|
|
382
|
+
help_parser.add_argument(
|
|
383
|
+
"subcommand",
|
|
384
|
+
nargs="?",
|
|
385
|
+
choices=["read", "unified", "write", "delete"],
|
|
386
|
+
help="Subcommand to show help for",
|
|
387
|
+
)
|
|
388
|
+
|
|
381
389
|
# Read command
|
|
382
390
|
read_parser = subparsers.add_parser("read", help="Read metadata from audio file(s)")
|
|
383
391
|
read_parser.add_argument("files", nargs="+", help="Audio file(s) or pattern(s)")
|
|
@@ -489,6 +497,18 @@ Examples:
|
|
|
489
497
|
return parser
|
|
490
498
|
|
|
491
499
|
|
|
500
|
+
def _print_cli_help(parser: argparse.ArgumentParser, subcommand: str | None) -> None:
|
|
501
|
+
subparsers_action = next(
|
|
502
|
+
(a for a in parser._actions if getattr(a, "dest", None) == "command"),
|
|
503
|
+
None,
|
|
504
|
+
)
|
|
505
|
+
subparsers_choices = getattr(subparsers_action, "choices", None) if subparsers_action else None
|
|
506
|
+
if subcommand and subparsers_choices and subcommand in subparsers_choices:
|
|
507
|
+
subparsers_choices[subcommand].print_help()
|
|
508
|
+
else:
|
|
509
|
+
parser.print_help()
|
|
510
|
+
|
|
511
|
+
|
|
492
512
|
def main() -> None:
|
|
493
513
|
"""Main CLI entry point."""
|
|
494
514
|
parser = _create_parser()
|
|
@@ -498,6 +518,10 @@ def main() -> None:
|
|
|
498
518
|
parser.print_help()
|
|
499
519
|
sys.exit(1)
|
|
500
520
|
|
|
521
|
+
if args.command == "help":
|
|
522
|
+
_print_cli_help(parser, getattr(args, "subcommand", None))
|
|
523
|
+
sys.exit(0)
|
|
524
|
+
|
|
501
525
|
try:
|
|
502
526
|
args.func(args)
|
|
503
527
|
except KeyboardInterrupt:
|
|
@@ -11,6 +11,23 @@ class TestCLIHelp:
|
|
|
11
11
|
assert result.returncode == 1 # Should exit with error
|
|
12
12
|
assert "usage:" in result.stdout.lower() or "help" in result.stdout.lower()
|
|
13
13
|
|
|
14
|
+
def test_cli_help_subcommand_shows_main_help(self):
|
|
15
|
+
result = subprocess.run(
|
|
16
|
+
[sys.executable, "-m", "audiometa", "help"], capture_output=True, text=True, check=False
|
|
17
|
+
)
|
|
18
|
+
assert result.returncode == 0
|
|
19
|
+
assert "usage:" in result.stdout.lower()
|
|
20
|
+
assert "read" in result.stdout.lower()
|
|
21
|
+
assert "write" in result.stdout.lower()
|
|
22
|
+
|
|
23
|
+
def test_cli_help_subcommand_shows_subcommand_help(self):
|
|
24
|
+
result = subprocess.run(
|
|
25
|
+
[sys.executable, "-m", "audiometa", "help", "read"], capture_output=True, text=True, check=False
|
|
26
|
+
)
|
|
27
|
+
assert result.returncode == 0
|
|
28
|
+
assert "read" in result.stdout.lower()
|
|
29
|
+
assert "--format" in result.stdout or "format" in result.stdout.lower()
|
|
30
|
+
|
|
14
31
|
def test_cli_read_help(self):
|
|
15
32
|
result = subprocess.run(
|
|
16
33
|
[sys.executable, "-m", "audiometa", "read", "--help"], capture_output=True, text=True, check=False
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/utils/os_dependencies_checker/macos.py
RENAMED
|
@@ -99,16 +99,19 @@ class MacOSDependenciesChecker(OsDependenciesChecker):
|
|
|
99
99
|
|
|
100
100
|
def _get_ffmpeg_version(self) -> str | None:
|
|
101
101
|
"""Get ffmpeg version (special handling for keg-only package)."""
|
|
102
|
-
|
|
102
|
+
candidates = ["ffprobe", "ffmpeg"]
|
|
103
103
|
brew_prefix = self._get_brew_prefix()
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
paths_to_try: list[str] = []
|
|
105
|
+
for cmd in candidates:
|
|
106
|
+
paths_to_try.append(cmd)
|
|
107
|
+
if brew_prefix:
|
|
108
|
+
for version in ["7", "6", "5"]:
|
|
109
|
+
paths_to_try.append(f"{brew_prefix}/opt/ffmpeg@{version}/bin/{cmd}")
|
|
107
110
|
|
|
108
|
-
for
|
|
111
|
+
for tool_path in paths_to_try:
|
|
109
112
|
try:
|
|
110
113
|
result = subprocess.run(
|
|
111
|
-
[
|
|
114
|
+
[tool_path, "-version"],
|
|
112
115
|
capture_output=True,
|
|
113
116
|
text=True,
|
|
114
117
|
check=False,
|
|
@@ -118,6 +121,9 @@ class MacOSDependenciesChecker(OsDependenciesChecker):
|
|
|
118
121
|
match = re.search(r"version\s+(\d+(?:\.\d+)*)", output)
|
|
119
122
|
if match:
|
|
120
123
|
return match.group(1)
|
|
124
|
+
match = re.search(r"(\d+\.\d+(?:\.\d+)*)", output)
|
|
125
|
+
if match:
|
|
126
|
+
return match.group(1)
|
|
121
127
|
except FileNotFoundError:
|
|
122
128
|
continue
|
|
123
129
|
return None
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/utils/os_dependencies_checker/ubuntu.py
RENAMED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"""Ubuntu-specific dependency checker using dpkg."""
|
|
2
2
|
|
|
3
|
+
import re
|
|
3
4
|
import subprocess
|
|
4
5
|
|
|
5
6
|
from audiometa.utils.os_dependencies_checker.base import OsDependenciesChecker
|
|
@@ -15,8 +16,9 @@ class UbuntuDependenciesChecker(OsDependenciesChecker):
|
|
|
15
16
|
def check_tool_available(self, tool_name: str) -> bool:
|
|
16
17
|
"""Check if tool is available in PATH."""
|
|
17
18
|
try:
|
|
19
|
+
version_flag = "-version" if tool_name == "ffprobe" else "--version"
|
|
18
20
|
result = subprocess.run(
|
|
19
|
-
[tool_name,
|
|
21
|
+
[tool_name, version_flag],
|
|
20
22
|
capture_output=True,
|
|
21
23
|
text=True,
|
|
22
24
|
check=False,
|
|
@@ -36,6 +38,30 @@ class UbuntuDependenciesChecker(OsDependenciesChecker):
|
|
|
36
38
|
return parts[2]
|
|
37
39
|
except (subprocess.CalledProcessError, FileNotFoundError):
|
|
38
40
|
pass
|
|
41
|
+
if package == "ffmpeg":
|
|
42
|
+
return self._get_ffmpeg_version_from_executable()
|
|
43
|
+
return None
|
|
44
|
+
|
|
45
|
+
def _get_ffmpeg_version_from_executable(self) -> str | None:
|
|
46
|
+
"""Get ffmpeg version from ffprobe/ffmpeg when not installed via dpkg (e.g. snap, source)."""
|
|
47
|
+
for cmd in ["ffprobe", "ffmpeg"]:
|
|
48
|
+
try:
|
|
49
|
+
result = subprocess.run(
|
|
50
|
+
[cmd, "-version"],
|
|
51
|
+
capture_output=True,
|
|
52
|
+
text=True,
|
|
53
|
+
check=False,
|
|
54
|
+
)
|
|
55
|
+
if result.stdout or result.stderr:
|
|
56
|
+
output = result.stdout + result.stderr
|
|
57
|
+
match = re.search(r"version\s+(\d+(?:\.\d+)*)", output)
|
|
58
|
+
if match:
|
|
59
|
+
return match.group(1)
|
|
60
|
+
match = re.search(r"(\d+\.\d+(?:\.\d+)*)", output)
|
|
61
|
+
if match:
|
|
62
|
+
return match.group(1)
|
|
63
|
+
except FileNotFoundError:
|
|
64
|
+
continue
|
|
39
65
|
return None
|
|
40
66
|
|
|
41
67
|
@staticmethod
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: audiometa-python
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2.0
|
|
4
4
|
Summary: A comprehensive Python library for reading and writing audio metadata across multiple formats
|
|
5
5
|
Author: AudioMeta Python Contributors
|
|
6
6
|
Author-email: Andreas Garcia <garcia.andreas.1991@gmail.com>
|
|
@@ -1429,11 +1429,13 @@ AudioMeta provides a powerful command-line interface for quick metadata operatio
|
|
|
1429
1429
|
|
|
1430
1430
|
### Installation {#cli-installation}
|
|
1431
1431
|
|
|
1432
|
-
After installing the package, the `audiometa` command will be available:
|
|
1432
|
+
After installing the package, the `audiometa` command will be available. Commands: `read`, `unified`, `write`, `delete`, `help`. Use `audiometa --help` or `audiometa help` for main help; `audiometa help read` (or another command) for subcommand help.
|
|
1433
1433
|
|
|
1434
1434
|
```bash
|
|
1435
1435
|
pip install audiometa-python
|
|
1436
1436
|
audiometa --help
|
|
1437
|
+
# or: audiometa help
|
|
1438
|
+
# or: audiometa help read
|
|
1437
1439
|
```
|
|
1438
1440
|
|
|
1439
1441
|
### Basic Usage
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "audiometa-python"
|
|
7
|
-
version = "1.
|
|
7
|
+
version = "1.2.0"
|
|
8
8
|
description = "A comprehensive Python library for reading and writing audio metadata across multiple formats"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/_rating_supporting/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/id3v1/id3v1_raw_metadata.py
RENAMED
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/manager/id3v1/id3v1_raw_metadata_key.py
RENAMED
|
File without changes
|
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/assets/create_test_files.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/scripts/__init__.py
RENAMED
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/technical_info_inspector.py
RENAMED
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/helpers/temp_file_with_metadata.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/read/__init__.py
RENAMED
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/read/test_basic.py
RENAMED
|
File without changes
|
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/read/test_formats.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/read/test_options.py
RENAMED
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/read/test_unified.py
RENAMED
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/test_delete.py
RENAMED
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/test_formatting.py
RENAMED
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/write/__init__.py
RENAMED
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/write/test_basic.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/cli/write/test_rating.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/scenarios/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/e2e/workflows/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{audiometa_python-1.1.2 → audiometa_python-1.2.0}/audiometa/test/tests/integration/conftest.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|