Skip to content

Commit 136c387

Browse files
committed
Split the toDict and jsonEncode processing. Make the jsonEncoding more flexible.
1 parent 6ffdf44 commit 136c387

File tree

3 files changed

+40
-19
lines changed

3 files changed

+40
-19
lines changed

sc2reader/processors/__init__.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
1+
from __future__ import absolute_import
2+
13
from sc2reader.processors.full import Full
2-
from sc2reader.processors.json import jsonProcessor
4+
from sc2reader.processors.jsonencode import jsonEncode, jsonEncoder
5+
from sc2reader.processors.todict import toDict

sc2reader/processors/jsonencode.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from __future__ import absolute_import
2+
3+
from datetime import datetime
4+
from sc2reader.processors.todict import toDict
5+
6+
7+
try:
8+
import json
9+
except:
10+
import simplejson as json
11+
12+
13+
class __JSONDateEncoder__(json.JSONEncoder):
14+
def default(self, obj):
15+
if isinstance(obj, datetime):
16+
return obj.strftime("%Y-%m-%d %H:%M:%S")
17+
return json.JSONEncoder.default(self, obj)
18+
19+
class jsonEncoder(object):
20+
21+
def __init__(self, **user_options):
22+
self.options = dict(cls=__JSONDateEncoder__)
23+
self.options.update(user_options)
24+
25+
def __call__(self, replay):
26+
return json.dumps(toDict(replay), **self.options)
27+
28+
29+
def jsonEncode(replay):
30+
return jsonEncoder().__calll__(replay)
Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,12 @@
11
from __future__ import absolute_import
2-
from datetime import datetime
3-
import functools
4-
try:
5-
import json
6-
except:
7-
import simplejson as json
8-
9-
class __JSONDateEncoder__(json.JSONEncoder):
10-
def default(self, obj):
11-
if isinstance(obj, datetime):
12-
return obj.strftime("%Y-%m-%d %H:%M:%S")
13-
return json.JSONEncoder.default(self, obj)
142

3+
import functools
154

16-
def jsonProcessor(replay):
5+
def toDict(replay):
176
def __getattr(object, name, default):
187
return getattr(object, name, default)
198
_getattr = functools.partial(__getattr, default=None)
20-
json_data = {
9+
data = {
2110
'gateway': _getattr(replay, 'gateway'),
2211
'map': _getattr(replay, 'map'),
2312
'file_time': _getattr(replay, 'file_time'),
@@ -58,14 +47,13 @@ def __getattr(object, name, default):
5847
'is_public': message.sent_to_all
5948
})
6049
players.append(p)
61-
json_data['players'] = players
50+
data['players'] = players
6251
observers = []
6352
for observer in replay.observers:
6453
observers.append({
6554
'name': _getattr(observer, 'name'),
6655
'messages': _getattr(observer, 'messages', default=[]),
6756
'pid': _getattr(observer, 'pid'),
6857
})
69-
json_data['observers'] = observers
70-
encoded = json.dumps(json_data, cls=__JSONDateEncoder__)
71-
return encoded
58+
data['observers'] = observers
59+
return data

0 commit comments

Comments
 (0)