]> de.git.xonotic.org Git - xonotic/xonstat.git/blobdiff - xonstat/util.py
Fixing issue with long player nicks, fixes #1313
[xonotic/xonstat.git] / xonstat / util.py
index 7c2692d45d51651605b2e78ba9ff98929fd7fd50..af8809c1366601b4ef318aa9e2548b02b3fee915 100644 (file)
@@ -2,6 +2,8 @@ import re
 from colorsys import rgb_to_hls, hls_to_rgb
 from cgi import escape as html_escape
 from datetime import datetime, timedelta
+from decimal import Decimal
+from collections import namedtuple
 
 # Map of special chars to ascii from Darkplace's console.c.
 _qfont_table = [
@@ -155,3 +157,25 @@ def pretty_date(time=False):
 def datetime_seconds(td):
     return float(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
 
+def to_json(data):
+    if not type(data) == dict:
+        # assume it's a named tuple
+        data = data._asdict()
+    result = {}
+    for key,value in data.items():
+        if value == None:
+            result[key] = None
+        elif type(value) in [bool,int,long,float,complex,str]:
+            result[key] = value
+        elif type(value) == unicode:
+            result[key] = value.encode('utf-8')
+        elif type(value) == Decimal:
+            result[key] = float(value)
+        elif type(value) == datetime:
+            result[key] = value.strftime('%Y-%m-%dT%H:%M:%SZ')
+        elif type(value) == timedelta:
+            result[key] = datetime_seconds(value)
+        else:
+            result[key] = to_json(value.to_dict())
+    return result
+