DDownloader 0.3.6__py3-none-any.whl → 0.3.8__py3-none-any.whl

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.
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1 +1 @@
1
- __version__ = "0.3.6"
1
+ __version__ = "0.3.8"
@@ -23,7 +23,7 @@ def banners():
23
23
  stdout.write(""+Fore.YELLOW +"╔════════════════════════════════════════════════════════════════════════════╝\n")
24
24
  stdout.write(""+Fore.YELLOW +"║ \x1b[38;2;255;20;147m• "+Fore.GREEN+"GITHUB "+Fore.RED+" |"+Fore.LIGHTWHITE_EX+" GITHUB.COM/THATNOTEASY "+Fore.YELLOW+"║\n")
25
25
  stdout.write(""+Fore.YELLOW +"╚════════════════════════════════════════════════════════════════════════════╝\n")
26
- print(f"{Fore.YELLOW}[DDownloader] - {Fore.GREEN}A DRM-Protected & Non-Protected Content Downloader - {Fore.RED}[V0.3.6] \n{Fore.RESET}")
26
+ print(f"{Fore.YELLOW}[DDownloader] - {Fore.GREEN}A DRM-Protected & Non-Protected Content Downloader - {Fore.RED}[V0.3.8] \n{Fore.RESET}")
27
27
 
28
28
  # =========================================================================================================== #
29
29
 
@@ -61,17 +61,16 @@ class DOWNLOADER:
61
61
  # =========================================================================================================== #
62
62
 
63
63
  def _build_command(self):
64
- self.binary_path = self._get_binary_path("N_m3u8DL-RE")
65
64
  command = [
66
- self.binary_path,
65
+ self._get_binary_path("N_m3u8DL-RE"),
67
66
  f'"{self.manifest_url}"',
68
- '--select-video', 'BEST',
69
- '--select-audio', 'BEST',
70
67
  '-mt',
71
68
  '-M', 'format=mp4',
72
69
  '--save-dir', '"downloads"',
73
70
  '--tmp-dir', '"downloads"',
74
71
  '--del-after-done',
72
+ '--decryption-engine', '"FFMPEG"',
73
+ '--decryption-binary-path', f'"{self._get_binary_path("ffmpeg")}"',
75
74
  '--save-name', f'"{self.output_name}"'
76
75
  ]
77
76
 
@@ -92,52 +92,89 @@ def detect_platform():
92
92
 
93
93
  def get_media_info(file_path):
94
94
  try:
95
- logger.info(f"Parsing media file: {file_path}")
95
+ logger.info(f"📂 Parsing media file: {file_path}")
96
96
  media_info = MediaInfo.parse(file_path)
97
- result = {"file_path": file_path, "tracks": []}
97
+
98
+ result = {
99
+ "file_path": file_path,
100
+ "tracks": [],
101
+ "container": None,
102
+ "file_size": None,
103
+ "duration": None,
104
+ "bit_rate": None,
105
+ }
98
106
 
99
107
  for track in media_info.tracks:
100
108
  track_info = {"track_type": track.track_type}
101
109
 
102
- if track.track_type == "Video":
110
+ if track.track_type == "General":
111
+ result.update({
112
+ "container": getattr(track, "format", None),
113
+ "file_size": getattr(track, "file_size", None),
114
+ "duration": getattr(track, "duration", None),
115
+ "bit_rate": getattr(track, "overall_bit_rate", None),
116
+ "title": getattr(track, "title", None),
117
+ "encoded_application": getattr(track, "encoded_application", None),
118
+ "encoded_library": getattr(track, "encoded_library", None),
119
+ "writing_library": getattr(track, "writing_library", None),
120
+ "file_creation_date": getattr(track, "file_created_date", None),
121
+ })
122
+
123
+ elif track.track_type == "Video":
103
124
  track_info.update({
104
- "codec": track.codec,
105
- "width": track.width,
106
- "height": track.height,
107
- "frame_rate": track.frame_rate,
108
- "bit_rate": track.bit_rate,
109
- "duration": track.duration,
110
- "aspect_ratio": track.display_aspect_ratio,
125
+ "codec": getattr(track, "codec_id", getattr(track, "format", None)),
126
+ "codec_profile": getattr(track, "format_profile", None),
127
+ "width": getattr(track, "width", None),
128
+ "height": getattr(track, "height", None),
129
+ "frame_rate": getattr(track, "frame_rate", None),
130
+ "bit_rate": getattr(track, "bit_rate", None),
131
+ "duration": getattr(track, "duration", None),
132
+ "aspect_ratio": getattr(track, "display_aspect_ratio", None),
133
+ "hdr_format": getattr(track, "hdr_format", None),
134
+ "bit_depth": getattr(track, "bit_depth", None),
135
+ "color_space": getattr(track, "colour_primaries", None),
136
+ "color_range": getattr(track, "colour_range", None),
137
+ "color_transfer": getattr(track, "transfer_characteristics", None),
138
+ "chroma_subsampling": getattr(track, "chroma_subsampling", None),
111
139
  })
140
+
112
141
  elif track.track_type == "Audio":
113
142
  track_info.update({
114
- "codec": track.codec,
115
- "channels": track.channel_s,
116
- "sample_rate": track.sampling_rate,
117
- "bit_rate": track.bit_rate,
118
- "duration": track.duration,
119
- "language": track.language,
143
+ "codec": getattr(track, "codec_id", getattr(track, "format", None)),
144
+ "codec_profile": getattr(track, "format_profile", None),
145
+ "channels": getattr(track, "channel_s", None),
146
+ "sample_rate": getattr(track, "sampling_rate", None),
147
+ "bit_rate": getattr(track, "bit_rate", None),
148
+ "duration": getattr(track, "duration", None),
149
+ "language": getattr(track, "language", "Unknown"),
150
+ "compression_mode": getattr(track, "compression_mode", None),
151
+ "bit_depth": getattr(track, "bit_depth", None),
120
152
  })
153
+
121
154
  elif track.track_type == "Text":
122
155
  track_info.update({
123
- "language": track.language,
124
- "format": track.format,
156
+ "format": getattr(track, "format", None),
157
+ "language": getattr(track, "language", "Unknown"),
158
+ "default": getattr(track, "default", None),
159
+ "forced": getattr(track, "forced", None),
160
+ "format_profile": getattr(track, "format_profile", None),
125
161
  })
126
- elif track.track_type == "General":
162
+
163
+ elif track.track_type == "Chapters":
127
164
  track_info.update({
128
- "file_size": track.file_size,
129
- "format": track.format,
130
- "duration": track.duration,
131
- "overall_bit_rate": track.overall_bit_rate,
165
+ "title": getattr(track, "title", None),
166
+ "chapter_count": getattr(track, "part_count", None),
132
167
  })
133
168
 
134
- result["tracks"].append(track_info)
169
+ if any(value is not None for value in track_info.values()): # Avoid empty entries
170
+ result["tracks"].append(track_info)
135
171
 
136
- logger.info(f"Successfully extracted media information for: {file_path}")
172
+ logger.info(f"Successfully extracted media info for: {file_path}")
137
173
  return result
138
174
 
139
175
  except Exception as e:
140
- logger.error(f"Error occurred while parsing media file '{file_path}': {e}")
176
+ logger.error(f"Error parsing media file '{file_path}': {e}")
141
177
  return None
178
+
142
179
 
143
180
  # =========================================================================================================== #
@@ -1,127 +1,135 @@
1
- Metadata-Version: 2.2
2
- Name: DDownloader
3
- Version: 0.3.6
4
- Summary: A downloader for DRM-protected content.
5
- Author-email: ThatNotEasy <apidotmy@proton.me>
6
- License: MIT License
7
-
8
- Copyright (c) [2024] [DDownloader]
9
-
10
- Permission is hereby granted, free of charge, to any person obtaining a copy
11
- of this software and associated documentation files (the "Software"), to deal
12
- in the Software without restriction, including without limitation the rights
13
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
- copies of the Software, and to permit persons to whom the Software is
15
- furnished to do so, subject to the following condition:
16
-
17
- The above copyright notice and this permission notice shall be included in
18
- all copies or substantial portions of the Software.
19
-
20
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
26
- IN THE SOFTWARE.
27
- Classifier: Programming Language :: Python :: 3
28
- Classifier: Programming Language :: Python :: 3.7
29
- Classifier: Programming Language :: Python :: 3.8
30
- Classifier: Programming Language :: Python :: 3.9
31
- Classifier: Programming Language :: Python :: 3.10
32
- Classifier: Programming Language :: Python :: 3.11
33
- Classifier: License :: OSI Approved :: MIT License
34
- Classifier: Operating System :: OS Independent
35
- Requires-Python: >=3.7
36
- Description-Content-Type: text/markdown
37
- License-File: LICENSE
38
-
39
- # DDownloader
40
- _DDownloader is a powerful Python-based tool and library designed to download and decrypt DRM-protected content from DASH, HLS, and ISM manifests. It provides seamless support for encrypted media streams, extracting metadata and ensuring high compatibility with various DRM standards._
41
-
42
- ## Features
43
- - **Download and Decrypt**: Supports DASH, HLS, and ISM manifests with seamless decryption using provided keys.
44
- - **Automatic Detection**: Automatically detects manifest types (.mpd, .m3u8, .ism) and processes accordingly.
45
- - **Media Information Extraction**: Extracts metadata (e.g., codec, resolution, duration) for .mp4 files and saves it in a `logs/` directory.
46
- - **CLI and Library Support**: Flexible usage via command-line or Python library.
47
- - **Detailed Logging**: Provides real-time progress and logs errors for debugging.
48
-
49
- ## Requirements
50
-
51
- - **Python**: Version 3.7 or higher.
52
- - **Required binaries**:
53
-
54
- - `N_m3u8DL-RE` for downloading protected DRM content.
55
- - `mp4decrypt` for decrypting protected media files.
56
- - `ffmpeg` for re-encoding and muxer method
57
- - a proper environment variable configuration for binaries.
58
-
59
- ## Installation
60
- - Install `DDownloader` using pip:
61
-
62
- ```bash
63
- pip install DDownloader
64
- ```
65
-
66
- ## Usage
67
- - Download Content:
68
-
69
- ```python
70
- from DDownloader.modules.downloader import DOWNLOADER
71
-
72
- downloader = DOWNLOADER()
73
- downloader.manifest_url = "https://example.com/path/to/manifest" # DASH, HLS, or ISM manifest URL
74
- downloader.output_name = "output.mp4" # Desired output file name
75
- downloader.decryption_keys = ["12345:678910"] # Provide decryption keys if needed
76
- downloader.download() # Start the downloading and decryption process
77
- ```
78
-
79
- - Extract Media Information:
80
-
81
- ```python
82
- from DDownloader.modules.helper import get_media_info
83
-
84
- file_path = "downloads/example.mp4"
85
- media_info = get_media_info(file_path)
86
- print(media_info)
87
- ```
88
-
89
- - Re-encoding:
90
-
91
- ```python
92
- from DDownloader.modules.downloader import DOWNLOADER
93
-
94
- re_encode = DOWNLOADER()
95
- quality = ["HD", "FHD", "UHD"]
96
- input_content = "downloads/example.mp4"
97
- output_content = "/path/to/output.mp4"
98
- re_encode.re_encode_content(input_file=input_content,quality=quality,codec="libx265",crf=20,preset="medium")
99
- ```
100
-
101
- ## CLI Usage
102
- - Download Media
103
-
104
- ```bash
105
- DDownloader -u https://example.com/path/to/manifest -o output.mp4
106
- ```
107
-
108
- - Specify Decryption Keys
109
-
110
- ```bash
111
- DDownloader -u https://example.com/path/to/manifest -o output.mp4 -k 12345:678910
112
- ```
113
-
114
- - Re-encoding
115
-
116
- ```bash
117
- DDownloader -i "input.mp4" -o "output.mp4" -q "HD, FHD, UHD"
118
- ```
119
-
120
-
121
- - Display Help
122
-
123
- ```bash
124
- DDownloader -h
125
- ```
126
-
127
- - ![image](https://github.com/user-attachments/assets/8c73a79e-fcac-4bde-a07c-5628db0d19df)
1
+ Metadata-Version: 2.3
2
+ Name: DDownloader
3
+ Version: 0.3.8
4
+ Summary: A downloader for DRM-protected & Non DRM-protected content.
5
+ License: MIT License
6
+
7
+ Copyright (c) [2024] [DDownloader]
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ of this software and associated documentation files (the "Software"), to deal
11
+ in the Software without restriction, including without limitation the rights
12
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ copies of the Software, and to permit persons to whom the Software is
14
+ furnished to do so, subject to the following condition:
15
+
16
+ The above copyright notice and this permission notice shall be included in
17
+ all copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
24
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
25
+ IN THE SOFTWARE.
26
+ Author: ThatNotEasy
27
+ Author-email: apidotmy@proton.me
28
+ Requires-Python: >=3.7
29
+ Classifier: Programming Language :: Python :: 3
30
+ Classifier: Programming Language :: Python :: 3.7
31
+ Classifier: Programming Language :: Python :: 3.8
32
+ Classifier: Programming Language :: Python :: 3.9
33
+ Classifier: Programming Language :: Python :: 3.10
34
+ Classifier: Programming Language :: Python :: 3.11
35
+ Classifier: License :: OSI Approved :: MIT License
36
+ Classifier: Operating System :: OS Independent
37
+ Requires-Dist: colorama (>=0.4.5)
38
+ Requires-Dist: coloredlogs (>=15.0)
39
+ Requires-Dist: loguru (>=0.6.0)
40
+ Requires-Dist: pymediainfo (>=6.1.0,<7.0.0)
41
+ Requires-Dist: requests (>=2.26.0)
42
+ Requires-Dist: tqdm (>=4.64.0)
43
+ Project-URL: Homepage, https://github.com/ThatNotEasy/DDownloader
44
+ Description-Content-Type: text/markdown
45
+
46
+ # DDownloader
47
+ _DDownloader is a powerful Python-based tool and library designed to download and decrypt DRM-protected content from DASH, HLS, and ISM manifests. It provides seamless support for encrypted media streams, extracting metadata and ensuring high compatibility with various DRM standards._
48
+
49
+ ## Features
50
+ - **Download and Decrypt**: Supports DASH, HLS, and ISM manifests with seamless decryption using provided keys.
51
+ - **Automatic Detection**: Automatically detects manifest types (.mpd, .m3u8, .ism) and processes accordingly.
52
+ - **Media Information Extraction**: Extracts metadata (e.g., codec, resolution, duration) for .mp4 files and saves it in a `logs/` directory.
53
+ - **CLI and Library Support**: Flexible usage via command-line or Python library.
54
+ - **Detailed Logging**: Provides real-time progress and logs errors for debugging.
55
+
56
+ ## Requirements
57
+
58
+ - **Python**: Version 3.7 or higher.
59
+ - **Required binaries**:
60
+
61
+ - `N_m3u8DL-RE` for downloading protected DRM content.
62
+ - `mp4decrypt` for decrypting protected media files.
63
+ - `ffmpeg` for re-encoding and muxer method
64
+ - a proper environment variable configuration for binaries.
65
+
66
+ ## Installation
67
+ - Install `DDownloader` using pip:
68
+
69
+ ```bash
70
+ pip install DDownloader
71
+ ```
72
+
73
+ ## Usage
74
+ - Download Content:
75
+
76
+ ```python
77
+ from DDownloader.modules.downloader import DOWNLOADER
78
+
79
+ downloader = DOWNLOADER()
80
+ downloader.manifest_url = "https://example.com/path/to/manifest" # DASH, HLS, or ISM manifest URL
81
+ downloader.output_name = "output.mp4" # Desired output file name
82
+ downloader.decryption_keys = ["12345:678910"] # Provide decryption keys if needed
83
+ downloader.download() # Start the downloading and decryption process
84
+ ```
85
+
86
+ - Extract Media Information:
87
+
88
+ ```python
89
+ from DDownloader.modules.helper import get_media_info
90
+
91
+ file_path = "downloads/example.mp4"
92
+ media_info = get_media_info(file_path)
93
+ print(media_info)
94
+ ```
95
+
96
+ - Re-encoding:
97
+
98
+ ```python
99
+ from DDownloader.modules.downloader import DOWNLOADER
100
+
101
+ re_encode = DOWNLOADER()
102
+ quality = ["HD", "FHD", "UHD"]
103
+ input_content = "downloads/example.mp4"
104
+ output_content = "/path/to/output.mp4"
105
+ re_encode.re_encode_content(input_file=input_content,quality=quality,codec="libx265",crf=20,preset="medium")
106
+ ```
107
+
108
+ ## CLI Usage
109
+ - Download Media
110
+
111
+ ```bash
112
+ DDownloader -u https://example.com/path/to/manifest -o output.mp4
113
+ ```
114
+
115
+ - Specify Decryption Keys
116
+
117
+ ```bash
118
+ DDownloader -u https://example.com/path/to/manifest -o output.mp4 -k 12345:678910
119
+ ```
120
+
121
+ - Re-encoding
122
+
123
+ ```bash
124
+ DDownloader -i "input.mp4" -o "output.mp4" -q "HD, FHD, UHD"
125
+ ```
126
+
127
+
128
+ - Display Help
129
+
130
+ ```bash
131
+ DDownloader -h
132
+ ```
133
+
134
+ - ![image](https://github.com/user-attachments/assets/8c73a79e-fcac-4bde-a07c-5628db0d19df)
135
+
@@ -0,0 +1,20 @@
1
+ DDownloader/__init__.py,sha256=lVZwmZNId0Dai7XBQpxglmJtIxAtZplRHDsvobL2UNo,33
2
+ DDownloader/bin/aria2c.exe,sha256=7NovO7hmaCdsPJK3Hue8N5mefFlAcJMjU_LnUnE9f6g,4840960
3
+ DDownloader/bin/ffmpeg.exe,sha256=NqWbY4tJ-ObGIvTefEyKr4RC8wE4pYiC7irz9BDl_Vw,148103168
4
+ DDownloader/bin/mkvmerge.exe,sha256=s2WkBPBuhpWPNHKXwDBfQ4vOMXLYTfxu62PbnRqK55A,19144712
5
+ DDownloader/bin/mp4decrypt.exe,sha256=JnI7mk4UduPVnUDg1aZBr4y_SWRFy8s-u_H6gG5xeOg,452096
6
+ DDownloader/bin/N_m3u8DL-RE.exe,sha256=5ck6jeDFjFCSLBeoo7q9fSGT-0Oxp_rNCxjeknTvgGE,17197568
7
+ DDownloader/bin/shaka-packager.exe,sha256=oQmfiToKeryylxsR9BiKuhXR_fS-PqPEu9W9rEsbrt8,5369344
8
+ DDownloader/bin/yt-dlp.exe,sha256=TYiozhv_gpxxZ90h6LSo7rDbFEG8JzQPCJa754HJw8A,19557107
9
+ DDownloader/main.py,sha256=7XJrLtMaw_5taymEoPfDgfQCw9K3JJmW8gScR6gVOPw,5792
10
+ DDownloader/modules/__init__.py,sha256=kd0YV9qLZ1Lpx7vbSzAMrAwjgdZJD_tInTnDqY6-nTY,21
11
+ DDownloader/modules/args_parser.py,sha256=Xc9ZzBu-QPFrBURIcq7rl8IJbrdPMy7EMWc-odVM2QU,1105
12
+ DDownloader/modules/banners.py,sha256=yiMLSbH92XXf_92g4No5i7wLF50bPyp2wuBh4rfV5Yk,5656
13
+ DDownloader/modules/downloader.py,sha256=Ul0zCB5t9DR8sx1YisP_RFzCWVWm7J8mor4rhOKudNA,7867
14
+ DDownloader/modules/helper.py,sha256=-PMfT0pd3AsXY1K_WP1mER3dpw9gJ99Y-Erque_62nQ,8242
15
+ DDownloader/modules/streamlink.py,sha256=t7aaHCnINzSFybTmAd-dvfGFQkepFHJwrOBcNxyJviY,504
16
+ ddownloader-0.3.8.dist-info/entry_points.txt,sha256=36xFMHKWyVvFKBCCMd3ctyd6tyujf685-qilrMpsA1E,53
17
+ ddownloader-0.3.8.dist-info/LICENSE,sha256=cnjTim3BMjb9cVC_b3oS41FESKLuvuDsufVHa_ymZRw,1090
18
+ ddownloader-0.3.8.dist-info/METADATA,sha256=hM7TxtkmJc31-ftcjhhTcmNhyjm7Xz-a7ILCZq9fGUI,4906
19
+ ddownloader-0.3.8.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
20
+ ddownloader-0.3.8.dist-info/RECORD,,
@@ -1,5 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: poetry-core 2.1.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
-
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ DDownloader=DDownloader.main:main
3
+
@@ -1,14 +0,0 @@
1
- DDownloader/__init__.py,sha256=lVZwmZNId0Dai7XBQpxglmJtIxAtZplRHDsvobL2UNo,33
2
- DDownloader/main.py,sha256=7XJrLtMaw_5taymEoPfDgfQCw9K3JJmW8gScR6gVOPw,5792
3
- DDownloader/modules/__init__.py,sha256=eauHvAzEXc0aJ5xQZmFSxwn1EEN1n8i04B7G0Sk7rzI,21
4
- DDownloader/modules/args_parser.py,sha256=Xc9ZzBu-QPFrBURIcq7rl8IJbrdPMy7EMWc-odVM2QU,1105
5
- DDownloader/modules/banners.py,sha256=vJQF9XCbTkeoGa4kOn92PyNJw_8NRjXj6jhBBb6PDXY,5656
6
- DDownloader/modules/downloader.py,sha256=3PJfD0sxK66IR2OPVPjsG_-iQREkBKYFlG5lNnzQ0eI,7861
7
- DDownloader/modules/helper.py,sha256=b8h-h4_JqE02D26qBzSRW11LWhYUTnBkNIeYlWRO-ZY,5951
8
- DDownloader/modules/streamlink.py,sha256=t7aaHCnINzSFybTmAd-dvfGFQkepFHJwrOBcNxyJviY,504
9
- DDownloader-0.3.6.dist-info/LICENSE,sha256=cnjTim3BMjb9cVC_b3oS41FESKLuvuDsufVHa_ymZRw,1090
10
- DDownloader-0.3.6.dist-info/METADATA,sha256=hZdSKKDaGMl7YBy1PbXAXGDynGf4neYlF4wF6qApUIQ,4730
11
- DDownloader-0.3.6.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
12
- DDownloader-0.3.6.dist-info/entry_points.txt,sha256=tCZVr_SRONlWlMFsVKgcPj3lxe9gBtWD4GuWukMv75g,54
13
- DDownloader-0.3.6.dist-info/top_level.txt,sha256=INZYgY1vEHV1MIWTPXKJL8j8-ZXjWb8u4XLuU3S8umY,12
14
- DDownloader-0.3.6.dist-info/RECORD,,
@@ -1,2 +0,0 @@
1
- [console_scripts]
2
- DDownloader = DDownloader.main:main
@@ -1 +0,0 @@
1
- DDownloader