Skip to content

Commit 036a9b5

Browse files
author
yorickvanpelt
committed
- Codechange: use python 2.6 json module if available
- Codechange: use array module instead of the string operations, because it is made for it
1 parent fcf1613 commit 036a9b5

File tree

3 files changed

+24
-16
lines changed

3 files changed

+24
-16
lines changed

newgrfs.grflist

91 Bytes
Binary file not shown.

ottd_savegame.py

+16-11
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
# made by yorickvanpelt {AT} gmail {DOT} com
44
from struct_zerostrings import unpackFromExt, packExt
55
from ottd_constants import saveload_chunk_types
6+
import array
67

78
class LoadException(Exception):
89
"""
@@ -109,7 +110,11 @@ def read_OTTDSimpleGamma(self):
109110
i = (i << 8) | self.read_byte()
110111
return i
111112
def read_array(self, format, number):
112-
return self.read_something('>' + format*number)
113+
a = array.array(format)
114+
end_offs = self.offset + number
115+
a.fromstring(self.data[self.offset:end_offs])
116+
self.offset = end_offset
117+
return a.tolist()
113118

114119
class OTTDSaveGameParser:
115120
"""
@@ -239,7 +244,7 @@ def compressZLIB(data):
239244
except ImportError:
240245
raise LoadException("can't save ZLIB saves, no ZLIB")
241246
else:
242-
return zlib.compress(data)
247+
return zlib.compress(data)
243248
formats = (
244249
("LZO" , "OTTD", uncompressLZO , compressLZO ),
245250
("uncompressed", "OTTN", uncompressNone, compressNone),
@@ -432,7 +437,7 @@ def readMAPT(self, dp, chunksize):
432437
size = self.mapsize['total']
433438
i = 0
434439
while i < size:
435-
type_height.extend(dp.read_bytes(4096))
440+
type_height.extend(dp.read_array('B', 4096))
436441
i += 4096
437442
self.map_array = {}
438443
self.map_array['t'] = type_height
@@ -450,7 +455,7 @@ def readMAP2(self, dp, chunksize):
450455
if self.saveload_version > 5:
451456
i = 0
452457
while i < size:
453-
data = dp.read_bytes(4096*2)
458+
data = dp.read_array('B', 4096*2)
454459
j = 0
455460
while j < 4096:
456461
y = j*2
@@ -460,15 +465,15 @@ def readMAP2(self, dp, chunksize):
460465
else:
461466
i = 0
462467
while i < size:
463-
m2.extend(dp.read_bytes(4096))
468+
m2.extend(dp.read_array('B', 4096))
464469
i += 4096
465470
self.map_array[2] = m2
466471
def readMAP3(self, dp, chunksize):
467472
m3 = []
468473
size = self.mapsize['total']
469474
i = 0
470475
while i < size:
471-
m3.extend(dp.read_bytes(4096))
476+
m3.extend(dp.read_array('B', 4096))
472477
i += 4096
473478
self.map_array[3] = m3
474479

@@ -477,7 +482,7 @@ def readMAP4(self, dp, chunksize):
477482
size = self.mapsize['total']
478483
i = 0
479484
while i < size:
480-
m4.extend(dp.read_bytes(4096))
485+
m4.extend(dp.read_array('B', 4096))
481486
i += 4096
482487
self.map_array[4] = m4
483488

@@ -486,7 +491,7 @@ def readMAP5(self, dp, chunksize):
486491
size = self.mapsize['total']
487492
i = 0
488493
while i < size:
489-
m5.extend(dp.read_bytes(4096))
494+
m5.extend(dp.read_array('B', 4096))
490495
i += 4096
491496
self.map_array[5] = m5
492497
def readMAP6(self, dp, chunksize):
@@ -508,15 +513,15 @@ def readMAP6(self, dp, chunksize):
508513
else:
509514
i = 0
510515
while i < size:
511-
m6.extend(dp.read_bytes(4096))
516+
m6.extend(dp.read_array('B', 4096))
512517
i += 4096
513518
self.map_array[6] = m6
514519
def readMAP7(self, dp, chunksize):
515520
m7 = []
516521
size = self.mapsize['total']
517522
i = 0
518523
while i < size:
519-
m7.extend(dp.read_bytes(4096))
524+
m7.extend(dp.read_array('B', 4096))
520525
i += 4096
521526
self.map_array[7] = m7
522527
def readVIEW(self, dp, chunksize):
@@ -630,7 +635,7 @@ def readCHTS(self, dp, chunksize):
630635
def parseArgs():
631636
import optparse
632637
# parse the arguments
633-
usage = "usage: %prog [ip[:port]] [options]"
638+
usage = "usage: %prog [options]"
634639
description = """This script will will parse an openttd savegame (http://www.openttd.org)
635640
For more information, see the homepage: http://openttd-python.googlecode.com/."""
636641
argparser = optparse.OptionParser(usage=usage, description=description)

webserver.py

+8-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
import ottd_config
33
from ottd_lib import DataStorageClass
44
from log import LOG
5-
import simplejson
5+
try:
6+
import json
7+
except ImportError:
8+
import simplejson as json
69
import pickle
710

811
ext2conttype = {"jpg": "image/jpeg",
@@ -21,12 +24,12 @@ def content_type(filename):
2124
else:
2225
return "text/html"
2326

24-
class DataStorageJSONEncoder(simplejson.JSONEncoder):
27+
class DataStorageJSONEncoder(json.JSONEncoder):
2528
def default(self, obj):
2629
if isinstance(obj, DataStorageClass):
2730
return obj.getDict()
2831
else:
29-
return simplejson.JSONEncoder.default(self, obj)
32+
return json.JSONEncoder.default(self, obj)
3033

3134
class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
3235

@@ -100,12 +103,12 @@ def do_GET(self):
100103
self.send_response(200)
101104
self.send_header('Content-type:', 'application/json')
102105
self.end_headers()
103-
jsonoutput = simplejson.dumps(obj, sort_keys=True, indent=4, cls=DataStorageJSONEncoder)
106+
jsonoutput = json.dumps(obj, sort_keys=True, indent=4, cls=DataStorageJSONEncoder)
104107
self.wfile.write(jsonoutput)
105108
elif self.path == "/data/clients":
106109
cls = self.server._callbackclass
107110

108-
response = simplejson.dumps(cls.playerlist, indent=4, sort_keys=True)
111+
response = json.dumps(cls.playerlist, indent=4, sort_keys=True)
109112
self.send_response(200)
110113
self.send_header('Content-type:', 'application/json')
111114
self.end_headers()

0 commit comments

Comments
 (0)