Skip to content

Commit 400f940

Browse files
committed
[resources, tests] unit tests for passing arguments
to spider.
1 parent b65bf50 commit 400f940

File tree

4 files changed

+29
-2
lines changed

4 files changed

+29
-2
lines changed

scrapyrt/resources.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,10 +154,12 @@ def render_POST(self, request, **kwargs):
154154
"""
155155
request_body = request.content.getvalue()
156156
try:
157+
# TODO replace demjson with json.loads
157158
api_params = demjson.decode(request_body)
158159
except demjson.JSONDecodeError as e:
159160
message = "Invalid JSON in POST body. {}"
160161
message = message.format(e.pretty_description())
162+
# TODO should be integer not string
161163
raise Error('400', message=message)
162164

163165
log.msg("{}".format(api_params))
@@ -169,7 +171,7 @@ def render_POST(self, request, **kwargs):
169171
_request = self.get_required_argument(api_params, "request")
170172
try:
171173
scrapy_request_args = extract_scrapy_request_args(
172-
_request, raise_error=True
174+
_request, raise_error=False
173175
)
174176
except ValueError as e:
175177
raise Error('400', str(e))

scrapyrt/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def extract_scrapy_request_args(dictionary, raise_error=False):
1515
arguments.
1616
"""
1717
result = dictionary.copy()
18-
args = inspect.getargspec(Request.__init__).args
18+
args = inspect.getfullargspec(Request.__init__).args
1919
for key in dictionary.keys():
2020
if key not in args:
2121
result.pop(key)

tests/sample_data/testproject/testproject/spiders/testspider.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,6 @@ def return_bytes(self, response):
1818
def some_errback(self, err):
1919
self.logger.error("Logging some error {}".format(err))
2020
return
21+
22+
def return_argument(self, response):
23+
return TestprojectItem(name=self.postcode)

tests/test_resource_crawl.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,3 +412,25 @@ def test_bytes_in_item(self, server, method):
412412
'callback': 'return_bytes'})
413413
assert res.status_code == 200
414414
assert res.json()["items"] == [{'name': 'Some bytes here'}]
415+
416+
@pytest.mark.parametrize("method", [
417+
perform_get, perform_post
418+
])
419+
def test_crawl_with_argument(self, server, method):
420+
url = server.url("crawl.json")
421+
postcode = "43-300"
422+
res = method(url, {"spider_name": "test"}, {
423+
"url": server.target_site.url("page1.html"),
424+
"postcode": postcode,
425+
"callback": 'return_argument'
426+
})
427+
expected_items = [{
428+
u'name': postcode,
429+
}]
430+
res_json = res.json()
431+
assert res_json["status"] == "ok"
432+
assert res_json["items_dropped"] == []
433+
434+
assert res_json['items']
435+
assert len(res_json['items']) == len(expected_items)
436+
assert res_json["items"] == expected_items

0 commit comments

Comments
 (0)