pyrekordbox 0.2.2__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.github/workflows/codeql.yml +25 -0
  2. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.github/workflows/pypi-publish.yml +4 -4
  3. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.github/workflows/tests.yml +2 -5
  4. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.pre-commit-config.yaml +7 -10
  5. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/CHANGELOG.md +41 -1
  6. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/CONTRIBUTING.md +3 -4
  7. {pyrekordbox-0.2.2/pyrekordbox.egg-info → pyrekordbox-0.3.0}/PKG-INFO +15 -11
  8. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/README.md +12 -8
  9. pyrekordbox-0.3.0/docs/source/_static/images/x64dbg_rb_key.png +0 -0
  10. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/index.md +2 -4
  11. pyrekordbox-0.2.2/INSTALLATION.md → pyrekordbox-0.3.0/docs/source/installation.md +105 -41
  12. pyrekordbox-0.3.0/docs/source/key.md +104 -0
  13. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/quickstart.md +1 -1
  14. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyproject.toml +22 -25
  15. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox/__init__.py +1 -1
  16. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox/__main__.py +1 -5
  17. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox/_version.py +2 -2
  18. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox/anlz/file.py +2 -2
  19. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox/config.py +20 -16
  20. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox/db6/database.py +60 -27
  21. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox/db6/registry.py +7 -1
  22. pyrekordbox-0.3.0/pyrekordbox/xml.py +8 -0
  23. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0/pyrekordbox.egg-info}/PKG-INFO +15 -11
  24. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox.egg-info/SOURCES.txt +3 -1
  25. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/tests/test_xml.py +1 -1
  26. pyrekordbox-0.2.2/docs/source/installation.md +0 -3
  27. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  28. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.github/ISSUE_TEMPLATE/config.yaml +0 -0
  29. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  30. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.gitignore +0 -0
  31. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.readthedocs.yaml +0 -0
  32. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/DEVSETTING.DAT +0 -0
  33. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/DJMMYSETTING.DAT +0 -0
  34. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/MYSETTING.DAT +0 -0
  35. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/MYSETTING2.DAT +0 -0
  36. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.2EX +0 -0
  37. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.DAT +0 -0
  38. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.EXT +0 -0
  39. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.2EX +0 -0
  40. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.DAT +0 -0
  41. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.EXT +0 -0
  42. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.2EX +0 -0
  43. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.DAT +0 -0
  44. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.EXT +0 -0
  45. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.2EX +0 -0
  46. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.DAT +0 -0
  47. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.EXT +0 -0
  48. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.2EX +0 -0
  49. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.DAT +0 -0
  50. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.EXT +0 -0
  51. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.2EX +0 -0
  52. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.DAT +0 -0
  53. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.EXT +0 -0
  54. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/rekordbox/export.pdb +0 -0
  55. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/rekordbox/exportExt.pdb +0 -0
  56. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/DEVSETTING.DAT +0 -0
  57. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/DJMMYSETTING.DAT +0 -0
  58. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/MYSETTING.DAT +0 -0
  59. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/MYSETTING2.DAT +0 -0
  60. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/beat_fx_quantize/off/DJMMYSETTING.DAT +0 -0
  61. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/beat_fx_quantize/on/DJMMYSETTING.DAT +0 -0
  62. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/channel_fader_curve/linear/DJMMYSETTING.DAT +0 -0
  63. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/channel_fader_curve/steep_bottom/DJMMYSETTING.DAT +0 -0
  64. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/channel_fader_curve/steep_top/DJMMYSETTING.DAT +0 -0
  65. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/exponential/DJMMYSETTING.DAT +0 -0
  66. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/linear/DJMMYSETTING.DAT +0 -0
  67. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/smooth/DJMMYSETTING.DAT +0 -0
  68. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/cross_fader_curve/constant/DJMMYSETTING.DAT +0 -0
  69. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/cross_fader_curve/fast_cut/DJMMYSETTING.DAT +0 -0
  70. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/cross_fader_curve/slow_cut/DJMMYSETTING.DAT +0 -0
  71. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/display_brightness/five/DJMMYSETTING.DAT +0 -0
  72. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/display_brightness/four/DJMMYSETTING.DAT +0 -0
  73. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/display_brightness/one/DJMMYSETTING.DAT +0 -0
  74. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/display_brightness/three/DJMMYSETTING.DAT +0 -0
  75. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/display_brightness/two/DJMMYSETTING.DAT +0 -0
  76. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/display_brightness/white/DJMMYSETTING.DAT +0 -0
  77. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/headphones_mono_split/mono_split/DJMMYSETTING.DAT +0 -0
  78. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/headphones_mono_split/stereo/DJMMYSETTING.DAT +0 -0
  79. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/headphones_pre_eq/post_eq/DJMMYSETTING.DAT +0 -0
  80. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/headphones_pre_eq/pre_eq/DJMMYSETTING.DAT +0 -0
  81. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/indicator_brightness/one/DJMMYSETTING.DAT +0 -0
  82. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/indicator_brightness/three/DJMMYSETTING.DAT +0 -0
  83. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/indicator_brightness/two/DJMMYSETTING.DAT +0 -0
  84. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/mic_low_cut/off/DJMMYSETTING.DAT +0 -0
  85. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/mic_low_cut/on/DJMMYSETTING.DAT +0 -0
  86. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_button_type/toggle/DJMMYSETTING.DAT +0 -0
  87. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_button_type/trigger/DJMMYSETTING.DAT +0 -0
  88. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/eight/DJMMYSETTING.DAT +0 -0
  89. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/eleven/DJMMYSETTING.DAT +0 -0
  90. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/fifteen/DJMMYSETTING.DAT +0 -0
  91. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/five/DJMMYSETTING.DAT +0 -0
  92. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/four/DJMMYSETTING.DAT +0 -0
  93. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/fourteen/DJMMYSETTING.DAT +0 -0
  94. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/nine/DJMMYSETTING.DAT +0 -0
  95. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/one/DJMMYSETTING.DAT +0 -0
  96. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/seven/DJMMYSETTING.DAT +0 -0
  97. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/six/DJMMYSETTING.DAT +0 -0
  98. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/sixteen/DJMMYSETTING.DAT +0 -0
  99. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/ten/DJMMYSETTING.DAT +0 -0
  100. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/thirteen/DJMMYSETTING.DAT +0 -0
  101. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/three/DJMMYSETTING.DAT +0 -0
  102. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/twelve/DJMMYSETTING.DAT +0 -0
  103. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/two/DJMMYSETTING.DAT +0 -0
  104. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/talk_over_level/minus_12db/DJMMYSETTING.DAT +0 -0
  105. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/talk_over_level/minus_18db/DJMMYSETTING.DAT +0 -0
  106. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/talk_over_level/minus_24db/DJMMYSETTING.DAT +0 -0
  107. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/talk_over_level/minus_6db/DJMMYSETTING.DAT +0 -0
  108. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/talk_over_mode/advanced/DJMMYSETTING.DAT +0 -0
  109. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/talk_over_mode/normal/DJMMYSETTING.DAT +0 -0
  110. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue/off/MYSETTING.DAT +0 -0
  111. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue/on/MYSETTING.DAT +0 -0
  112. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/memory/MYSETTING.DAT +0 -0
  113. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_36db/MYSETTING.DAT +0 -0
  114. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_42db/MYSETTING.DAT +0 -0
  115. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_48db/MYSETTING.DAT +0 -0
  116. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_54db/MYSETTING.DAT +0 -0
  117. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_60db/MYSETTING.DAT +0 -0
  118. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_66db/MYSETTING.DAT +0 -0
  119. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_72db/MYSETTING.DAT +0 -0
  120. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_78db/MYSETTING.DAT +0 -0
  121. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/disc_slot_illumination/bright/MYSETTING.DAT +0 -0
  122. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/disc_slot_illumination/dark/MYSETTING.DAT +0 -0
  123. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/disc_slot_illumination/off/MYSETTING.DAT +0 -0
  124. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/eject_lock/lock/MYSETTING.DAT +0 -0
  125. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/eject_lock/unlock/MYSETTING.DAT +0 -0
  126. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/hotcue_autoload/off/MYSETTING.DAT +0 -0
  127. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/hotcue_autoload/on/MYSETTING.DAT +0 -0
  128. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/hotcue_autoload/rekordbox/MYSETTING.DAT +0 -0
  129. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/hotcue_color/off/MYSETTING.DAT +0 -0
  130. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/hotcue_color/on/MYSETTING.DAT +0 -0
  131. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_mode/cdj/MYSETTING.DAT +0 -0
  132. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_mode/vinyl/MYSETTING.DAT +0 -0
  133. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_ring_brightness/bright/MYSETTING.DAT +0 -0
  134. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_ring_brightness/dark/MYSETTING.DAT +0 -0
  135. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_ring_brightness/off/MYSETTING.DAT +0 -0
  136. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_ring_indicator/off/MYSETTING.DAT +0 -0
  137. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_ring_indicator/on/MYSETTING.DAT +0 -0
  138. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/chinese_simplified/MYSETTING.DAT +0 -0
  139. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/chinese_traditional/MYSETTING.DAT +0 -0
  140. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/czech/MYSETTING.DAT +0 -0
  141. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/danish/MYSETTING.DAT +0 -0
  142. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/dutch/MYSETTING.DAT +0 -0
  143. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/english/MYSETTING.DAT +0 -0
  144. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/french/MYSETTING.DAT +0 -0
  145. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/german/MYSETTING.DAT +0 -0
  146. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/greek/MYSETTING.DAT +0 -0
  147. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/hungarian/MYSETTING.DAT +0 -0
  148. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/italian/MYSETTING.DAT +0 -0
  149. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/japanese/MYSETTING.DAT +0 -0
  150. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/korean/MYSETTING.DAT +0 -0
  151. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/portuguese/MYSETTING.DAT +0 -0
  152. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/russian/MYSETTING.DAT +0 -0
  153. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/spanish/MYSETTING.DAT +0 -0
  154. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/swedish/MYSETTING.DAT +0 -0
  155. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/turkish/MYSETTING.DAT +0 -0
  156. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/lcd_brightness/five/MYSETTING.DAT +0 -0
  157. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/lcd_brightness/four/MYSETTING.DAT +0 -0
  158. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/lcd_brightness/one/MYSETTING.DAT +0 -0
  159. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/lcd_brightness/three/MYSETTING.DAT +0 -0
  160. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/lcd_brightness/two/MYSETTING.DAT +0 -0
  161. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/master_tempo/off/MYSETTING.DAT +0 -0
  162. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/master_tempo/on/MYSETTING.DAT +0 -0
  163. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/needle_lock/lock/MYSETTING.DAT +0 -0
  164. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/needle_lock/unlock/MYSETTING.DAT +0 -0
  165. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/on_air_display/off/MYSETTING.DAT +0 -0
  166. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/on_air_display/on/MYSETTING.DAT +0 -0
  167. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/phase_meter/type1/MYSETTING.DAT +0 -0
  168. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/phase_meter/type2/MYSETTING.DAT +0 -0
  169. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/play_mode/continue_/MYSETTING.DAT +0 -0
  170. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/play_mode/single/MYSETTING.DAT +0 -0
  171. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/quantize/off/MYSETTING.DAT +0 -0
  172. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/quantize/on/MYSETTING.DAT +0 -0
  173. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/quantize_beat_value/eighth/MYSETTING.DAT +0 -0
  174. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/quantize_beat_value/half/MYSETTING.DAT +0 -0
  175. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/quantize_beat_value/one/MYSETTING.DAT +0 -0
  176. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/quantize_beat_value/quarter/MYSETTING.DAT +0 -0
  177. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/slip_flashing/off/MYSETTING.DAT +0 -0
  178. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/slip_flashing/on/MYSETTING.DAT +0 -0
  179. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/sync/off/MYSETTING.DAT +0 -0
  180. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/sync/on/MYSETTING.DAT +0 -0
  181. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/tempo_range/six/MYSETTING.DAT +0 -0
  182. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/tempo_range/sixteen/MYSETTING.DAT +0 -0
  183. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/tempo_range/ten/MYSETTING.DAT +0 -0
  184. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/tempo_range/wide/MYSETTING.DAT +0 -0
  185. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/time_mode/elapsed/MYSETTING.DAT +0 -0
  186. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/time_mode/remain/MYSETTING.DAT +0 -0
  187. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/eight/MYSETTING2.DAT +0 -0
  188. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/four/MYSETTING2.DAT +0 -0
  189. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/half/MYSETTING2.DAT +0 -0
  190. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/one/MYSETTING2.DAT +0 -0
  191. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/sixteen/MYSETTING2.DAT +0 -0
  192. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/sixtyfour/MYSETTING2.DAT +0 -0
  193. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/thirtytwo/MYSETTING2.DAT +0 -0
  194. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/two/MYSETTING2.DAT +0 -0
  195. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_display_mode/artwork/MYSETTING2.DAT +0 -0
  196. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_display_mode/auto/MYSETTING2.DAT +0 -0
  197. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_display_mode/info/MYSETTING2.DAT +0 -0
  198. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_display_mode/simple/MYSETTING2.DAT +0 -0
  199. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/five/MYSETTING2.DAT +0 -0
  200. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/four/MYSETTING2.DAT +0 -0
  201. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/one/MYSETTING2.DAT +0 -0
  202. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/three/MYSETTING2.DAT +0 -0
  203. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/two/MYSETTING2.DAT +0 -0
  204. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/pad_button_brightness/four/MYSETTING2.DAT +0 -0
  205. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/pad_button_brightness/one/MYSETTING2.DAT +0 -0
  206. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/pad_button_brightness/three/MYSETTING2.DAT +0 -0
  207. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/pad_button_brightness/two/MYSETTING2.DAT +0 -0
  208. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/release/MYSETTING2.DAT +0 -0
  209. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/touch/MYSETTING2.DAT +0 -0
  210. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/touch_release/MYSETTING2.DAT +0 -0
  211. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/waveform/phase_meter/MYSETTING2.DAT +0 -0
  212. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/waveform/waveform/MYSETTING2.DAT +0 -0
  213. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/waveform_divisions/phrase/MYSETTING2.DAT +0 -0
  214. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/waveform_divisions/time_scale/MYSETTING2.DAT +0 -0
  215. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/DEVSETTING.DAT +0 -0
  216. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/ExtData.edb +0 -0
  217. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/MYSETTING.DAT +0 -0
  218. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P002/00009C2E/ANLZ0000.DAT +0 -0
  219. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P002/00009C2E/ANLZ0000.EXT +0 -0
  220. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P02B/00023587/ANLZ0000.DAT +0 -0
  221. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P02B/00023587/ANLZ0000.EXT +0 -0
  222. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P035/00027763/ANLZ0000.DAT +0 -0
  223. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P035/00027763/ANLZ0000.EXT +0 -0
  224. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P038/0002AAA0/ANLZ0000.DAT +0 -0
  225. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P038/0002AAA0/ANLZ0000.EXT +0 -0
  226. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P068/00012CA2/ANLZ0000.DAT +0 -0
  227. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P068/00012CA2/ANLZ0000.EXT +0 -0
  228. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P076/00013B6E/ANLZ0000.DAT +0 -0
  229. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P076/00013B6E/ANLZ0000.EXT +0 -0
  230. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/datafile.edb +0 -0
  231. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/masterPlaylists3.xml +0 -0
  232. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/database.xml +0 -0
  233. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/datafile.edb +0 -0
  234. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/DEVSETTING.DAT +0 -0
  235. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/DJMMYSETTING.DAT +0 -0
  236. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/MYSETTING.DAT +0 -0
  237. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/MYSETTING2.DAT +0 -0
  238. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/masterPlaylists3.xml +0 -0
  239. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/masterPlaylists6.xml +0 -0
  240. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.2EX +0 -0
  241. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.DAT +0 -0
  242. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.EXT +0 -0
  243. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.2EX +0 -0
  244. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.DAT +0 -0
  245. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.EXT +0 -0
  246. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.2EX +0 -0
  247. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.DAT +0 -0
  248. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.EXT +0 -0
  249. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.2EX +0 -0
  250. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.DAT +0 -0
  251. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.EXT +0 -0
  252. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.2EX +0 -0
  253. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.DAT +0 -0
  254. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.EXT +0 -0
  255. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.2EX +0 -0
  256. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.DAT +0 -0
  257. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.EXT +0 -0
  258. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/database.xml +0 -0
  259. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/masterPlaylists6_template.xml +0 -0
  260. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/master_locked.db +0 -0
  261. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/master_unlocked.db +0 -0
  262. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/LICENSE +0 -0
  263. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/Makefile +0 -0
  264. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/make.bat +0 -0
  265. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_beat.svg +0 -0
  266. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_file.svg +0 -0
  267. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pco2.svg +0 -0
  268. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pcob.svg +0 -0
  269. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pcp2.svg +0 -0
  270. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pcpt.svg +0 -0
  271. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_ppth.svg +0 -0
  272. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pqt2.svg +0 -0
  273. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pqt2_2.svg +0 -0
  274. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pqtz.svg +0 -0
  275. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pssi.svg +0 -0
  276. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pssi_entry.svg +0 -0
  277. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pvbr.svg +0 -0
  278. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwav.svg +0 -0
  279. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwv3.svg +0 -0
  280. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwv4.svg +0 -0
  281. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwv5.svg +0 -0
  282. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwv5_entry.svg +0 -0
  283. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwv6.svg +0 -0
  284. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwv7.svg +0 -0
  285. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwvc.svg +0 -0
  286. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_tag.svg +0 -0
  287. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/logos/dark/logo_primary.svg +0 -0
  288. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/logos/light/logo_primary.svg +0 -0
  289. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_static/logos/mid/logo_primary.svg +0 -0
  290. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_templates/apidoc/module.rst_t +0 -0
  291. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_templates/apidoc/package.rst_t +0 -0
  292. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_templates/apidoc/toc.rst_t +0 -0
  293. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_templates/autosummary/class.rst +0 -0
  294. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/_templates/autosummary/module.rst +0 -0
  295. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/api.md +0 -0
  296. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/conf.py +0 -0
  297. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/development/changes.md +0 -0
  298. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/development/contributing.md +0 -0
  299. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/formats/anlz.md +0 -0
  300. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/formats/db6.md +0 -0
  301. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/formats/mysetting.md +0 -0
  302. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/formats/xml.md +0 -0
  303. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/requirements.txt +0 -0
  304. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/tutorial/anlz.md +0 -0
  305. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/tutorial/configuration.md +0 -0
  306. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/tutorial/db6.md +0 -0
  307. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/tutorial/index.md +0 -0
  308. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/tutorial/mysetting.md +0 -0
  309. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/docs/source/tutorial/xml.md +0 -0
  310. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox/anlz/__init__.py +0 -0
  311. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox/anlz/structs.py +0 -0
  312. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox/anlz/tags.py +0 -0
  313. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox/db6/__init__.py +0 -0
  314. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox/db6/aux_files.py +0 -0
  315. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox/db6/tables.py +0 -0
  316. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox/logger.py +0 -0
  317. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox/mysettings/__init__.py +0 -0
  318. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox/mysettings/file.py +0 -0
  319. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox/mysettings/structs.py +0 -0
  320. /pyrekordbox-0.2.2/pyrekordbox/xml.py → /pyrekordbox-0.3.0/pyrekordbox/rbxml.py +0 -0
  321. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox/utils.py +0 -0
  322. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox.egg-info/dependency_links.txt +0 -0
  323. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox.egg-info/not-zip-safe +0 -0
  324. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox.egg-info/requires.txt +0 -0
  325. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/pyrekordbox.egg-info/top_level.txt +0 -0
  326. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/requirements.txt +0 -0
  327. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/setup.cfg +0 -0
  328. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/setup.py +0 -0
  329. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/tests/__init__.py +0 -0
  330. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/tests/test_anlz.py +0 -0
  331. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/tests/test_config.py +0 -0
  332. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/tests/test_db6.py +0 -0
  333. {pyrekordbox-0.2.2 → pyrekordbox-0.3.0}/tests/test_mysetting.py +0 -0
@@ -9,8 +9,33 @@ on:
9
9
  - cron: "4 11 * * 1"
10
10
 
11
11
  jobs:
12
+
13
+ code-change:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - id: skip_check
17
+ uses: fkirc/skip-duplicate-actions@master
18
+ with:
19
+ paths_ignore: '[
20
+ "docs/**",
21
+ ".github/**",
22
+ ".resources/**",
23
+ "logos/**",
24
+ "README.md",
25
+ "CHANGELOG.md",
26
+ "CONTRIBUTING.md",
27
+ ".pre-commit-config.yaml",
28
+ ".readthedocs.yaml",
29
+ "pyproject.toml"
30
+ ]'
31
+ outputs:
32
+ should_skip: ${{ steps.skip_check.outputs.should_skip }}
33
+
34
+
12
35
  analyze:
13
36
  name: Analyze
37
+ needs: code-change
38
+ if: ${{ needs.code-change.outputs.should_skip != 'true'}}
14
39
  runs-on: ubuntu-latest
15
40
  permissions:
16
41
  actions: read
@@ -48,14 +48,14 @@ jobs:
48
48
 
49
49
  - name: Publish distribution 📦 to Test PyPI
50
50
  env:
51
- TWINE_USERNAME: ${{ secrets.TEST_PYPI_USERNAME }}
52
- TWINE_PASSWORD: ${{ secrets.TEST_PYPI_PASSWORD }}
51
+ TWINE_USERNAME: __token__
52
+ TWINE_PASSWORD: ${{ secrets.TEST_PYPI_TOKEN }}
53
53
  run: |
54
54
  twine upload --repository testpypi dist/*
55
55
 
56
56
  - name: Publish distribution 📦 to PyPI
57
57
  env:
58
- TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
59
- TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
58
+ TWINE_USERNAME: __token__
59
+ TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
60
60
  run: |
61
61
  twine upload dist/*
@@ -43,11 +43,11 @@ jobs:
43
43
  strategy:
44
44
  matrix:
45
45
  os: [windows-latest, macos-latest]
46
- python-version: ["3.7", "3.12"] # check oldest and latest supported version
46
+ python-version: ["3.8", "3.12"] # check oldest and latest supported version
47
47
  other-os: [true]
48
48
 
49
49
  runs-on: ${{ matrix.os }}
50
- continue-on-error: true # don't cancel due to OS specific failures
50
+ continue-on-error: false # don't cancel due to OS specific failures
51
51
  env:
52
52
  OS: ${{ matrix.os }}
53
53
  PYTHON: ${{ matrix.python-version }}
@@ -69,9 +69,6 @@ jobs:
69
69
  pip install setuptools
70
70
  pip install .[test]
71
71
 
72
- - name: Get package version
73
- run: python setup.py --version
74
-
75
72
  - name: Run tests
76
73
  run: |
77
74
  pytest tests/ --cov=pyrekordbox --cov-report=xml -v
@@ -12,14 +12,11 @@ repos:
12
12
  - id: check-toml
13
13
  - id: check-yaml
14
14
 
15
- - repo: https://github.com/psf/black
16
- rev: 23.10.0
15
+ - repo: https://github.com/astral-sh/ruff-pre-commit
16
+ rev: v0.1.7
17
17
  hooks:
18
- - id: black
19
- args: [ --safe ]
20
-
21
- - repo: https://github.com/PyCQA/flake8
22
- rev: 6.1.0
23
- hooks:
24
- - id: flake8
25
- additional_dependencies: [Flake8-pyproject]
18
+ # Run the linter.
19
+ - id: ruff
20
+ args: [ --fix ]
21
+ # Run the formatter.
22
+ - id: ruff-format
@@ -1,5 +1,43 @@
1
1
  # What's New
2
2
 
3
+ <a name="0.3.0"></a>
4
+ ## [0.3.0] - 2023-12-12
5
+
6
+ This release fixes bugs and imrpoves error handling.
7
+
8
+ ### Improvements/Bug Fixes
9
+
10
+ - **The `bank` field of PSSI ANLZ tag can also have a value of 0 ([#108](https://github.com/dylanljones/pyrekordbox/issues/108))**
11
+ This fixes an issue where the XOR mask was applied to un-garbled PSSI tags.
12
+ - **check if RBv6 db key seems valid ([#105](https://github.com/dylanljones/pyrekordbox/issues/105))**
13
+ Check the key if it is passed manually to the db handler and raise an exception
14
+ if it doesn't look valid. Only the first few characters are checked.
15
+ - **also change `OrgFolderPath` and `FileNameL` in `update_content_path` ([#104](https://github.com/dylanljones/pyrekordbox/issues/104))**
16
+ There were columns missing in the `update_content_path` method.
17
+ These changes make the file paths consistent.
18
+ Thank you [@ben-hearn-sb](https://github.com/ben-hearn-sb) for the help!
19
+ - **rename the `xml` module to `rbxml` to prevent conflict with builtin.**
20
+ Note that the old module name `xml` is deprecated and will be removed in version `0.4.0`.
21
+
22
+ ### Documentation
23
+
24
+ - **add Rekordbox6 database key extraction alternatives**
25
+
26
+
27
+ <a name="0.2.3"></a>
28
+ ## [0.2.3] - 2023-11-17
29
+
30
+ ### Improvements/Bug Fixes
31
+
32
+ - **drop Python 3.7 support**
33
+ Python 3.7 reached its end of lifetime in June 2023.
34
+ - **raise ImportError if RBv6 db is locked and sqlcipher is not available**
35
+ Pyrekordbox falls back to `sqlite3` if `sqlcipher3` is not available.
36
+ This can lead to errors if the RBv6 database is locked and the user does not have
37
+ `sqlcipher3` installed.
38
+ - **don't pass deleted RBv6 instance to USN callback**
39
+ This sometimes raised an `ObjectDeletedError`
40
+
3
41
 
4
42
  <a name="0.2.2"></a>
5
43
  ## [0.2.2] - 2023-10-26
@@ -466,7 +504,9 @@ This release contains documentation fixes.
466
504
  - **add missing djmd tables to `master.db` database documentation**
467
505
 
468
506
 
469
- [Unreleased]: https://github.com/dylanljones/pyrekordbox/compare/0.2.2...HEAD
507
+ [Unreleased]: https://github.com/dylanljones/pyrekordbox/compare/0.3.0...HEAD
508
+ [0.3.0]: https://github.com/dylanljones/pyrekordbox/compare/0.2.3...0.3.0
509
+ [0.2.3]: https://github.com/dylanljones/pyrekordbox/compare/0.2.2...0.2.3
470
510
  [0.2.2]: https://github.com/dylanljones/pyrekordbox/compare/0.2.1...0.2.2
471
511
  [0.2.1]: https://github.com/dylanljones/pyrekordbox/compare/0.2.0...0.2.1
472
512
  [0.2.0]: https://github.com/dylanljones/pyrekordbox/compare/0.1.8...0.2.0
@@ -8,9 +8,9 @@ the CI setup since it requires a working Rekordbox installation.
8
8
 
9
9
  ## Pre-commit Hooks
10
10
 
11
- We are using the [pre-commit framework] to automatically run some checks and
12
- the [Black code formatter] at commit time. This ensures that every commit fulfills
13
- the basic requirements to be mergeable and follows the coding style of the project.
11
+ We are using the [pre-commit framework] to automatically run a linter and code formatter
12
+ at commit time. This ensures that every commit fulfills the basic requirements to be
13
+ mergeable and follows the coding style of the project.
14
14
 
15
15
  The pre-commit hooks can be installed via
16
16
  ````sh
@@ -88,5 +88,4 @@ Similarly, a Deprecation section should start with "DEPRECATED: " followed by a
88
88
  [issue]: https://github.com/dylanljones/pyrekordbox/issues
89
89
  [pulls]: https://github.com/dylanljones/pyrekordbox/pulls
90
90
  [pre-commit framework]: https://pre-commit.com/
91
- [Black code formatter]: https://github.com/psf/black
92
91
  [Angular commit message]: https://github.com/angular/angular/blob/master/CONTRIBUTING.md#commit-message-format
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyrekordbox
3
- Version: 0.2.2
3
+ Version: 0.3.0
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
@@ -38,13 +38,13 @@ Classifier: Operating System :: MacOS
38
38
  Classifier: Operating System :: Microsoft :: Windows
39
39
  Classifier: Programming Language :: Python :: 3
40
40
  Classifier: Programming Language :: Python :: 3 :: Only
41
- Classifier: Programming Language :: Python :: 3.7
42
41
  Classifier: Programming Language :: Python :: 3.8
43
42
  Classifier: Programming Language :: Python :: 3.9
44
43
  Classifier: Programming Language :: Python :: 3.10
45
44
  Classifier: Programming Language :: Python :: 3.11
45
+ Classifier: Programming Language :: Python :: 3.12
46
46
  Classifier: Topic :: Multimedia :: Sound/Audio
47
- Requires-Python: >=3.7
47
+ Requires-Python: >=3.8
48
48
  Description-Content-Type: text/markdown
49
49
  License-File: LICENSE
50
50
  Requires-Dist: bidict>=0.21.0
@@ -70,7 +70,7 @@ Requires-Dist: pytest-cov; extra == "test"
70
70
  [![Python][python-badge+]][pypi-link]
71
71
  [![Platform][platform-badge]][pypi-link]
72
72
  [![license: MIT][license-badge]][license-link]
73
- [![style: black][black-badge]][black-link]
73
+ [![style: ruff][ruff-badge]][ruff-link]
74
74
 
75
75
  > **Disclaimer**: This project is **not** affiliated with Pioneer Corp. or its related companies
76
76
  in any way and has been written independently! Pyrekordbox is licensed under the
@@ -86,8 +86,8 @@ Pioneers Rekordbox DJ Software. It currently supports
86
86
  Tested Rekordbox versions: ``5.8.6 | 6.5.3 | 6.7.7``
87
87
 
88
88
 
89
- |⚠️| This project is still under development and might contain bugs or have breaking API changes in the future. |
90
- |----|:-------------------------------------------------------------------------------------------------------------|
89
+ |⚠️| This project is still under development and might contain bugs or have breaking API changes in the future. Check the [changelog][CHANGELOG] for recent changes! |
90
+ |----|:----------------------------------------------------------------------------------------------------------------------------------------------------------------|
91
91
 
92
92
 
93
93
  ## 🔧 Installation
@@ -113,7 +113,7 @@ platform-dependent and can not be installed via ``pip``.
113
113
  #### Windows
114
114
 
115
115
  SQLCipher can be used by building the libary against an amalgamation with [sqlcipher3].
116
- For a detailed instruction, see [INSTALLATION].
116
+ For a detailed instruction, see the [installation guide][installation].
117
117
 
118
118
  #### MacOS
119
119
 
@@ -129,7 +129,8 @@ SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==4 {print $1; exit}'); C_INCLUDE_
129
129
  SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==4 {print $1; exit}'); C_INCLUDE_PATH="$SQLCIPHER_PATH"/include LIBRARY_PATH="$SQLCIPHER_PATH"/lib python setup.py install
130
130
  ```
131
131
  Make sure the `C_INCLUDE` and `LIBRARY_PATH` point to the installed SQLCipher path. It may differ on your machine.
132
- If you are having issues installing [sqlcipher3] on M1 Macs please refer to [INSTALLATION].
132
+ If you are having issues installing [sqlcipher3] on M1 Macs please refer to the
133
+ [installation guide][installation].
133
134
 
134
135
 
135
136
  ## 🚀 Quick-Start
@@ -224,7 +225,7 @@ between two databases.
224
225
  Pyrekordbox can read and write Rekordbox XML databases.
225
226
 
226
227
  ````python
227
- from pyrekordbox.xml import RekordboxXml
228
+ from pyrekordbox.rbxml import RekordboxXml
228
229
 
229
230
  xml = RekordboxXml("database.xml")
230
231
 
@@ -347,17 +348,20 @@ the CI setup since it requires a working Rekordbox installation.
347
348
  [tests-badge]: https://img.shields.io/github/actions/workflow/status/dylanljones/pyrekordbox/tests.yml?branch=master&label=tests&logo=github&style=flat
348
349
  [docs-badge]: https://img.shields.io/readthedocs/pyrekordbox/stable?style=flat
349
350
  [python-badge]: https://img.shields.io/pypi/pyversions/pyrekordbox?style=flat
350
- [python-badge+]: https://img.shields.io/badge/python-3.7+-blue.svg
351
+ [python-badge+]: https://img.shields.io/badge/python-3.8+-blue.svg
351
352
  [platform-badge]: https://img.shields.io/badge/platform-win%20%7C%20osx-blue?style=flat
352
353
  [pypi-badge]: https://img.shields.io/pypi/v/pyrekordbox?style=flat
353
354
  [license-badge]: https://img.shields.io/pypi/l/pyrekordbox?color=lightgrey
354
355
  [black-badge]: https://img.shields.io/badge/code%20style-black-000000?style=flat
356
+ [ruff-badge]: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json
355
357
  [codecov-badge]: https://codecov.io/gh/dylanljones/pyrekordbox/branch/master/graph/badge.svg?token=5Z2KVGL7N3
356
358
 
359
+
357
360
  [pypi-link]: https://pypi.org/project/pyrekordbox/
358
361
  [license-link]: https://github.com/dylanljones/pyrekordbox/blob/master/LICENSE
359
362
  [tests-link]: https://github.com/dylanljones/pyrekordbox/actions/workflows/tests.yml
360
363
  [black-link]: https://github.com/psf/black
364
+ [ruff-link]: https://github.com/astral-sh/ruff
361
365
  [lgtm-link]: https://lgtm.com/projects/g/dylanljones/pyrekordbox/context:python
362
366
  [codecov-link]: https://app.codecov.io/gh/dylanljones/pyrekordbox/tree/master
363
367
  [codecov-dev-link]: https://app.codecov.io/gh/dylanljones/pyrekordbox/tree/dev
@@ -377,7 +381,7 @@ the CI setup since it requires a working Rekordbox installation.
377
381
  [discussions]: https://github.com/dylanljones/pyrekordbox/discussions
378
382
  [CONTRIBUTING]: https://github.com/dylanljones/pyrekordbox/blob/master/CONTRIBUTING.md
379
383
  [CHANGELOG]: https://github.com/dylanljones/pyrekordbox/blob/master/CHANGELOG.md
380
- [INSTALLATION]: https://github.com/dylanljones/pyrekordbox/blob/master/INSTALLATION.md
384
+ [installation]: https://pyrekordbox.readthedocs.io/en/latest/installation.html
381
385
 
382
386
  [repo]: https://github.com/dylanljones/pyrekordbox
383
387
  [sqlcipher]: https://www.zetetic.net/sqlcipher/open-source/
@@ -9,7 +9,7 @@
9
9
  [![Python][python-badge+]][pypi-link]
10
10
  [![Platform][platform-badge]][pypi-link]
11
11
  [![license: MIT][license-badge]][license-link]
12
- [![style: black][black-badge]][black-link]
12
+ [![style: ruff][ruff-badge]][ruff-link]
13
13
 
14
14
  > **Disclaimer**: This project is **not** affiliated with Pioneer Corp. or its related companies
15
15
  in any way and has been written independently! Pyrekordbox is licensed under the
@@ -25,8 +25,8 @@ Pioneers Rekordbox DJ Software. It currently supports
25
25
  Tested Rekordbox versions: ``5.8.6 | 6.5.3 | 6.7.7``
26
26
 
27
27
 
28
- |⚠️| This project is still under development and might contain bugs or have breaking API changes in the future. |
29
- |----|:-------------------------------------------------------------------------------------------------------------|
28
+ |⚠️| This project is still under development and might contain bugs or have breaking API changes in the future. Check the [changelog][CHANGELOG] for recent changes! |
29
+ |----|:----------------------------------------------------------------------------------------------------------------------------------------------------------------|
30
30
 
31
31
 
32
32
  ## 🔧 Installation
@@ -52,7 +52,7 @@ platform-dependent and can not be installed via ``pip``.
52
52
  #### Windows
53
53
 
54
54
  SQLCipher can be used by building the libary against an amalgamation with [sqlcipher3].
55
- For a detailed instruction, see [INSTALLATION].
55
+ For a detailed instruction, see the [installation guide][installation].
56
56
 
57
57
  #### MacOS
58
58
 
@@ -68,7 +68,8 @@ SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==4 {print $1; exit}'); C_INCLUDE_
68
68
  SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==4 {print $1; exit}'); C_INCLUDE_PATH="$SQLCIPHER_PATH"/include LIBRARY_PATH="$SQLCIPHER_PATH"/lib python setup.py install
69
69
  ```
70
70
  Make sure the `C_INCLUDE` and `LIBRARY_PATH` point to the installed SQLCipher path. It may differ on your machine.
71
- If you are having issues installing [sqlcipher3] on M1 Macs please refer to [INSTALLATION].
71
+ If you are having issues installing [sqlcipher3] on M1 Macs please refer to the
72
+ [installation guide][installation].
72
73
 
73
74
 
74
75
  ## 🚀 Quick-Start
@@ -163,7 +164,7 @@ between two databases.
163
164
  Pyrekordbox can read and write Rekordbox XML databases.
164
165
 
165
166
  ````python
166
- from pyrekordbox.xml import RekordboxXml
167
+ from pyrekordbox.rbxml import RekordboxXml
167
168
 
168
169
  xml = RekordboxXml("database.xml")
169
170
 
@@ -286,17 +287,20 @@ the CI setup since it requires a working Rekordbox installation.
286
287
  [tests-badge]: https://img.shields.io/github/actions/workflow/status/dylanljones/pyrekordbox/tests.yml?branch=master&label=tests&logo=github&style=flat
287
288
  [docs-badge]: https://img.shields.io/readthedocs/pyrekordbox/stable?style=flat
288
289
  [python-badge]: https://img.shields.io/pypi/pyversions/pyrekordbox?style=flat
289
- [python-badge+]: https://img.shields.io/badge/python-3.7+-blue.svg
290
+ [python-badge+]: https://img.shields.io/badge/python-3.8+-blue.svg
290
291
  [platform-badge]: https://img.shields.io/badge/platform-win%20%7C%20osx-blue?style=flat
291
292
  [pypi-badge]: https://img.shields.io/pypi/v/pyrekordbox?style=flat
292
293
  [license-badge]: https://img.shields.io/pypi/l/pyrekordbox?color=lightgrey
293
294
  [black-badge]: https://img.shields.io/badge/code%20style-black-000000?style=flat
295
+ [ruff-badge]: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json
294
296
  [codecov-badge]: https://codecov.io/gh/dylanljones/pyrekordbox/branch/master/graph/badge.svg?token=5Z2KVGL7N3
295
297
 
298
+
296
299
  [pypi-link]: https://pypi.org/project/pyrekordbox/
297
300
  [license-link]: https://github.com/dylanljones/pyrekordbox/blob/master/LICENSE
298
301
  [tests-link]: https://github.com/dylanljones/pyrekordbox/actions/workflows/tests.yml
299
302
  [black-link]: https://github.com/psf/black
303
+ [ruff-link]: https://github.com/astral-sh/ruff
300
304
  [lgtm-link]: https://lgtm.com/projects/g/dylanljones/pyrekordbox/context:python
301
305
  [codecov-link]: https://app.codecov.io/gh/dylanljones/pyrekordbox/tree/master
302
306
  [codecov-dev-link]: https://app.codecov.io/gh/dylanljones/pyrekordbox/tree/dev
@@ -316,7 +320,7 @@ the CI setup since it requires a working Rekordbox installation.
316
320
  [discussions]: https://github.com/dylanljones/pyrekordbox/discussions
317
321
  [CONTRIBUTING]: https://github.com/dylanljones/pyrekordbox/blob/master/CONTRIBUTING.md
318
322
  [CHANGELOG]: https://github.com/dylanljones/pyrekordbox/blob/master/CHANGELOG.md
319
- [INSTALLATION]: https://github.com/dylanljones/pyrekordbox/blob/master/INSTALLATION.md
323
+ [installation]: https://pyrekordbox.readthedocs.io/en/latest/installation.html
320
324
 
321
325
  [repo]: https://github.com/dylanljones/pyrekordbox
322
326
  [sqlcipher]: https://www.zetetic.net/sqlcipher/open-source/
@@ -11,7 +11,6 @@ sphinx-quickstart on Thu Apr 7 15:06:50 2022.
11
11
  [![Python][python-badge+]][pypi-link]
12
12
  [![Platform][platform-badge]][pypi-link]
13
13
  [![license: MIT][license-badge]][license-link]
14
- [![style: black][black-badge]][black-link]
15
14
 
16
15
  ```{admonition} Disclaimer
17
16
  This project is not affiliated with Pioneer Corp. or its related companies
@@ -45,6 +44,7 @@ caption: User Guide
45
44
 
46
45
  quickstart
47
46
  installation
47
+ key
48
48
  tutorial/index
49
49
  api
50
50
  ```
@@ -90,16 +90,14 @@ PyPI <https://pypi.org/project/pyrekordbox/>
90
90
  [tests-badge]: https://img.shields.io/github/actions/workflow/status/dylanljones/pyrekordbox/tests.yml?branch=master&label=tests&logo=github&style=flat
91
91
  [codecov-badge]: https://codecov.io/gh/dylanljones/pyrekordbox/branch/master/graph/badge.svg?token=5Z2KVGL7N3
92
92
  [python-badge]: https://img.shields.io/pypi/pyversions/pyrekordbox?style=flat
93
- [python-badge+]: https://img.shields.io/badge/python-3.7+-blue.svg
93
+ [python-badge+]: https://img.shields.io/badge/python-3.8+-blue.svg
94
94
  [platform-badge]: https://img.shields.io/badge/platform-win%20%7C%20osx-blue?style=flat
95
95
  [pypi-badge]: https://img.shields.io/pypi/v/pyrekordbox?style=flat
96
96
  [license-badge]: https://img.shields.io/pypi/l/pyrekordbox?color=lightgrey
97
- [black-badge]: https://img.shields.io/badge/code%20style-black-000000?style=flat
98
97
 
99
98
  [pypi-link]: https://pypi.org/project/pyrekordbox/
100
99
  [license-link]: https://github.com/dylanljones/pyrekordbox/blob/master/LICENSE
101
100
  [tests-link]: https://github.com/dylanljones/pyrekordbox/actions/workflows/tests.yml
102
- [black-link]: https://github.com/psf/black
103
101
  [codecov-link]: https://app.codecov.io/gh/dylanljones/pyrekordbox/tree/master
104
102
 
105
103
  [issue]: https://github.com/dylanljones/pyrekordbox/issues/64
@@ -16,15 +16,24 @@ where `VERSION` is a branch, tag or release. The project can also be cloned/fork
16
16
  and installed via
17
17
 
18
18
  ```sh
19
- $ python setup.py install
19
+ $ pip install .
20
20
  ```
21
21
 
22
+
22
23
  ## Installing SQLCipher
23
24
 
24
25
  Unlocking the new Rekordbox 6 `master.db` database file requires [SQLCipher][sqlcipher].
26
+ Pyrekordbox makes no attempt to download/install SQLCipher, as it is a
27
+ pure Python package - whereas the SQLCipher/sqlcipher3 installation is
28
+ platform-dependent and can not be installed easily via ``pip``.
29
+
30
+ [sqlcipher3] can either be built with the system [SQLCipher][sqlcipher] or built against
31
+ a statically linked amalgamation of the SQLite3 source code.
25
32
 
26
33
  ### Windows
27
34
 
35
+ #### SQLCipher Amalagamation
36
+
28
37
  The easiest method to install SQLCipher on Windows is to build [sqlcipher3]
29
38
  against an amalgamation of the SQLite3 source code.
30
39
 
@@ -49,13 +58,14 @@ against an amalgamation of the SQLite3 source code.
49
58
  - 32-bit: ``C:/Program Files (x86)/openssl-Win32/bin/openssl.cfg``
50
59
  - 64-bit: ``C:/Program Files/openssl-Win64/bin/openssl.cfg``
51
60
 
61
+ ```{note}
52
62
  The library names of OpenSSL have changed in version 1.1.0 (see [this](https://stackoverflow.com/questions/65345077/unable-to-build-sqlcipher3-on-windows) discussion).
53
63
  If you are using a newer version, you can set an environment variable
54
64
  ``OPENSSL_LIBNAME`` to the name of the library, e.g. ``libcrypto.lib``.
55
65
  Alternatively, you can modify the ``setup.py`` script (see step 8 below).
56
66
 
57
67
  You might have to restart Windows for the changes to take effect.
58
-
68
+ ```
59
69
 
60
70
  4. **Copy the openssl folder to the Microsoft Visual Studio 14 VC include directory**
61
71
 
@@ -63,22 +73,30 @@ against an amalgamation of the SQLite3 source code.
63
73
  - 32-bit: `C:/Program Files (x86)/OpenSSL-Win32/include/openssl`
64
74
  - 64-bit: `C:/Program Files/OpenSSL-Win64/include/openssl`
65
75
 
66
- The VC include directory (for any VS version) can be found in the
67
- Visual Studio installation directory:
68
- `C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include`
76
+ The VC include directory can be found in the
77
+ Visual Studio 14 installation directory:
78
+
79
+ > C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include
80
+
81
+ In newer versions it might aso be in
82
+
83
+ > C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/[version]/include
69
84
 
70
85
  Confirm the following path exists `.../include/openssl/aes.h`
71
86
 
72
87
 
73
88
  5. **Download / compile the SQLCipher 3 amalgamation files**
74
89
 
75
- Pre-built SQLCipher 3 amalgamation files can be downloaded from [this repo](https://github.com/geekbrother/sqlcipher-amalgamation).
76
- To compile the amalgamation files, follow [this tutorial](http://www.jerryrw.com/howtocompile.php).
90
+ Pre-built SQLCipher amalgamation files can be downloaded from [this repo][amalgamation]:
91
+ ````shell
92
+ git clone https://github.com/geekbrother/sqlcipher-amalgamation
93
+ ````
94
+ To compile the amalgamation files on your own, follow [this tutorial](http://www.jerryrw.com/howtocompile.php).
77
95
 
78
96
 
79
97
  6. **Clone [sqlcipher3] into any directory**
80
98
 
81
- ````commandline
99
+ ````shell
82
100
  git clone https://github.com/coleifer/sqlcipher3
83
101
  ````
84
102
 
@@ -87,6 +105,10 @@ against an amalgamation of the SQLite3 source code.
87
105
 
88
106
  Copy files ``sqlite3.c`` and ``sqlite3.h`` from the amalgamation directory from step 5
89
107
  to the root of the ``sqlcipher3`` directory from step 6.
108
+ ````shell
109
+ Copy-Item -Path 'sqlcipher-amalgamation/src/sqlite3.c' -Destination "sqlcipher3/"
110
+ Copy-Item -Path 'sqlcipher-amalgamation/src/sqlite3.h' -Destination "sqlcipher3/"
111
+ ````
90
112
 
91
113
 
92
114
  8. **Modify the ``sqlcipher3/setup.py`` script (optional)**
@@ -102,42 +124,36 @@ against an amalgamation of the SQLite3 source code.
102
124
  ````
103
125
 
104
126
 
105
- 9. **Build using the amalgamation**
127
+ 9. **Build using the amalgamation and install**
106
128
 
107
129
  ``cd`` into the ``sqlcipher3`` directory and run
108
- ````commandline
130
+ ````shell
109
131
  python setup.py build_static build
110
- ````
111
-
112
-
113
- 10. **Install ``sqlcipher3``**
114
-
115
- ````commandline
116
132
  python setup.py install
117
133
  ````
118
134
 
135
+
119
136
  You now should have a working ``sqlcipher3`` installation! The directory of the
120
137
  cloned ``sqlcipher3`` repo can be deleted after installing the package.
121
138
 
122
- Steps 5-10 can be automated using the CLI of ``pyrekordbox``:
123
- ````commandline
124
- > python3 -m pyrekordbox install-sqlcipher --help
125
- usage: pyrekordbox install-sqlcipher [-h] [-t TMPDIR] [-l CRYPTOLIB] [-q] [-b]
126
-
127
- -h, --help show this help message and exit
128
- -t TMPDIR, --tmpdir TMPDIR
129
- Path for storing temporary data (default: '.tmp')
130
- -l CRYPTOLIB, --cryptolib CRYPTOLIB
131
- The name of the OpenSSl crypto libary (default: 'libcrypto.lib')
132
- -b, --buildonly Don't install sqlcipher3, only build the amalgamation
133
- ````
139
+ Steps 5-9 can be automated using the CLI of ``pyrekordbox``:
140
+
141
+ > python3 -m pyrekordbox install-sqlcipher --help
142
+ usage: pyrekordbox install-sqlcipher [-h] [-t TMPDIR] [-l CRYPTOLIB] [-q] [-b]
134
143
 
135
- #### Troubleshooting
144
+ -t TMPDIR, --tmpdir TMPDIR
145
+ Path for storing temporary data (default: '.tmp')
146
+ -l CRYPTOLIB, --cryptolib CRYPTOLIB
147
+ The name of the OpenSSl crypto libary (default: 'libcrypto.lib')
148
+ -b, --buildonly Don't install sqlcipher3, only build the amalgamation
149
+
150
+
151
+ ##### Troubleshooting
136
152
 
137
153
  - **Microsoft Visual C++ error**
138
154
 
139
155
  If you are getting an error like
140
- ````commandline
156
+ ````shell
141
157
  error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools"``
142
158
  ````
143
159
  and have Visual Studio installed, you might not have all the necessary C/C++ components.
@@ -145,11 +161,11 @@ usage: pyrekordbox install-sqlcipher [-h] [-t TMPDIR] [-l CRYPTOLIB] [-q] [-b]
145
161
  - **LINK error**
146
162
 
147
163
  If you are getting an error like
148
- ````commandline
164
+ ````shell
149
165
  LINK : fatal error LNK1158: cannot run 'rc.exe'
150
166
  ````
151
167
  or
152
- ````commandline
168
+ ````shell
153
169
  LINK : fatal error LNK1327: failure during running rc.exe
154
170
  ````
155
171
  make sure all the necessary C/C++ components are installed and that you have selected
@@ -159,7 +175,10 @@ usage: pyrekordbox install-sqlcipher [-h] [-t TMPDIR] [-l CRYPTOLIB] [-q] [-b]
159
175
 
160
176
  ### MacOS
161
177
 
162
- For MacOS follow these steps:
178
+
179
+ #### System SQLCipher
180
+
181
+ For building [sqlcipher3] against the system SQLCipher installation on MacOS follow these steps:
163
182
 
164
183
  1) Install [Homebrew](https://brew.sh) if you do not have it on your machine.
165
184
  2) Install SQLCipher with `brew install SQLCipher`.
@@ -172,15 +191,65 @@ SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==4 {print $1; exit}'); C_INCLUDE_
172
191
  ```
173
192
  Make sure the `C_INCLUDE` and `LIBRARY_PATH` point to the installed SQLCipher path. It may differ on your machine.
174
193
 
194
+ ````{note}
175
195
  If you are having issues building sqlcipher on M1 Macs you might have to add some symlinks:
176
196
  ```shell
177
197
  ln -s /opt/homebrew/lib/libsqlcipher.a /usr/local/lib/libsqlcipher.a
178
198
  ln -s /opt/homebrew/include/sqlcipher /usr/local/include/sqlcipher
179
199
  ```
180
- Alternatively, you can also build [sqlcipher3] against an amalgamation (as described above for Windows, steps 5-10).
200
+ ````
201
+ #### SQLCipher Amalagamation
202
+
203
+ You can also build [sqlcipher3] against an amalgamation on MacOS.
204
+
205
+ 1. **Download / compile the SQLCipher amalgamation files**
206
+
207
+ Pre-built SQLCipher amalgamation files can be downloaded from [this repo][amalgamation]:
208
+ ````shell
209
+ git clone https://github.com/geekbrother/sqlcipher-amalgamation
210
+ ````
211
+ You can also build the amalagamtion files on your own.
181
212
 
182
213
 
183
- ## Using SQLCipher
214
+ 2. **Clone [sqlcipher3] into any directory**
215
+
216
+ ````shell
217
+ git clone https://github.com/coleifer/sqlcipher3
218
+ ````
219
+
220
+
221
+ 3. **Copy amalgamation files to the `sqlcipher3` directory**
222
+
223
+ Copy files ``sqlite3.c`` and ``sqlite3.h`` from the amalgamation directory from step 1
224
+ to the root of the ``sqlcipher3`` directory from step 2.
225
+ ````shell
226
+ cp sqlcipher-amalgamation/src/sqlite3.[ch] sqlcipher3/
227
+ ````
228
+
229
+ 4. **Build using the amalgamation and install**
230
+
231
+ ``cd`` into the ``sqlcipher3`` directory and run
232
+ ````shell
233
+ python setup.py build_static build
234
+ python setup.py install
235
+ ````
236
+
237
+ The steps above can be automated using the CLI of ``pyrekordbox``
238
+
239
+ > python3 -m pyrekordbox install-sqlcipher --help
240
+ usage: pyrekordbox install-sqlcipher [-h] [-t TMPDIR] [-l CRYPTOLIB] [-q] [-b]
241
+
242
+ -t TMPDIR, --tmpdir TMPDIR
243
+ Path for storing temporary data (default: '.tmp')
244
+ -b, --buildonly Don't install sqlcipher3, only build the amalgamation
245
+
246
+
247
+ ```{note}
248
+ The `CRYPTOLIB` argument is only used on Windows
249
+ ```
250
+
251
+
252
+ ### Using SQLCipher
184
253
 
185
254
  After the installation SQLCipher-databases can be unlocked via the `sqlcipher3` package:
186
255
  ````python
@@ -192,16 +261,11 @@ c.execute("PRAGMA key='password'")
192
261
  ````
193
262
 
194
263
 
195
- ### References:
196
-
197
- - [https://stackoverflow.com/questions/33618565/how-to-build-sql-cipher-python-binding-for-windows](https://stackoverflow.com/questions/33618565/how-to-build-sql-cipher-python-binding-for-windows)
198
- - [https://github.com/Monogi/pysqlcipher3_install_win10](https://github.com/Monogi/pysqlcipher3_install_win10)
199
-
200
-
201
264
 
202
265
  [VS]: https://visualstudio.microsoft.com/de/vs/community/
203
266
  [OpenSSL]: https://slproweb.com/products/Win32OpenSSL.html
204
267
  [sqlcipher3]: https://github.com/coleifer/sqlcipher3
268
+ [amalgamation]: https://github.com/geekbrother/sqlcipher-amalgamation
205
269
  [Pypi]: https://pypi.org/project/pyrekordbox/
206
270
  [GitHub]: https://github.com/dylanljones/pyrekordbox
207
271
  [sqlcipher]: https://www.zetetic.net/sqlcipher/open-source/