pyrekordbox 0.4.2__tar.gz → 0.4.4__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.
Files changed (335) hide show
  1. pyrekordbox-0.4.4/.github/FUNDING.yml +1 -0
  2. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.pre-commit-config.yaml +2 -2
  3. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/CHANGELOG.md +40 -1
  4. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/LICENSE +1 -1
  5. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/PKG-INFO +13 -38
  6. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/README.md +10 -33
  7. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/index.md +0 -1
  8. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/tutorial/db6.md +2 -25
  9. pyrekordbox-0.4.4/py.typed +0 -0
  10. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyproject.toml +44 -3
  11. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox/__init__.py +1 -0
  12. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox/__main__.py +1 -51
  13. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox/_version.py +16 -3
  14. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox/anlz/__init__.py +6 -6
  15. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox/anlz/file.py +56 -43
  16. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox/anlz/tags.py +108 -70
  17. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox/config.py +18 -356
  18. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox/db6/aux_files.py +40 -14
  19. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox/db6/database.py +384 -236
  20. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox/db6/registry.py +48 -34
  21. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox/db6/smartlist.py +12 -12
  22. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox/db6/tables.py +60 -58
  23. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox/mysettings/__init__.py +3 -2
  24. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox/mysettings/file.py +27 -24
  25. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox/rbxml.py +321 -142
  26. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox/utils.py +27 -6
  27. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox.egg-info/PKG-INFO +13 -38
  28. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox.egg-info/SOURCES.txt +2 -0
  29. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox.egg-info/requires.txt +0 -2
  30. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/requirements.txt +6 -3
  31. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/tests/test_cli.py +0 -8
  32. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/tests/test_db6.py +1 -38
  33. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/tests/test_xml.py +7 -0
  34. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  35. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.github/ISSUE_TEMPLATE/config.yaml +0 -0
  36. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  37. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.github/workflows/codeql.yml +0 -0
  38. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.github/workflows/pypi-publish.yml +0 -0
  39. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.github/workflows/tests.yml +0 -0
  40. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.gitignore +0 -0
  41. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.readthedocs.yaml +0 -0
  42. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/empty.mp3 +0 -0
  43. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/DEVSETTING.DAT +0 -0
  44. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/DJMMYSETTING.DAT +0 -0
  45. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/MYSETTING.DAT +0 -0
  46. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/MYSETTING2.DAT +0 -0
  47. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.2EX +0 -0
  48. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.DAT +0 -0
  49. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.EXT +0 -0
  50. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.2EX +0 -0
  51. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.DAT +0 -0
  52. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.EXT +0 -0
  53. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.2EX +0 -0
  54. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.DAT +0 -0
  55. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.EXT +0 -0
  56. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.2EX +0 -0
  57. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.DAT +0 -0
  58. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.EXT +0 -0
  59. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.2EX +0 -0
  60. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.DAT +0 -0
  61. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.EXT +0 -0
  62. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.2EX +0 -0
  63. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.DAT +0 -0
  64. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.EXT +0 -0
  65. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/rekordbox/export.pdb +0 -0
  66. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/export/PIONEER/rekordbox/exportExt.pdb +0 -0
  67. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/DEVSETTING.DAT +0 -0
  68. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/DJMMYSETTING.DAT +0 -0
  69. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/MYSETTING.DAT +0 -0
  70. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/MYSETTING2.DAT +0 -0
  71. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/beat_fx_quantize/off/DJMMYSETTING.DAT +0 -0
  72. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/beat_fx_quantize/on/DJMMYSETTING.DAT +0 -0
  73. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/channel_fader_curve/linear/DJMMYSETTING.DAT +0 -0
  74. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/channel_fader_curve/steep_bottom/DJMMYSETTING.DAT +0 -0
  75. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/channel_fader_curve/steep_top/DJMMYSETTING.DAT +0 -0
  76. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/exponential/DJMMYSETTING.DAT +0 -0
  77. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/linear/DJMMYSETTING.DAT +0 -0
  78. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/smooth/DJMMYSETTING.DAT +0 -0
  79. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/cross_fader_curve/constant/DJMMYSETTING.DAT +0 -0
  80. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/cross_fader_curve/fast_cut/DJMMYSETTING.DAT +0 -0
  81. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/cross_fader_curve/slow_cut/DJMMYSETTING.DAT +0 -0
  82. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/display_brightness/five/DJMMYSETTING.DAT +0 -0
  83. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/display_brightness/four/DJMMYSETTING.DAT +0 -0
  84. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/display_brightness/one/DJMMYSETTING.DAT +0 -0
  85. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/display_brightness/three/DJMMYSETTING.DAT +0 -0
  86. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/display_brightness/two/DJMMYSETTING.DAT +0 -0
  87. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/display_brightness/white/DJMMYSETTING.DAT +0 -0
  88. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/headphones_mono_split/mono_split/DJMMYSETTING.DAT +0 -0
  89. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/headphones_mono_split/stereo/DJMMYSETTING.DAT +0 -0
  90. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/headphones_pre_eq/post_eq/DJMMYSETTING.DAT +0 -0
  91. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/headphones_pre_eq/pre_eq/DJMMYSETTING.DAT +0 -0
  92. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/indicator_brightness/one/DJMMYSETTING.DAT +0 -0
  93. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/indicator_brightness/three/DJMMYSETTING.DAT +0 -0
  94. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/indicator_brightness/two/DJMMYSETTING.DAT +0 -0
  95. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/mic_low_cut/off/DJMMYSETTING.DAT +0 -0
  96. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/mic_low_cut/on/DJMMYSETTING.DAT +0 -0
  97. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/midi_button_type/toggle/DJMMYSETTING.DAT +0 -0
  98. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/midi_button_type/trigger/DJMMYSETTING.DAT +0 -0
  99. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/midi_channel/eight/DJMMYSETTING.DAT +0 -0
  100. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/midi_channel/eleven/DJMMYSETTING.DAT +0 -0
  101. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/midi_channel/fifteen/DJMMYSETTING.DAT +0 -0
  102. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/midi_channel/five/DJMMYSETTING.DAT +0 -0
  103. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/midi_channel/four/DJMMYSETTING.DAT +0 -0
  104. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/midi_channel/fourteen/DJMMYSETTING.DAT +0 -0
  105. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/midi_channel/nine/DJMMYSETTING.DAT +0 -0
  106. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/midi_channel/one/DJMMYSETTING.DAT +0 -0
  107. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/midi_channel/seven/DJMMYSETTING.DAT +0 -0
  108. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/midi_channel/six/DJMMYSETTING.DAT +0 -0
  109. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/midi_channel/sixteen/DJMMYSETTING.DAT +0 -0
  110. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/midi_channel/ten/DJMMYSETTING.DAT +0 -0
  111. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/midi_channel/thirteen/DJMMYSETTING.DAT +0 -0
  112. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/midi_channel/three/DJMMYSETTING.DAT +0 -0
  113. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/midi_channel/twelve/DJMMYSETTING.DAT +0 -0
  114. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/midi_channel/two/DJMMYSETTING.DAT +0 -0
  115. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/talk_over_level/minus_12db/DJMMYSETTING.DAT +0 -0
  116. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/talk_over_level/minus_18db/DJMMYSETTING.DAT +0 -0
  117. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/talk_over_level/minus_24db/DJMMYSETTING.DAT +0 -0
  118. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/talk_over_level/minus_6db/DJMMYSETTING.DAT +0 -0
  119. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/talk_over_mode/advanced/DJMMYSETTING.DAT +0 -0
  120. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/djmmysetting/talk_over_mode/normal/DJMMYSETTING.DAT +0 -0
  121. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/auto_cue/off/MYSETTING.DAT +0 -0
  122. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/auto_cue/on/MYSETTING.DAT +0 -0
  123. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/auto_cue_level/memory/MYSETTING.DAT +0 -0
  124. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/auto_cue_level/minus_36db/MYSETTING.DAT +0 -0
  125. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/auto_cue_level/minus_42db/MYSETTING.DAT +0 -0
  126. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/auto_cue_level/minus_48db/MYSETTING.DAT +0 -0
  127. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/auto_cue_level/minus_54db/MYSETTING.DAT +0 -0
  128. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/auto_cue_level/minus_60db/MYSETTING.DAT +0 -0
  129. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/auto_cue_level/minus_66db/MYSETTING.DAT +0 -0
  130. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/auto_cue_level/minus_72db/MYSETTING.DAT +0 -0
  131. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/auto_cue_level/minus_78db/MYSETTING.DAT +0 -0
  132. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/disc_slot_illumination/bright/MYSETTING.DAT +0 -0
  133. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/disc_slot_illumination/dark/MYSETTING.DAT +0 -0
  134. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/disc_slot_illumination/off/MYSETTING.DAT +0 -0
  135. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/eject_lock/lock/MYSETTING.DAT +0 -0
  136. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/eject_lock/unlock/MYSETTING.DAT +0 -0
  137. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/hotcue_autoload/off/MYSETTING.DAT +0 -0
  138. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/hotcue_autoload/on/MYSETTING.DAT +0 -0
  139. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/hotcue_autoload/rekordbox/MYSETTING.DAT +0 -0
  140. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/hotcue_color/off/MYSETTING.DAT +0 -0
  141. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/hotcue_color/on/MYSETTING.DAT +0 -0
  142. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/jog_mode/cdj/MYSETTING.DAT +0 -0
  143. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/jog_mode/vinyl/MYSETTING.DAT +0 -0
  144. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/jog_ring_brightness/bright/MYSETTING.DAT +0 -0
  145. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/jog_ring_brightness/dark/MYSETTING.DAT +0 -0
  146. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/jog_ring_brightness/off/MYSETTING.DAT +0 -0
  147. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/jog_ring_indicator/off/MYSETTING.DAT +0 -0
  148. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/jog_ring_indicator/on/MYSETTING.DAT +0 -0
  149. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/language/chinese_simplified/MYSETTING.DAT +0 -0
  150. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/language/chinese_traditional/MYSETTING.DAT +0 -0
  151. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/language/czech/MYSETTING.DAT +0 -0
  152. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/language/danish/MYSETTING.DAT +0 -0
  153. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/language/dutch/MYSETTING.DAT +0 -0
  154. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/language/english/MYSETTING.DAT +0 -0
  155. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/language/french/MYSETTING.DAT +0 -0
  156. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/language/german/MYSETTING.DAT +0 -0
  157. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/language/greek/MYSETTING.DAT +0 -0
  158. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/language/hungarian/MYSETTING.DAT +0 -0
  159. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/language/italian/MYSETTING.DAT +0 -0
  160. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/language/japanese/MYSETTING.DAT +0 -0
  161. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/language/korean/MYSETTING.DAT +0 -0
  162. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/language/portuguese/MYSETTING.DAT +0 -0
  163. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/language/russian/MYSETTING.DAT +0 -0
  164. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/language/spanish/MYSETTING.DAT +0 -0
  165. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/language/swedish/MYSETTING.DAT +0 -0
  166. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/language/turkish/MYSETTING.DAT +0 -0
  167. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/lcd_brightness/five/MYSETTING.DAT +0 -0
  168. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/lcd_brightness/four/MYSETTING.DAT +0 -0
  169. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/lcd_brightness/one/MYSETTING.DAT +0 -0
  170. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/lcd_brightness/three/MYSETTING.DAT +0 -0
  171. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/lcd_brightness/two/MYSETTING.DAT +0 -0
  172. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/master_tempo/off/MYSETTING.DAT +0 -0
  173. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/master_tempo/on/MYSETTING.DAT +0 -0
  174. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/needle_lock/lock/MYSETTING.DAT +0 -0
  175. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/needle_lock/unlock/MYSETTING.DAT +0 -0
  176. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/on_air_display/off/MYSETTING.DAT +0 -0
  177. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/on_air_display/on/MYSETTING.DAT +0 -0
  178. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/phase_meter/type1/MYSETTING.DAT +0 -0
  179. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/phase_meter/type2/MYSETTING.DAT +0 -0
  180. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/play_mode/continue_/MYSETTING.DAT +0 -0
  181. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/play_mode/single/MYSETTING.DAT +0 -0
  182. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/quantize/off/MYSETTING.DAT +0 -0
  183. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/quantize/on/MYSETTING.DAT +0 -0
  184. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/quantize_beat_value/eighth/MYSETTING.DAT +0 -0
  185. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/quantize_beat_value/half/MYSETTING.DAT +0 -0
  186. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/quantize_beat_value/one/MYSETTING.DAT +0 -0
  187. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/quantize_beat_value/quarter/MYSETTING.DAT +0 -0
  188. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/slip_flashing/off/MYSETTING.DAT +0 -0
  189. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/slip_flashing/on/MYSETTING.DAT +0 -0
  190. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/sync/off/MYSETTING.DAT +0 -0
  191. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/sync/on/MYSETTING.DAT +0 -0
  192. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/tempo_range/six/MYSETTING.DAT +0 -0
  193. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/tempo_range/sixteen/MYSETTING.DAT +0 -0
  194. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/tempo_range/ten/MYSETTING.DAT +0 -0
  195. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/tempo_range/wide/MYSETTING.DAT +0 -0
  196. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/time_mode/elapsed/MYSETTING.DAT +0 -0
  197. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting/time_mode/remain/MYSETTING.DAT +0 -0
  198. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/beat_jump_beat_value/eight/MYSETTING2.DAT +0 -0
  199. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/beat_jump_beat_value/four/MYSETTING2.DAT +0 -0
  200. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/beat_jump_beat_value/half/MYSETTING2.DAT +0 -0
  201. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/beat_jump_beat_value/one/MYSETTING2.DAT +0 -0
  202. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/beat_jump_beat_value/sixteen/MYSETTING2.DAT +0 -0
  203. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/beat_jump_beat_value/sixtyfour/MYSETTING2.DAT +0 -0
  204. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/beat_jump_beat_value/thirtytwo/MYSETTING2.DAT +0 -0
  205. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/beat_jump_beat_value/two/MYSETTING2.DAT +0 -0
  206. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/jog_display_mode/artwork/MYSETTING2.DAT +0 -0
  207. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/jog_display_mode/auto/MYSETTING2.DAT +0 -0
  208. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/jog_display_mode/info/MYSETTING2.DAT +0 -0
  209. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/jog_display_mode/simple/MYSETTING2.DAT +0 -0
  210. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/jog_lcd_brightness/five/MYSETTING2.DAT +0 -0
  211. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/jog_lcd_brightness/four/MYSETTING2.DAT +0 -0
  212. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/jog_lcd_brightness/one/MYSETTING2.DAT +0 -0
  213. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/jog_lcd_brightness/three/MYSETTING2.DAT +0 -0
  214. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/jog_lcd_brightness/two/MYSETTING2.DAT +0 -0
  215. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/pad_button_brightness/four/MYSETTING2.DAT +0 -0
  216. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/pad_button_brightness/one/MYSETTING2.DAT +0 -0
  217. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/pad_button_brightness/three/MYSETTING2.DAT +0 -0
  218. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/pad_button_brightness/two/MYSETTING2.DAT +0 -0
  219. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/release/MYSETTING2.DAT +0 -0
  220. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/touch/MYSETTING2.DAT +0 -0
  221. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/touch_release/MYSETTING2.DAT +0 -0
  222. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/waveform/phase_meter/MYSETTING2.DAT +0 -0
  223. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/waveform/waveform/MYSETTING2.DAT +0 -0
  224. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/waveform_divisions/phrase/MYSETTING2.DAT +0 -0
  225. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/mysettings/mysetting2/waveform_divisions/time_scale/MYSETTING2.DAT +0 -0
  226. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 5/backup/DEVSETTING.DAT +0 -0
  227. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 5/backup/ExtData.edb +0 -0
  228. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 5/backup/MYSETTING.DAT +0 -0
  229. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P002/00009C2E/ANLZ0000.DAT +0 -0
  230. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P002/00009C2E/ANLZ0000.EXT +0 -0
  231. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P02B/00023587/ANLZ0000.DAT +0 -0
  232. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P02B/00023587/ANLZ0000.EXT +0 -0
  233. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P035/00027763/ANLZ0000.DAT +0 -0
  234. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P035/00027763/ANLZ0000.EXT +0 -0
  235. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P038/0002AAA0/ANLZ0000.DAT +0 -0
  236. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P038/0002AAA0/ANLZ0000.EXT +0 -0
  237. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P068/00012CA2/ANLZ0000.DAT +0 -0
  238. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P068/00012CA2/ANLZ0000.EXT +0 -0
  239. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P076/00013B6E/ANLZ0000.DAT +0 -0
  240. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P076/00013B6E/ANLZ0000.EXT +0 -0
  241. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 5/backup/datafile.edb +0 -0
  242. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 5/backup/masterPlaylists3.xml +0 -0
  243. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 5/database.xml +0 -0
  244. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 5/datafile.edb +0 -0
  245. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/DEVSETTING.DAT +0 -0
  246. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/DJMMYSETTING.DAT +0 -0
  247. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/MYSETTING.DAT +0 -0
  248. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/MYSETTING2.DAT +0 -0
  249. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/masterPlaylists3.xml +0 -0
  250. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/masterPlaylists6.xml +0 -0
  251. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.2EX +0 -0
  252. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.DAT +0 -0
  253. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.EXT +0 -0
  254. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.2EX +0 -0
  255. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.DAT +0 -0
  256. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.EXT +0 -0
  257. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.2EX +0 -0
  258. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.DAT +0 -0
  259. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.EXT +0 -0
  260. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.2EX +0 -0
  261. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.DAT +0 -0
  262. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.EXT +0 -0
  263. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.2EX +0 -0
  264. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.DAT +0 -0
  265. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.EXT +0 -0
  266. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.2EX +0 -0
  267. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.DAT +0 -0
  268. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.EXT +0 -0
  269. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/database.xml +0 -0
  270. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/masterPlaylists6_template.xml +0 -0
  271. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/master_locked.db +0 -0
  272. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/.testdata/rekordbox 6/master_unlocked.db +0 -0
  273. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/CONTRIBUTING.md +0 -0
  274. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/Makefile +0 -0
  275. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/make.bat +0 -0
  276. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_beat.svg +0 -0
  277. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_file.svg +0 -0
  278. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_pco2.svg +0 -0
  279. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_pcob.svg +0 -0
  280. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_pcp2.svg +0 -0
  281. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_pcpt.svg +0 -0
  282. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_ppth.svg +0 -0
  283. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_pqt2.svg +0 -0
  284. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_pqt2_2.svg +0 -0
  285. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_pqtz.svg +0 -0
  286. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_pssi.svg +0 -0
  287. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_pssi_entry.svg +0 -0
  288. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_pvbr.svg +0 -0
  289. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_pwav.svg +0 -0
  290. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_pwv3.svg +0 -0
  291. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_pwv4.svg +0 -0
  292. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_pwv5.svg +0 -0
  293. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_pwv5_entry.svg +0 -0
  294. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_pwv6.svg +0 -0
  295. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_pwv7.svg +0 -0
  296. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_pwvc.svg +0 -0
  297. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/anlz_tag.svg +0 -0
  298. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/images/x64dbg_rb_key.png +0 -0
  299. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/logos/dark/logo_primary.svg +0 -0
  300. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/logos/light/logo_primary.svg +0 -0
  301. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_static/logos/mid/logo_primary.svg +0 -0
  302. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_templates/apidoc/module.rst_t +0 -0
  303. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_templates/apidoc/package.rst_t +0 -0
  304. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_templates/apidoc/toc.rst_t +0 -0
  305. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_templates/autosummary/class.rst +0 -0
  306. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/_templates/autosummary/module.rst +0 -0
  307. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/api.md +0 -0
  308. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/conf.py +0 -0
  309. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/development/changes.md +0 -0
  310. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/development/contributing.md +0 -0
  311. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/formats/anlz.md +0 -0
  312. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/formats/db6.md +0 -0
  313. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/formats/mysetting.md +0 -0
  314. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/formats/xml.md +0 -0
  315. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/installation.md +0 -0
  316. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/key.md +0 -0
  317. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/quickstart.md +0 -0
  318. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/requirements.txt +0 -0
  319. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/tutorial/anlz.md +0 -0
  320. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/tutorial/configuration.md +0 -0
  321. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/tutorial/index.md +0 -0
  322. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/tutorial/mysetting.md +0 -0
  323. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/docs/source/tutorial/xml.md +0 -0
  324. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox/anlz/structs.py +0 -0
  325. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox/db6/__init__.py +0 -0
  326. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox/logger.py +0 -0
  327. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox/mysettings/structs.py +0 -0
  328. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox.egg-info/dependency_links.txt +0 -0
  329. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox.egg-info/not-zip-safe +0 -0
  330. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/pyrekordbox.egg-info/top_level.txt +0 -0
  331. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/setup.cfg +0 -0
  332. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/tests/__init__.py +0 -0
  333. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/tests/test_anlz.py +0 -0
  334. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/tests/test_config.py +0 -0
  335. {pyrekordbox-0.4.2 → pyrekordbox-0.4.4}/tests/test_mysetting.py +0 -0
@@ -0,0 +1 @@
1
+ buy_me_a_coffee: dylanljones
@@ -3,7 +3,7 @@
3
3
 
4
4
  repos:
5
5
  - repo: https://github.com/pre-commit/pre-commit-hooks
6
- rev: v5.0.0
6
+ rev: v6.0.0
7
7
  hooks:
8
8
  - id: end-of-file-fixer
9
9
  - id: trailing-whitespace
@@ -13,7 +13,7 @@ repos:
13
13
  - id: check-yaml
14
14
 
15
15
  - repo: https://github.com/astral-sh/ruff-pre-commit
16
- rev: v0.11.6
16
+ rev: v0.12.8
17
17
  hooks:
18
18
  # Run the linter.
19
19
  - id: ruff
@@ -1,6 +1,43 @@
1
1
  # What's New
2
2
 
3
3
 
4
+ <a name="v0.4.4"></a>
5
+ ## [v0.4.4] - 2025-08-17
6
+
7
+ This update strengthens database key management, optimizes datetime parsing for consistent timezone
8
+ handling, and improves PSSI tag processing to better detect and deobfuscate garbled ANLZ files.
9
+
10
+ ### Improvements/Bug Fixes
11
+
12
+ - **db:** **improve database key handling ([#181](https://github.com/dylanljones/pyrekordbox/issues/181))**
13
+ The database handling is now much more robust. This also improves the config performance of the
14
+ library and reduces the number of dependencies. The 'download_key' CLI command was removed as well.
15
+ Note: The app-data directory of pyrekordbox can be removed as it is no longer used.
16
+ - **db:** **enhance datetime parsing for timezone handling ([#176](https://github.com/dylanljones/pyrekordbox/pull/176))**
17
+ Updated the string_to_datetime function to normalize 'Z' to '+00:00' and improved handling of
18
+ timezone information. This ensures compatibility with various datetime formats and maintains
19
+ consistency with UTC representation.
20
+ - **anlz**: **enhance PSSI tag handling to improve garbled file detection and deobfuscation ([#175](https://github.com/dylanljones/pyrekordbox/pull/175))**
21
+ Updated logic for mood and bank validation, and refined XOR deobfuscation process for garbled tags.
22
+
23
+
24
+ <a name="v0.4.3"></a>
25
+ ## [v0.4.3] - 2025-05-14
26
+
27
+ This release adds type annotations across the codebase and fixes various bugs.
28
+
29
+ ### Improvements/Bug Fixes
30
+
31
+ - **db:** **add type checks for deleting playlists and playlist songs ([#169](https://github.com/dylanljones/pyrekordbox/issues/169))**
32
+ This prevents deleting a content instead of a playlist song by accident.
33
+ - **db:** **fix timezone issue when setting datetimes ([#168](https://github.com/dylanljones/pyrekordbox/issues/168))**
34
+ Datetime fields are now set with UTC which is the same format that Rekordbox uses.
35
+ Timezone agnostic dates or dates with another timezone are converted accordingly.
36
+ - **xml:** **fix issue with pretty-formatting xml string ([#164](https://github.com/dylanljones/pyrekordbox/issues/164))**
37
+ For Python>3.8 the built-in indentation is used, for Python3.8 the XML string is returned unformatted if minidom fails
38
+ - **add type hints across the codebase and use mypy for static type checking**
39
+
40
+
4
41
  <a name="v0.4.2"></a>
5
42
  ## [v0.4.2] - 2025-04-21
6
43
 
@@ -650,7 +687,9 @@ This release contains documentation fixes.
650
687
  - **add missing djmd tables to `master.db` database documentation**
651
688
 
652
689
 
653
- [Unreleased]: https://github.com/dylanljones/pyrekordbox/compare/v0.4.2...HEAD
690
+ [Unreleased]: https://github.com/dylanljones/pyrekordbox/compare/v0.4.4...HEAD
691
+ [v0.4.4]: https://github.com/dylanljones/pyrekordbox/compare/v0.4.3...v0.4.4
692
+ [v0.4.3]: https://github.com/dylanljones/pyrekordbox/compare/v0.4.2...v0.4.3
654
693
  [v0.4.2]: https://github.com/dylanljones/pyrekordbox/compare/v0.4.1...v0.4.2
655
694
  [v0.4.1]: https://github.com/dylanljones/pyrekordbox/compare/v0.4.0...v0.4.1
656
695
  [v0.4.0]: https://github.com/dylanljones/pyrekordbox/compare/v0.3.2...v0.4.0
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2022-2024, Dylan Jones
3
+ Copyright (c) 2022-2025, Dylan Jones
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyrekordbox
3
- Version: 0.4.2
3
+ Version: 0.4.4
4
4
  Summary: Inofficial Python package for interacting with the library of Pioneers Rekordbox DJ software.
5
5
  Author-email: Dylan Jones <dylanljones94@gmail.com>
6
6
  License: MIT License
7
7
 
8
- Copyright (c) 2022-2024, Dylan Jones
8
+ Copyright (c) 2022-2025, Dylan Jones
9
9
 
10
10
  Permission is hereby granted, free of charge, to any person obtaining a copy
11
11
  of this software and associated documentation files (the "Software"), to deal
@@ -29,7 +29,7 @@ Project-URL: Source, https://github.com/dylanljones/pyrekordbox
29
29
  Project-URL: Documentation, https://pyrekordbox.readthedocs.io/en/stable/
30
30
  Project-URL: Tracker, https://github.com/dylanljones/pyrekordbox/issues
31
31
  Platform: any
32
- Classifier: Development Status :: 3 - Alpha
32
+ Classifier: Development Status :: 4 - Beta
33
33
  Classifier: Intended Audience :: Developers
34
34
  Classifier: Intended Audience :: Information Technology
35
35
  Classifier: License :: OSI Approved :: MIT License
@@ -48,14 +48,12 @@ Requires-Python: >=3.8
48
48
  Description-Content-Type: text/markdown
49
49
  License-File: LICENSE
50
50
  Requires-Dist: bidict>=0.21.0
51
- Requires-Dist: blowfish>=0.6.0
52
51
  Requires-Dist: construct>=2.10.0
53
52
  Requires-Dist: numpy>=1.19.0
54
53
  Requires-Dist: packaging
55
54
  Requires-Dist: psutil>=5.9.0
56
55
  Requires-Dist: sqlalchemy>=2.0.0
57
56
  Requires-Dist: sqlcipher3-wheels
58
- Requires-Dist: frida-tools
59
57
  Requires-Dist: python-dateutil
60
58
  Provides-Extra: test
61
59
  Requires-Dist: hypothesis>=6.0.0; extra == "test"
@@ -87,11 +85,9 @@ Pioneers Rekordbox DJ Software. It currently supports
87
85
  - Analysis files (ANLZ)
88
86
  - My-Setting files
89
87
 
90
- Tested Rekordbox versions: ``5.8.6 | 6.7.7 | 7.0.9``
88
+ Check the [changelog][CHANGELOG] for recent changes!
91
89
 
92
- > [!WARNING]
93
- > This project is still under development and might contain bugs or have breaking API changes in the future.
94
- > Check the [changelog][CHANGELOG] for recent changes!
90
+ Tested Rekordbox versions: ``5.8.6 | 6.7.7 | 7.0.9``
95
91
 
96
92
 
97
93
  ## 🔧 Installation
@@ -143,10 +139,6 @@ from pyrekordbox.config import update_config
143
139
  update_config("<pioneer_install_dir>", "<pioneer_app_dir>")
144
140
  ````
145
141
 
146
- Alternatively the two paths can be specified in a configuration file under the section
147
- `rekordbox`. Supported configuration files are pyproject.toml, setup.cfg, pyrekordbox.toml,
148
- pyrekordbox.cfg and pyrekordbox.yaml.
149
-
150
142
 
151
143
  ### Rekordbox 6/7 database
152
144
 
@@ -193,19 +185,6 @@ So far only a few tables support adding or deleting entries:
193
185
  - ``DjmdGenre``: Genres
194
186
  - ``DjmdLabel``: Labels
195
187
 
196
- If the automatic key extraction fails the command line interface of ``pyrekordbox``
197
- provides a command for downloading the key from known sources and writing it to the
198
- cache file:
199
- ````shell
200
- python -m pyrekordbox download-key
201
- ````
202
- Once the key is cached the database can be opened without providing the key.
203
- The key can also be provided manually:
204
- ````python
205
- db = Rekordbox6Database(key="<insert key here>")
206
- ````
207
-
208
-
209
188
  ### Rekordbox XML
210
189
 
211
190
  The Rekordbox XML database is used for importing (and exporting) Rekordbox collections
@@ -263,9 +242,6 @@ Changing and creating the Rekordbox analysis files is planned as well, but for t
263
242
  full structure of the analysis files has to be understood.
264
243
 
265
244
  Unsupported ANLZ tags:
266
- - PCOB
267
- - PCO2
268
- - PSSI
269
245
  - PWV6
270
246
  - PWV7
271
247
  - PWVC
@@ -317,22 +293,20 @@ instead of opening an issue.
317
293
  Pyrekordbox is tested on Windows and MacOS, however some features can't be tested in
318
294
  the CI setup since it requires a working Rekordbox installation.
319
295
 
296
+ ## ♡ Sponsor
297
+
298
+ If pyrekordbox has helped you or saved you time, consider supporting its development - every coffee makes a difference!
299
+
300
+ [![BuyMeACoffee](https://raw.githubusercontent.com/pachadotdev/buymeacoffee-badges/main/bmc-white.svg)](https://www.buymeacoffee.com/dylanljones)
301
+
320
302
 
321
303
  ## 🔗 Related Projects and References
322
304
 
323
305
  - [crate-digger]: Java library for fetching and parsing rekordbox exports and track analysis files.
324
306
  - [rekordcrate]: Library for parsing Pioneer Rekordbox device exports
325
307
  - [supbox]: Get the currently playing track from Rekordbox v6 as Audio Hijack Shoutcast/Icecast metadata, display in your OBS video broadcast or export as JSON.
326
- - Deep Symmetry has an extensive analysis of Rekordbox's ANLZ and .edb export file formats
308
+ - [Deep Symmetry] has an extensive analysis of Rekordbox's ANLZ and .edb export file formats
327
309
  https://djl-analysis.deepsymmetry.org/djl-analysis
328
- - rekordcrate reverse engineered the format of the Rekordbox MySetting files
329
- https://holzhaus.github.io/rekordcrate/rekordcrate/setting/index.html
330
- - rekordcloud went into detail about the internals of Rekordbox 6
331
- https://rekord.cloud/blog/technical-inspection-of-rekordbox-6-and-its-new-internals.
332
- - supbox has a nice implementation on finding the Rekordbox 6 database key
333
- https://github.com/gabek/supbox
334
-
335
-
336
310
 
337
311
 
338
312
  [tests-badge]: https://img.shields.io/github/actions/workflow/status/dylanljones/pyrekordbox/tests.yml?branch=master&label=tests&logo=github&style=flat
@@ -379,3 +353,4 @@ the CI setup since it requires a working Rekordbox installation.
379
353
  [rekordcrate]: https://github.com/Holzhaus/rekordcrate
380
354
  [crate-digger]: https://github.com/Deep-Symmetry/crate-digger
381
355
  [supbox]: https://github.com/gabek/supbox
356
+ [Deep Symmetry]: https://deepsymmetry.org/
@@ -22,11 +22,9 @@ Pioneers Rekordbox DJ Software. It currently supports
22
22
  - Analysis files (ANLZ)
23
23
  - My-Setting files
24
24
 
25
- Tested Rekordbox versions: ``5.8.6 | 6.7.7 | 7.0.9``
25
+ Check the [changelog][CHANGELOG] for recent changes!
26
26
 
27
- > [!WARNING]
28
- > This project is still under development and might contain bugs or have breaking API changes in the future.
29
- > Check the [changelog][CHANGELOG] for recent changes!
27
+ Tested Rekordbox versions: ``5.8.6 | 6.7.7 | 7.0.9``
30
28
 
31
29
 
32
30
  ## 🔧 Installation
@@ -78,10 +76,6 @@ from pyrekordbox.config import update_config
78
76
  update_config("<pioneer_install_dir>", "<pioneer_app_dir>")
79
77
  ````
80
78
 
81
- Alternatively the two paths can be specified in a configuration file under the section
82
- `rekordbox`. Supported configuration files are pyproject.toml, setup.cfg, pyrekordbox.toml,
83
- pyrekordbox.cfg and pyrekordbox.yaml.
84
-
85
79
 
86
80
  ### Rekordbox 6/7 database
87
81
 
@@ -128,19 +122,6 @@ So far only a few tables support adding or deleting entries:
128
122
  - ``DjmdGenre``: Genres
129
123
  - ``DjmdLabel``: Labels
130
124
 
131
- If the automatic key extraction fails the command line interface of ``pyrekordbox``
132
- provides a command for downloading the key from known sources and writing it to the
133
- cache file:
134
- ````shell
135
- python -m pyrekordbox download-key
136
- ````
137
- Once the key is cached the database can be opened without providing the key.
138
- The key can also be provided manually:
139
- ````python
140
- db = Rekordbox6Database(key="<insert key here>")
141
- ````
142
-
143
-
144
125
  ### Rekordbox XML
145
126
 
146
127
  The Rekordbox XML database is used for importing (and exporting) Rekordbox collections
@@ -198,9 +179,6 @@ Changing and creating the Rekordbox analysis files is planned as well, but for t
198
179
  full structure of the analysis files has to be understood.
199
180
 
200
181
  Unsupported ANLZ tags:
201
- - PCOB
202
- - PCO2
203
- - PSSI
204
182
  - PWV6
205
183
  - PWV7
206
184
  - PWVC
@@ -252,22 +230,20 @@ instead of opening an issue.
252
230
  Pyrekordbox is tested on Windows and MacOS, however some features can't be tested in
253
231
  the CI setup since it requires a working Rekordbox installation.
254
232
 
233
+ ## ♡ Sponsor
234
+
235
+ If pyrekordbox has helped you or saved you time, consider supporting its development - every coffee makes a difference!
236
+
237
+ [![BuyMeACoffee](https://raw.githubusercontent.com/pachadotdev/buymeacoffee-badges/main/bmc-white.svg)](https://www.buymeacoffee.com/dylanljones)
238
+
255
239
 
256
240
  ## 🔗 Related Projects and References
257
241
 
258
242
  - [crate-digger]: Java library for fetching and parsing rekordbox exports and track analysis files.
259
243
  - [rekordcrate]: Library for parsing Pioneer Rekordbox device exports
260
244
  - [supbox]: Get the currently playing track from Rekordbox v6 as Audio Hijack Shoutcast/Icecast metadata, display in your OBS video broadcast or export as JSON.
261
- - Deep Symmetry has an extensive analysis of Rekordbox's ANLZ and .edb export file formats
245
+ - [Deep Symmetry] has an extensive analysis of Rekordbox's ANLZ and .edb export file formats
262
246
  https://djl-analysis.deepsymmetry.org/djl-analysis
263
- - rekordcrate reverse engineered the format of the Rekordbox MySetting files
264
- https://holzhaus.github.io/rekordcrate/rekordcrate/setting/index.html
265
- - rekordcloud went into detail about the internals of Rekordbox 6
266
- https://rekord.cloud/blog/technical-inspection-of-rekordbox-6-and-its-new-internals.
267
- - supbox has a nice implementation on finding the Rekordbox 6 database key
268
- https://github.com/gabek/supbox
269
-
270
-
271
247
 
272
248
 
273
249
  [tests-badge]: https://img.shields.io/github/actions/workflow/status/dylanljones/pyrekordbox/tests.yml?branch=master&label=tests&logo=github&style=flat
@@ -314,3 +290,4 @@ the CI setup since it requires a working Rekordbox installation.
314
290
  [rekordcrate]: https://github.com/Holzhaus/rekordcrate
315
291
  [crate-digger]: https://github.com/Deep-Symmetry/crate-digger
316
292
  [supbox]: https://github.com/gabek/supbox
293
+ [Deep Symmetry]: https://deepsymmetry.org/
@@ -44,7 +44,6 @@ caption: User Guide
44
44
 
45
45
  quickstart
46
46
  installation
47
- key
48
47
  tutorial/index
49
48
  api
50
49
  ```
@@ -1,14 +1,14 @@
1
1
  # Rekordbox 6 Database
2
2
 
3
3
  Pyrekordbox uses [SQLALchemy](https://www.sqlalchemy.org/) as ORM-Framework to handle the
4
- Rekordbox v6 database file (``master.db``). The table declarations can be found in
4
+ Rekordbox database file (``master.db``). The table declarations can be found in
5
5
  ``pyrekordbox.db6.tables``.
6
6
 
7
7
  ```{seealso}
8
8
  See the {ref}`Rekordbox 6 Database Format <Rekordbox 6 Database Format>` documentation for more information.
9
9
  ```
10
10
 
11
- Since the Rekordbox v6 database handler automatically finds the ``master.db`` database file
11
+ Since the Rekordbox database handler automatically finds the ``master.db`` database file
12
12
  (see configuration), it can be initialized without any arguments:
13
13
  ````python
14
14
  from pyrekordbox import Rekordbox6Database
@@ -16,28 +16,6 @@ from pyrekordbox import Rekordbox6Database
16
16
  db = Rekordbox6Database()
17
17
  ````
18
18
 
19
- If the automatic key extraction fails the command line interface of ``pyrekordbox``
20
- provides a command for downloading the key from known sources and writing it to the
21
- cache file:
22
- ````shell
23
- python -m pyrekordbox download-key
24
- ````
25
- Once the key is cached the database can be opened without providing the key.
26
- If you obtained the key from another source, you can also pass it to the database handler
27
- ````python
28
- db = Rekordbox6Database(key="<insert key here>")
29
- ````
30
- or write it to the cache file manually:
31
- ````python
32
- from pyrekordbox.config import write_db6_key_cache
33
-
34
- write_db6_key_cache("<insert key here>") # call once
35
- db = Rekordbox6Database()
36
- ````
37
- The key can be found in some other projects (see issue
38
- [#77](https://github.com/dylanljones/pyrekordbox/issues/77)), for example [here][rb6-key].
39
-
40
-
41
19
  ## Querying the database
42
20
 
43
21
  A query can be executed on any table by calling the ``query()`` method. The result is
@@ -203,4 +181,3 @@ More coming soon!
203
181
  [DjmdPlaylist]: pyrekordbox.db6.tables.DjmdPlaylist
204
182
  [djmdSongPlaylist-table]: #djmdSongPlaylist
205
183
  [DjmdSongPlaylist]: pyrekordbox.db6.tables.DjmdSongPlaylist
206
- [rb6-key]: https://github.com/mganss/CueGen/blob/19878e6eb3f586dee0eb3eb4f2ce3ef18309de9d/CueGen/Generator.cs#L31
File without changes
@@ -11,7 +11,7 @@ authors = [
11
11
  license = {file = "LICENSE"}
12
12
  dynamic = ["version"]
13
13
  classifiers = [
14
- "Development Status :: 3 - Alpha",
14
+ "Development Status :: 4 - Beta",
15
15
  "Intended Audience :: Developers",
16
16
  "Intended Audience :: Information Technology",
17
17
  "License :: OSI Approved :: MIT License",
@@ -30,14 +30,12 @@ classifiers = [
30
30
  requires-python = ">=3.8"
31
31
  dependencies = [
32
32
  "bidict>=0.21.0",
33
- "blowfish>=0.6.0",
34
33
  "construct>=2.10.0",
35
34
  "numpy>=1.19.0",
36
35
  "packaging",
37
36
  "psutil>=5.9.0",
38
37
  "sqlalchemy>=2.0.0",
39
38
  "sqlcipher3-wheels",
40
- "frida-tools",
41
39
  "python-dateutil",
42
40
  ]
43
41
 
@@ -78,6 +76,9 @@ include = ["pyrekordbox", "pyrekordbox.*"]
78
76
  write_to = "pyrekordbox/_version.py"
79
77
  git_describe_command = "git describe --dirty --tags --long --match * --first-parent"
80
78
 
79
+ [tool.setuptools.package-data]
80
+ pyrekordbox = ["py.typed"]
81
+
81
82
 
82
83
  # -- Ruff ------------------------------------------------------------------------------
83
84
 
@@ -105,6 +106,7 @@ select = [
105
106
  "NPY", # Numpy
106
107
  "N", # pep8-naming
107
108
  "D", # pydocstyle
109
+ "ANN", # types-annotations
108
110
  ]
109
111
  ignore = [
110
112
  "E203", # Whitespace before ':'
@@ -124,12 +126,21 @@ ignore = [
124
126
  "N813", # Camelcase imported as lowercase
125
127
  #"N815", # Variable in class scope should not be mixedCase
126
128
  "N818", # Exception name should be named with an Error suffix
129
+ "ANN001", # Missing type annotation for obj in method
130
+ "ANN002", # Missing type annotation for args in method
131
+ "ANN003", # Missing type annotation for kwargs in method
132
+ "ANN101", # Missing type annotation for self in method
133
+ "ANN102", # Missing type annotation for cls in classmethod
134
+ "ANN204", # Missing return type for __init__
135
+ "ANN401", # Dynamically typed expressions (typing.Any) are disallowed
127
136
  ]
128
137
  fixable = ["ALL"] # Allow fix for all enabled rules (when `--fix`) is provided.
129
138
  unfixable = []
130
139
 
131
140
  [tool.ruff.lint.per-file-ignores]
132
141
  "*__init__.py" = ["F401"]
142
+ "*__main__.py" = ["ANN"]
143
+ "tests/*" = ["ANN"]
133
144
  "rbxml.py" = ["N803"]
134
145
  "tables.py" = ["N802", "N815"]
135
146
 
@@ -148,6 +159,36 @@ skip-magic-trailing-comma = false
148
159
  line-ending = "auto"
149
160
 
150
161
 
162
+ # -- Mypy ------------------------------------------------------------------------------
163
+
164
+ [tool.mypy]
165
+
166
+ strict = true
167
+ ignore_missing_imports = true # Ignore missing type hints for third-party librarie
168
+ show_error_codes = true # Show error codes in the output
169
+
170
+ exclude = [
171
+ "__main__.py",
172
+ 'tools',
173
+ 'agent'
174
+ ]
175
+
176
+ # Useful fine-tuning overrides to 'strict'
177
+ warn_unused_configs = true
178
+ warn_return_any = true
179
+ no_implicit_optional = false
180
+ warn_unused_ignores = true
181
+ disallow_untyped_defs = true
182
+ disallow_incomplete_defs = true
183
+ disallow_untyped_calls = false # often useful to allow
184
+ disallow_untyped_decorators = false # decorators are often tricky
185
+ check_untyped_defs = true
186
+
187
+ plugins = [
188
+ "numpy.typing.mypy_plugin",
189
+ "sqlalchemy.ext.mypy.plugin",
190
+ ]
191
+
151
192
  # -- Coverage --------------------------------------------------------------------------
152
193
 
153
194
  [tool.coverage.run]
@@ -2,6 +2,7 @@
2
2
  # Author: Dylan Jones
3
3
  # Date: 2022-04-10
4
4
 
5
+ # mypy: disable-error-code="attr-defined"
5
6
  from .anlz import AnlzFile, get_anlz_paths, read_anlz_files, walk_anlz_paths
6
7
  from .config import get_config, show_config, update_config
7
8
  from .db6 import Rekordbox6Database
@@ -3,30 +3,10 @@
3
3
  # Date: 2023-08-15
4
4
 
5
5
  import os
6
- import re
7
6
  import shutil
8
7
  import sys
9
- import urllib.request
10
8
  from pathlib import Path
11
9
 
12
- from pyrekordbox.config import get_cache_file, write_db6_key_cache
13
-
14
- KEY_SOURCES = [
15
- {
16
- "url": r"https://raw.githubusercontent.com/mganss/CueGen/19878e6eb3f586dee0eb3eb4f2ce3ef18309de9d/CueGen/Generator.cs", # noqa: E501
17
- "regex": re.compile(
18
- r'((.|\n)*)Config\.UseSqlCipher.*\?.*"(?P<dp>.*)".*:.*null',
19
- flags=re.IGNORECASE | re.MULTILINE,
20
- ),
21
- },
22
- {
23
- "url": r"https://raw.githubusercontent.com/dvcrn/go-rekordbox/8be6191ba198ed7abd4ad6406d177ed7b4f749b5/cmd/getencryptionkey/main.go", # noqa: E501
24
- "regex": re.compile(
25
- r'((.|\n)*)fmt\.Print\("(?P<dp>.*)"\)', flags=re.IGNORECASE | re.MULTILINE
26
- ),
27
- },
28
- ]
29
-
30
10
 
31
11
  class WorkingDir:
32
12
  def __init__(self, path):
@@ -130,40 +110,12 @@ def install_pysqlcipher(
130
110
  print(f"Could not remove temporary directory '{tmpdir}'!")
131
111
 
132
112
 
133
- def download_db6_key():
134
- dp = ""
135
- for source in KEY_SOURCES:
136
- url = source["url"]
137
- regex = source["regex"]
138
- print(f"Looking for key: {url}")
139
-
140
- res = urllib.request.urlopen(url)
141
- data = res.read().decode("utf-8")
142
- match = regex.match(data)
143
- if match:
144
- dp = match.group("dp")
145
- break
146
- if dp:
147
- cache_file = get_cache_file()
148
- print(f"Found key, updating cache file {cache_file}")
149
- write_db6_key_cache(dp)
150
- else:
151
- print("No key found in the online sources.")
152
-
153
-
154
113
  def main():
155
114
  from argparse import ArgumentParser
156
115
 
157
116
  parser = ArgumentParser("pyrekordbox")
158
117
  subparsers = parser.add_subparsers(dest="command")
159
118
 
160
- # Download Rekordbx 6 database key command
161
- subparsers.add_parser(
162
- "download-key",
163
- help="Download the Rekordbox 6 database key from the internet "
164
- "and write it to the cache file.",
165
- )
166
-
167
119
  # Install pysqlcipher3 command (Windows only)
168
120
  install_parser = subparsers.add_parser(
169
121
  "install-sqlcipher",
@@ -192,9 +144,7 @@ def main():
192
144
 
193
145
  # Parse args and handle command
194
146
  args = parser.parse_args(sys.argv[1:])
195
- if args.command == "download-key":
196
- download_db6_key()
197
- elif args.command == "install-sqlcipher":
147
+ if args.command == "install-sqlcipher":
198
148
  install_pysqlcipher(args.tmpdir, args.cryptolib, install=not args.buildonly)
199
149
 
200
150
 
@@ -1,7 +1,14 @@
1
1
  # file generated by setuptools-scm
2
2
  # don't change, don't track in version control
3
3
 
4
- __all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
4
+ __all__ = [
5
+ "__version__",
6
+ "__version_tuple__",
7
+ "version",
8
+ "version_tuple",
9
+ "__commit_id__",
10
+ "commit_id",
11
+ ]
5
12
 
6
13
  TYPE_CHECKING = False
7
14
  if TYPE_CHECKING:
@@ -9,13 +16,19 @@ if TYPE_CHECKING:
9
16
  from typing import Union
10
17
 
11
18
  VERSION_TUPLE = Tuple[Union[int, str], ...]
19
+ COMMIT_ID = Union[str, None]
12
20
  else:
13
21
  VERSION_TUPLE = object
22
+ COMMIT_ID = object
14
23
 
15
24
  version: str
16
25
  __version__: str
17
26
  __version_tuple__: VERSION_TUPLE
18
27
  version_tuple: VERSION_TUPLE
28
+ commit_id: COMMIT_ID
29
+ __commit_id__: COMMIT_ID
19
30
 
20
- __version__ = version = '0.4.2'
21
- __version_tuple__ = version_tuple = (0, 4, 2)
31
+ __version__ = version = '0.4.4'
32
+ __version_tuple__ = version_tuple = (0, 4, 4)
33
+
34
+ __commit_id__ = commit_id = 'gec8cd22'
@@ -4,7 +4,7 @@
4
4
 
5
5
  import re
6
6
  from pathlib import Path
7
- from typing import Union
7
+ from typing import Dict, Iterator, Tuple, Union
8
8
 
9
9
  from . import structs
10
10
  from .file import AnlzFile
@@ -42,7 +42,7 @@ def is_anlz_file(path: Union[str, Path]) -> bool:
42
42
  return bool(RE_ANLZ.match(path.name))
43
43
 
44
44
 
45
- def get_anlz_paths(root: Union[str, Path]) -> dict:
45
+ def get_anlz_paths(root: Union[str, Path]) -> Dict[str, Union[Path, None]]:
46
46
  """Returns the paths of all existing ANLZ files in a directory.
47
47
 
48
48
  Parameters
@@ -62,14 +62,14 @@ def get_anlz_paths(root: Union[str, Path]) -> dict:
62
62
  >>> p["DAT"]
63
63
  directory/ANLZ0000.DAT
64
64
  """
65
- paths = {"DAT": None, "EXT": None, "2EX": None}
65
+ paths: Dict[str, Union[Path, None]] = {"DAT": None, "EXT": None, "2EX": None}
66
66
  for path in Path(root).iterdir():
67
67
  if RE_ANLZ.match(path.name):
68
68
  paths[path.suffix[1:].upper()] = path
69
69
  return paths
70
70
 
71
71
 
72
- def walk_anlz_dirs(root_dir: Union[str, Path]):
72
+ def walk_anlz_dirs(root_dir: Union[str, Path]) -> Iterator[Path]:
73
73
  """Finds all ANLZ directory paths recursively.
74
74
 
75
75
  Parameters
@@ -88,7 +88,7 @@ def walk_anlz_dirs(root_dir: Union[str, Path]):
88
88
  yield path
89
89
 
90
90
 
91
- def walk_anlz_paths(root_dir: Union[str, Path]):
91
+ def walk_anlz_paths(root_dir: Union[str, Path]) -> Iterator[Tuple[Path, Dict[str, Path]]]:
92
92
  """Finds all ANLZ directory paths and the containing file paths recursively.
93
93
 
94
94
  Parameters
@@ -110,7 +110,7 @@ def walk_anlz_paths(root_dir: Union[str, Path]):
110
110
  yield anlz_dir, files
111
111
 
112
112
 
113
- def read_anlz_files(root: Union[str, Path] = "") -> dict:
113
+ def read_anlz_files(root: Union[str, Path] = "") -> Dict[Path, AnlzFile]:
114
114
  """Open all ANLZ files in the given root directory.
115
115
 
116
116
  Parameters