Skip to content

Commit 831754b

Browse files
authored
Merge pull request #27 from scrapinghub/handle_urls_mvp
introduce PageObjectRegistry with @hande_urls annotations
2 parents 256a0c3 + 67e7297 commit 831754b

File tree

19 files changed

+1071
-1
lines changed

19 files changed

+1071
-1
lines changed

CHANGELOG.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ Changelog
55
TBR
66
------------------
77

8+
* added a ``PageObjectRegistry`` class which has the ``handle_urls`` decorator
9+
to conveniently declare and collect ``OverrideRule``.
810
* removed support for Python 3.6
911
* added support for Python 3.10
1012
* Backward Incompatible Change:
@@ -13,7 +15,6 @@ TBR
1315
specific attribute types like ``HttpResponseBody`` and
1416
``HttpResponseHeaders``.
1517

16-
1718
0.1.1 (2021-06-02)
1819
------------------
1920

docs/api_reference.rst

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
.. _`api-reference`:
2+
13
=============
24
API Reference
35
=============
@@ -45,3 +47,18 @@ Mixins
4547
.. autoclass:: web_poet.mixins.ResponseShortcutsMixin
4648
:members:
4749
:no-special-members:
50+
51+
52+
.. _`api-overrides`:
53+
54+
Overrides
55+
=========
56+
57+
See the tutorial section on :ref:`intro-overrides` for more context about its
58+
use cases and some examples.
59+
60+
.. autofunction:: web_poet.handle_urls
61+
62+
.. automodule:: web_poet.overrides
63+
:members:
64+
:exclude-members: handle_urls

docs/conf.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,5 +192,6 @@
192192
intersphinx_mapping = {
193193
'python': ('https://docs.python.org/3', None, ),
194194
'scrapy': ('https://docs.scrapy.org/en/latest', None, ),
195+
'url-matcher': ('https://url-matcher.readthedocs.io/en/stable/', None, ),
195196
'parsel': ('https://parsel.readthedocs.io/en/latest/', None, ),
196197
}

docs/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ and the motivation behind ``web-poet``, start with :ref:`from-ground-up`.
3333

3434
intro/tutorial
3535
intro/from-ground-up
36+
intro/overrides
3637

3738
.. toctree::
3839
:caption: Reference

docs/intro/overrides.rst

Lines changed: 484 additions & 0 deletions
Large diffs are not rendered by default.

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
install_requires=[
2323
'attrs >= 21.3.0',
2424
'parsel',
25+
'url-matcher',
2526
'multidict',
2627
'w3lib >= 1.22.0',
2728
],

tests/po_lib/__init__.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
"""
2+
This package is just for overrides testing purposes.
3+
"""
4+
from typing import Dict, Any, Callable
5+
6+
from url_matcher import Patterns
7+
8+
from .. import po_lib_sub # NOTE: this module contains a PO with @handle_rules
9+
from web_poet import handle_urls, PageObjectRegistry
10+
11+
12+
class POBase:
13+
expected_overrides: Callable
14+
expected_patterns: Patterns
15+
expected_meta: Dict[str, Any]
16+
17+
18+
class POTopLevelOverriden1:
19+
...
20+
21+
22+
class POTopLevelOverriden2:
23+
...
24+
25+
26+
# This first annotation is ignored. A single annotation per registry is allowed
27+
@handle_urls("example.com", overrides=POTopLevelOverriden1)
28+
@handle_urls("example.com", overrides=POTopLevelOverriden1, exclude="/*.jpg|", priority=300)
29+
class POTopLevel1(POBase):
30+
expected_overrides = POTopLevelOverriden1
31+
expected_patterns = Patterns(["example.com"], ["/*.jpg|"], priority=300)
32+
expected_meta = {} # type: ignore
33+
34+
35+
@handle_urls("example.com", overrides=POTopLevelOverriden2)
36+
class POTopLevel2(POBase):
37+
expected_overrides = POTopLevelOverriden2
38+
expected_patterns = Patterns(["example.com"])
39+
expected_meta = {} # type: ignore

tests/po_lib/a_module.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from url_matcher import Patterns
2+
3+
from tests.po_lib import POBase
4+
from web_poet import handle_urls
5+
6+
7+
class POModuleOverriden:
8+
...
9+
10+
11+
@handle_urls("example.com", overrides=POModuleOverriden, extra_arg="foo")
12+
class POModule(POBase):
13+
expected_overrides = POModuleOverriden
14+
expected_patterns = Patterns(["example.com"])
15+
expected_meta = {"extra_arg": "foo"} # type: ignore
16+

tests/po_lib/an_empty_module.py

Whitespace-only changes.

tests/po_lib/an_empty_package/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)