mirror of
https://github.com/scrapy/scrapy.git
synced 2025-02-24 00:44:08 +00:00
[MRG+2] add flags to request (#2082)
* add flags to request * fxi test - add flags to request * fix test(2) - add flags to request * fix test(2) - add flags to request * Updated test to reqser with flags field of request * Updated documntation with flags field of request * fix test identation * fix test failed * make the change backward comptaible * remove unrequired spaces, fix documentation request flags * remove unrequired space * fx assert equal * flags default is empty list * Add flags to request * add flags to request * fxi test - add flags to request * fix test(2) - add flags to request * fix test(2) - add flags to request * Updated test to reqser with flags field of request * Updated documntation with flags field of request * fix test identation * fix test failed * make the change backward comptaible * remove unrequired spaces, fix documentation request flags * remove unrequired space * fx assert equal * flags default is empty list * add flags to request squashed commits
This commit is contained in:
parent
b0388e49b4
commit
ff3e299eb0
@ -121,6 +121,9 @@ Request objects
|
|||||||
see :ref:`topics-request-response-ref-errbacks` below.
|
see :ref:`topics-request-response-ref-errbacks` below.
|
||||||
:type errback: callable
|
:type errback: callable
|
||||||
|
|
||||||
|
:param flags: Flags sent to the request, can be used for logging or similar purposes.
|
||||||
|
:type flags: list
|
||||||
|
|
||||||
.. attribute:: Request.url
|
.. attribute:: Request.url
|
||||||
|
|
||||||
A string containing the URL of this request. Keep in mind that this
|
A string containing the URL of this request. Keep in mind that this
|
||||||
|
@ -18,7 +18,7 @@ class Request(object_ref):
|
|||||||
|
|
||||||
def __init__(self, url, callback=None, method='GET', headers=None, body=None,
|
def __init__(self, url, callback=None, method='GET', headers=None, body=None,
|
||||||
cookies=None, meta=None, encoding='utf-8', priority=0,
|
cookies=None, meta=None, encoding='utf-8', priority=0,
|
||||||
dont_filter=False, errback=None):
|
dont_filter=False, errback=None, flags=None):
|
||||||
|
|
||||||
self._encoding = encoding # this one has to be set first
|
self._encoding = encoding # this one has to be set first
|
||||||
self.method = str(method).upper()
|
self.method = str(method).upper()
|
||||||
@ -36,6 +36,7 @@ class Request(object_ref):
|
|||||||
self.dont_filter = dont_filter
|
self.dont_filter = dont_filter
|
||||||
|
|
||||||
self._meta = dict(meta) if meta else None
|
self._meta = dict(meta) if meta else None
|
||||||
|
self.flags = [] if flags is None else list(flags)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def meta(self):
|
def meta(self):
|
||||||
|
@ -7,7 +7,7 @@ from scrapy.utils.request import referer_str
|
|||||||
|
|
||||||
SCRAPEDMSG = u"Scraped from %(src)s" + os.linesep + "%(item)s"
|
SCRAPEDMSG = u"Scraped from %(src)s" + os.linesep + "%(item)s"
|
||||||
DROPPEDMSG = u"Dropped: %(exception)s" + os.linesep + "%(item)s"
|
DROPPEDMSG = u"Dropped: %(exception)s" + os.linesep + "%(item)s"
|
||||||
CRAWLEDMSG = u"Crawled (%(status)s) %(request)s (referer: %(referer)s)%(flags)s"
|
CRAWLEDMSG = u"Crawled (%(status)s) %(request)s%(request_flags)s (referer: %(referer)s)%(response_flags)s"
|
||||||
|
|
||||||
|
|
||||||
class LogFormatter(object):
|
class LogFormatter(object):
|
||||||
@ -32,15 +32,17 @@ class LogFormatter(object):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def crawled(self, request, response, spider):
|
def crawled(self, request, response, spider):
|
||||||
flags = ' %s' % str(response.flags) if response.flags else ''
|
request_flags = ' %s' % str(request.flags) if request.flags else ''
|
||||||
|
response_flags = ' %s' % str(response.flags) if response.flags else ''
|
||||||
return {
|
return {
|
||||||
'level': logging.DEBUG,
|
'level': logging.DEBUG,
|
||||||
'msg': CRAWLEDMSG,
|
'msg': CRAWLEDMSG,
|
||||||
'args': {
|
'args': {
|
||||||
'status': response.status,
|
'status': response.status,
|
||||||
'request': request,
|
'request': request,
|
||||||
|
'request_flags' : request_flags,
|
||||||
'referer': referer_str(request),
|
'referer': referer_str(request),
|
||||||
'flags': flags,
|
'response_flags': response_flags,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,6 +32,7 @@ def request_to_dict(request, spider=None):
|
|||||||
'_encoding': request._encoding,
|
'_encoding': request._encoding,
|
||||||
'priority': request.priority,
|
'priority': request.priority,
|
||||||
'dont_filter': request.dont_filter,
|
'dont_filter': request.dont_filter,
|
||||||
|
'flags': request.flags
|
||||||
}
|
}
|
||||||
if type(request) is not Request:
|
if type(request) is not Request:
|
||||||
d['_class'] = request.__module__ + '.' + request.__class__.__name__
|
d['_class'] = request.__module__ + '.' + request.__class__.__name__
|
||||||
@ -62,7 +63,8 @@ def request_from_dict(d, spider=None):
|
|||||||
meta=d['meta'],
|
meta=d['meta'],
|
||||||
encoding=d['_encoding'],
|
encoding=d['_encoding'],
|
||||||
priority=d['priority'],
|
priority=d['priority'],
|
||||||
dont_filter=d['dont_filter'])
|
dont_filter=d['dont_filter'],
|
||||||
|
flags=d.get('flags'))
|
||||||
|
|
||||||
|
|
||||||
def _find_method(obj, func):
|
def _find_method(obj, func):
|
||||||
|
@ -36,6 +36,14 @@ class LoggingContribTest(unittest.TestCase):
|
|||||||
self.assertEqual(logline,
|
self.assertEqual(logline,
|
||||||
"Crawled (200) <GET http://www.example.com> (referer: http://example.com) ['cached']")
|
"Crawled (200) <GET http://www.example.com> (referer: http://example.com) ['cached']")
|
||||||
|
|
||||||
|
def test_flags_in_request(self):
|
||||||
|
req = Request("http://www.example.com", flags=['test','flag'])
|
||||||
|
res = Response("http://www.example.com")
|
||||||
|
logkws = self.formatter.crawled(req, res, self.spider)
|
||||||
|
logline = logkws['msg'] % logkws['args']
|
||||||
|
self.assertEqual(logline,
|
||||||
|
"Crawled (200) <GET http://www.example.com> ['test', 'flag'] (referer: None)")
|
||||||
|
|
||||||
def test_dropped(self):
|
def test_dropped(self):
|
||||||
item = {}
|
item = {}
|
||||||
exception = Exception(u"\u2018")
|
exception = Exception(u"\u2018")
|
||||||
|
@ -25,7 +25,8 @@ class RequestSerializationTest(unittest.TestCase):
|
|||||||
cookies={'currency': u'руб'},
|
cookies={'currency': u'руб'},
|
||||||
encoding='latin-1',
|
encoding='latin-1',
|
||||||
priority=20,
|
priority=20,
|
||||||
meta={'a': 'b'})
|
meta={'a': 'b'},
|
||||||
|
flags=['testFlag'])
|
||||||
self._assert_serializes_ok(r)
|
self._assert_serializes_ok(r)
|
||||||
|
|
||||||
def test_latin1_body(self):
|
def test_latin1_body(self):
|
||||||
@ -54,6 +55,7 @@ class RequestSerializationTest(unittest.TestCase):
|
|||||||
self.assertEqual(r1._encoding, r2._encoding)
|
self.assertEqual(r1._encoding, r2._encoding)
|
||||||
self.assertEqual(r1.priority, r2.priority)
|
self.assertEqual(r1.priority, r2.priority)
|
||||||
self.assertEqual(r1.dont_filter, r2.dont_filter)
|
self.assertEqual(r1.dont_filter, r2.dont_filter)
|
||||||
|
self.assertEqual(r1.flags, r2.flags)
|
||||||
|
|
||||||
def test_request_class(self):
|
def test_request_class(self):
|
||||||
r = FormRequest("http://www.example.com")
|
r = FormRequest("http://www.example.com")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user