Skip to content

Commit

Permalink
Parser should not set a user agent, Reader should.
Browse files Browse the repository at this point in the history
  • Loading branch information
lemon24 committed Jan 19, 2023
1 parent af5d257 commit 616c9a3
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 10 deletions.
5 changes: 5 additions & 0 deletions src/reader/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,11 @@
_CLI_PLUGIN_ENVVAR = 'READER_CLI_PLUGIN'


# Constants.

USER_AGENT = f'python-reader/{__version__} (+https://github.com/lemon24/reader)'


# Prevent any logging output by default. If no handler is set,
# the messages bubble up to the root logger and get printed on stderr.
# https://docs.python.org/3/howto/logging.html#library-config
Expand Down
6 changes: 1 addition & 5 deletions src/reader/_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
from typing import runtime_checkable
from typing import TypeVar

import reader
from ._http_utils import parse_accept_header
from ._http_utils import unparse_accept_header
from ._requests_utils import DEFAULT_TIMEOUT
Expand All @@ -40,9 +39,6 @@
log = logging.getLogger('reader')


USER_AGENT = f'python-reader/{reader.__version__} (+https://github.com/lemon24/reader)'


def default_parser(
feed_root: str | None = None, session_timeout: TimeoutType = DEFAULT_TIMEOUT
) -> Parser:
Expand Down Expand Up @@ -126,7 +122,7 @@ def __init__(self) -> None:
#:
#: Plugins may add request or response hooks to this.
#:
self.session_factory = SessionFactory(USER_AGENT)
self.session_factory = SessionFactory()

def parallel(
self,
Expand Down
4 changes: 4 additions & 0 deletions src/reader/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,10 @@ def make_reader(
raise ValueError("search_enabled should be one of ('auto', True, False, None)")

parser = default_parser(feed_root, session_timeout=session_timeout)
# circular import
from . import USER_AGENT

parser.session_factory.user_agent = USER_AGENT

try:
name_scheme = NameScheme.from_value(reserved_name_scheme)
Expand Down
6 changes: 3 additions & 3 deletions tests/test_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -439,12 +439,12 @@ def get(self, *args, **kwargs):
assert 'while getting feed' in excinfo.value.message


def test_user_agent(parse, make_http_get_headers_url, data_dir):
def test_user_agent_default(parse, make_http_get_headers_url, data_dir):
feed_url = make_http_get_headers_url(data_dir.join('full.atom'))
parse(feed_url)

headers = make_http_get_headers_url.request_headers
assert headers['User-Agent'].startswith('python-reader/')
assert headers['User-Agent'].startswith('python-requests/')


def test_user_agent_none(parse, make_http_get_headers_url, data_dir):
Expand All @@ -453,7 +453,7 @@ def test_user_agent_none(parse, make_http_get_headers_url, data_dir):
parse(feed_url)

headers = make_http_get_headers_url.request_headers
assert 'reader' not in headers['User-Agent']
assert headers['User-Agent'].startswith('python-requests/')


def test_parallel_persistent_session(parse, make_http_url, data_dir):
Expand Down
10 changes: 8 additions & 2 deletions tests/test_reader_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from utils import make_url_base
from utils import utc_datetime

from reader import USER_AGENT
from reader._types import fix_datetime_tzinfo


Expand Down Expand Up @@ -153,7 +154,7 @@ class datetime_mock(datetime):
def test_etag_last_modified(reader, data_dir, server):
"""Check ETag / Last-Modified are sent back, at the wire level.
Because of https://rachelbythebay.com/w/2023/01/18/http/
Ensures https://rachelbythebay.com/w/2023/01/18/http/ cannot happen.
"""
etag = b'"12345-67890abcdef12"'
Expand All @@ -179,4 +180,9 @@ def test_etag_last_modified(reader, data_dir, server):
assert headers[b'If-None-Match'] == etag
assert headers[b'If-Modified-Since'] == last_modified

# TODO: since we're here, assert user agent, accept, and a-im too
ua = headers[b'User-Agent']
assert ua == USER_AGENT.encode()
assert ua.startswith(b'python-reader/')
assert ua.endswith(b' (+https://github.com/lemon24/reader)')

# TODO: since we're here, assert accept, and a-im too; subtests, ideally

0 comments on commit 616c9a3

Please sign in to comment.