Skip to content

Commit

Permalink
stateful_browser: self.url -> self.__state.url for internal consumers
Browse files Browse the repository at this point in the history
Be consistent and use self.__state.url over the self.url() @Property for internal consumers.

Discussed somewhat in MechanicalSoup#362, the logic being that:

  self.url is an interface for external callers to get access to the
  internal state, and there's no reason to force the internal users to
  do so.

  There's extra cognitive load for readers of the code to follow
  through the indirection.
  • Loading branch information
johnhawkinson committed Apr 18, 2021
1 parent 92bb543 commit d4073ce
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions mechanicalsoup/stateful_browser.py
Expand Up @@ -12,6 +12,7 @@


class _BrowserState:
"""An internal class whose purpose is underspecified."""
def __init__(self, page=None, url=None, form=None, request=None):
self.page = page
self.url = url
Expand Down Expand Up @@ -68,7 +69,7 @@ def __init__(self, *args, **kwargs):
# Almost same as self.form, but don't raise an error if no
# form was selected for backward compatibility.
self.get_current_form = lambda: self.__state.form
self.get_url = lambda: self.url
self.get_url = lambda: self.__state.url

def set_debug(self, debug):
"""Set the debug mode (off by default).
Expand Down Expand Up @@ -131,7 +132,7 @@ def absolute_url(self, url):
``url``, as in the `.urljoin() method of urllib.parse
<https://docs.python.org/3/library/urllib.parse.html#urllib.parse.urljoin>`__.
"""
return urllib.parse.urljoin(self.url, url)
return urllib.parse.urljoin(self.__state.url, url)

def open(self, url, *args, **kwargs):
"""Open the URL and store the Browser's state in this object.
Expand Down Expand Up @@ -228,7 +229,7 @@ def _merge_referer(self, **kwargs):
"""Helper function to set the Referer header in kwargs passed to
requests, if it has not already been overriden by the user."""

referer = self.url
referer = self.__state.url
headers = CaseInsensitiveDict(kwargs.get('headers', {}))
if referer is not None and 'Referer' not in headers:
headers['Referer'] = referer
Expand Down Expand Up @@ -347,7 +348,7 @@ def follow_link(self, link=None, *args, **kwargs):
"""
link = self._find_link_internal(link, args, kwargs)

referer = self.url
referer = self.__state.url
headers = {'Referer': referer} if referer else None

return self.open_relative(link['href'], headers=headers)
Expand All @@ -371,7 +372,7 @@ def download_link(self, link=None, file=None, *args, **kwargs):
link = self._find_link_internal(link, args, kwargs)
url = self.absolute_url(link['href'])

referer = self.url
referer = self.__state.url
headers = {'Referer': referer} if referer else None

response = self.session.get(url, headers=headers)
Expand Down

0 comments on commit d4073ce

Please sign in to comment.