diff --git a/steam/client/builtins/apps.py b/steam/client/builtins/apps.py index c00ff83..ecbbe80 100644 --- a/steam/client/builtins/apps.py +++ b/steam/client/builtins/apps.py @@ -41,13 +41,15 @@ class Apps(object): else: return EResult(resp.eresult) - def get_product_info(self, apps=[], packages=[], auto_access_tokens=True, timeout=15): + def get_product_info(self, apps=[], packages=[], meta_data_only=False, auto_access_tokens=True, timeout=15): """Get product info for apps and packages :param apps: items in the list should be either just ``app_id``, or :class:`dict` :type apps: :class:`list` :param packages: items in the list should be either just ``package_id``, or :class:`dict` :type packages: :class:`list` + :param meta_data_only: only meta data will be returned in the reponse (e.g. change number, missing_token, sha1) + :type meta_data_only: :class:`bool` :param auto_access_token: automatically request and fill access tokens :type auto_access_token: :class:`bool` :return: dict with ``apps`` and ``packages`` containing their info, see example below @@ -124,7 +126,9 @@ class Apps(object): else: package_info.packageid = package - message.body.meta_data_only = False + message.body.meta_data_only = meta_data_only + message.body.num_prev_failed = 0 + message.body.supports_package_tokens = 1 job_id = self.send_job(message) @@ -136,11 +140,26 @@ class Apps(object): chunk = chunk[0].body for app in chunk.apps: - data['apps'][app.appid] = vdf.loads(app.buffer[:-1].decode('utf-8', 'replace'))['appinfo'] + if app.buffer: + data['apps'][app.appid] = vdf.loads(app.buffer[:-1].decode('utf-8', 'replace'))['appinfo'] + else: + data['apps'][app.appid] = {} + data['apps'][app.appid]['_missing_token'] = app.missing_token + data['apps'][app.appid]['_change_number'] = app.change_number + data['apps'][app.appid]['_sha'] = app.sha + data['apps'][app.appid]['_size'] = app.size + for pkg in chunk.packages: - data['packages'][pkg.packageid] = vdf.binary_loads(pkg.buffer[4:]).get(str(pkg.packageid), {}) + if pkg.buffer: + data['packages'][pkg.packageid] = vdf.binary_loads(pkg.buffer[4:]).get(str(pkg.packageid), {}) + else: + data['packages'][pkg.packageid] = {} + data['packages'][pkg.packageid]['_missing_token'] = pkg.missing_token + data['packages'][pkg.packageid]['_change_number'] = pkg.change_number + data['packages'][pkg.packageid]['_sha'] = pkg.sha + data['packages'][pkg.packageid]['_size'] = pkg.size if not chunk.response_pending: break