phub 4.7.9__py3-none-any.whl → 4.8.1__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.
phub/modules/parser.py CHANGED
@@ -79,8 +79,7 @@ def challenge(client: Client, challenge: str, token: str) -> None:
79
79
 
80
80
  # Build and inject cookie
81
81
  cookie = f'{n}*{p // n}:{s}:{token}:1'
82
- client.core.config.cookies = {'KEY', cookie}
82
+ client.core.config.cookies = {'KEY': cookie}
83
83
  client.core.update_cookies()
84
84
  logger.info('Injected cookie %s', cookie)
85
- print("Injected cookie for authentication")
86
85
  # EOF
phub/objects/query.py CHANGED
@@ -184,7 +184,7 @@ class Query:
184
184
 
185
185
  assert isinstance(index, int)
186
186
  url = self.url.format(page = index + 1)
187
- req = self.client.call(url, get_response=True)
187
+ req = self.client.call(url, get_response=True, throw=False)
188
188
 
189
189
  if req.status_code == 404:
190
190
  raise errors.NoResult()
phub/objects/video.py CHANGED
@@ -18,7 +18,6 @@ from ..modules import parser, display
18
18
 
19
19
  if TYPE_CHECKING:
20
20
  from ..core import Client
21
- from ..utils import Quality
22
21
 
23
22
 
24
23
  class Video:
@@ -226,7 +225,9 @@ class Video:
226
225
  def download(self,
227
226
  path: Union[str, os.PathLike],
228
227
  downloader: Union[Callable, str] = "threaded",
229
- quality: Quality | str = 'best',
228
+ quality: str = 'best',
229
+ remux: bool = False,
230
+ display_remux: Callable[[int, int], None] = None,
230
231
  *,
231
232
  display: Callable[[int, int], None] = display.default()) -> str:
232
233
  '''
@@ -237,6 +238,8 @@ class Video:
237
238
  quality (Quality | str | int): The video quality.
238
239
  downloader (Callable): The download backend.
239
240
  display (Callable): The progress display.
241
+ remux (bool): Whether to remux the video from MPEG-TS to MP4 (h264)
242
+ display_remux (Callable[[int, int], None], optional): The display backend for remuxing.
240
243
 
241
244
  Returns:
242
245
  str: The downloader video path.
@@ -249,37 +252,14 @@ class Video:
249
252
  self.logger.info('Starting download for %s at %s', self, path)
250
253
 
251
254
  try:
252
- self.client.core.download(video=self, quality=quality, path=path, callback=display, downloader=downloader)
255
+ self.client.core.download(video=self, quality=quality, path=path, callback=display, downloader=downloader,
256
+ remux=remux, callback_remux=display_remux)
253
257
 
254
258
  except Exception as e:
255
259
  self.logger.error(f"An error occured while downloading video {e}")
256
260
 
257
261
  return path
258
262
 
259
- def get_direct_url(self, quality: Quality) -> str:
260
- '''
261
- Get the direct video URL given a specific quality.
262
-
263
- Args:
264
- quality (Quality): The video quality.
265
-
266
- Returns:
267
- str: The direct url.
268
- '''
269
-
270
- from ..utils import Quality
271
- qual = Quality(quality)
272
-
273
- # Get remote
274
- sources = self.fetch('page@mediaDefinitions')
275
- remote = [s for s in sources if 'remote' in s][0]['videoUrl']
276
-
277
- # Parse quality
278
- quals = {int(s['quality']): s['videoUrl']
279
- for s in self.client.call(remote).json()}
280
-
281
- return qual.select(quals)
282
-
283
263
  # === Interaction methods === #
284
264
 
285
265
  def _assert_internal_success(self, res: dict) -> None:
phub/tests/test_video.py CHANGED
@@ -23,7 +23,8 @@ def test_video_information():
23
23
  embed = video.embed
24
24
  image = video.image.url
25
25
  id = video.id
26
-
26
+ assert isinstance(video.download(path="./", quality="worst", remux=True), str)
27
+ assert isinstance(video.download(path="./", quality="worst"), str)
27
28
  assert isinstance(title, str) and len(title) > 3
28
29
  assert isinstance(likes, int) and len(str(likes)) >= 1
29
30
  assert isinstance(dislikes, int) and len(str(dislikes)) >= 1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: phub
3
- Version: 4.7.9
3
+ Version: 4.8.1
4
4
  Summary: An API for Pornhub
5
5
  Author-email: Egsagon <egsagon.git@gmail.com>, EchterAlsFake <EchterAlsFake@proton.me>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -688,7 +688,6 @@ Requires-Python: >=3.9
688
688
  Description-Content-Type: text/markdown
689
689
  License-File: LICENSE
690
690
  Requires-Dist: httpx[brotli,socks]
691
- Requires-Dist: ffmpeg-progress-yield
692
691
  Requires-Dist: eaf_base_api
693
692
  Dynamic: license-file
694
693
 
@@ -7,7 +7,7 @@ phub/literals.py,sha256=ZnRnn5hJNI3hM6aj2YxsxPANUR-PCqfE2SuQGD8_Yq4,10794
7
7
  phub/utils.py,sha256=MYPYvpLrWAYXcwpSUJnRWvFNP0N9iOyLxkzaJFsk8GA,6582
8
8
  phub/modules/__init__.py,sha256=h8BQjvxnqCEXxDCn7iDvnGLv0ZF_lE0dFlI7HVkzN5A,133
9
9
  phub/modules/display.py,sha256=BxI8SSx8tc-BUkrWYG-75BjgS2dwlw9M5QXHoyci3Gs,2445
10
- phub/modules/parser.py,sha256=BbJw0iDZ0dhaJEuoWKoRr68CthMz_yl7AzC01eJoZOo,2385
10
+ phub/modules/parser.py,sha256=v2iDYAZB6VQ6KvKR_Oe1Cs5Du42W0yNFvtliJKxbZdI,2337
11
11
  phub/modules/rss.py,sha256=j666dZenn3tWgLVXd2U3ox2-tWyUynFXuArzG2bmOFc,980
12
12
  phub/objects/__init__.py,sha256=BHOythbS-r01YKYSxtExBlJZYF38hkp85aLAoVQfDd4,446
13
13
  phub/objects/account.py,sha256=B1hSHmYHip08Gy-TdVmYq25iAA8rjdVuzwwkpjGjl8c,6044
@@ -15,18 +15,18 @@ phub/objects/data.py,sha256=hJpbuL185CLmISYCsmVu8WZVJEsiFC246bL1-QHa9j0,5967
15
15
  phub/objects/feed.py,sha256=JFvNc59VfGXU3PiW17GySQooy-5h8zLfl0vHIs9ga48,2691
16
16
  phub/objects/image.py,sha256=qCLuaOy-EYzA_uXxiPRQeCLHPf9gFr0o7TDszQvWXZs,3376
17
17
  phub/objects/playlist.py,sha256=hpP76yH23LdDS0iL28jhp_iG7EGetYJA3xoqZZdXjTs,3278
18
- phub/objects/query.py,sha256=DaB-X-lDomm1vemcG2XFVEoWNZYhLA3iZoWyui_vhsY,11583
18
+ phub/objects/query.py,sha256=crYC-MJGEf04XO3hfU7FPyyHEnBWS9D8XbeQmtTnpzQ,11596
19
19
  phub/objects/user.py,sha256=pIumIGC_MQXQ-hjzf_0c0I_egL4WziHrh2e8XegArEc,8161
20
- phub/objects/video.py,sha256=oPfKaxCulvSWoCNvp0w7DZACfl9Vx8DaOdDWEye69w4,19191
20
+ phub/objects/video.py,sha256=8LTrr0wszjMtm0mK1_gJzEos_NPCWBuxNfPWxZ8g5X4,18876
21
21
  phub/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  phub/tests/test_auth.py,sha256=ySy1Aw0bogMGDSTmzVXO_W352cbRFzXUGjuDX1Iu0xE,609
23
23
  phub/tests/test_model.py,sha256=hRpmIjsx2z0EjTWsIpwT_vpHm-H4wCmZtvGWOohaIKQ,1426
24
24
  phub/tests/test_playlist.py,sha256=-hS5bIBecsv3zSNlUo66b73DdVbkYlmVThYip9Ivpss,1081
25
25
  phub/tests/test_search.py,sha256=VeqyjVzu0QnIYR6NhcujXy8wfCcWn1BlvKS06iY-7JY,1301
26
- phub/tests/test_video.py,sha256=bX-gPhDa34p6-5Ei20gh9opNkLs_08JHEfhVlQUwfMU,1312
27
- phub-4.7.9.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
28
- phub-4.7.9.dist-info/METADATA,sha256=vEccGSCPA-gWB85BA7zOpcbdYgGtByH_g60KSIxr42E,41777
29
- phub-4.7.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
30
- phub-4.7.9.dist-info/entry_points.txt,sha256=oxL1BvDV19M1IGLgwFElgb37PlmGnblDBEfMwx3x6u8,44
31
- phub-4.7.9.dist-info/top_level.txt,sha256=xqJ5Lg28Ba-pgvXf8qwpTFurW3neZhguNd8bhbQonZo,5
32
- phub-4.7.9.dist-info/RECORD,,
26
+ phub/tests/test_video.py,sha256=4E70tiza45byMFIrjBdnpP3xOSyk1YKoTGNP4_QTI0E,1465
27
+ phub-4.8.1.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
28
+ phub-4.8.1.dist-info/METADATA,sha256=zR76THI_K4DfAuuZHMJ9F4x0o42BjXYB1GhQWpuFsLk,41740
29
+ phub-4.8.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
30
+ phub-4.8.1.dist-info/entry_points.txt,sha256=oxL1BvDV19M1IGLgwFElgb37PlmGnblDBEfMwx3x6u8,44
31
+ phub-4.8.1.dist-info/top_level.txt,sha256=xqJ5Lg28Ba-pgvXf8qwpTFurW3neZhguNd8bhbQonZo,5
32
+ phub-4.8.1.dist-info/RECORD,,
File without changes