qBitrr2 5.6.2__tar.gz → 5.7.1__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 (85) hide show
  1. {qbitrr2-5.6.2/qBitrr2.egg-info → qbitrr2-5.7.1}/PKG-INFO +24 -2
  2. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/README.md +23 -1
  3. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/config.example.toml +48 -16
  4. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/pyproject.toml +1 -1
  5. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/arss.py +653 -158
  6. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/bundled_data.py +2 -2
  7. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/config.py +1 -1
  8. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/gen_config.py +84 -41
  9. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/main.py +448 -16
  10. qbitrr2-5.7.1/qBitrr/static/assets/ArrView.js +2 -0
  11. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/ArrView.js.map +1 -1
  12. qbitrr2-5.7.1/qBitrr/static/assets/ConfigView.js +6 -0
  13. qbitrr2-5.7.1/qBitrr/static/assets/ConfigView.js.map +1 -0
  14. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/LogsView.js +1 -1
  15. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/LogsView.js.map +1 -1
  16. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/ProcessesView.js +1 -1
  17. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/ProcessesView.js.map +1 -1
  18. qbitrr2-5.7.1/qBitrr/static/assets/app.js +11 -0
  19. qbitrr2-5.7.1/qBitrr/static/assets/app.js.map +1 -0
  20. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/vendor.js +1 -1
  21. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/vendor.js.map +1 -1
  22. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/tables.py +7 -0
  23. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/webui.py +48 -1
  24. {qbitrr2-5.6.2 → qbitrr2-5.7.1/qBitrr2.egg-info}/PKG-INFO +24 -2
  25. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/setup.cfg +1 -1
  26. qbitrr2-5.6.2/qBitrr/static/assets/ArrView.js +0 -2
  27. qbitrr2-5.6.2/qBitrr/static/assets/ConfigView.js +0 -5
  28. qbitrr2-5.6.2/qBitrr/static/assets/ConfigView.js.map +0 -1
  29. qbitrr2-5.6.2/qBitrr/static/assets/app.js +0 -11
  30. qbitrr2-5.6.2/qBitrr/static/assets/app.js.map +0 -1
  31. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/LICENSE +0 -0
  32. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/MANIFEST.in +0 -0
  33. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/__init__.py +0 -0
  34. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/auto_update.py +0 -0
  35. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/config_version.py +0 -0
  36. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/db_lock.py +0 -0
  37. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/db_recovery.py +0 -0
  38. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/env_config.py +0 -0
  39. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/errors.py +0 -0
  40. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/ffprobe.py +0 -0
  41. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/home_path.py +0 -0
  42. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/logger.py +0 -0
  43. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/search_activity_store.py +0 -0
  44. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/app.css +0 -0
  45. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/build.svg +0 -0
  46. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/check-mark.svg +0 -0
  47. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/close.svg +0 -0
  48. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/download.svg +0 -0
  49. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/gear.svg +0 -0
  50. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/lidarr.svg +0 -0
  51. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/live-streaming.svg +0 -0
  52. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/log.svg +0 -0
  53. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/logo.svg +0 -0
  54. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/plus.svg +0 -0
  55. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/process.svg +0 -0
  56. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/react-select.esm.js +0 -0
  57. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/react-select.esm.js.map +0 -0
  58. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/refresh-arrow.svg +0 -0
  59. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/table.js +0 -0
  60. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/table.js.map +0 -0
  61. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/trash.svg +0 -0
  62. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/up-arrow.svg +0 -0
  63. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/useInterval.js +0 -0
  64. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/useInterval.js.map +0 -0
  65. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/assets/visibility.svg +0 -0
  66. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/favicon-16x16.png +0 -0
  67. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/favicon-32x32.png +0 -0
  68. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/favicon-48x48.png +0 -0
  69. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/favicon.ico +0 -0
  70. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/icon-192.png +0 -0
  71. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/icon-512.png +0 -0
  72. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/index.html +0 -0
  73. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/logov2-clean.png +0 -0
  74. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/logov2-clean.svg +0 -0
  75. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/manifest.json +0 -0
  76. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/sw.js +0 -0
  77. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/static/vite.svg +0 -0
  78. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/utils.py +0 -0
  79. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr/versioning.py +0 -0
  80. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr2.egg-info/SOURCES.txt +0 -0
  81. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr2.egg-info/dependency_links.txt +0 -0
  82. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr2.egg-info/entry_points.txt +0 -0
  83. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr2.egg-info/requires.txt +0 -0
  84. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/qBitrr2.egg-info/top_level.txt +0 -0
  85. {qbitrr2-5.6.2 → qbitrr2-5.7.1}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qBitrr2
3
- Version: 5.6.2
3
+ Version: 5.7.1
4
4
  Summary: Intelligent automation for qBittorrent and *Arr apps (Radarr/Sonarr/Lidarr) - health monitoring, instant imports, quality upgrades, request integration
5
5
  Home-page: https://github.com/Feramance/qBitrr
6
6
  Author: Feramance
@@ -171,6 +171,7 @@ Access the WebUI at `http://<host>:6969/ui` after startup.
171
171
 
172
172
  ## ✨ Key Features
173
173
 
174
+ - **🚀 Multi-qBittorrent Support (v3.0+)** – Manage torrents across multiple qBittorrent instances for load balancing, redundancy, and VPN isolation
174
175
  - **🚑 Torrent Health Monitoring** – Detect stalled/failed downloads, auto-blacklist, trigger re-searches
175
176
  - **🔍 Automated Search** – Missing media, quality upgrades, custom format scoring
176
177
  - **🎯 Request Integration** – Pull requests from Overseerr/Ombi, prioritize user-requested media
@@ -189,7 +190,6 @@ Access the WebUI at `http://<host>:6969/ui` after startup.
189
190
  Port = 8080
190
191
  UserName = "admin"
191
192
  Password = "adminpass"
192
- Version5 = true # qBittorrent 5.x
193
193
  ```
194
194
 
195
195
  2. **Add Arr instances**:
@@ -206,6 +206,28 @@ Access the WebUI at `http://<host>:6969/ui` after startup.
206
206
  CompletedDownloadFolder = "/path/to/completed"
207
207
  ```
208
208
 
209
+ ### 🆕 Multi-qBittorrent (v3.0+)
210
+
211
+ Manage torrents across multiple qBittorrent instances:
212
+
213
+ ```toml
214
+ [qBit] # Default instance (required)
215
+ Host = "localhost"
216
+ Port = 8080
217
+ UserName = "admin"
218
+ Password = "password"
219
+
220
+ [qBit-seedbox] # Additional instance (optional)
221
+ Host = "192.168.1.100"
222
+ Port = 8080
223
+ UserName = "admin"
224
+ Password = "seedboxpass"
225
+ ```
226
+
227
+ See [Multi-qBittorrent Guide](MULTI_QBIT_V3_USER_GUIDE.md) for complete documentation.
228
+
229
+ ---
230
+
209
231
  See [Configuration Guide](https://feramance.github.io/qBitrr/configuration/) and [config.example.toml](config.example.toml) for all available options.
210
232
 
211
233
  ## 📖 Resources
@@ -67,6 +67,7 @@ Access the WebUI at `http://<host>:6969/ui` after startup.
67
67
 
68
68
  ## ✨ Key Features
69
69
 
70
+ - **🚀 Multi-qBittorrent Support (v3.0+)** – Manage torrents across multiple qBittorrent instances for load balancing, redundancy, and VPN isolation
70
71
  - **🚑 Torrent Health Monitoring** – Detect stalled/failed downloads, auto-blacklist, trigger re-searches
71
72
  - **🔍 Automated Search** – Missing media, quality upgrades, custom format scoring
72
73
  - **🎯 Request Integration** – Pull requests from Overseerr/Ombi, prioritize user-requested media
@@ -85,7 +86,6 @@ Access the WebUI at `http://<host>:6969/ui` after startup.
85
86
  Port = 8080
86
87
  UserName = "admin"
87
88
  Password = "adminpass"
88
- Version5 = true # qBittorrent 5.x
89
89
  ```
90
90
 
91
91
  2. **Add Arr instances**:
@@ -102,6 +102,28 @@ Access the WebUI at `http://<host>:6969/ui` after startup.
102
102
  CompletedDownloadFolder = "/path/to/completed"
103
103
  ```
104
104
 
105
+ ### 🆕 Multi-qBittorrent (v3.0+)
106
+
107
+ Manage torrents across multiple qBittorrent instances:
108
+
109
+ ```toml
110
+ [qBit] # Default instance (required)
111
+ Host = "localhost"
112
+ Port = 8080
113
+ UserName = "admin"
114
+ Password = "password"
115
+
116
+ [qBit-seedbox] # Additional instance (optional)
117
+ Host = "192.168.1.100"
118
+ Port = 8080
119
+ UserName = "admin"
120
+ Password = "seedboxpass"
121
+ ```
122
+
123
+ See [Multi-qBittorrent Guide](MULTI_QBIT_V3_USER_GUIDE.md) for complete documentation.
124
+
125
+ ---
126
+
105
127
  See [Configuration Guide](https://feramance.github.io/qBitrr/configuration/) and [config.example.toml](config.example.toml) for all available options.
106
128
 
107
129
  ## 📖 Resources
@@ -109,6 +109,7 @@ Theme = "Dark"
109
109
 
110
110
 
111
111
  [qBit]
112
+ # Default qBittorrent instance (REQUIRED)
112
113
  # If this is enabled qBitrr can run in headless mode where it will only process searches.
113
114
  # If media search is enabled in their individual categories
114
115
  # This is useful if you use for example Sabnzbd/NZBGet for downloading content but still want the faster media searches provided by qbit
@@ -127,6 +128,41 @@ UserName = "CHANGE_ME"
127
128
  Password = "CHANGE_ME"
128
129
 
129
130
 
131
+ # ============================================================
132
+ # MULTI-QBITTORRENT SUPPORT (v3.0+)
133
+ # ============================================================
134
+ # You can configure multiple qBittorrent instances using the [qBit-NAME] syntax.
135
+ # Each Arr instance will monitor ALL qBit instances for torrents in its category.
136
+ # This allows load balancing, redundancy, and VPN isolation.
137
+ #
138
+ # IMPORTANT: Use dash (-) notation, NOT dot (.) notation!
139
+ # ✅ CORRECT: [qBit-seedbox]
140
+ # ❌ WRONG: [qBit.seedbox]
141
+ #
142
+ # Examples:
143
+ #
144
+ # [qBit-seedbox]
145
+ # Host = "192.168.1.100"
146
+ # Port = 8080
147
+ # UserName = "admin"
148
+ # Password = "seedboxpass"
149
+ #
150
+ # [qBit-vpn]
151
+ # Host = "10.8.0.2"
152
+ # Port = 8080
153
+ # UserName = "admin"
154
+ # Password = "vpnpass"
155
+ #
156
+ # [qBit-remote]
157
+ # Host = "remote.example.com"
158
+ # Port = 8443
159
+ # UserName = "admin"
160
+ # Password = "remotepass"
161
+ #
162
+ # For more information, see: docs/advanced/multi-qbittorrent.md
163
+ # ============================================================
164
+
165
+
130
166
  [Sonarr-TV]
131
167
  # Toggle whether to manage the Servarr instance torrents.
132
168
  Managed = true
@@ -180,10 +216,10 @@ SearchByYear = true
180
216
  # Reverse search order (Start searching oldest to newest)
181
217
  SearchInReverse = false
182
218
 
183
- # Delay between request searches in seconds
219
+ # Delay (in seconds) between checking for new Overseerr/Ombi requests. Does NOT affect delay between individual search commands (use Settings.SearchLoopDelay for that).
184
220
  SearchRequestsEvery = 300
185
221
 
186
- # Search movies which already have a file in hopes of finding a better quality version.
222
+ # Search media which already have a file in hopes of finding a better quality version.
187
223
  DoUpgradeSearch = false
188
224
 
189
225
  # Do a quality unmet search for existing entries.
@@ -426,10 +462,10 @@ SearchByYear = true
426
462
  # Reverse search order (Start searching oldest to newest)
427
463
  SearchInReverse = false
428
464
 
429
- # Delay between request searches in seconds
465
+ # Delay (in seconds) between checking for new Overseerr/Ombi requests. Does NOT affect delay between individual search commands (use Settings.SearchLoopDelay for that).
430
466
  SearchRequestsEvery = 300
431
467
 
432
- # Search movies which already have a file in hopes of finding a better quality version.
468
+ # Search media which already have a file in hopes of finding a better quality version.
433
469
  DoUpgradeSearch = false
434
470
 
435
471
  # Do a quality unmet search for existing entries.
@@ -651,8 +687,6 @@ ArrErrorCodesToBlocklist = ["Not an upgrade for existing movie file(s)", "Not a
651
687
 
652
688
 
653
689
  [Radarr-1080.EntrySearch]
654
- # All these settings depends on SearchMissing being True
655
-
656
690
  # Should search for Missing files?
657
691
  SearchMissing = true
658
692
 
@@ -665,16 +699,16 @@ Unmonitored = false
665
699
  # That being said I've been daily driving 10 simultaneous tasks for quite a while now with no issues.
666
700
  SearchLimit = 5
667
701
 
668
- # It will order searches by the year the EPISODE was first aired
702
+ # It will order searches by the year the movie was released
669
703
  SearchByYear = true
670
704
 
671
705
  # Reverse search order (Start searching oldest to newest)
672
706
  SearchInReverse = false
673
707
 
674
- # Delay between request searches in seconds
708
+ # Delay (in seconds) between checking for new Overseerr/Ombi requests. Does NOT affect delay between individual search commands (use Settings.SearchLoopDelay for that).
675
709
  SearchRequestsEvery = 300
676
710
 
677
- # Search movies which already have a file in hopes of finding a better quality version.
711
+ # Search media which already have a file in hopes of finding a better quality version.
678
712
  DoUpgradeSearch = false
679
713
 
680
714
  # Do a quality unmet search for existing entries.
@@ -927,8 +961,6 @@ ArrErrorCodesToBlocklist = ["Not an upgrade for existing movie file(s)", "Not a
927
961
 
928
962
 
929
963
  [Radarr-4K.EntrySearch]
930
- # All these settings depends on SearchMissing being True
931
-
932
964
  # Should search for Missing files?
933
965
  SearchMissing = true
934
966
 
@@ -941,16 +973,16 @@ Unmonitored = false
941
973
  # That being said I've been daily driving 10 simultaneous tasks for quite a while now with no issues.
942
974
  SearchLimit = 5
943
975
 
944
- # It will order searches by the year the EPISODE was first aired
976
+ # It will order searches by the year the movie was released
945
977
  SearchByYear = true
946
978
 
947
979
  # Reverse search order (Start searching oldest to newest)
948
980
  SearchInReverse = false
949
981
 
950
- # Delay between request searches in seconds
982
+ # Delay (in seconds) between checking for new Overseerr/Ombi requests. Does NOT affect delay between individual search commands (use Settings.SearchLoopDelay for that).
951
983
  SearchRequestsEvery = 300
952
984
 
953
- # Search movies which already have a file in hopes of finding a better quality version.
985
+ # Search media which already have a file in hopes of finding a better quality version.
954
986
  DoUpgradeSearch = false
955
987
 
956
988
  # Do a quality unmet search for existing entries.
@@ -1212,10 +1244,10 @@ SearchMissing = true
1212
1244
  # Reverse search order (Start searching oldest to newest)
1213
1245
  SearchInReverse = false
1214
1246
 
1215
- # Delay between request searches in seconds
1247
+ # Delay (in seconds) between checking for new Overseerr/Ombi requests. Does NOT affect delay between individual search commands (use Settings.SearchLoopDelay for that).
1216
1248
  SearchRequestsEvery = 300
1217
1249
 
1218
- # Search movies which already have a file in the database in hopes of finding a better quality version.
1250
+ # Search media which already have a file in hopes of finding a better quality version.
1219
1251
  DoUpgradeSearch = false
1220
1252
 
1221
1253
  # Do a quality unmet search for existing entries.
@@ -28,7 +28,7 @@ target-version = ['py311']
28
28
 
29
29
  [tool.poetry]
30
30
  name = "pypi-public"
31
- version = "5.6.2"
31
+ version = "5.7.1"
32
32
  description = "Intelligent automation for qBittorrent and *Arr apps (Radarr/Sonarr/Lidarr) - health monitoring, instant imports, quality upgrades, request integration"
33
33
  authors = ["Drapersniper", "Feramance"]
34
34
  readme = "README.md"