Code style improvements, checked using flake8

Signed-off-by: Domenico Iezzi <domenico.iezzi.201@gmail.com>
This commit is contained in:
Domenico Iezzi 2017-10-10 18:35:40 +02:00
parent 313d6075e0
commit 3b37b18542
3 changed files with 44 additions and 43 deletions

View File

@ -24,13 +24,16 @@ if VERSION == 2:
else: else:
config = configparser.ConfigParser() config = configparser.ConfigParser()
filepath = os.path.join( os.path.dirname( os.path.realpath(__file__) ), 'device.properties') filepath = os.path.join(os.path.dirname(os.path.realpath(__file__)),
'device.properties')
config.read(filepath) config.read(filepath)
device = {} device = {}
def getDevicesCodenames(): def getDevicesCodenames():
return config.sections() return config.sections()
def getDeviceConfig(): def getDeviceConfig():
libList = device['sharedlibraries'].split(",") libList = device['sharedlibraries'].split(",")
featureList = device['features'].split(",") featureList = device['features'].split(",")
@ -61,6 +64,7 @@ def getDeviceConfig():
deviceConfig.glExtension.append(x) deviceConfig.glExtension.append(x)
return deviceConfig return deviceConfig
def getAndroidBuild(): def getAndroidBuild():
androidBuild = googleplay_pb2.AndroidBuildProto() androidBuild = googleplay_pb2.AndroidBuildProto()
androidBuild.id = device['build.fingerprint'] androidBuild.id = device['build.fingerprint']
@ -79,6 +83,7 @@ def getAndroidBuild():
androidBuild.googleServices = int(device['gsf.version']) androidBuild.googleServices = int(device['gsf.version'])
return androidBuild return androidBuild
def getAndroidCheckin(): def getAndroidCheckin():
androidCheckin = googleplay_pb2.AndroidCheckinProto() androidCheckin = googleplay_pb2.AndroidCheckinProto()
androidCheckin.build.CopyFrom(getAndroidBuild()) androidCheckin.build.CopyFrom(getAndroidBuild())
@ -89,6 +94,7 @@ def getAndroidCheckin():
androidCheckin.userNumber = 0 androidCheckin.userNumber = 0
return androidCheckin return androidCheckin
def getAndroidCheckinRequest(device_codename): def getAndroidCheckinRequest(device_codename):
for (key, value) in config.items(device_codename): for (key, value) in config.items(device_codename):
device[key] = value device[key] = value

View File

@ -1,10 +1,6 @@
#!/usr/bin/python #!/usr/bin/python
from google.protobuf import descriptor
from google.protobuf.internal.containers import RepeatedCompositeFieldContainer
from google.protobuf import text_format
from google.protobuf.message import Message
from Crypto.Util import asn1 from Crypto.Util import asn1
from Crypto.PublicKey import RSA from Crypto.PublicKey import RSA
from Crypto.Hash import SHA from Crypto.Hash import SHA
@ -13,7 +9,6 @@ from clint.textui import progress
import requests import requests
import base64 import base64
import struct
import itertools import itertools
from . import googleplay_pb2, config, utils from . import googleplay_pb2, config, utils
@ -116,8 +111,6 @@ class GooglePlayAPI(object):
response = googleplay_pb2.AndroidCheckinResponse() response = googleplay_pb2.AndroidCheckinResponse()
response.ParseFromString(res.content) response.ParseFromString(res.content)
securityToken = "{0:x}".format(response.securityToken)
# checkin again to upload gfsid # checkin again to upload gfsid
request2 = googleplay_pb2.AndroidCheckinRequest() request2 = googleplay_pb2.AndroidCheckinRequest()
request2.CopyFrom(request) request2.CopyFrom(request)
@ -126,7 +119,7 @@ class GooglePlayAPI(object):
request2.accountCookie.append("[" + email + "]") request2.accountCookie.append("[" + email + "]")
request2.accountCookie.append(ac2dmToken) request2.accountCookie.append(ac2dmToken)
stringRequest = request2.SerializeToString() stringRequest = request2.SerializeToString()
res2 = requests.post(self.CHECKINURL, data=stringRequest, requests.post(self.CHECKINURL, data=stringRequest,
headers=headers, verify=ssl_verify) headers=headers, verify=ssl_verify)
return response.androidId return response.androidId
@ -146,8 +139,7 @@ class GooglePlayAPI(object):
stringRequest = upload.SerializeToString() stringRequest = upload.SerializeToString()
res = requests.post(self.UPLOADURL, data=stringRequest, res = requests.post(self.UPLOADURL, data=stringRequest,
headers=headers, verify=ssl_verify) headers=headers, verify=ssl_verify)
response = googleplay_pb2.ResponseWrapper.FromString(res.content) googleplay_pb2.ResponseWrapper.FromString(res.content)
def login(self, email=None, password=None, gsfId=None, authSubToken=None, device_codename='angler'): def login(self, email=None, password=None, gsfId=None, authSubToken=None, device_codename='angler'):
"""Login to your Google Account. """Login to your Google Account.
@ -239,7 +231,7 @@ class GooglePlayAPI(object):
def executeRequestApi2(self, path, datapost=None, def executeRequestApi2(self, path, datapost=None,
post_content_type="application/x-www-form-urlencoded; charset=UTF-8"): post_content_type="application/x-www-form-urlencoded; charset=UTF-8"):
if self.authSubToken == None: if self.authSubToken is None:
raise Exception("You need to login before executing any request") raise Exception("You need to login before executing any request")
headers = self.getDefaultHeaders() headers = self.getDefaultHeaders()
@ -267,7 +259,7 @@ class GooglePlayAPI(object):
offset is used to take result starting from an index. offset is used to take result starting from an index.
""" """
if self.authSubToken == None: if self.authSubToken is None:
raise Exception("You need to login before executing any request") raise Exception("You need to login before executing any request")
remaining = nb_result remaining = nb_result
@ -276,7 +268,7 @@ class GooglePlayAPI(object):
nextPath = "search?c=3&q=%s" % requests.utils.quote(query) nextPath = "search?c=3&q=%s" % requests.utils.quote(query)
if (offset is not None): if (offset is not None):
nextPath += "&o=%d" % int(offset) nextPath += "&o=%d" % int(offset)
while remaining > 0 and nextPath != None: while remaining > 0 and nextPath is not None:
currentPath = nextPath currentPath = nextPath
data = self.executeRequestApi2(currentPath) data = self.executeRequestApi2(currentPath)
if len(data.preFetch) > 0: if len(data.preFetch) > 0:
@ -347,9 +339,9 @@ class GooglePlayAPI(object):
if cat is None and subCat is None: if cat is None and subCat is None:
# result contains all categories available # result contains all categories available
for cat in data.payload.browseResponse.category: for cat in data.payload.browseResponse.category:
elem = { 'name': cat.name, elem = {'name': cat.name,
'dataUrl': cat.dataUrl, 'dataUrl': cat.dataUrl,
'catId': cat.unknownCategoryContainer.categoryIdContainer.categoryId } 'catId': cat.unknownCategoryContainer.categoryIdContainer.categoryId}
output.append(elem) output.append(elem)
else: else:
# result contains apps of a specific category # result contains apps of a specific category
@ -357,12 +349,13 @@ class GooglePlayAPI(object):
for pf in data.preFetch: for pf in data.preFetch:
for cluster in pf.response.payload.listResponse.cluster: for cluster in pf.response.payload.listResponse.cluster:
for doc in cluster.doc: for doc in cluster.doc:
section = { 'title': doc.title, apps = [a for a in doc.child]
apps = list(map(utils.fromDocToDictionary,
apps))
section = {'title': doc.title,
'docid': doc.docid, 'docid': doc.docid,
'apps': list(map(utils.fromDocToDictionary, 'apps': apps}
[a for a in doc.child])) }
output.append(section) output.append(section)
return output return output
def list(self, cat, ctr=None, nb_results=None, offset=None): def list(self, cat, ctr=None, nb_results=None, offset=None):
@ -390,9 +383,10 @@ class GooglePlayAPI(object):
# list apps for specific subcat # list apps for specific subcat
for cluster in data.payload.listResponse.cluster: for cluster in data.payload.listResponse.cluster:
for doc in cluster.doc: for doc in cluster.doc:
output += list(map(utils.fromDocToDictionary, apps = [a for a in doc.child]
[a for a in doc.child])) apps = list(map(utils.fromDocToDictionary,
apps))
output += apps
return output return output
def reviews(self, packageName, filterByDevice=False, sort=2, def reviews(self, packageName, filterByDevice=False, sort=2,
@ -409,13 +403,12 @@ class GooglePlayAPI(object):
path += "&dfil=1" path += "&dfil=1"
data = self.executeRequestApi2(path) data = self.executeRequestApi2(path)
reviews = [rev for rev in data.payload.reviewResponse.getResponse.review] reviews = [rev for rev in data.payload.reviewResponse.getResponse.review]
return [{ 'documentVersion': r.documentVersion, return [{'documentVersion': r.documentVersion,
'timestampMsec': r.timestampMsec, 'timestampMsec': r.timestampMsec,
'starRating': r.starRating, 'starRating': r.starRating,
'comment': r.comment, 'comment': r.comment,
'commentId': r.commentId, 'commentId': r.commentId,
'author': r.author2.name } for r in reviews] 'author': r.author2.name} for r in reviews]
def delivery(self, packageName, versionCode, def delivery(self, packageName, versionCode,
offerType=1, downloadToken=None, progress_bar=False): offerType=1, downloadToken=None, progress_bar=False):
@ -426,9 +419,9 @@ class GooglePlayAPI(object):
versionCode can be grabbed by using the details() method on the given versionCode can be grabbed by using the details() method on the given
app.""" app."""
path = "delivery" path = "delivery"
params = { 'ot': str(offerType), params = {'ot': str(offerType),
'doc': packageName, 'doc': packageName,
'vc': str(versionCode) } 'vc': str(versionCode)}
headers = self.getDefaultHeaders() headers = self.getDefaultHeaders()
if downloadToken is not None: if downloadToken is not None:
params['dtok'] = downloadToken params['dtok'] = downloadToken
@ -472,7 +465,7 @@ class GooglePlayAPI(object):
versionCode can be grabbed by using the details() method on the given versionCode can be grabbed by using the details() method on the given
app.""" app."""
if self.authSubToken == None: if self.authSubToken is None:
raise Exception("You need to login before executing any request") raise Exception("You need to login before executing any request")
path = "purchase" path = "purchase"

View File

@ -3,6 +3,7 @@ import sys
VERSION = sys.version_info[0] VERSION = sys.version_info[0]
def fromDocToDictionary(app): def fromDocToDictionary(app):
return { return {
"docId": app.docid, "docId": app.docid,
@ -57,6 +58,7 @@ def fromDocToDictionary(app):
"detailsUrl": app.detailsUrl "detailsUrl": app.detailsUrl
} }
def readInt(byteArray, start): def readInt(byteArray, start):
"""Read the byte array, starting from *start* position, """Read the byte array, starting from *start* position,
as an 32-bit unsigned integer""" as an 32-bit unsigned integer"""
@ -72,5 +74,5 @@ def toBigInt(byteArray):
decoded = struct.unpack("B", bytes([value]))[0] decoded = struct.unpack("B", bytes([value]))[0]
else: else:
decoded = struct.unpack("B", value)[0] decoded = struct.unpack("B", value)[0]
out = out | decoded << key*8 out = out | decoded << key * 8
return out return out