audiometa-python 0.8.0__tar.gz → 0.9.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-0.8.0/audiometa_python.egg-info → audiometa_python-0.9.0}/PKG-INFO +11 -11
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/README.md +10 -10
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/__init__.py +30 -6
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/cli.py +3 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/manager/_rating_supporting/riff/_RiffManager.py +198 -406
- audiometa_python-0.9.0/audiometa/manager/_rating_supporting/riff/_riff_bext_chunk.py +323 -0
- audiometa_python-0.9.0/audiometa/manager/_rating_supporting/riff/_riff_file_structure.py +158 -0
- audiometa_python-0.9.0/audiometa/manager/_rating_supporting/riff/_riff_info_chunk.py +163 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/manager/_rating_supporting/vorbis/_VorbisManager.py +9 -5
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/riff/riff_metadata_setter.py +1 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/vorbis/vorbis_metadata_setter.py +1 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/read/test_comprehensive.py +4 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/write/test_comprehensive.py +6 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/workflows/test_format_specific_workflows.py +59 -1
- audiometa_python-0.9.0/audiometa/test/tests/integration/metadata_field/description/test_deleting.py +52 -0
- audiometa_python-0.9.0/audiometa/test/tests/integration/metadata_field/description/test_reading.py +37 -0
- audiometa_python-0.9.0/audiometa/test/tests/integration/metadata_field/description/test_writing.py +68 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/test_metadata_field_validation.py +4 -3
- audiometa_python-0.9.0/audiometa/test/tests/integration/writing/writing_strategies/sync_strategy/__init__.py +1 -0
- audiometa_python-0.9.0/audiometa/test/tests/integration/writing/writing_strategies/sync_strategy/test_flac_sync.py +306 -0
- audiometa_python-0.9.0/audiometa/test/tests/integration/writing/writing_strategies/sync_strategy/test_mp3_sync.py +174 -0
- audiometa_python-0.9.0/audiometa/test/tests/integration/writing/writing_strategies/sync_strategy/test_wav_sync.py +306 -0
- audiometa_python-0.9.0/audiometa/test/tests/unit/metadata_managers/metadata_field/rating/writing/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/utils/unified_metadata_key.py +2 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0/audiometa_python.egg-info}/PKG-INFO +11 -11
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa_python.egg-info/SOURCES.txt +11 -2
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/pyproject.toml +1 -1
- audiometa_python-0.8.0/audiometa/test/tests/integration/audio_format/wav/test_wav_with_id3v2_tags.py +0 -83
- audiometa_python-0.8.0/audiometa/test/tests/integration/writing/writing_strategies/test_sync_strategy.py +0 -279
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/LICENSE +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/__main__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/_audio_file.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/exceptions.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/manager/_MetadataManager.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/manager/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/manager/_rating_supporting/_RatingSupportingMetadataManager.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/manager/_rating_supporting/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/manager/_rating_supporting/id3v2/_Id3v2Manager.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/manager/_rating_supporting/id3v2/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/manager/_rating_supporting/id3v2/_id3v2_constants.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/manager/_rating_supporting/riff/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/manager/_rating_supporting/riff/_riff_constants.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/manager/_rating_supporting/vorbis/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/manager/_rating_supporting/vorbis/_vorbis_constants.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/manager/id3v1/_Id3v1Manager.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/manager/id3v1/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/manager/id3v1/_constants.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/manager/id3v1/id3v1_raw_metadata.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/manager/id3v1/id3v1_raw_metadata_key.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/assets/create_test_files.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/common/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/common/audio_file_creator.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/common/external_tool_runner.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/id3v1/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/id3v1/id3v1_header_verifier.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/id3v1/id3v1_metadata_deleter.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/id3v1/id3v1_metadata_getter.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/id3v1/id3v1_metadata_setter.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/id3v2/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/id3v2/id3v2_frame_manual_creator.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/id3v2/id3v2_header_verifier.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/id3v2/id3v2_metadata_deleter.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/id3v2/id3v2_metadata_getter.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/id3v2/id3v2_metadata_setter.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/riff/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/riff/riff_header_verifier.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/riff/riff_manual_metadata_creator.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/riff/riff_metadata_deleter.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/riff/riff_metadata_getter.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/scripts/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/technical_info_inspector.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/temp_file_with_metadata.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/vorbis/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/vorbis/vorbis_header_verifier.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/vorbis/vorbis_metadata_deleter.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/helpers/vorbis/vorbis_metadata_getter.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/conftest.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/error_handling/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/error_handling/test_command_structure_errors.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/error_handling/test_file_access_errors.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/error_handling/test_format_output_errors.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/error_handling/test_input_validation_errors.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/error_handling/test_missing_fields_validation.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/error_handling/test_multiple_files_errors.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/error_handling/test_rating_validation.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/error_handling/test_year_validation.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/read/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/read/test_basic.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/read/test_formats.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/read/test_metadata_content.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/read/test_multiple_files.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/read/test_options.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/read/test_unified.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/test_delete.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/test_formatting.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/test_help.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/write/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/write/test_basic.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/write/test_force_format.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/write/test_integer_fields.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/write/test_list_fields.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/write/test_rating.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/write/test_string_fields.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/cli/write/test_validation.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/scenarios/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/scenarios/test_user_scenarios.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/workflows/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/workflows/test_core_workflows.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/workflows/test_deletion_workflows.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/workflows/test_error_handling_workflows.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/e2e/workflows/test_rating_workflows.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/audio_format/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/audio_format/flac/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/audio_format/flac/test_flac_delete_all.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/audio_format/flac/test_flac_reading_all.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/audio_format/flac/test_flac_reading_field.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/audio_format/flac/test_flac_writing.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/audio_format/mp3/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/audio_format/mp3/test_mp3_delete_all.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/audio_format/mp3/test_mp3_reading_all.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/audio_format/mp3/test_mp3_reading_field.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/audio_format/mp3/test_mp3_writing.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/audio_format/wav/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/audio_format/wav/test_wav_delete_all.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/audio_format/wav/test_wav_reading_all.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/audio_format/wav/test_wav_reading_field.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/audio_format/wav/test_wav_writing.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/conftest.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/delete_all_metadata/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/delete_all_metadata/test_audio_format_all.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/delete_all_metadata/test_audio_format_header_deletion.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/delete_all_metadata/test_basic_functionality.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/delete_all_metadata/test_error_handling.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/encoding/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/encoding/test_encoding.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/encoding/test_special_characters_edge_cases.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/get_full_metadata/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/get_full_metadata/test_audio_formats.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/get_full_metadata/test_binary_data_filtering.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/get_full_metadata/test_consistency.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/get_full_metadata/test_edge_cases.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/get_full_metadata/test_error_handling.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/get_full_metadata/test_get_full_metadata.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/get_full_metadata/test_options.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/get_full_metadata/test_performance.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/get_full_metadata/test_riff_bext.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/get_full_metadata/test_structure.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/album/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/album/test_deleting.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/album/test_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/album/test_writing.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/album_artists/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/album_artists/test_deleting.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/album_artists/test_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/album_artists/test_writing.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/artists/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/artists/test_deleting.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/artists/test_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/artists/test_writing.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/bpm/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/bpm/test_deleting.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/bpm/test_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/bpm/test_writing.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/comment/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/comment/test_deleting.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/comment/test_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/comment/test_writing.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/composer/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/composer/test_deleting.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/composer/test_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/composer/test_writing.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/copyright/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/copyright/test_deleting.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/copyright/test_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/copyright/test_writing.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/metadata_field/disc_number → audiometa_python-0.9.0/audiometa/test/tests/integration/metadata_field/description}/__init__.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/metadata_field/field_not_supported → audiometa_python-0.9.0/audiometa/test/tests/integration/metadata_field/disc_number}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/disc_number/test_deleting.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/disc_number/test_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/disc_number/test_writing.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/metadata_field/genre → audiometa_python-0.9.0/audiometa/test/tests/integration/metadata_field/field_not_supported}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/field_not_supported/test_deleting.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/field_not_supported/test_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/field_not_supported/test_writing.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/metadata_field/genre/reading → audiometa_python-0.9.0/audiometa/test/tests/integration/metadata_field/genre}/__init__.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/metadata_field/genre/reading/metadata_format → audiometa_python-0.9.0/audiometa/test/tests/integration/metadata_field/genre/reading}/__init__.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/metadata_field/language → audiometa_python-0.9.0/audiometa/test/tests/integration/metadata_field/genre/reading/metadata_format}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/genre/reading/metadata_format/test_id3v1_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/genre/reading/metadata_format/test_id3v2_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/genre/reading/metadata_format/test_riff_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/genre/reading/metadata_format/test_vorbis_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/genre/reading/test_smart_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/genre/test_deleting.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/genre/test_writing.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/isrc/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/isrc/test_deleting.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/isrc/test_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/isrc/test_writing.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/metadata_field/lyrics → audiometa_python-0.9.0/audiometa/test/tests/integration/metadata_field/language}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/language/test_deleting.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/language/test_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/language/test_writing.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/metadata_field/publisher → audiometa_python-0.9.0/audiometa/test/tests/integration/metadata_field/lyrics}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/lyrics/test_deleting.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/lyrics/test_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/lyrics/test_writing.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/metadata_field/rating → audiometa_python-0.9.0/audiometa/test/tests/integration/metadata_field/publisher}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/publisher/test_deleting.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/publisher/test_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/publisher/test_writing.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/metadata_field/rating/reading → audiometa_python-0.9.0/audiometa/test/tests/integration/metadata_field/rating}/__init__.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/metadata_field/rating/writing → audiometa_python-0.9.0/audiometa/test/tests/integration/metadata_field/rating/reading}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/rating/reading/test_base_100_proportional.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/rating/reading/test_base_255_non_proportional.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/rating/reading/test_base_255_proportional.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/rating/test_deleting.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/rating/test_error_handling.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/metadata_field/rating/writing/metadata_format → audiometa_python-0.9.0/audiometa/test/tests/integration/metadata_field/rating/writing}/__init__.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/metadata_field/release_date → audiometa_python-0.9.0/audiometa/test/tests/integration/metadata_field/rating/writing/metadata_format}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/rating/writing/metadata_format/test_id3v2.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/rating/writing/metadata_format/test_riff.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/rating/writing/metadata_format/test_vorbis.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/rating/writing/test_comprehensive.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/metadata_field/title → audiometa_python-0.9.0/audiometa/test/tests/integration/metadata_field/release_date}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/release_date/test_deleting.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/release_date/test_error_handling.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/release_date/test_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/release_date/test_writing.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/metadata_field/track_number → audiometa_python-0.9.0/audiometa/test/tests/integration/metadata_field/title}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/title/test_deleting.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/title/test_error_handling.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/title/test_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/title/test_writing.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/metadata_field/track_number/reading → audiometa_python-0.9.0/audiometa/test/tests/integration/metadata_field/track_number}/__init__.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/real_audio_files → audiometa_python-0.9.0/audiometa/test/tests/integration/metadata_field/track_number/reading}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/track_number/reading/test_edge_cases.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/track_number/reading/test_metadata_format.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/track_number/test_deleting.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/metadata_field/track_number/test_writing.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/multiple_values/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/multiple_values/reading/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/multiple_values/reading/metadata_format/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/multiple_values/reading/metadata_format/test_id3v1.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/multiple_values/reading/metadata_format/test_id3v2_3.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/multiple_values/reading/metadata_format/test_id3v2_4.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/multiple_values/reading/metadata_format/test_riff.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/multiple_values/reading/metadata_format/test_vorbis.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/multiple_values/reading/test_performance_large_data.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/multiple_values/reading/test_smart_parsing_scenarios.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/multiple_values/reading/test_unicode_handling.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/multiple_values/writing/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/multiple_values/writing/metadata_format/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/multiple_values/writing/metadata_format/test_id3v1.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/multiple_values/writing/metadata_format/test_id3v2_3.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/multiple_values/writing/metadata_format/test_id3v2_4.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/multiple_values/writing/metadata_format/test_riff.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/multiple_values/writing/metadata_format/test_vorbis.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/multiple_values/writing/test_error_handling.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/multiple_values/writing/test_large_values.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/reading/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/reading/test_read_multiple_metadata.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/reading/test_reading_error_handling.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/technical_info → audiometa_python-0.9.0/audiometa/test/tests/integration/real_audio_files}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/real_audio_files/test_reading.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/real_audio_files/test_writing.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/technical_info/flac_md5 → audiometa_python-0.9.0/audiometa/test/tests/integration/technical_info}/__init__.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking → audiometa_python-0.9.0/audiometa/test/tests/integration/technical_info/flac_md5}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/technical_info/flac_md5/conftest.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/test_metadata_combinations → audiometa_python-0.9.0/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/test_audio_data_corruption.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/test_file.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/test_invalid_md5.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/technical_info/flac_md5/md5_repair → audiometa_python-0.9.0/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/test_metadata_combinations}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.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-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/test_metadata_combinations/test_md5_state_precedence.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.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-0.8.0 → audiometa_python-0.9.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-0.8.0 → audiometa_python-0.9.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-0.8.0 → audiometa_python-0.9.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-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/test_metadata_combinations/test_md5_with_metadata_combinations.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_checking/test_unset_md5.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/technical_info/flac_md5/md5_repair/test_invalid_md5 → audiometa_python-0.9.0/audiometa/test/tests/integration/technical_info/flac_md5/md5_repair}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_repair/test_delete_original.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/writing → audiometa_python-0.9.0/audiometa/test/tests/integration/technical_info/flac_md5/md5_repair/test_invalid_md5}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_repair/test_invalid_md5/test_flipped_md5.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_repair/test_invalid_md5/test_partial_md5.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_repair/test_invalid_md5/test_random_md5.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_repair/test_md5_repair_with_metadata.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_repair/test_non_flac_error.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/technical_info/flac_md5/md5_repair/test_unset_md5.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/technical_info/test_bitrate.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/technical_info/test_channels.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/technical_info/test_duration_in_sec.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/technical_info/test_sample_rate.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/test_audio_file.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/test_audio_format_readable_after_update_all_metadata_formats.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/writing/writing_strategies → audiometa_python-0.9.0/audiometa/test/tests/integration/writing}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/writing/test_error_handling.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/writing/test_forced_format.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/writing/test_multiple_format_preservation.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/writing/test_partial_update.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/integration/writing/writing_strategies/unsupported_fields → audiometa_python-0.9.0/audiometa/test/tests/integration/writing/writing_strategies}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/writing/writing_strategies/test_cleanup_strategy.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/writing/writing_strategies/test_preserve_strategy.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/unit → audiometa_python-0.9.0/audiometa/test/tests/integration/writing/writing_strategies/unsupported_fields}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/writing/writing_strategies/unsupported_fields/test_fail_behavior.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/writing/writing_strategies/unsupported_fields/test_no_writing_on_failure.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/integration/writing/writing_strategies/unsupported_fields/test_strategy_specific.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/unit/audio_file → audiometa_python-0.9.0/audiometa/test/tests/unit}/__init__.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/unit/audio_file/technical_info → audiometa_python-0.9.0/audiometa/test/tests/unit/audio_file}/__init__.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/unit/cli → audiometa_python-0.9.0/audiometa/test/tests/unit/audio_file/technical_info}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/audio_file/technical_info/test_bitrate.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/audio_file/technical_info/test_channels.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/audio_file/technical_info/test_duration_in_sec.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/audio_file/technical_info/test_error_handling.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/audio_file/technical_info/test_file_size.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/audio_file/technical_info/test_format_name.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/audio_file/technical_info/test_sample_rate.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/audio_file/test_context_manager.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/audio_file/test_file_validation.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/audio_file/test_is_audio_file.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/audio_file/test_operations.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/audio_file/test_path_handling.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/unit/metadata_managers → audiometa_python-0.9.0/audiometa/test/tests/unit/cli}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/cli/test_expand_file_patterns.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/unit/metadata_managers/header_info → audiometa_python-0.9.0/audiometa/test/tests/unit/metadata_managers}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/conftest.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/unit/metadata_managers/metadata_field → audiometa_python-0.9.0/audiometa/test/tests/unit/metadata_managers/header_info}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/header_info/test_id3v1.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/header_info/test_id3v2.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/header_info/test_riff.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/header_info/test_vorbis.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/unit/metadata_managers/metadata_field/multiple_values → audiometa_python-0.9.0/audiometa/test/tests/unit/metadata_managers/metadata_field}/__init__.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/unit/metadata_managers/metadata_field/multiple_values/reading → audiometa_python-0.9.0/audiometa/test/tests/unit/metadata_managers/metadata_field/multiple_values}/__init__.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/unit/metadata_managers/metadata_field/multiple_values/writing → audiometa_python-0.9.0/audiometa/test/tests/unit/metadata_managers/metadata_field/multiple_values/reading}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/multiple_values/reading/test_smart_parsing.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/unit/metadata_managers/metadata_field/rating → audiometa_python-0.9.0/audiometa/test/tests/unit/metadata_managers/metadata_field/multiple_values/writing}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/multiple_values/writing/test_separator_selection.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/multiple_values/writing/test_value_filtering.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/unit/metadata_managers/metadata_field/rating/reading → audiometa_python-0.9.0/audiometa/test/tests/unit/metadata_managers/metadata_field/rating}/__init__.py +0 -0
- {audiometa_python-0.8.0/audiometa/test/tests/unit/metadata_managers/metadata_field/rating/writing → audiometa_python-0.9.0/audiometa/test/tests/unit/metadata_managers/metadata_field/rating/reading}/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/rating/reading/test_normalization.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/rating/reading/test_profiles_values.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/rating/test_rating_validation.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/rating/writing/test_configuration_error.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/rating/writing/test_validation.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/rating/writing/test_writing_profiles.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/test_date_format_validation.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/test_disc_number_validation.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/test_isrc_format_validation.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/test_isrc_type_validation.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/test_track_number_validation.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/test_type_validation_exception.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/metadata_field/test_validation.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/test_metadata_format_managers_write_and_read.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/test/tests/unit/metadata_managers/test_riff_configuration_error.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/utils/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/utils/flac_md5_state.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/utils/id3v1_genre_code_map.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/utils/metadata_format.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/utils/metadata_writing_strategy.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/utils/mutagen_exception_handler.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/utils/os_dependencies_checker/__init__.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/utils/os_dependencies_checker/base.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/utils/os_dependencies_checker/config.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/utils/os_dependencies_checker/macos.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/utils/os_dependencies_checker/ubuntu.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/utils/os_dependencies_checker/windows.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/utils/rating_profiles.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/utils/tool_path_resolver.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa/utils/types.py +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa_python.egg-info/dependency_links.txt +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa_python.egg-info/entry_points.txt +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa_python.egg-info/requires.txt +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/audiometa_python.egg-info/top_level.txt +0 -0
- {audiometa_python-0.8.0 → audiometa_python-0.9.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: audiometa-python
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.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>
|
|
@@ -41,29 +41,29 @@ Requires-Dist: PyYAML==6.0; extra == "yaml"
|
|
|
41
41
|
Dynamic: license-file
|
|
42
42
|
|
|
43
43
|
<div align="center">
|
|
44
|
-
<img src="https://raw.githubusercontent.com/
|
|
44
|
+
<img src="https://raw.githubusercontent.com/BehindTheMusicTree/audiometa/main/assets/logo.png" alt="AudioMeta Logo" width="200"/>
|
|
45
45
|
</div>
|
|
46
46
|
|
|
47
47
|
# AudioMeta Python
|
|
48
48
|
|
|
49
|
-
[](https://github.com/BehindTheMusicTree/audiometa/actions/workflows/ci.yml)
|
|
50
50
|
[](https://www.python.org/)
|
|
51
51
|
[](LICENSE)
|
|
52
52
|
[](https://pypi.org/project/audiometa-python/)
|
|
53
53
|
[](https://pepy.tech/project/audiometa-python)
|
|
54
|
-
[](https://github.com/BehindTheMusicTree/audiometa/stargazers)
|
|
55
55
|
|
|
56
56
|
A powerful, unified Python library for reading and writing audio metadata across multiple formats. AudioMeta supports MP3, FLAC, and WAV audio files, working seamlessly with ID3v1, ID3v2, Vorbis, and RIFF metadata formats through a single, consistent API.
|
|
57
57
|
|
|
58
|
-
**Author**: [Andreas Garcia](https://github.com/
|
|
58
|
+
**Author**: [Andreas Garcia](https://github.com/BehindTheMusicTree)
|
|
59
59
|
|
|
60
60
|
## ⭐ Show Your Support
|
|
61
61
|
|
|
62
62
|
If you find AudioMeta Python useful, please consider:
|
|
63
63
|
|
|
64
64
|
- ⭐ **Starring this repository** - It helps others discover the project
|
|
65
|
-
- 🐛 **Reporting bugs** - Help improve the library by [opening an issue](https://github.com/
|
|
66
|
-
- 💡 **Suggesting features** - Share your ideas via [GitHub Discussions](https://github.com/
|
|
65
|
+
- 🐛 **Reporting bugs** - Help improve the library by [opening an issue](https://github.com/BehindTheMusicTree/audiometa/issues)
|
|
66
|
+
- 💡 **Suggesting features** - Share your ideas via [GitHub Discussions](https://github.com/BehindTheMusicTree/audiometa/discussions) or [feature requests](https://github.com/BehindTheMusicTree/audiometa/issues)
|
|
67
67
|
- 🤝 **Contributing** - See [CONTRIBUTING.md](CONTRIBUTING.md) for ways to help
|
|
68
68
|
- 📢 **Sharing** - Tell others about AudioMeta Python
|
|
69
69
|
|
|
@@ -111,7 +111,7 @@ Your support helps make this project better for everyone! 🎵
|
|
|
111
111
|
- [📝 Changelog](#-changelog)
|
|
112
112
|
- [🤝 Contributing](#-contributing)
|
|
113
113
|
- [Code of Conduct](CODE_OF_CONDUCT.md)
|
|
114
|
-
- [Security Policy](https://github.com/
|
|
114
|
+
- [Security Policy](https://github.com/BehindTheMusicTree/audiometa/security/policy)
|
|
115
115
|
- [License](#license)
|
|
116
116
|
|
|
117
117
|
## ✨ Features
|
|
@@ -1561,11 +1561,11 @@ Whether you're fixing bugs, adding features, improving documentation, or sharing
|
|
|
1561
1561
|
|
|
1562
1562
|
**Ways to contribute:**
|
|
1563
1563
|
|
|
1564
|
-
- 🐛 **Report bugs** - Use the [bug report template](https://github.com/
|
|
1565
|
-
- 💡 **Suggest features** - Use the [feature request template](https://github.com/
|
|
1564
|
+
- 🐛 **Report bugs** - Use the [bug report template](https://github.com/BehindTheMusicTree/audiometa/issues/new?template=bug_report.yml)
|
|
1565
|
+
- 💡 **Suggest features** - Use the [feature request template](https://github.com/BehindTheMusicTree/audiometa/issues/new?template=feature_request.yml)
|
|
1566
1566
|
- 🔧 **Submit pull requests** - See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines
|
|
1567
1567
|
- 📝 **Improve documentation** - Fix typos, clarify explanations, add examples
|
|
1568
|
-
- 💬 **Join discussions** - Share ideas and help others in [GitHub Discussions](https://github.com/
|
|
1568
|
+
- 💬 **Join discussions** - Share ideas and help others in [GitHub Discussions](https://github.com/BehindTheMusicTree/audiometa/discussions)
|
|
1569
1569
|
- ⭐ **Star the repo** - Help others discover the project
|
|
1570
1570
|
|
|
1571
1571
|
For detailed contribution guidelines, see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
<div align="center">
|
|
2
|
-
<img src="https://raw.githubusercontent.com/
|
|
2
|
+
<img src="https://raw.githubusercontent.com/BehindTheMusicTree/audiometa/main/assets/logo.png" alt="AudioMeta Logo" width="200"/>
|
|
3
3
|
</div>
|
|
4
4
|
|
|
5
5
|
# AudioMeta Python
|
|
6
6
|
|
|
7
|
-
[](https://github.com/BehindTheMusicTree/audiometa/actions/workflows/ci.yml)
|
|
8
8
|
[](https://www.python.org/)
|
|
9
9
|
[](LICENSE)
|
|
10
10
|
[](https://pypi.org/project/audiometa-python/)
|
|
11
11
|
[](https://pepy.tech/project/audiometa-python)
|
|
12
|
-
[](https://github.com/BehindTheMusicTree/audiometa/stargazers)
|
|
13
13
|
|
|
14
14
|
A powerful, unified Python library for reading and writing audio metadata across multiple formats. AudioMeta supports MP3, FLAC, and WAV audio files, working seamlessly with ID3v1, ID3v2, Vorbis, and RIFF metadata formats through a single, consistent API.
|
|
15
15
|
|
|
16
|
-
**Author**: [Andreas Garcia](https://github.com/
|
|
16
|
+
**Author**: [Andreas Garcia](https://github.com/BehindTheMusicTree)
|
|
17
17
|
|
|
18
18
|
## ⭐ Show Your Support
|
|
19
19
|
|
|
20
20
|
If you find AudioMeta Python useful, please consider:
|
|
21
21
|
|
|
22
22
|
- ⭐ **Starring this repository** - It helps others discover the project
|
|
23
|
-
- 🐛 **Reporting bugs** - Help improve the library by [opening an issue](https://github.com/
|
|
24
|
-
- 💡 **Suggesting features** - Share your ideas via [GitHub Discussions](https://github.com/
|
|
23
|
+
- 🐛 **Reporting bugs** - Help improve the library by [opening an issue](https://github.com/BehindTheMusicTree/audiometa/issues)
|
|
24
|
+
- 💡 **Suggesting features** - Share your ideas via [GitHub Discussions](https://github.com/BehindTheMusicTree/audiometa/discussions) or [feature requests](https://github.com/BehindTheMusicTree/audiometa/issues)
|
|
25
25
|
- 🤝 **Contributing** - See [CONTRIBUTING.md](CONTRIBUTING.md) for ways to help
|
|
26
26
|
- 📢 **Sharing** - Tell others about AudioMeta Python
|
|
27
27
|
|
|
@@ -69,7 +69,7 @@ Your support helps make this project better for everyone! 🎵
|
|
|
69
69
|
- [📝 Changelog](#-changelog)
|
|
70
70
|
- [🤝 Contributing](#-contributing)
|
|
71
71
|
- [Code of Conduct](CODE_OF_CONDUCT.md)
|
|
72
|
-
- [Security Policy](https://github.com/
|
|
72
|
+
- [Security Policy](https://github.com/BehindTheMusicTree/audiometa/security/policy)
|
|
73
73
|
- [License](#license)
|
|
74
74
|
|
|
75
75
|
## ✨ Features
|
|
@@ -1519,11 +1519,11 @@ Whether you're fixing bugs, adding features, improving documentation, or sharing
|
|
|
1519
1519
|
|
|
1520
1520
|
**Ways to contribute:**
|
|
1521
1521
|
|
|
1522
|
-
- 🐛 **Report bugs** - Use the [bug report template](https://github.com/
|
|
1523
|
-
- 💡 **Suggest features** - Use the [feature request template](https://github.com/
|
|
1522
|
+
- 🐛 **Report bugs** - Use the [bug report template](https://github.com/BehindTheMusicTree/audiometa/issues/new?template=bug_report.yml)
|
|
1523
|
+
- 💡 **Suggest features** - Use the [feature request template](https://github.com/BehindTheMusicTree/audiometa/issues/new?template=feature_request.yml)
|
|
1524
1524
|
- 🔧 **Submit pull requests** - See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines
|
|
1525
1525
|
- 📝 **Improve documentation** - Fix typos, clarify explanations, add examples
|
|
1526
|
-
- 💬 **Join discussions** - Share ideas and help others in [GitHub Discussions](https://github.com/
|
|
1526
|
+
- 💬 **Join discussions** - Share ideas and help others in [GitHub Discussions](https://github.com/BehindTheMusicTree/audiometa/discussions)
|
|
1527
1527
|
- ⭐ **Star the repo** - Help others discover the project
|
|
1528
1528
|
|
|
1529
1529
|
For detailed contribution guidelines, see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
@@ -226,10 +226,11 @@ def get_unified_metadata_field(
|
|
|
226
226
|
The metadata value or None if not found
|
|
227
227
|
|
|
228
228
|
Raises:
|
|
229
|
+
MetadataFieldNotSupportedByLibError: When the key is not a valid UnifiedMetadataKey
|
|
230
|
+
(neither an enum instance nor a string matching an enum value)
|
|
229
231
|
MetadataFieldNotSupportedByMetadataFormatError: When metadata_format is specified and the field
|
|
230
|
-
is not supported by that format
|
|
231
|
-
|
|
232
|
-
(only when metadata_format is None and all formats raise MetadataFieldNotSupportedByMetadataFormatError)
|
|
232
|
+
is not supported by that format, or when metadata_format is None and the field is not supported
|
|
233
|
+
by any of the file's available metadata formats
|
|
233
234
|
|
|
234
235
|
Examples:
|
|
235
236
|
# Get title from any format (priority order)
|
|
@@ -296,10 +297,11 @@ def get_unified_metadata_field(
|
|
|
296
297
|
continue
|
|
297
298
|
|
|
298
299
|
# If ALL managers raised MetadataFieldNotSupportedByMetadataFormatError,
|
|
299
|
-
# the field is not supported by the
|
|
300
|
+
# the field is not supported by any of the file's formats
|
|
300
301
|
if len(format_errors) == len(managers_prioritized) and len(format_errors) > 0:
|
|
301
|
-
|
|
302
|
-
|
|
302
|
+
# Re-raise the first format-specific error to indicate the field is not supported
|
|
303
|
+
# by any format available for this file
|
|
304
|
+
raise format_errors[0][1]
|
|
303
305
|
|
|
304
306
|
return None
|
|
305
307
|
|
|
@@ -830,6 +832,28 @@ def _handle_metadata_strategy(
|
|
|
830
832
|
# Then sync all other available formats
|
|
831
833
|
# Note: We need to be careful about the order to avoid conflicts
|
|
832
834
|
for fmt_name, manager in other_managers.items():
|
|
835
|
+
# Check if this format has existing metadata (for SYNC strategy)
|
|
836
|
+
has_existing = False
|
|
837
|
+
if fmt_name == "id3v1":
|
|
838
|
+
has_existing = audio_file._has_id3v1_tags()
|
|
839
|
+
elif fmt_name == "id3v2":
|
|
840
|
+
# Check if file starts with ID3
|
|
841
|
+
try:
|
|
842
|
+
from pathlib import Path
|
|
843
|
+
|
|
844
|
+
with Path(audio_file.file_path).open("rb") as f:
|
|
845
|
+
header = f.read(3)
|
|
846
|
+
has_existing = header == b"ID3"
|
|
847
|
+
except Exception:
|
|
848
|
+
has_existing = False
|
|
849
|
+
elif fmt_name == "vorbis":
|
|
850
|
+
has_existing = audio_file.file_extension == ".flac" # Vorbis is native for FLAC
|
|
851
|
+
elif fmt_name == "riff":
|
|
852
|
+
has_existing = audio_file.file_extension == ".wav" # RIFF is native for WAV
|
|
853
|
+
|
|
854
|
+
if not has_existing:
|
|
855
|
+
continue
|
|
856
|
+
|
|
833
857
|
# For non-target formats, filter out unsupported fields and warn about them
|
|
834
858
|
# This allows syncing supported fields even when some fields are not supported
|
|
835
859
|
unsupported_fields = []
|
|
@@ -186,6 +186,8 @@ def _write_metadata(args: argparse.Namespace) -> None:
|
|
|
186
186
|
metadata[UnifiedMetadataKey.UNSYNCHRONIZED_LYRICS] = args.lyrics
|
|
187
187
|
if args.comment and args.comment.strip():
|
|
188
188
|
metadata[UnifiedMetadataKey.COMMENT] = args.comment
|
|
189
|
+
if args.description and args.description.strip():
|
|
190
|
+
metadata[UnifiedMetadataKey.DESCRIPTION] = args.description
|
|
189
191
|
if args.replaygain and args.replaygain.strip():
|
|
190
192
|
metadata[UnifiedMetadataKey.REPLAYGAIN] = args.replaygain
|
|
191
193
|
if args.archival_location and args.archival_location.strip():
|
|
@@ -429,6 +431,7 @@ Examples:
|
|
|
429
431
|
write_parser.add_argument("--copyright", help="Copyright information")
|
|
430
432
|
write_parser.add_argument("--lyrics", help="Unsynchronized lyrics text")
|
|
431
433
|
write_parser.add_argument("--comment", help="Comment")
|
|
434
|
+
write_parser.add_argument("--description", help="Description")
|
|
432
435
|
write_parser.add_argument("--replaygain", help="ReplayGain information")
|
|
433
436
|
write_parser.add_argument("--archival-location", help="Archival location")
|
|
434
437
|
write_parser.add_argument("--isrc", help="International Standard Recording Code (12 characters)")
|