Skip to content

Commit 0e33421

Browse files
committed
- improved logging a lot
- removed useless print statements that I forgot - removed quality object (we don't need it anymore)
1 parent 4e0d98d commit 0e33421

File tree

10 files changed

+100
-90
lines changed

10 files changed

+100
-90
lines changed

src/phub/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,11 @@
1111
__license__ = 'GPLv3'
1212
__version__ = '4.7.2'
1313

14-
__all__ = ['Client', 'Quality', 'core', 'utils',
14+
__all__ = ['Client', 'core', 'utils',
1515
'consts', 'errors', 'objects', 'modules']
1616

1717
# Shortcuts
1818
from .core import Client
19-
from .utils import Quality
2019

2120
# Sub modules
2221
from . import core

src/phub/core.py

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
from typing import Iterable, Union
1111
from functools import cached_property
12-
from base_api.base import BaseCore
12+
from base_api.base import BaseCore, setup_logger
1313

1414
from . import utils
1515
from . import consts
@@ -22,8 +22,6 @@
2222
from .objects import (Video, User,
2323
Account, Query, queries, Playlist)
2424

25-
logger = logging.getLogger(__name__)
26-
2725

2826
class Client:
2927
'''
@@ -58,11 +56,12 @@ def __init__(self,
5856
The reason will be passed as the error body.
5957
'''
6058

59+
self.logger = setup_logger(name="PHUB API - [Client]", log_file=None, level=logging.ERROR)
6160
self.core = core or BaseCore()
6261
self.core.config.cookies = consts.COOKIES
6362
self.core.config.headers = consts.HEADERS
6463
# Applying PornHub specific cookies and headers to base API
65-
logger.debug('Initialised new Client %s', self)
64+
self.logger.debug('Initialised new Client %s', self)
6665

6766
# Initialise session
6867
Client.use_webmaster_api = use_webmaster_api
@@ -81,12 +80,15 @@ def __init__(self,
8180
# Connect account
8281
self.logged = False
8382
self.account = Account(self)
84-
logger.debug('Connected account to client %s', self.account)
83+
self.logger.debug('Connected account to client %s', self.account)
8584

8685
# Automatic login
8786
if login and self.account:
8887
self.login()
89-
88+
89+
def enable_logging(self, log_file: str = None, level = None, log_ip=None, log_port=None):
90+
self.logger = setup_logger(name="PHUB API - [Client]", log_file=log_file, level=level, http_ip=log_ip, http_port=log_port)
91+
9092
def reset(self) -> None:
9193
'''
9294
Reset the client requests session.
@@ -134,7 +136,7 @@ def call(self,
134136
HTTPError: If the request failed, for any reason.
135137
'''
136138
func = utils.fix_url(func)
137-
logger.log(logging.DEBUG if silent else logging.INFO, 'Fetching %s', func or '/')
139+
self.logger.log(logging.DEBUG if silent else logging.INFO, 'Fetching %s', func or '/')
138140

139141
if headers:
140142
self.core.config.headers = headers
@@ -162,17 +164,17 @@ def call(self,
162164
# Attempt to resolve the challenge if needed
163165
challenge = consts.re.get_challenge(response.text, False)
164166
if challenge:
165-
logger.info('Challenge found, attempting to resolve')
167+
self.logger.info('Challenge found, attempting to resolve')
166168
parser.challenge(self, *challenge)
167169

168-
logger.info(f"Sleeping for 1.5 seconds")
170+
self.logger.info(f"Sleeping for 1.5 seconds")
169171
time.sleep(1.5) # Yes, we need to sleep that amount, otherwise PornHub refuses the challenge.
170172
continue # Reload page
171173

172174
break
173175

174176
except Exception as err:
175-
logger.log(logging.DEBUG if silent else logging.WARNING,
177+
self.logger.log(logging.DEBUG if silent else logging.WARNING,
176178
f'Call failed: {repr(err)}. Retrying (attempt {i + 1}/{self.core.config.max_retries})')
177179
continue
178180

@@ -200,10 +202,10 @@ def login(self,
200202
LoginFailed: If the login failed, for a reason passed in the error body.
201203
'''
202204

203-
logger.debug('Attempting login')
205+
self.logger.debug('Attempting login')
204206

205207
if not force and self.logged:
206-
logger.error('Client is already logged in')
208+
self.logger.error('Client is already logged in')
207209
raise errors.ClientAlreadyLogged()
208210

209211
# Get token
@@ -224,7 +226,7 @@ def login(self,
224226
message = data.get('message')
225227

226228
if throw and not success:
227-
logger.error('Login failed: Received error: %s', message)
229+
self.logger.error('Login failed: Received error: %s', message)
228230
raise errors.LoginFailed(message)
229231

230232
# Reset token
@@ -246,7 +248,7 @@ def get(self, video: Union[str, Video]) -> Video:
246248
Video: The corresponding video object.
247249
'''
248250

249-
logger.debug(f'Fetching video at {video}')
251+
self.logger.debug(f'Fetching video at {video}')
250252

251253
if isinstance(video, Video):
252254
# User might want to re-init a video,
@@ -284,7 +286,7 @@ def get_user(self, user: Union[str, User]) -> User:
284286
if isinstance(user, User):
285287
user = user.url
286288

287-
logger.debug('Fetching user %s', user)
289+
self.logger.debug('Fetching user %s', user)
288290
return User.get(self, user)
289291

290292
def search_hubtraffic(self,
@@ -296,7 +298,7 @@ def search_hubtraffic(self,
296298
period: literals.ht_period = None) -> Query:
297299
'''
298300
Perform searching on Pornhub using the HubTraffic API.
299-
It is condidered to be much faster but has less filters.
301+
It is considered to be much faster but has less filters.
300302
301303
Args:
302304
query (str): The query to search.

src/phub/objects/account.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import logging
44
from functools import cached_property
5+
from base_api.base import setup_logger
56
from typing import TYPE_CHECKING, Literal, Iterator, Union
67

78
from .. import utils
@@ -12,8 +13,6 @@
1213
from ..core import Client
1314
from . import Feed, queries, User
1415

15-
logger = logging.getLogger(__name__)
16-
1716

1817
class Account:
1918
'''
@@ -45,6 +44,7 @@ def __init__(self, client: Client) -> None:
4544
'''
4645

4746
self.client = client
47+
self.logger = setup_logger(name="PHUB API - [Account]", log_file=None, level=logging.ERROR)
4848

4949
self.name: str = None
5050
self.avatar: Image = None
@@ -54,9 +54,12 @@ def __init__(self, client: Client) -> None:
5454
# Save data keys so far, so we can make a difference with the
5555
# cached property ones.
5656
self.loaded_keys = list(self.__dict__.keys()) + ['loaded_keys']
57-
57+
58+
def enable_logging(self, log_file: str = None, level=None, log_ip=None, log_port=None):
59+
self.logger = setup_logger(name="PHUB API - [Account]", log_file=log_file, level=level, http_ip=log_ip,
60+
http_port=log_port)
61+
5862
def __repr__(self) -> str:
59-
6063
status = 'logged-out' if self.name is None else f'name={self.name}'
6164
return f'phub.Account({status})'
6265

@@ -77,7 +80,7 @@ def connect(self, data: dict) -> None:
7780

7881
# We assert that the account is from a normal user (not model, etc.)
7982
if not 'users/' in self.user.url:
80-
logger.error('Invalid user type: %s', url)
83+
self.logger.error('Invalid user type: %s', url)
8184
raise NotImplementedError('Non-user account are not supported.')
8285

8386
def refresh(self, refresh_login: bool = False) -> None:
@@ -88,25 +91,25 @@ def refresh(self, refresh_login: bool = False) -> None:
8891
refresh_login (bool): Whether to also attempt to re-log in.
8992
'''
9093

91-
logger.info('Refreshing account %s', self)
94+
self.logger.info('Refreshing account %s', self)
9295

9396
if refresh_login:
94-
logger.info('Forcing login refresh')
97+
self.logger.info('Forcing login refresh')
9598
self.client.login(force = True)
9699

97100
# Clear properties cache
98101
for key in list(self.__dict__.keys()):
99102
if not key in self.loaded_keys:
100103

101-
logger.debug('Deleting key %s', key)
104+
self.logger.debug('Deleting key %s', key)
102105
delattr(self, key)
103106

104107
def fix_recommendations(self) -> None:
105108
'''
106-
Allow recommandations cookies.
109+
Allow recommendations cookies.
107110
'''
108111

109-
logger.info('Fixing account recommendations')
112+
self.logger.info('Fixing account recommendations')
110113

111114
payload = utils.urlify({
112115
'token': self.client._granted_token,

src/phub/objects/feed.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import logging
44
from functools import cached_property
5+
from base_api.base import setup_logger
56
from typing import TYPE_CHECKING, Callable, Iterator, Union
67

78
from .. import literals
@@ -11,8 +12,6 @@
1112
from . import queries
1213
from ..core import Client
1314

14-
logger = logging.getLogger(__name__)
15-
1615

1716
class Feed:
1817
'''
@@ -28,9 +27,13 @@ def __init__(self, client: Client) -> None:
2827
'''
2928

3029
self.client = client
31-
32-
logger.debug('Initialised account feed: %s', self)
33-
30+
self.logger = setup_logger(name="PHUB API - [Feed]", log_file=None, level=logging.ERROR)
31+
self.logger.debug('Initialised account feed: %s', self)
32+
33+
def enable_logging(self, log_file: str = None, level=None, log_ip=None, log_port=None):
34+
self.logger = setup_logger(name="PHUB API - [Feed]", log_file=log_file, level=level, http_ip=log_ip,
35+
http_port=log_port)
36+
3437
def __repr__(self) -> str:
3538

3639
return f'phub.FeedCreator(for={self.client.account.name})'
@@ -51,7 +54,7 @@ def filter(self,
5154
# Generate args
5255
username = user.name if isinstance(user, User) else user
5356

54-
logger.info('Generating new filter feed using args', )
57+
self.logger.info('Generating new filter feed using args', )
5558

5659
return queries.FeedQuery(
5760
client = self.client,

src/phub/objects/image.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import os
44
import logging
5+
from base_api.base import setup_logger
56
from typing import TYPE_CHECKING, Literal, Union
67

78
from .. import utils
@@ -10,9 +11,6 @@
1011
from ..core import Client
1112

1213

13-
logger = logging.getLogger(__name__)
14-
15-
1614
class Image:
1715
'''
1816
Represents an image hosted on Pornhub.
@@ -34,19 +32,24 @@ def __init__(self,
3432
name (str): Image name.
3533
'''
3634

35+
self.logger = setup_logger(name="PHUB API - [Image]", log_file=None, level=logging.ERROR)
3736
self.url = url
3837
self.name = name
3938
self.client = client
4039
self._servers = servers or []
4140

42-
logger.debug('Generated new image object: %s', self)
41+
self.logger.debug('Generated new image object: %s', self)
4342

4443
# Check server image sizes
4544
sizes = [s.get('size') for s in self._servers]
4645

4746
if len(set(sizes)) > 1:
48-
logger.warning('Detected different image sizes on alt servers: %s', sizes)
49-
47+
self.logger.warning('Detected different image sizes on alt servers: %s', sizes)
48+
49+
def enable_logging(self, log_file: str = None, level=None, log_ip=None, log_port=None):
50+
self.logger = setup_logger(name="PHUB API - [Image]", log_file=log_file, level=level, http_ip=log_ip,
51+
http_port=log_port)
52+
5053
def __repr__(self) -> str:
5154

5255
return f'phub.Image(name={self.name})'
@@ -70,7 +73,7 @@ def download(self, path: os.PathLike = '.') -> str:
7073
if os.path.isdir(path):
7174
path = utils.concat(path, self.name + ext)
7275

73-
logger.info('Saving %s at %s', self, path)
76+
self.logger.info('Saving %s at %s', self, path)
7477

7578
with open(path, 'wb') as file:
7679

@@ -81,12 +84,12 @@ def download(self, path: os.PathLike = '.') -> str:
8184

8285
except Exception as err:
8386

84-
logger.warning('Failed to get image `%s`', url)
87+
self.logger.warning('Failed to get image `%s`', url)
8588
if not self._servers: raise err
8689

8790
# Pop server and retry
8891
server = self._servers.pop(0)
89-
logger.info('Retrying download with server %s', server)
92+
self.logger.info('Retrying download with server %s', server)
9093
self.url = server['src']
9194
self.download(path)
9295

src/phub/objects/query.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import json
44
import logging
5+
from base_api.base import setup_logger
56
from functools import cache, cached_property
67
from typing import TYPE_CHECKING, Iterator, Any, Callable, Union
78

@@ -14,7 +15,6 @@
1415
if TYPE_CHECKING:
1516
from ..core import Client
1617

17-
logger = logging.getLogger(__name__)
1818

1919
QueryItem = Union[Video, FeedItem, User]
2020

@@ -87,6 +87,7 @@ def __init__(self,
8787
query_repr (str): Indication for the query representation.
8888
'''
8989

90+
self.logger = setup_logger(name="PHUB API - [Query]", log_file=None, level=logging.ERROR)
9091
self.client = client
9192
self.hint = container_hint
9293
self._query_repr = query_repr
@@ -97,13 +98,17 @@ def __init__(self,
9798

9899
self.suppress_spicevids = True
99100

100-
logger.debug('Initialised new query %s', self)
101+
self.logger.debug('Initialised new query %s', self)
101102

102103
def __repr__(self) -> str:
103104

104105
s = f'"{self._query_repr}"' if self._query_repr else f'url="{self.url}"'
105106
return f'phub.Query({s})'
106-
107+
108+
def enable_logging(self, log_file: str = None, level=None, log_ip=None, log_port=None):
109+
self.logger = setup_logger(name="PHUB API - [Query]", log_file=log_file, level=level, http_ip=log_ip,
110+
http_port=log_port)
111+
107112
def __len__(self) -> int:
108113
'''
109114
Attempts to fetch the query length.
@@ -271,7 +276,6 @@ def _parse_page(self, raw: str) -> list[dict]:
271276

272277
elif videos is None:
273278
print(raw)
274-
logger.error('Invalid API response from `%s`', self.url)
275279
raise errors.ParsingError('Invalid API response')
276280

277281
return videos
@@ -337,7 +341,7 @@ def _iter_page(self, page: list[str]) -> Iterator[QueryItem]:
337341
yield wrapped
338342

339343
else:
340-
logger.info('Bypassed spicevid video: %s', wrapped)
344+
pass # Don't ask.
341345

342346
class UserQuery(VideoQuery):
343347
'''

0 commit comments

Comments
 (0)