pyrekordbox 0.4.1__tar.gz → 0.4.2__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.
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.github/workflows/tests.yml +3 -1
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.pre-commit-config.yaml +1 -1
- pyrekordbox-0.4.2/.testdata/empty.mp3 +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/CHANGELOG.md +18 -1
- {pyrekordbox-0.4.1/pyrekordbox.egg-info → pyrekordbox-0.4.2}/PKG-INFO +1 -1
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/formats/db6.md +1 -1
- pyrekordbox-0.4.2/docs/source/tutorial/anlz.md +88 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/tutorial/mysetting.md +17 -1
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox/__main__.py +3 -2
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox/_version.py +2 -2
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox/config.py +6 -2
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox/db6/database.py +3 -3
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox/db6/tables.py +3 -3
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox/rbxml.py +8 -7
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2/pyrekordbox.egg-info}/PKG-INFO +1 -1
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox.egg-info/SOURCES.txt +2 -0
- pyrekordbox-0.4.2/tests/test_cli.py +31 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/tests/test_db6.py +12 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/tests/test_xml.py +59 -1
- pyrekordbox-0.4.1/docs/source/tutorial/anlz.md +0 -7
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.github/ISSUE_TEMPLATE/config.yaml +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.github/workflows/codeql.yml +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.github/workflows/pypi-publish.yml +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.gitignore +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.readthedocs.yaml +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/DEVSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/rekordbox/export.pdb +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/rekordbox/exportExt.pdb +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/DEVSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/beat_fx_quantize/off/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/beat_fx_quantize/on/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/channel_fader_curve/linear/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/channel_fader_curve/steep_bottom/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/channel_fader_curve/steep_top/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/exponential/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/linear/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/smooth/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/cross_fader_curve/constant/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/cross_fader_curve/fast_cut/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/cross_fader_curve/slow_cut/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/display_brightness/five/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/display_brightness/four/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/display_brightness/one/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/display_brightness/three/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/display_brightness/two/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/display_brightness/white/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/headphones_mono_split/mono_split/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/headphones_mono_split/stereo/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/headphones_pre_eq/post_eq/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/headphones_pre_eq/pre_eq/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/indicator_brightness/one/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/indicator_brightness/three/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/indicator_brightness/two/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/mic_low_cut/off/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/mic_low_cut/on/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/midi_button_type/toggle/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/midi_button_type/trigger/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/midi_channel/eight/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/midi_channel/eleven/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/midi_channel/fifteen/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/midi_channel/five/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/midi_channel/four/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/midi_channel/fourteen/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/midi_channel/nine/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/midi_channel/one/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/midi_channel/seven/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/midi_channel/six/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/midi_channel/sixteen/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/midi_channel/ten/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/midi_channel/thirteen/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/midi_channel/three/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/midi_channel/twelve/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/midi_channel/two/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/talk_over_level/minus_12db/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/talk_over_level/minus_18db/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/talk_over_level/minus_24db/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/talk_over_level/minus_6db/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/talk_over_mode/advanced/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/djmmysetting/talk_over_mode/normal/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/auto_cue/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/auto_cue/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/auto_cue_level/memory/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/auto_cue_level/minus_36db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/auto_cue_level/minus_42db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/auto_cue_level/minus_48db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/auto_cue_level/minus_54db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/auto_cue_level/minus_60db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/auto_cue_level/minus_66db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/auto_cue_level/minus_72db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/auto_cue_level/minus_78db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/disc_slot_illumination/bright/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/disc_slot_illumination/dark/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/disc_slot_illumination/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/eject_lock/lock/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/eject_lock/unlock/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/hotcue_autoload/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/hotcue_autoload/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/hotcue_autoload/rekordbox/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/hotcue_color/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/hotcue_color/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/jog_mode/cdj/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/jog_mode/vinyl/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/jog_ring_brightness/bright/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/jog_ring_brightness/dark/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/jog_ring_brightness/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/jog_ring_indicator/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/jog_ring_indicator/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/language/chinese_simplified/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/language/chinese_traditional/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/language/czech/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/language/danish/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/language/dutch/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/language/english/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/language/french/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/language/german/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/language/greek/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/language/hungarian/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/language/italian/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/language/japanese/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/language/korean/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/language/portuguese/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/language/russian/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/language/spanish/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/language/swedish/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/language/turkish/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/lcd_brightness/five/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/lcd_brightness/four/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/lcd_brightness/one/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/lcd_brightness/three/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/lcd_brightness/two/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/master_tempo/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/master_tempo/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/needle_lock/lock/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/needle_lock/unlock/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/on_air_display/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/on_air_display/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/phase_meter/type1/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/phase_meter/type2/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/play_mode/continue_/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/play_mode/single/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/quantize/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/quantize/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/quantize_beat_value/eighth/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/quantize_beat_value/half/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/quantize_beat_value/one/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/quantize_beat_value/quarter/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/slip_flashing/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/slip_flashing/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/sync/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/sync/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/tempo_range/six/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/tempo_range/sixteen/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/tempo_range/ten/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/tempo_range/wide/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/time_mode/elapsed/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting/time_mode/remain/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/beat_jump_beat_value/eight/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/beat_jump_beat_value/four/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/beat_jump_beat_value/half/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/beat_jump_beat_value/one/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/beat_jump_beat_value/sixteen/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/beat_jump_beat_value/sixtyfour/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/beat_jump_beat_value/thirtytwo/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/beat_jump_beat_value/two/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/jog_display_mode/artwork/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/jog_display_mode/auto/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/jog_display_mode/info/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/jog_display_mode/simple/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/jog_lcd_brightness/five/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/jog_lcd_brightness/four/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/jog_lcd_brightness/one/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/jog_lcd_brightness/three/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/jog_lcd_brightness/two/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/pad_button_brightness/four/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/pad_button_brightness/one/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/pad_button_brightness/three/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/pad_button_brightness/two/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/release/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/touch/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/touch_release/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/waveform/phase_meter/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/waveform/waveform/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/waveform_divisions/phrase/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/mysettings/mysetting2/waveform_divisions/time_scale/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 5/backup/DEVSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 5/backup/ExtData.edb +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 5/backup/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P002/00009C2E/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P002/00009C2E/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P02B/00023587/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P02B/00023587/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P035/00027763/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P035/00027763/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P038/0002AAA0/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P038/0002AAA0/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P068/00012CA2/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P068/00012CA2/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P076/00013B6E/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P076/00013B6E/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 5/backup/datafile.edb +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 5/backup/masterPlaylists3.xml +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 5/database.xml +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 5/datafile.edb +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/DEVSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/MYSETTING.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/masterPlaylists3.xml +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/masterPlaylists6.xml +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/database.xml +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/masterPlaylists6_template.xml +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/master_locked.db +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/rekordbox 6/master_unlocked.db +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/CONTRIBUTING.md +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/LICENSE +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/README.md +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/Makefile +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/make.bat +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_beat.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_file.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_pco2.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_pcob.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_pcp2.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_pcpt.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_ppth.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_pqt2.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_pqt2_2.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_pqtz.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_pssi.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_pssi_entry.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_pvbr.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_pwav.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_pwv3.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_pwv4.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_pwv5.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_pwv5_entry.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_pwv6.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_pwv7.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_pwvc.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/anlz_tag.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/images/x64dbg_rb_key.png +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/logos/dark/logo_primary.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/logos/light/logo_primary.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_static/logos/mid/logo_primary.svg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_templates/apidoc/module.rst_t +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_templates/apidoc/package.rst_t +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_templates/apidoc/toc.rst_t +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_templates/autosummary/class.rst +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/_templates/autosummary/module.rst +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/api.md +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/conf.py +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/development/changes.md +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/development/contributing.md +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/formats/anlz.md +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/formats/mysetting.md +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/formats/xml.md +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/index.md +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/installation.md +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/key.md +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/quickstart.md +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/requirements.txt +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/tutorial/configuration.md +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/tutorial/db6.md +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/tutorial/index.md +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/docs/source/tutorial/xml.md +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyproject.toml +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox/__init__.py +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox/anlz/__init__.py +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox/anlz/file.py +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox/anlz/structs.py +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox/anlz/tags.py +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox/db6/__init__.py +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox/db6/aux_files.py +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox/db6/registry.py +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox/db6/smartlist.py +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox/logger.py +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox/mysettings/__init__.py +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox/mysettings/file.py +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox/mysettings/structs.py +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox/utils.py +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox.egg-info/dependency_links.txt +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox.egg-info/not-zip-safe +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox.egg-info/requires.txt +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/pyrekordbox.egg-info/top_level.txt +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/requirements.txt +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/setup.cfg +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/tests/__init__.py +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/tests/test_anlz.py +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/tests/test_config.py +0 -0
- {pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/tests/test_mysetting.py +0 -0
@@ -74,7 +74,9 @@ jobs:
|
|
74
74
|
pytest tests/ --cov=pyrekordbox --cov-report=xml -v
|
75
75
|
|
76
76
|
- name: Upload coverage to Codecov
|
77
|
-
uses: codecov/codecov-action@
|
77
|
+
uses: codecov/codecov-action@v4
|
78
|
+
env:
|
79
|
+
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
78
80
|
with:
|
79
81
|
env_vars: OS,PYTHON
|
80
82
|
verbose: True
|
Binary file
|
@@ -1,6 +1,22 @@
|
|
1
1
|
# What's New
|
2
2
|
|
3
3
|
|
4
|
+
<a name="v0.4.2"></a>
|
5
|
+
## [v0.4.2] - 2025-04-21
|
6
|
+
|
7
|
+
This release contains bug fixes for the command-line interface and XML handling.
|
8
|
+
|
9
|
+
### Improvements/Bug Fixes
|
10
|
+
|
11
|
+
- **cli:** **fix import error when downloading db key via CLI ([#162](https://github.com/dylanljones/pyrekordbox/pull/162))**
|
12
|
+
- **xml:** **fix get_track method to accept Location parameter**
|
13
|
+
|
14
|
+
### Documentation
|
15
|
+
|
16
|
+
- **anlz:** **add simple tutorial for ANLZ files**
|
17
|
+
- **db:** **add ActiveLoop description**
|
18
|
+
|
19
|
+
|
4
20
|
<a name="v0.4.1"></a>
|
5
21
|
## [v0.4.1] - 2025-04-20
|
6
22
|
|
@@ -634,7 +650,8 @@ This release contains documentation fixes.
|
|
634
650
|
- **add missing djmd tables to `master.db` database documentation**
|
635
651
|
|
636
652
|
|
637
|
-
[Unreleased]: https://github.com/dylanljones/pyrekordbox/compare/v0.4.
|
653
|
+
[Unreleased]: https://github.com/dylanljones/pyrekordbox/compare/v0.4.2...HEAD
|
654
|
+
[v0.4.2]: https://github.com/dylanljones/pyrekordbox/compare/v0.4.1...v0.4.2
|
638
655
|
[v0.4.1]: https://github.com/dylanljones/pyrekordbox/compare/v0.4.0...v0.4.1
|
639
656
|
[v0.4.0]: https://github.com/dylanljones/pyrekordbox/compare/v0.3.2...v0.4.0
|
640
657
|
[v0.3.2]: https://github.com/dylanljones/pyrekordbox/compare/v0.3.1...v0.3.2
|
@@ -497,7 +497,7 @@ around 1/75th of a second (13.333ms) per frame, i.e. about half the granularity
|
|
497
497
|
- ?
|
498
498
|
-
|
499
499
|
* - `ActiveLoop`
|
500
|
-
-
|
500
|
+
- Should the loop start active when reaching the point in playback
|
501
501
|
-
|
502
502
|
* - `Comment`
|
503
503
|
- Name of comment of cue point
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# Analysis Files
|
2
|
+
|
3
|
+
Rekordbox stores analysis information of the tracks in the collection in specific files,
|
4
|
+
which also get exported to decives used by Pioneer professional DJ equipment. The files
|
5
|
+
have names like `ANLZ0000` and come with the extensions `.DAT`, `.EXT` or `.2EX`.
|
6
|
+
They include waveforms, beat grids (information about the precise time at which
|
7
|
+
each beat occurs), time indices to allow efficient seeking to specific positions
|
8
|
+
inside variable bit-rate audio streams, and lists of memory cues and loop points.
|
9
|
+
|
10
|
+
```{seealso}
|
11
|
+
See the {ref}`Analysis Files Format<Analysis Files Format>` documentation for more information.
|
12
|
+
```
|
13
|
+
|
14
|
+
## Reading and writing ANLZ Files
|
15
|
+
|
16
|
+
To read an ANLZ file, you can use the `AnlzFile.parse_file` method:
|
17
|
+
|
18
|
+
```python
|
19
|
+
from pyrekordbox import AnlzFile
|
20
|
+
|
21
|
+
# Read a single ANLZ file
|
22
|
+
anlz = AnlzFile.parse_file("path/to/ANLZXXXX.DAT")
|
23
|
+
```
|
24
|
+
|
25
|
+
You can also read multiple ANLZ files for a single track using the `read_anlz_files` function.
|
26
|
+
It takes the root directory of the files as argument:
|
27
|
+
|
28
|
+
```python
|
29
|
+
from pyrekordbox import read_anlz_files
|
30
|
+
|
31
|
+
# Read all ANLZ files for a track
|
32
|
+
files = read_anlz_files("path/to/anlz_directory")
|
33
|
+
```
|
34
|
+
|
35
|
+
After modifiying the contents of a ANLZ file, it can be saved via
|
36
|
+
```python
|
37
|
+
# Save the ANLZ file contents
|
38
|
+
anlz.save("path/to/ANLZXXXX.DAT")
|
39
|
+
```
|
40
|
+
|
41
|
+
|
42
|
+
To find the ANLZ files corresponding to a specific track in the Rekordbox collection,
|
43
|
+
the database handler includes a method that returnes the directory containing the ANLZ files:
|
44
|
+
```python
|
45
|
+
>>> from pyrekordbox import Rekordbox6Database
|
46
|
+
>>> db = Rekordbox6Database()
|
47
|
+
>>> content = db.get_content().first()
|
48
|
+
>>> db.get_anlz_dir(content)
|
49
|
+
C:\Users\user\AppData\Roaming\Pioneer\rekordbox\share\PIONEER\USBANLZ\0e8\0d4cc-06a6-4574-ba18-1c2301ea9924
|
50
|
+
```
|
51
|
+
|
52
|
+
Alternatively, a dictionary containing the paths of the ANLZ files can be found via
|
53
|
+
```python
|
54
|
+
>>> db.get_anlz_paths(content)
|
55
|
+
{
|
56
|
+
'DAT': 'C:/Users/user/AppData/Roaming/Pioneer/rekordbox/share/PIONEER/USBANLZ/0e8/0d4cc-06a6-4574-ba18-1c2301ea9924/ANLZ0000.DAT',
|
57
|
+
'EXT': 'C:/Users/user/AppData/Roaming/Pioneer/rekordbox/share/PIONEER/USBANLZ/0e8/0d4cc-06a6-4574-ba18-1c2301ea9924/ANLZ0000.EXT',
|
58
|
+
'2EX': None
|
59
|
+
}
|
60
|
+
```
|
61
|
+
In this example, the analysis data of the track is stored in only two ANLZ files, `ANLZ0000.DAT` and `ANLZ0000.EXT`.
|
62
|
+
Instead of returning the paths of the analysis files, they can also be read directly via
|
63
|
+
```python
|
64
|
+
db.read_anlz_files(content)
|
65
|
+
```
|
66
|
+
|
67
|
+
|
68
|
+
## Accessing ANLZ Data
|
69
|
+
|
70
|
+
The `AnlzFile` object implements a dictionary-like interface. You can access tags by their type code or name:
|
71
|
+
|
72
|
+
```python
|
73
|
+
# Check if a tag exists
|
74
|
+
if "beat_grid" in anlz:
|
75
|
+
print("Beat grid found")
|
76
|
+
|
77
|
+
# Get the first tag of a specific type
|
78
|
+
beat_grid = anlz.get_tag("PQTZ")
|
79
|
+
# or by name
|
80
|
+
beat_grid = anlz.get_tag("beat_grid")
|
81
|
+
|
82
|
+
# Get all tags of a specific type
|
83
|
+
all_cues = anlz.getall_tags("PCOB")
|
84
|
+
```
|
85
|
+
|
86
|
+
```{note}
|
87
|
+
More coming soon!
|
88
|
+
```
|
@@ -13,7 +13,8 @@ DJ equipment.
|
|
13
13
|
See the {ref}`My-Setting Files Format<My-Setting Files Format>` documentation for more information.
|
14
14
|
```
|
15
15
|
|
16
|
-
Pyrekordbox includes a file handler for each of the four My-Settings files.
|
16
|
+
Pyrekordbox includes a file handler for each of the four My-Settings files.
|
17
|
+
To read any of the four files, use
|
17
18
|
````python
|
18
19
|
from pyrekordbox import read_mysetting_file
|
19
20
|
|
@@ -30,6 +31,21 @@ file3 = DjmMySettingFile.parse_file("DJMMYSETTING.DAT")
|
|
30
31
|
file4 = DevSettingFile.parse_file("DEVSETTING.DAT")
|
31
32
|
````
|
32
33
|
|
34
|
+
To find the My-Settings files, the database handler includes a method that returnes the
|
35
|
+
paths of all four files:
|
36
|
+
````python
|
37
|
+
>>> from pyrekordbox import Rekordbox6Database
|
38
|
+
>>> db = Rekordbox6Database()
|
39
|
+
>>> db.get_mysetting_paths()
|
40
|
+
[
|
41
|
+
'C:/Users/user/AppData/Roaming/Pioneer/rekordbox/DEVSETTING.DAT',
|
42
|
+
'C:/Users/user/AppData/Roaming/Pioneer/rekordbox/DJMMYSETTING.DAT',
|
43
|
+
'C:/Users/user/AppData/Roaming/Pioneer/rekordbox/MYSETTING.DAT',
|
44
|
+
'C:/Users/user/AppData/Roaming/Pioneer/rekordbox/MYSETTING2.DAT'
|
45
|
+
]
|
46
|
+
````
|
47
|
+
|
48
|
+
|
33
49
|
After parsing a My-Setting file, the settings can be accessed as dictionary:
|
34
50
|
````python
|
35
51
|
>>> file = read_mysetting_file("MYSETTING.DAT")
|
@@ -9,7 +9,7 @@ import sys
|
|
9
9
|
import urllib.request
|
10
10
|
from pathlib import Path
|
11
11
|
|
12
|
-
from pyrekordbox.config import
|
12
|
+
from pyrekordbox.config import get_cache_file, write_db6_key_cache
|
13
13
|
|
14
14
|
KEY_SOURCES = [
|
15
15
|
{
|
@@ -144,7 +144,8 @@ def download_db6_key():
|
|
144
144
|
dp = match.group("dp")
|
145
145
|
break
|
146
146
|
if dp:
|
147
|
-
|
147
|
+
cache_file = get_cache_file()
|
148
|
+
print(f"Found key, updating cache file {cache_file}")
|
148
149
|
write_db6_key_cache(dp)
|
149
150
|
else:
|
150
151
|
print("No key found in the online sources.")
|
@@ -67,6 +67,10 @@ def get_appdata_dir() -> Path:
|
|
67
67
|
return app_data
|
68
68
|
|
69
69
|
|
70
|
+
def get_cache_file() -> Path:
|
71
|
+
return get_appdata_dir() / "pyrekordbox" / _cache_file_name
|
72
|
+
|
73
|
+
|
70
74
|
def get_pioneer_install_dir(path: Union[str, Path] = None) -> Path: # pragma: no cover
|
71
75
|
"""Returns the path of the Pioneer program installation directory.
|
72
76
|
|
@@ -477,7 +481,7 @@ def write_db6_key_cache(key: str) -> None: # pragma: no cover
|
|
477
481
|
lines.append("dp: " + key)
|
478
482
|
text = "\n".join(lines)
|
479
483
|
|
480
|
-
cache_file =
|
484
|
+
cache_file = get_cache_file()
|
481
485
|
if not cache_file.parent.exists():
|
482
486
|
cache_file.parent.mkdir()
|
483
487
|
|
@@ -494,7 +498,7 @@ def _update_sqlite_key(opts, conf):
|
|
494
498
|
cache_version = 0
|
495
499
|
pw, dp = "", ""
|
496
500
|
|
497
|
-
cache_file =
|
501
|
+
cache_file = get_cache_file()
|
498
502
|
|
499
503
|
if cache_file.exists(): # pragma: no cover
|
500
504
|
logger.debug("Found cache file %s", cache_file)
|
@@ -27,7 +27,7 @@ try:
|
|
27
27
|
from sqlcipher3 import dbapi2 as sqlite3 # noqa
|
28
28
|
|
29
29
|
_sqlcipher_available = True
|
30
|
-
except ImportError:
|
30
|
+
except ImportError: # pragma: no cover
|
31
31
|
import sqlite3
|
32
32
|
|
33
33
|
_sqlcipher_available = False
|
@@ -125,9 +125,9 @@ class Rekordbox6Database:
|
|
125
125
|
raise FileNotFoundError(f"File '{path}' does not exist!")
|
126
126
|
# Open database
|
127
127
|
if unlock:
|
128
|
-
if not _sqlcipher_available:
|
128
|
+
if not _sqlcipher_available: # pragma: no cover
|
129
129
|
raise ImportError("Could not unlock database: 'sqlcipher3' package not found")
|
130
|
-
if not key:
|
130
|
+
if not key: # pragma: no cover
|
131
131
|
try:
|
132
132
|
key = rb_config["dp"]
|
133
133
|
except KeyError:
|
@@ -207,14 +207,14 @@ class Base(DeclarativeBase):
|
|
207
207
|
return [column.key for column in inspect(cls).relationships] # noqa
|
208
208
|
|
209
209
|
@classmethod
|
210
|
-
def __get_keys__(cls):
|
210
|
+
def __get_keys__(cls): # pragma: no cover
|
211
211
|
"""Get all attributes of the table."""
|
212
212
|
items = cls.__dict__.items()
|
213
213
|
keys = [k for k, v in items if not callable(v) and not k.startswith("_")]
|
214
214
|
return keys
|
215
215
|
|
216
216
|
@classmethod
|
217
|
-
def keys(cls):
|
217
|
+
def keys(cls): # pragma: no cover
|
218
218
|
"""Returns a list of all column names including the relationships."""
|
219
219
|
if not cls.__keys__: # Cache the keys
|
220
220
|
cls.__keys__ = cls.__get_keys__()
|
@@ -248,7 +248,7 @@ class Base(DeclarativeBase):
|
|
248
248
|
"""Returns a dictionary of all column names and values."""
|
249
249
|
return {key: self.__getitem__(key) for key in self.columns()}
|
250
250
|
|
251
|
-
def pformat(self, indent=" "):
|
251
|
+
def pformat(self, indent=" "): # pragma: no cover
|
252
252
|
lines = [f"{self.__tablename__}"]
|
253
253
|
columns = self.columns()
|
254
254
|
w = max(len(col) for col in columns)
|
@@ -1042,13 +1042,14 @@ class RekordboxXml:
|
|
1042
1042
|
>>> track = file.get_track(TrackID=1)
|
1043
1043
|
|
1044
1044
|
"""
|
1045
|
-
if index is None and TrackID is None:
|
1046
|
-
raise ValueError("Either index or
|
1045
|
+
if index is None and TrackID is None and Location is None:
|
1046
|
+
raise ValueError("Either index, TrackID or Location has to be specified!")
|
1047
1047
|
|
1048
1048
|
if TrackID is not None:
|
1049
1049
|
el = self._collection.find(f'.//{Track.TAG}[@TrackID="{TrackID}"]')
|
1050
1050
|
elif Location is not None:
|
1051
|
-
|
1051
|
+
encoded = encode_path(Location)
|
1052
|
+
el = self._collection.find(f'.//{Track.TAG}[@Location="{encoded}"]')
|
1052
1053
|
else:
|
1053
1054
|
el = self._collection.find(f".//{Track.TAG}[{index + 1}]")
|
1054
1055
|
return Track(element=el)
|
@@ -1091,10 +1092,10 @@ class RekordboxXml:
|
|
1091
1092
|
node = node.get_playlist(name)
|
1092
1093
|
return node
|
1093
1094
|
|
1094
|
-
def _update_track_count(self):
|
1095
|
-
|
1096
|
-
|
1097
|
-
|
1095
|
+
# def _update_track_count(self):
|
1096
|
+
# """Updates the track count element."""
|
1097
|
+
# num_tracks = len(self._collection.findall(f".//{Track.TAG}"))
|
1098
|
+
# self._collection.attrib["Entries"] = str(num_tracks)
|
1098
1099
|
|
1099
1100
|
def _increment_track_count(self):
|
1100
1101
|
"""Increment the track count element."""
|
@@ -13,6 +13,7 @@ requirements.txt
|
|
13
13
|
.github/workflows/codeql.yml
|
14
14
|
.github/workflows/pypi-publish.yml
|
15
15
|
.github/workflows/tests.yml
|
16
|
+
.testdata/empty.mp3
|
16
17
|
.testdata/export/PIONEER/DEVSETTING.DAT
|
17
18
|
.testdata/export/PIONEER/DJMMYSETTING.DAT
|
18
19
|
.testdata/export/PIONEER/MYSETTING.DAT
|
@@ -323,6 +324,7 @@ pyrekordbox/mysettings/file.py
|
|
323
324
|
pyrekordbox/mysettings/structs.py
|
324
325
|
tests/__init__.py
|
325
326
|
tests/test_anlz.py
|
327
|
+
tests/test_cli.py
|
326
328
|
tests/test_config.py
|
327
329
|
tests/test_db6.py
|
328
330
|
tests/test_mysetting.py
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# Author: Dylan Jones
|
3
|
+
# Date: 2025-04-21
|
4
|
+
|
5
|
+
from subprocess import run
|
6
|
+
from types import SimpleNamespace as Namespace
|
7
|
+
|
8
|
+
|
9
|
+
def shell(command, **kwargs):
|
10
|
+
"""Execute a shell command capturing output and exit code."""
|
11
|
+
completed = run(command, shell=True, capture_output=True, check=False, **kwargs)
|
12
|
+
return Namespace(
|
13
|
+
exit_code=completed.returncode,
|
14
|
+
stdout=completed.stdout.decode(),
|
15
|
+
stderr=completed.stderr.decode(),
|
16
|
+
)
|
17
|
+
|
18
|
+
|
19
|
+
def test_cli():
|
20
|
+
"""Check if the CLI is callable."""
|
21
|
+
result = shell("python -m pyrekordbox --help")
|
22
|
+
# Check if the command was successful
|
23
|
+
assert result.exit_code == 0, f"Command failed with exit code {result.exit_code}"
|
24
|
+
|
25
|
+
|
26
|
+
def test_download_key():
|
27
|
+
"""Test the download-key command."""
|
28
|
+
result = shell("python -m pyrekordbox download-key")
|
29
|
+
# Check if the command was successful
|
30
|
+
assert result.exit_code == 0, f"Command failed with exit code {result.exit_code}"
|
31
|
+
assert "Found key, updating cache file" in result.stdout
|
@@ -1222,6 +1222,18 @@ def test_add_label(db):
|
|
1222
1222
|
db.add_label(name)
|
1223
1223
|
|
1224
1224
|
|
1225
|
+
def test_add_content(db):
|
1226
|
+
path = os.path.join(TEST_ROOT, "empty.mp3")
|
1227
|
+
# Add content
|
1228
|
+
content = db.add_content(path, Title="Test")
|
1229
|
+
assert content.Title == "Test"
|
1230
|
+
assert content.FolderPath == path
|
1231
|
+
|
1232
|
+
# Fail on duplicate content
|
1233
|
+
with pytest.raises(ValueError):
|
1234
|
+
db.add_content(path)
|
1235
|
+
|
1236
|
+
|
1225
1237
|
def test_get_anlz_paths():
|
1226
1238
|
content = DB.get_content().first()
|
1227
1239
|
|
@@ -7,7 +7,7 @@ import os
|
|
7
7
|
import pytest
|
8
8
|
|
9
9
|
from pyrekordbox import RekordboxXml
|
10
|
-
from pyrekordbox.rbxml import PositionMark, Tempo, XmlDuplicateError
|
10
|
+
from pyrekordbox.rbxml import Node, PositionMark, Tempo, XmlDuplicateError
|
11
11
|
|
12
12
|
TEST_ROOT = os.path.join(os.path.dirname(os.path.dirname(__file__)), ".testdata")
|
13
13
|
XML5 = os.path.join(TEST_ROOT, "rekordbox 5", "database.xml")
|
@@ -548,9 +548,39 @@ def test_add_position_mark():
|
|
548
548
|
assert mark.Num == num
|
549
549
|
|
550
550
|
|
551
|
+
def test_get_track():
|
552
|
+
xml = RekordboxXml(XML6)
|
553
|
+
|
554
|
+
with pytest.raises(ValueError):
|
555
|
+
# Nothing provided
|
556
|
+
xml.get_track()
|
557
|
+
|
558
|
+
idx = 0
|
559
|
+
expected_loc = os.path.normpath(r"C:/Music/PioneerDJ/Demo Tracks/Demo Track 1.mp3")
|
560
|
+
expected_id = 253529738
|
561
|
+
|
562
|
+
# Test getting by index
|
563
|
+
track = xml.get_track(index=idx)
|
564
|
+
assert track.Location == expected_loc
|
565
|
+
assert track.TrackID == expected_id
|
566
|
+
|
567
|
+
# Test getting by TrackID
|
568
|
+
track = xml.get_track(TrackID=expected_id)
|
569
|
+
assert track.Location == expected_loc
|
570
|
+
assert track.TrackID == expected_id
|
571
|
+
|
572
|
+
# Test getting by Location
|
573
|
+
track = xml.get_track(Location=expected_loc)
|
574
|
+
assert track.Location == expected_loc
|
575
|
+
assert track.TrackID == expected_id
|
576
|
+
|
577
|
+
|
551
578
|
def test_get_playlist():
|
552
579
|
xml = RekordboxXml(XML5)
|
553
580
|
|
581
|
+
playlists = xml.get_playlist()
|
582
|
+
assert isinstance(playlists, Node)
|
583
|
+
|
554
584
|
playlist = xml.get_playlist("Playlist1")
|
555
585
|
assert playlist.is_playlist
|
556
586
|
assert not playlist.is_folder
|
@@ -559,6 +589,10 @@ def test_get_playlist():
|
|
559
589
|
assert folder.is_folder
|
560
590
|
assert not folder.is_playlist
|
561
591
|
|
592
|
+
sub_playlists = folder.get_playlists()
|
593
|
+
assert isinstance(sub_playlists, list)
|
594
|
+
assert len(sub_playlists) == 1
|
595
|
+
|
562
596
|
sub_playlist = xml.get_playlist("Folder", "Sub Playlist")
|
563
597
|
assert sub_playlist.is_playlist
|
564
598
|
assert not sub_playlist.is_folder
|
@@ -620,6 +654,7 @@ def test_update_playlist_entries():
|
|
620
654
|
|
621
655
|
playlist.add_track(0)
|
622
656
|
assert playlist.entries == 1
|
657
|
+
assert playlist.get_track(0) == 0
|
623
658
|
|
624
659
|
playlist.add_track(1)
|
625
660
|
assert playlist.entries == 2
|
@@ -629,3 +664,26 @@ def test_update_playlist_entries():
|
|
629
664
|
|
630
665
|
playlist.remove_track(0)
|
631
666
|
assert playlist.entries == 0
|
667
|
+
|
668
|
+
|
669
|
+
def test_playlist_treestr():
|
670
|
+
xml = RekordboxXml(XML5)
|
671
|
+
root = xml.get_playlist()
|
672
|
+
assert isinstance(root.treestr(), str)
|
673
|
+
|
674
|
+
playlist = xml.get_playlist("Playlist1")
|
675
|
+
assert isinstance(playlist.treestr(), str)
|
676
|
+
|
677
|
+
|
678
|
+
def test_save_load(tmp_path):
|
679
|
+
xml = RekordboxXml(XML5)
|
680
|
+
|
681
|
+
# Save to a file
|
682
|
+
test_file = tmp_path / "test_save_reload.xml"
|
683
|
+
xml.save(test_file)
|
684
|
+
|
685
|
+
# Load the saved file
|
686
|
+
loaded = RekordboxXml(test_file)
|
687
|
+
|
688
|
+
# Verify content was preserved
|
689
|
+
assert loaded.num_tracks == xml.num_tracks
|
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
|
{pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.2EX
RENAMED
File without changes
|
{pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.DAT
RENAMED
File without changes
|
{pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.EXT
RENAMED
File without changes
|
{pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.2EX
RENAMED
File without changes
|
{pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.DAT
RENAMED
File without changes
|
{pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.EXT
RENAMED
File without changes
|
{pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.2EX
RENAMED
File without changes
|
{pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.DAT
RENAMED
File without changes
|
{pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.EXT
RENAMED
File without changes
|
{pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.2EX
RENAMED
File without changes
|
{pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.DAT
RENAMED
File without changes
|
{pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.EXT
RENAMED
File without changes
|
{pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.2EX
RENAMED
File without changes
|
{pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.DAT
RENAMED
File without changes
|
{pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.EXT
RENAMED
File without changes
|
{pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.2EX
RENAMED
File without changes
|
{pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.DAT
RENAMED
File without changes
|
{pyrekordbox-0.4.1 → pyrekordbox-0.4.2}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.EXT
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
|