2017-09-18 14:33:11 +00:00
|
|
|
import struct
|
|
|
|
|
|
|
|
def fromDocToDictionary(app):
|
|
|
|
return {
|
|
|
|
"docId": app.docid,
|
|
|
|
"title": app.title,
|
|
|
|
"author": app.creator,
|
|
|
|
"offer": [{
|
|
|
|
"micros": o.micros,
|
|
|
|
"currencyCode": o.currencyCode,
|
|
|
|
"formattedAmount": o.formattedAmount,
|
|
|
|
"checkoutFlowRequired": o.checkoutFlowRequired,
|
|
|
|
"offerType": o.offerType
|
|
|
|
} for o in app.offer],
|
|
|
|
"images": [{
|
|
|
|
"imageType": img.imageType,
|
2017-09-25 19:38:48 +00:00
|
|
|
"width": img.dimension.width if hasattr(img.dimension, "width")
|
2017-09-18 14:33:11 +00:00
|
|
|
else 0,
|
2017-09-25 19:38:48 +00:00
|
|
|
"height": img.dimension.height if hasattr(img.dimension, "height")
|
2017-09-18 14:33:11 +00:00
|
|
|
else 0,
|
|
|
|
"url": img.imageUrl,
|
|
|
|
"supportsFifeUrlOptions": img.supportsFifeUrlOptions
|
|
|
|
} for img in app.image],
|
|
|
|
"versionCode": app.details.appDetails.versionCode,
|
|
|
|
"installationSize": app.details.appDetails.installationSize,
|
|
|
|
"numDownloads": app.details.appDetails.numDownloads,
|
|
|
|
"uploadDate": app.details.appDetails.uploadDate,
|
|
|
|
"files": [{
|
|
|
|
"fileType": f.fileType,
|
|
|
|
"version": f.versionCode,
|
|
|
|
"size": f.size
|
|
|
|
} for f in app.details.appDetails.file],
|
|
|
|
"unstable": app.details.appDetails.unstable,
|
|
|
|
"containsAds": app.details.appDetails.containsAds,
|
2017-09-18 17:29:16 +00:00
|
|
|
"aggregateRating": {
|
|
|
|
"type": app.aggregateRating.type,
|
|
|
|
"starRating": app.aggregateRating.starRating,
|
|
|
|
"ratingsCount": app.aggregateRating.ratingsCount,
|
|
|
|
"oneStarRatings": app.aggregateRating.oneStarRatings,
|
|
|
|
"twoStarRatings": app.aggregateRating.twoStarRatings,
|
|
|
|
"threeStarRatings": app.aggregateRating.threeStarRatings,
|
|
|
|
"fourStarRatings": app.aggregateRating.fourStarRatings,
|
|
|
|
"fiveStarRatings": app.aggregateRating.fiveStarRatings,
|
|
|
|
"commentCount": app.aggregateRating.commentCount
|
|
|
|
},
|
2017-09-18 14:33:11 +00:00
|
|
|
"dependencies": [{
|
2017-09-18 17:29:16 +00:00
|
|
|
"packageName": d.packageName,
|
|
|
|
"version": d.version
|
2017-09-18 14:33:11 +00:00
|
|
|
} for d in app.details.appDetails.dependencies.dependency],
|
|
|
|
"category": {
|
|
|
|
"appType": app.relatedLinks.categoryInfo.appType,
|
|
|
|
"appCategory": app.relatedLinks.categoryInfo.appCategory
|
|
|
|
},
|
|
|
|
"detailsUrl": app.detailsUrl
|
|
|
|
}
|
|
|
|
|
|
|
|
def readInt(byteArray, start):
|
|
|
|
"""Read the byte array, starting from *start* position,
|
|
|
|
as an 32-bit unsigned integer"""
|
|
|
|
return struct.unpack("!L", byteArray[start:][0:4])[0]
|
|
|
|
|
|
|
|
|
|
|
|
def toBigInt(byteArray):
|
|
|
|
"""Convert the byte array to a BigInteger"""
|
|
|
|
array = byteArray[::-1] # reverse array
|
|
|
|
out = 0
|
|
|
|
for key, value in enumerate(array):
|
|
|
|
decoded = struct.unpack("B", bytes([value]))[0]
|
|
|
|
out = out | decoded << key*8
|
|
|
|
return out
|