diff --git a/docs/conf.py b/docs/conf.py index 61d5b9600..80b8e3e90 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -246,4 +246,7 @@ coverage_ignore_pyobjects = [ # Base classes of downloader middlewares are implementation details that # are not meant for users. r'^scrapy\.downloadermiddlewares\.\w*?\.Base\w*?Middleware', + + # Private exception used by the command-line interface implementation. + r'^scrapy\.exceptions\.UsageError', ] diff --git a/docs/topics/contracts.rst b/docs/topics/contracts.rst index 9337375bb..05b1d161b 100644 --- a/docs/topics/contracts.rst +++ b/docs/topics/contracts.rst @@ -69,7 +69,7 @@ create and load your own contracts in the project by using the 'myproject.contracts.ItemValidate': 10, } -Each contract must inherit from :class:`scrapy.contracts.Contract` and can +Each contract must inherit from :class:`~scrapy.contracts.Contract` and can override three methods: .. module:: scrapy.contracts @@ -102,9 +102,14 @@ override three methods: This allows processing the output of the callback. Iterators are converted listified before being passed to this hook. +Raise :class:`~scrapy.exceptions.ContractFail` from +:class:`~scrapy.contracts.Contract.pre_process` or +:class:`~scrapy.contracts.Contract.post_process` if expectations are not met: + +.. autoclass:: scrapy.exceptions.ContractFail + Here is a demo contract which checks the presence of a custom header in the -response received. Raise :class:`scrapy.exceptions.ContractFail` in order to -get the failures pretty printed:: +response received:: from scrapy.contracts import Contract from scrapy.exceptions import ContractFail