Skip to content

Commit bee6473

Browse files
committed
Refactored for Python3 compatibility
1 parent 15e0b70 commit bee6473

File tree

3 files changed

+41
-23
lines changed

3 files changed

+41
-23
lines changed

scrapy_jsonrpc/jsonrpc.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,11 @@ def jsonrpc_server_call(target, jsonrpc_request, json_decoder=None):
5858
json_decoder = ScrapyJSONDecoder()
5959

6060
try:
61-
req = json_decoder.decode(jsonrpc_request)
61+
req = json_decoder.decode(jsonrpc_request.decode())
6262
except Exception as e:
63-
return jsonrpc_error(None, jsonrpc_errors.PARSE_ERROR, 'Parse error',
64-
traceback.format_exc())
63+
return jsonrpc_error(
64+
None, jsonrpc_errors.PARSE_ERROR, 'Parse error',
65+
traceback.format_exc())
6566

6667
try:
6768
id, methname = req['id'], req['method']

scrapy_jsonrpc/txweb.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,24 @@
22

33
from twisted.web import resource
44

5-
class JsonResource(resource.Resource):
5+
6+
class JsonResource(resource.Resource, object):
67

78
json_encoder = json.JSONEncoder()
89

10+
def __init__(self):
11+
super(JsonResource, self).__init__()
12+
913
def render(self, txrequest):
10-
r = resource.Resource.render(self, txrequest)
14+
r = super(JsonResource, self).render(txrequest)
1115
return self.render_object(r, txrequest)
1216

1317
def render_object(self, obj, txrequest):
14-
r = self.json_encoder.encode(obj) + "\n"
18+
r = (self.json_encoder.encode(obj) + "\n").encode()
19+
1520
txrequest.setHeader('Content-Type', 'application/json')
1621
txrequest.setHeader('Access-Control-Allow-Origin', '*')
1722
txrequest.setHeader('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, DELETE')
18-
txrequest.setHeader('Access-Control-Allow-Headers',' X-Requested-With')
23+
txrequest.setHeader('Access-Control-Allow-Headers', 'X-Requested-With')
1924
txrequest.setHeader('Content-Length', len(r))
2025
return r

scrapy_jsonrpc/webservice.py

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
import six
23

34
from twisted.web import server, resource
45

@@ -17,27 +18,34 @@
1718
class JsonResource(JsonResource_):
1819

1920
def __init__(self, crawler, target=None):
20-
JsonResource_.__init__(self)
21+
super(JsonResource, self).__init__()
22+
2123
self.crawler = crawler
2224
self.json_encoder = ScrapyJSONEncoder(crawler=crawler)
2325

26+
def getChildWithDefault(self, path, request):
27+
path = path.decode()
28+
return super(JsonResource, self).getChildWithDefault(path, request)
29+
30+
2431
class JsonRpcResource(JsonResource):
2532

2633
def __init__(self, crawler, target=None):
27-
JsonResource.__init__(self, crawler, target)
34+
super(JsonRpcResource, self).__init__(crawler, target)
35+
2836
self.json_decoder = ScrapyJSONDecoder(crawler=crawler)
2937
self.crawler = crawler
3038
self._target = target
3139

32-
def render_GET(self, txrequest):
40+
def render_GET(self, request):
3341
return self.get_target()
3442

35-
def render_POST(self, txrequest):
36-
reqstr = txrequest.content.getvalue()
43+
def render_POST(self, request):
44+
reqstr = request.content.getvalue()
3745
target = self.get_target()
3846
return jsonrpc_server_call(target, reqstr, self.json_decoder)
3947

40-
def getChild(self, name, txrequest):
48+
def getChild(self, name, request):
4149
target = self.get_target()
4250
try:
4351
newtarget = getattr(target, name)
@@ -54,33 +62,37 @@ class CrawlerResource(JsonRpcResource):
5462
ws_name = 'crawler'
5563

5664
def __init__(self, crawler):
57-
JsonRpcResource.__init__(self, crawler, crawler)
65+
super(CrawlerResource, self).__init__(crawler, target=crawler)
5866

5967

6068
class RootResource(JsonResource):
6169

62-
def render_GET(self, txrequest):
63-
return {'resources': self.children.keys()}
70+
def render_GET(self, request):
71+
return {'resources': list(self.children.keys())}
6472

65-
def getChild(self, name, txrequest):
73+
def getChild(self, name, request):
6674
if name == '':
6775
return self
68-
return JsonResource.getChild(self, name, txrequest)
76+
return JsonResource.getChild(self, name, request)
6977

7078

71-
class WebService(server.Site):
79+
class WebService(server.Site, object):
7280

7381
def __init__(self, crawler):
7482
if not crawler.settings.getbool('JSONRPC_ENABLED'):
7583
raise NotConfigured
76-
self.crawler = crawler
84+
7785
logfile = crawler.settings['JSONRPC_LOGFILE']
86+
self.crawler = crawler
7887
self.portrange = [int(x) for x in crawler.settings.getlist('JSONRPC_PORT', [6023, 6073])]
7988
self.host = crawler.settings.get('JSONRPC_HOST', '127.0.0.1')
89+
self.noisy = False
90+
8091
root = RootResource(crawler)
8192
root.putChild('crawler', CrawlerResource(self.crawler))
82-
server.Site.__init__(self, root, logPath=logfile)
83-
self.noisy = False
93+
94+
super(WebService, self).__init__(root, logPath=logfile)
95+
8496
crawler.signals.connect(self.start_listening, signals.engine_started)
8597
crawler.signals.connect(self.stop_listening, signals.engine_stopped)
8698

@@ -90,10 +102,10 @@ def from_crawler(cls, crawler):
90102

91103
def start_listening(self):
92104
self.port = listen_tcp(self.portrange, self.host, self)
105+
93106
logger.debug(
94107
'Web service listening on {host.host:s}:{host.port:d}'.format(
95108
host=self.port.getHost()))
96109

97110
def stop_listening(self):
98111
self.port.stopListening()
99-

0 commit comments

Comments
 (0)