Skip to content

Commit e36e310

Browse files
srounetGraylinKim
authored andcommitted
Add support for a replay to json converter.
As part of that process, create a processors module to hold future contributed processors as well.
1 parent 4656ff2 commit e36e310

File tree

3 files changed

+73
-0
lines changed

3 files changed

+73
-0
lines changed

sc2reader/processors/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from sc2reader.processors.full import Full
2+
from sc2reader.processors.json import jsonProcessor

sc2reader/processors/json.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
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)
14+
15+
16+
def jsonProcessor(replay):
17+
def __getattr(object, name, default):
18+
return getattr(object, name, default)
19+
_getattr = functools.partial(__getattr, default=None)
20+
json_data = {
21+
'gateway': _getattr(replay, 'gateway'),
22+
'map': _getattr(replay, 'map'),
23+
'file_time': _getattr(replay, 'file_time'),
24+
'unix_timestamp': _getattr(replay, 'unix_timestamp'),
25+
'date': _getattr(replay, 'date'),
26+
'utc_date': _getattr(replay, 'utc_date'),
27+
'speed': _getattr(replay, 'speed'),
28+
'category': _getattr(replay, 'category'),
29+
'type': _getattr(replay, 'type'),
30+
'is_ladder': _getattr(replay, 'is_ladder', default=False),
31+
'is_private': _getattr(replay, 'is_private', default=False),
32+
'filename': _getattr(replay, 'filename'),
33+
'file_time': _getattr(replay, 'file_time'),
34+
'frames': _getattr(replay, 'frames'),
35+
'build': _getattr(replay, 'build'),
36+
'release': _getattr(replay, 'release_string'),
37+
}
38+
players = []
39+
for player in replay.players:
40+
p = {
41+
'avg_apm': _getattr(player, 'avg_apm'),
42+
'color': _getattr(player, 'color'),
43+
'name': _getattr(player, 'name'),
44+
'pick_race': _getattr(player, 'pick_race'),
45+
'pid': _getattr(player, 'pid'),
46+
'play_race': _getattr(player, 'play_race'),
47+
'result': _getattr(player, 'result'),
48+
'type': _getattr(player, 'type'),
49+
'uid': _getattr(player, 'uid'),
50+
'url': _getattr(player, 'url'),
51+
'messages': [],
52+
}
53+
for message in player.messages:
54+
msg_time = '%s:%s' % ((message.time/16)/60, (message.time/16)%60)
55+
p['messages'].append({
56+
'time': msg_time,
57+
'text': message.text,
58+
'is_public': message.sent_to_all
59+
})
60+
players.append(p)
61+
json_data['players'] = players
62+
observers = []
63+
for observer in replay.observers:
64+
observers.append({
65+
'name': _getattr(observer, 'name'),
66+
'messages': _getattr(observer, 'messages', default=[]),
67+
'pid': _getattr(observer, 'pid'),
68+
})
69+
json_data['observers'] = observers
70+
encoded = json.dumps(json_data, cls=__JSONDateEncoder__)
71+
return encoded

0 commit comments

Comments
 (0)