ittup 1.1.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 (107) hide show
  1. ittup-1.1.0/LICENSE +22 -0
  2. ittup-1.1.0/PKG-INFO +182 -0
  3. ittup-1.1.0/README.rst +149 -0
  4. ittup-1.1.0/ittup/__init__.py +1 -0
  5. ittup-1.1.0/ittup/__main__.py +5 -0
  6. ittup-1.1.0/ittup/common/__init__.py +4 -0
  7. ittup-1.1.0/ittup/common/about.py +15 -0
  8. ittup-1.1.0/ittup/common/bdinfo_string.py +98 -0
  9. ittup-1.1.0/ittup/common/bittorrent.py +14 -0
  10. ittup-1.1.0/ittup/common/command.py +162 -0
  11. ittup-1.1.0/ittup/common/constants.py +18 -0
  12. ittup-1.1.0/ittup/common/database.py +78 -0
  13. ittup-1.1.0/ittup/common/external_services/__init__.py +9 -0
  14. ittup-1.1.0/ittup/common/external_services/ftpx/__init__.py +0 -0
  15. ittup-1.1.0/ittup/common/external_services/ftpx/client.py +305 -0
  16. ittup-1.1.0/ittup/common/external_services/ftpx/core/__init__.py +0 -0
  17. ittup-1.1.0/ittup/common/external_services/ftpx/core/ftpx_service.py +76 -0
  18. ittup-1.1.0/ittup/common/external_services/ftpx/core/ftpx_session.py +159 -0
  19. ittup-1.1.0/ittup/common/external_services/ftpx/core/menu.py +17 -0
  20. ittup-1.1.0/ittup/common/external_services/ftpx/core/models/__init__.py +0 -0
  21. ittup-1.1.0/ittup/common/external_services/ftpx/core/models/list.py +17 -0
  22. ittup-1.1.0/ittup/common/external_services/igdb/__init__.py +0 -0
  23. ittup-1.1.0/ittup/common/external_services/igdb/client.py +262 -0
  24. ittup-1.1.0/ittup/common/external_services/igdb/core/__init__.py +0 -0
  25. ittup-1.1.0/ittup/common/external_services/igdb/core/api.py +70 -0
  26. ittup-1.1.0/ittup/common/external_services/igdb/core/models/__init__.py +0 -0
  27. ittup-1.1.0/ittup/common/external_services/igdb/core/models/search.py +13 -0
  28. ittup-1.1.0/ittup/common/external_services/igdb/core/platformid.py +24 -0
  29. ittup-1.1.0/ittup/common/external_services/igdb/core/tags.py +13 -0
  30. ittup-1.1.0/ittup/common/external_services/imageHost.py +324 -0
  31. ittup-1.1.0/ittup/common/external_services/mediaresult.py +25 -0
  32. ittup-1.1.0/ittup/common/external_services/sessions/__init__.py +0 -0
  33. ittup-1.1.0/ittup/common/external_services/sessions/agents.py +212 -0
  34. ittup-1.1.0/ittup/common/external_services/sessions/exceptions.py +100 -0
  35. ittup-1.1.0/ittup/common/external_services/sessions/session.py +149 -0
  36. ittup-1.1.0/ittup/common/external_services/theMovieDB/__init__.py +4 -0
  37. ittup-1.1.0/ittup/common/external_services/theMovieDB/core/__init__.py +8 -0
  38. ittup-1.1.0/ittup/common/external_services/theMovieDB/core/api.py +574 -0
  39. ittup-1.1.0/ittup/common/external_services/theMovieDB/core/keywords.py +7 -0
  40. ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/__init__.py +0 -0
  41. ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/movie/__init__.py +0 -0
  42. ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/movie/alternative.py +2 -0
  43. ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/movie/details.py +82 -0
  44. ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/movie/movie.py +48 -0
  45. ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/movie/nowplaying.py +69 -0
  46. ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/movie/release_info.py +49 -0
  47. ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/movie/translations.py +33 -0
  48. ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/tvshow/__init__.py +0 -0
  49. ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/tvshow/alternative.py +14 -0
  50. ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/tvshow/details.py +139 -0
  51. ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/tvshow/on_the_air.py +27 -0
  52. ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/tvshow/translations.py +45 -0
  53. ittup-1.1.0/ittup/common/external_services/theMovieDB/core/models/tvshow/tvshow.py +50 -0
  54. ittup-1.1.0/ittup/common/external_services/theMovieDB/core/videos.py +21 -0
  55. ittup-1.1.0/ittup/common/external_services/trailers/__init__.py +3 -0
  56. ittup-1.1.0/ittup/common/external_services/trailers/api.py +120 -0
  57. ittup-1.1.0/ittup/common/external_services/trailers/response.py +51 -0
  58. ittup-1.1.0/ittup/common/external_services/tvdb.py +45 -0
  59. ittup-1.1.0/ittup/common/extractor.py +124 -0
  60. ittup-1.1.0/ittup/common/frames.py +221 -0
  61. ittup-1.1.0/ittup/common/mediainfo.py +206 -0
  62. ittup-1.1.0/ittup/common/mediainfo_string.py +103 -0
  63. ittup-1.1.0/ittup/common/settings.py +952 -0
  64. ittup-1.1.0/ittup/common/tags.py +415 -0
  65. ittup-1.1.0/ittup/common/title.py +127 -0
  66. ittup-1.1.0/ittup/common/torrent_clients.py +280 -0
  67. ittup-1.1.0/ittup/common/trackers/__init__.py +8 -0
  68. ittup-1.1.0/ittup/common/trackers/ban_list.py +5 -0
  69. ittup-1.1.0/ittup/common/trackers/data.py +22 -0
  70. ittup-1.1.0/ittup/common/trackers/itt.py +153 -0
  71. ittup-1.1.0/ittup/common/trackers/signs_list.py +293 -0
  72. ittup-1.1.0/ittup/common/trackers/tags_list.py +118 -0
  73. ittup-1.1.0/ittup/common/trackers/trackers.py +46 -0
  74. ittup-1.1.0/ittup/common/utility.py +394 -0
  75. ittup-1.1.0/ittup/core/__init__.py +5 -0
  76. ittup-1.1.0/ittup/core/__main__.py +289 -0
  77. ittup-1.1.0/ittup/core/automode.py +122 -0
  78. ittup-1.1.0/ittup/core/bot.py +294 -0
  79. ittup-1.1.0/ittup/core/duplicate.py +270 -0
  80. ittup-1.1.0/ittup/core/exceptions.py +122 -0
  81. ittup-1.1.0/ittup/core/media.py +378 -0
  82. ittup-1.1.0/ittup/core/media_manager/ContentManager.py +199 -0
  83. ittup-1.1.0/ittup/core/media_manager/DocuManager.py +76 -0
  84. ittup-1.1.0/ittup/core/media_manager/GameManager.py +107 -0
  85. ittup-1.1.0/ittup/core/media_manager/MediaInfoManager.py +26 -0
  86. ittup-1.1.0/ittup/core/media_manager/SeedManager.py +49 -0
  87. ittup-1.1.0/ittup/core/media_manager/TorrentManager.py +153 -0
  88. ittup-1.1.0/ittup/core/media_manager/VideoManager.py +145 -0
  89. ittup-1.1.0/ittup/core/media_manager/__init__.py +0 -0
  90. ittup-1.1.0/ittup/core/media_manager/common.py +265 -0
  91. ittup-1.1.0/ittup/core/pvtDocu.py +123 -0
  92. ittup-1.1.0/ittup/core/pvtTorrent.py +78 -0
  93. ittup-1.1.0/ittup/core/pvtTracker.py +481 -0
  94. ittup-1.1.0/ittup/core/pvtVideo.py +104 -0
  95. ittup-1.1.0/ittup/core/torrent.py +467 -0
  96. ittup-1.1.0/ittup/core/upload.py +168 -0
  97. ittup-1.1.0/ittup/view/__init__.py +3 -0
  98. ittup-1.1.0/ittup/view/custom_console.py +148 -0
  99. ittup-1.1.0/ittup.egg-info/PKG-INFO +182 -0
  100. ittup-1.1.0/ittup.egg-info/SOURCES.txt +105 -0
  101. ittup-1.1.0/ittup.egg-info/dependency_links.txt +1 -0
  102. ittup-1.1.0/ittup.egg-info/entry_points.txt +2 -0
  103. ittup-1.1.0/ittup.egg-info/requires.txt +19 -0
  104. ittup-1.1.0/ittup.egg-info/top_level.txt +1 -0
  105. ittup-1.1.0/pyproject.toml +34 -0
  106. ittup-1.1.0/requirements.txt +19 -0
  107. ittup-1.1.0/setup.cfg +4 -0
ittup-1.1.0/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 31December99
4
+ Copyright (c) 2026 TehMaat
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
ittup-1.1.0/PKG-INFO ADDED
@@ -0,0 +1,182 @@
1
+ Metadata-Version: 2.4
2
+ Name: ittup
3
+ Version: 1.1.0
4
+ Summary: ItaTorrents uploader
5
+ Author: Parzival, TehMaat
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/TehMaat/ittup
8
+ Project-URL: Repository, https://github.com/TehMaat/ittup
9
+ Project-URL: Issues, https://github.com/TehMaat/ittup/issues
10
+ Requires-Python: >=3.10
11
+ Description-Content-Type: text/x-rst
12
+ License-File: LICENSE
13
+ Requires-Dist: guessit==3.8.0
14
+ Requires-Dist: pymediainfo==7.0.1
15
+ Requires-Dist: qbittorrent-api==2026.6.0
16
+ Requires-Dist: pydantic==2.13.4
17
+ Requires-Dist: requests==2.34.2
18
+ Requires-Dist: rich==15.0.0
19
+ Requires-Dist: torf==4.3.1
20
+ Requires-Dist: tqdm==4.68.2
21
+ Requires-Dist: thefuzz==0.22.1
22
+ Requires-Dist: Unidecode==1.4.0
23
+ Requires-Dist: pillow==12.2.0
24
+ Requires-Dist: patool==4.0.5
25
+ Requires-Dist: diskcache==5.6.3
26
+ Requires-Dist: httpx==0.28.1
27
+ Requires-Dist: transmission-rpc==7.0.11
28
+ Requires-Dist: pathvalidate==3.3.1
29
+ Requires-Dist: bencode2==0.3.30
30
+ Requires-Dist: rtorrent-rpc==0.9.7
31
+ Requires-Dist: tvdb-v4-official==1.1.0
32
+ Dynamic: license-file
33
+
34
+
35
+ ittup - ItaTorrents uploader
36
+ ===============================================
37
+ |version| |online| |status| |python| |ubuntu| |debian| |windows|
38
+
39
+ .. |version| image:: https://img.shields.io/github/v/tag/TehMaat/ittup?label=version
40
+ .. |online| image:: https://img.shields.io/badge/Online-green
41
+ .. |status| image:: https://img.shields.io/badge/Status-Active-brightgreen
42
+ .. |python| image:: https://img.shields.io/badge/Python-3.10+-blue
43
+ .. |ubuntu| image:: https://img.shields.io/badge/Ubuntu-22-blue
44
+ .. |debian| image:: https://img.shields.io/badge/Debian-12-blue
45
+ .. |windows| image:: https://img.shields.io/badge/Windows-10-blue
46
+
47
+ Auto Torrent Generator and Uploader for ItaTorrents
48
+ ===================================================
49
+
50
+ **ittup** generates and uploads torrents to `ItaTorrents <https://itatorrents.xyz>`_ based on input provided
51
+ for movies or TV series and Games.
52
+
53
+ Repository: https://github.com/TehMaat/ittup
54
+
55
+ ittup is a fork of `Unit3Dup <https://github.com/31December99/Unit3Dup>`_ by 31December99,
56
+ reduced to the ItaTorrents tracker only.
57
+
58
+ It performs the following tasks:
59
+
60
+ - Scan folder and subfolders
61
+ - Compiles various metadata information to create a torrent
62
+ - Extracts a series of screenshots directly from the video
63
+ - Add webp to your torrent description page
64
+ - Extracts cover from the PDF documents
65
+ - Generates meta-info derived from the video or game
66
+ - Searches for the corresponding ID on TMDB, IGDB, IMDB,TVDB
67
+ - Add trailer from TMDB or YouTube
68
+ - Seeding in qBittorrent, Transmission or rTorrent
69
+ - Reseeding one or more torrents at a time
70
+ - Seed your torrents across different OS
71
+ - Generate various tags for titles: ``version``, ``resolution``, ``uhd``, ``platform``, ``source``, ``remux``, ``multi``, ``acodec``, ``channels``, ``flag``, ``subtitle``, ``vcodec``, ``hdr``, ``video_encoder``
72
+
73
+
74
+ ittup can grab the first page, convert it to an image (using xpdf),
75
+ and then the bot can upload it to an image host, then add the link to the torrent page description.
76
+
77
+
78
+ Install and Upgrade
79
+ ===================
80
+
81
+ - pip install --upgrade git+https://github.com/TehMaat/ittup
82
+
83
+ If you had Unit3Dup installed, uninstall it first::
84
+
85
+ pip uninstall unit3dup
86
+
87
+ All of ittup's code lives in the single ``ittup`` package (``ittup.core``, ``ittup.common``, ``ittup.view``);
88
+ removing Unit3Dup also removes the old top-level ``common``, ``view`` and ``unit3dup`` modules it left behind.
89
+
90
+
91
+ Configuration
92
+ -------------
93
+ The configuration is stored in ``~/ittup_config/ittup.json``
94
+ (Windows: ``%LOCALAPPDATA%\ittup_config\ittup.json``) together with
95
+ ``tags_list.json``, ``sign_list.json`` and ``ban_list.json``.
96
+
97
+ Coming from Unit3Dup? On the first run, if ``Unit3Dup_config`` exists and ``ittup_config`` does not,
98
+ ittup *copies* your configuration (``Unit3Dbot.json`` becomes ``ittup.json``), tags, sign and ban lists
99
+ into the new folder. The old folder is left untouched. Settings of the removed trackers
100
+ (``SIS``, ``PTT``, ``AST``, ``MULTI_TRACKER``) are simply ignored.
101
+
102
+ Windows Dependencies
103
+ --------------------
104
+ 1. Download and unzip https://www.ffmpeg.org/download.html and add its folder to
105
+ PATH environment user variable
106
+
107
+
108
+ Only for pdf
109
+ ~~~~~~~~~~~~
110
+ 1. Download and unzip poppler for Windows from https://github.com/oschwartz10612/poppler-windows/releases
111
+ 2. Put the folder 'bin' in the system path (e.g. ``C:\poppler-24.08.0\Library\bin``)
112
+ 3. *Close and reopen a new console window*
113
+ 4. Test it: Run ``pdftocairo`` in the terminal
114
+
115
+
116
+ Ubuntu/Debian Dependencies
117
+ --------------------------
118
+ - sudo apt install ffmpeg
119
+
120
+ Only for pdf
121
+ ~~~~~~~~~~~~
122
+ - sudo apt install poppler-utils
123
+
124
+
125
+ RUN
126
+ ======
127
+
128
+ .. code-block:: python
129
+
130
+ ittup -u <filepath>
131
+ ittup -f <folderpath>
132
+ ittup -scan <folderpath>
133
+
134
+ Every upload goes to ItaTorrents: the ``-tracker`` and ``-mt`` options no longer exist.
135
+ Run ``ittup -h`` for the full list of commands.
136
+
137
+
138
+
139
+ DOC
140
+ ===
141
+
142
+ The documentation (English and Italian) is at https://tehmaat.github.io/ittup/
143
+
144
+
145
+ ImageHost
146
+ =========
147
+
148
+ The bot can upload images to the following image hosting platforms:
149
+
150
+ +------------------+----------------------------+
151
+ | **Image Host** | **URL** |
152
+ +==================+============================+
153
+ | ``ImgBB`` | https://imgbb.com |
154
+ +------------------+----------------------------+
155
+ | ``FreeImage`` | https://freeimage.host |
156
+ +------------------+----------------------------+
157
+ | ``PtScreens`` | https://ptscreens.com |
158
+ +------------------+----------------------------+
159
+ | ``LensDump`` | https://lensdump.com |
160
+ +------------------+----------------------------+
161
+ | ``ImgFI`` | https://imgfi.com |
162
+ +------------------+----------------------------+
163
+ | ``PassIMA`` | https://passtheima.ge |
164
+ +------------------+----------------------------+
165
+ | ``ImaRide`` | https://www.imageride.net |
166
+ +------------------+----------------------------+
167
+
168
+ Trackers
169
+ ========
170
+
171
+ The Italian tracker: a multitude of people from diverse technical and social backgrounds,
172
+ united by a shared passion for torrents and more
173
+
174
+ +------------------+----------------------------+
175
+ | **Trackers** | **Description** |
176
+ +==================+============================+
177
+ | ``ITT`` | https://itatorrents.xyz |
178
+ +------------------+----------------------------+
179
+
180
+ .. image:: https://img.shields.io/badge/Discord-join-5865F2?logo=discord&logoColor=white&style=flat
181
+ :target: https://discord.gg/VMYaVzq2AF
182
+ :alt: Discord Server
ittup-1.1.0/README.rst ADDED
@@ -0,0 +1,149 @@
1
+
2
+ ittup - ItaTorrents uploader
3
+ ===============================================
4
+ |version| |online| |status| |python| |ubuntu| |debian| |windows|
5
+
6
+ .. |version| image:: https://img.shields.io/github/v/tag/TehMaat/ittup?label=version
7
+ .. |online| image:: https://img.shields.io/badge/Online-green
8
+ .. |status| image:: https://img.shields.io/badge/Status-Active-brightgreen
9
+ .. |python| image:: https://img.shields.io/badge/Python-3.10+-blue
10
+ .. |ubuntu| image:: https://img.shields.io/badge/Ubuntu-22-blue
11
+ .. |debian| image:: https://img.shields.io/badge/Debian-12-blue
12
+ .. |windows| image:: https://img.shields.io/badge/Windows-10-blue
13
+
14
+ Auto Torrent Generator and Uploader for ItaTorrents
15
+ ===================================================
16
+
17
+ **ittup** generates and uploads torrents to `ItaTorrents <https://itatorrents.xyz>`_ based on input provided
18
+ for movies or TV series and Games.
19
+
20
+ Repository: https://github.com/TehMaat/ittup
21
+
22
+ ittup is a fork of `Unit3Dup <https://github.com/31December99/Unit3Dup>`_ by 31December99,
23
+ reduced to the ItaTorrents tracker only.
24
+
25
+ It performs the following tasks:
26
+
27
+ - Scan folder and subfolders
28
+ - Compiles various metadata information to create a torrent
29
+ - Extracts a series of screenshots directly from the video
30
+ - Add webp to your torrent description page
31
+ - Extracts cover from the PDF documents
32
+ - Generates meta-info derived from the video or game
33
+ - Searches for the corresponding ID on TMDB, IGDB, IMDB,TVDB
34
+ - Add trailer from TMDB or YouTube
35
+ - Seeding in qBittorrent, Transmission or rTorrent
36
+ - Reseeding one or more torrents at a time
37
+ - Seed your torrents across different OS
38
+ - Generate various tags for titles: ``version``, ``resolution``, ``uhd``, ``platform``, ``source``, ``remux``, ``multi``, ``acodec``, ``channels``, ``flag``, ``subtitle``, ``vcodec``, ``hdr``, ``video_encoder``
39
+
40
+
41
+ ittup can grab the first page, convert it to an image (using xpdf),
42
+ and then the bot can upload it to an image host, then add the link to the torrent page description.
43
+
44
+
45
+ Install and Upgrade
46
+ ===================
47
+
48
+ - pip install --upgrade git+https://github.com/TehMaat/ittup
49
+
50
+ If you had Unit3Dup installed, uninstall it first::
51
+
52
+ pip uninstall unit3dup
53
+
54
+ All of ittup's code lives in the single ``ittup`` package (``ittup.core``, ``ittup.common``, ``ittup.view``);
55
+ removing Unit3Dup also removes the old top-level ``common``, ``view`` and ``unit3dup`` modules it left behind.
56
+
57
+
58
+ Configuration
59
+ -------------
60
+ The configuration is stored in ``~/ittup_config/ittup.json``
61
+ (Windows: ``%LOCALAPPDATA%\ittup_config\ittup.json``) together with
62
+ ``tags_list.json``, ``sign_list.json`` and ``ban_list.json``.
63
+
64
+ Coming from Unit3Dup? On the first run, if ``Unit3Dup_config`` exists and ``ittup_config`` does not,
65
+ ittup *copies* your configuration (``Unit3Dbot.json`` becomes ``ittup.json``), tags, sign and ban lists
66
+ into the new folder. The old folder is left untouched. Settings of the removed trackers
67
+ (``SIS``, ``PTT``, ``AST``, ``MULTI_TRACKER``) are simply ignored.
68
+
69
+ Windows Dependencies
70
+ --------------------
71
+ 1. Download and unzip https://www.ffmpeg.org/download.html and add its folder to
72
+ PATH environment user variable
73
+
74
+
75
+ Only for pdf
76
+ ~~~~~~~~~~~~
77
+ 1. Download and unzip poppler for Windows from https://github.com/oschwartz10612/poppler-windows/releases
78
+ 2. Put the folder 'bin' in the system path (e.g. ``C:\poppler-24.08.0\Library\bin``)
79
+ 3. *Close and reopen a new console window*
80
+ 4. Test it: Run ``pdftocairo`` in the terminal
81
+
82
+
83
+ Ubuntu/Debian Dependencies
84
+ --------------------------
85
+ - sudo apt install ffmpeg
86
+
87
+ Only for pdf
88
+ ~~~~~~~~~~~~
89
+ - sudo apt install poppler-utils
90
+
91
+
92
+ RUN
93
+ ======
94
+
95
+ .. code-block:: python
96
+
97
+ ittup -u <filepath>
98
+ ittup -f <folderpath>
99
+ ittup -scan <folderpath>
100
+
101
+ Every upload goes to ItaTorrents: the ``-tracker`` and ``-mt`` options no longer exist.
102
+ Run ``ittup -h`` for the full list of commands.
103
+
104
+
105
+
106
+ DOC
107
+ ===
108
+
109
+ The documentation (English and Italian) is at https://tehmaat.github.io/ittup/
110
+
111
+
112
+ ImageHost
113
+ =========
114
+
115
+ The bot can upload images to the following image hosting platforms:
116
+
117
+ +------------------+----------------------------+
118
+ | **Image Host** | **URL** |
119
+ +==================+============================+
120
+ | ``ImgBB`` | https://imgbb.com |
121
+ +------------------+----------------------------+
122
+ | ``FreeImage`` | https://freeimage.host |
123
+ +------------------+----------------------------+
124
+ | ``PtScreens`` | https://ptscreens.com |
125
+ +------------------+----------------------------+
126
+ | ``LensDump`` | https://lensdump.com |
127
+ +------------------+----------------------------+
128
+ | ``ImgFI`` | https://imgfi.com |
129
+ +------------------+----------------------------+
130
+ | ``PassIMA`` | https://passtheima.ge |
131
+ +------------------+----------------------------+
132
+ | ``ImaRide`` | https://www.imageride.net |
133
+ +------------------+----------------------------+
134
+
135
+ Trackers
136
+ ========
137
+
138
+ The Italian tracker: a multitude of people from diverse technical and social backgrounds,
139
+ united by a shared passion for torrents and more
140
+
141
+ +------------------+----------------------------+
142
+ | **Trackers** | **Description** |
143
+ +==================+============================+
144
+ | ``ITT`` | https://itatorrents.xyz |
145
+ +------------------+----------------------------+
146
+
147
+ .. image:: https://img.shields.io/badge/Discord-join-5865F2?logo=discord&logoColor=white&style=flat
148
+ :target: https://discord.gg/VMYaVzq2AF
149
+ :alt: Discord Server
@@ -0,0 +1 @@
1
+ # -*- coding: utf-8 -*-
@@ -0,0 +1,5 @@
1
+ # -*- coding: utf-8 -*-
2
+ from ittup.core.__main__ import main
3
+
4
+ if __name__ == "__main__":
5
+ main()
@@ -0,0 +1,4 @@
1
+ from ittup.common.settings import Load
2
+
3
+ config_settings = Load.load_config()
4
+
@@ -0,0 +1,15 @@
1
+ # -*- coding: utf-8 -*-
2
+ from importlib.metadata import PackageNotFoundError, version as _package_version
3
+
4
+ APP_NAME = "ittup"
5
+ APP_DESCRIPTION = "ItaTorrents uploader"
6
+ REPO_URL = "https://github.com/TehMaat/ittup"
7
+
8
+ # The version is defined only in pyproject.toml and read from the installed package metadata
9
+ try:
10
+ __version__ = _package_version(APP_NAME)
11
+ except PackageNotFoundError:
12
+ # Running from a source checkout without installing the package
13
+ __version__ = "0.0.0+unknown"
14
+
15
+ USER_AGENT = f"{APP_NAME}/{__version__} (+{REPO_URL})"
@@ -0,0 +1,98 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ class BDInfo:
4
+ """
5
+ A class to represent information about a Blu-ray disc.
6
+
7
+ Attributes:
8
+ disc_label (str): The label or name of the disc.
9
+ disc_size (str): The size of the disc.
10
+ protection (str): The type of protection applied to the disc.
11
+ playlist (str): The playlist information.
12
+ size (str): The size of the content on the disc.
13
+ length (str): The length of the content on the disc.
14
+ total_bitrate (str): The total bitrate of the disc content.
15
+ video (str): The video specifications.
16
+ audio (list[str]): A list of audio specifications.
17
+ languages (list[str]): A list of languages extracted from audio specifications.
18
+ subtitles (list[str]): A list of subtitle specifications.
19
+
20
+ Methods:
21
+ from_bdinfo_string(bd_info_string: str) -> 'BDInfo':
22
+ Creates an instance of BDInfo from a formatted string.
23
+ """
24
+
25
+ def __init__(
26
+ self,
27
+ disc_label: str,
28
+ disc_size: str,
29
+ protection: str,
30
+ playlist: str,
31
+ size: str,
32
+ length: str,
33
+ total_bitrate: str,
34
+ video: str,
35
+ audio: list[str],
36
+ languages: list[str],
37
+ subtitles: list[str],
38
+ ):
39
+ self.disc_label = disc_label
40
+ self.disc_size = disc_size
41
+ self.protection = protection
42
+ self.playlist = playlist
43
+ self.size = size
44
+ self.length = length
45
+ self.total_bitrate = total_bitrate
46
+ self.video = video
47
+ self.audio = audio
48
+ self.languages = languages
49
+ self.subtitles = subtitles
50
+
51
+ @classmethod
52
+ def from_bdinfo_string(cls, bd_info_string: str) -> 'BDInfo':
53
+ """
54
+ Creates an instance of BDInfo from a formatted string.
55
+
56
+ Args:
57
+ bd_info_string (str): A string containing Blu-ray disc information formatted with labels and values.
58
+
59
+ Returns:
60
+ BDInfo: An instance of the BDInfo class with attributes populated from the input string.
61
+ """
62
+ lines = bd_info_string.strip().split("\n")
63
+ data = {"audio": [], "subtitles": []}
64
+
65
+ for line in lines:
66
+ # Parsing Audio
67
+ if ": " in line:
68
+ key, value = line.split(": ", 1)
69
+ key = key.strip().replace(" ", "_").lower()
70
+
71
+ if key == "audio":
72
+ data["audio"].append(value.strip().lower())
73
+ elif key == "subtitle":
74
+ data["subtitles"].append(value.strip().lower())
75
+ else:
76
+ data[key] = value.strip()
77
+
78
+ # Parsing Languages
79
+ languages_parsed = []
80
+ for item in data["audio"]:
81
+ item = item.replace("(", " ")
82
+ item = item.replace(")", " ")
83
+ item = item.split("/")
84
+ languages_parsed.append(item[0].strip())
85
+
86
+ return cls(
87
+ disc_label=data.get("disc_label"),
88
+ disc_size=data.get("disc_size"),
89
+ protection=data.get("protection"),
90
+ playlist=data.get("playlist"),
91
+ size=data.get("size"),
92
+ length=data.get("length"),
93
+ total_bitrate=data.get("total_bitrate"),
94
+ video=data.get("video"),
95
+ audio=data["audio"],
96
+ languages=languages_parsed,
97
+ subtitles=data["subtitles"],
98
+ )
@@ -0,0 +1,14 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from dataclasses import dataclass
4
+ from ittup.core.pvtTorrent import Mytorrent
5
+ from ittup.core.media import Media
6
+
7
+
8
+ @dataclass
9
+ class BittorrentData:
10
+ tracker_response: str
11
+ torrent_response: Mytorrent | None
12
+ content: Media
13
+ tracker_message: dict
14
+ archive_path: str
@@ -0,0 +1,162 @@
1
+ # -*- coding: utf-8 -*-
2
+ import os
3
+ import argparse
4
+
5
+ from ittup.common.utility import System
6
+ from ittup.common.about import APP_DESCRIPTION, APP_NAME
7
+
8
+
9
+ class RemovedFlag(argparse.Action):
10
+ def __call__(self, parser, namespace, values, option_string=None):
11
+ parser.error(f"'{option_string}' has been removed: {APP_NAME} uploads only to ItaTorrents")
12
+
13
+
14
+ class CommandLine:
15
+ """
16
+ Handle command line arguments
17
+ """
18
+
19
+ def __init__(self):
20
+
21
+ # /////////////////////////
22
+ # Main parser
23
+ # /////////////////////////
24
+ parser = argparse.ArgumentParser(
25
+ prog=APP_NAME,
26
+ description=f"{APP_DESCRIPTION}: manage torrents, uploads, searches and config checks",
27
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter
28
+ )
29
+
30
+ # /////////////////////////
31
+ # Groups
32
+ # /////////////////////////
33
+ cfg_group = parser.add_argument_group("Config Commands")
34
+ upload_group = parser.add_argument_group("Upload Commands")
35
+ search_group = parser.add_argument_group("Search Commands")
36
+ filter_group = parser.add_argument_group("Filter Options")
37
+ special_group = parser.add_argument_group("Special Flags")
38
+
39
+ # /////////////////////////
40
+ # Config Commands
41
+ # /////////////////////////
42
+ cfg_group.add_argument(
43
+ "-check", "--check",
44
+ action="store_true",
45
+ help="Check config files"
46
+ )
47
+
48
+ # /////////////////////////
49
+ # Upload Commands
50
+ # /////////////////////////
51
+ upload_group.add_argument("-u", "--upload", type=str, help="Upload path")
52
+ upload_group.add_argument("-f", "--folder", type=str, help="Upload folder")
53
+ upload_group.add_argument("-scan", "--scan", type=str, help="Scan folder")
54
+ upload_group.add_argument("-reseed", "--reseed", action="store_true", help="Reseed folder")
55
+ upload_group.add_argument("-watcher", "--watcher", action="store_true", help="Start watcher")
56
+ upload_group.add_argument("-notitle", "--notitle", type=str, help="Manual title")
57
+
58
+ upload_group.add_argument(
59
+ "-force",
60
+ nargs='?',
61
+ const="movie",
62
+ type=str,
63
+ default=None,
64
+ help="Force category"
65
+ )
66
+
67
+ upload_group.add_argument("-noseed", "--noseed", action="store_true", help="Disable seeding")
68
+ upload_group.add_argument("-noup", "--noup", action="store_true", help="Torrent only")
69
+ upload_group.add_argument("-dup", "--duplicate", action="store_true", help="Check duplicates")
70
+ upload_group.add_argument("-personal", "--personal", action="store_true", help="Personal release")
71
+ upload_group.add_argument("-ftp", "--ftp", action="store_true", help="Connect FTP")
72
+
73
+ # Removed flags: ittup uploads only to ItaTorrents. Without this '-mt' would be parsed as '-m t'
74
+ upload_group.add_argument("-mt", "--mt", "-tracker", "--tracker", nargs='?', action=RemovedFlag,
75
+ help=argparse.SUPPRESS)
76
+
77
+ # /////////////////////////
78
+ # Search Commands
79
+ # /////////////////////////
80
+ search_group.add_argument("-dmp", "--dump", action="store_true", help="Dump titles")
81
+ search_group.add_argument("-sch", "--search", type=str, help="Search torrent")
82
+ search_group.add_argument("-db", "--dbsave", action="store_true", help="Save results")
83
+ search_group.add_argument("-i", "--info", type=str, help="Torrent info")
84
+ search_group.add_argument("-up", "--uploader", type=str, help="By uploader")
85
+ search_group.add_argument("-d", "--description", type=str, help="By description")
86
+ search_group.add_argument("-bd", "--bdinfo", type=str, help="Show BDInfo")
87
+ search_group.add_argument("-m", "--mediainfo", type=str, help="Show MediaInfo")
88
+ search_group.add_argument("-int", "--internal", action="store_true", help="Internal Release")
89
+ search_group.add_argument("-mod", "--moderation", action="store_true", help="In moderation")
90
+
91
+
92
+ # /////////////////////////
93
+ # Filter Options
94
+ # /////////////////////////
95
+ filter_group.add_argument("-st", "--startyear", type=str, help="Start year")
96
+ filter_group.add_argument("-en", "--endyear", type=str, help="End year")
97
+ filter_group.add_argument("-type", "--type", type=str, help="Type")
98
+ filter_group.add_argument("-res", "--resolution", type=str, help="Resolution")
99
+ filter_group.add_argument("-file", "--filename", type=str, help="Filename")
100
+ filter_group.add_argument("-se", "--season", type=str, help="Season")
101
+ filter_group.add_argument("-ep", "--episode", type=str, help="Episode")
102
+
103
+ # IDs
104
+ filter_group.add_argument("-tmdb", "--tmdb_id", type=str, help="TMDB ID")
105
+ filter_group.add_argument("-imdb", "--imdb_id", type=str, help="IMDB ID")
106
+ filter_group.add_argument("-tvdb", "--tvdb_id", type=int, help="TVDB ID")
107
+ filter_group.add_argument("-mal", "--mal_id", type=str, help="MAL ID")
108
+ filter_group.add_argument("-playid", "--playlist_id", type=str, help="Playlist ID")
109
+ filter_group.add_argument("-coll", "--collection_id", type=str, help="Collection ID")
110
+
111
+ # Status
112
+ filter_group.add_argument("-free", "--freelech", type=str, help="Freeleech")
113
+ filter_group.add_argument("-al", "--alive", action="store_true", help="Alive")
114
+ filter_group.add_argument("-dd", "--dead", action="store_true", help="Dead")
115
+ filter_group.add_argument("-dy", "--dying", action="store_true", help="Dying")
116
+
117
+ # /////////////////////////
118
+ # Special Flags
119
+ # /////////////////////////
120
+ special_group.add_argument("-du", "--doubleup", action="store_true", help="DoubleUp")
121
+ special_group.add_argument("-fe", "--featured", action="store_true", help="Featured")
122
+ special_group.add_argument("-re", "--refundable", action="store_true", help="Refundable")
123
+ special_group.add_argument("-str", "--stream", action="store_true", help="Stream")
124
+ special_group.add_argument("-sd", "--standard", action="store_true", help="SD")
125
+ special_group.add_argument("-hs", "--highspeed", action="store_true", help="Highspeed")
126
+ special_group.add_argument("-inter", "--intern_r", action="store_true", help="Internal Release")
127
+ special_group.add_argument("-pr", "--prelease", action="store_true", help="Personal")
128
+
129
+ # /////////////////////////
130
+ # Parse args
131
+ # /////////////////////////
132
+ self.args = parser.parse_args()
133
+
134
+ # /////////////////////////
135
+ # Check scan path
136
+ # /////////////////////////
137
+ self.is_dir = os.path.isdir(self.args.scan) if self.args.scan else None
138
+
139
+ # /////////////////////////
140
+ # Expand upload path
141
+ # /////////////////////////
142
+ if self.args.upload:
143
+ self.args.upload = os.path.expanduser(self.args.upload)
144
+
145
+ # /////////////////////////
146
+ # Validate force category
147
+ # /////////////////////////
148
+ if self.args.force:
149
+
150
+ self.args.force = self.args.force[:10]
151
+
152
+ valid_categories = [
153
+ System.category_list[System.MOVIE],
154
+ System.category_list[System.GAME],
155
+ System.category_list[System.TV_SHOW],
156
+ System.category_list[System.DOCUMENTARY]
157
+ ]
158
+
159
+ if self.args.force.lower() not in valid_categories:
160
+ self.args.force = None
161
+ print("Invalid -force category")
162
+ exit()