Skip to content

Commit 8681890

Browse files
author
amvanbaren
committed
print stack
1 parent 4f9dbdb commit 8681890

File tree

1 file changed

+107
-109
lines changed

1 file changed

+107
-109
lines changed

reports/get_vs_marketplace_data.py

Lines changed: 107 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -34,119 +34,117 @@ def convert_date_str(input_str):
3434
return_str = date.strftime("%-m/%-d/%Y")
3535
return return_str
3636

37-
try:
38-
39-
CSV_FILE_NAME = 'all_vs_extensions.csv'
40-
JSON_FILE_NAME = 'all_vs_extensions.json'
41-
MS_API_URL = 'https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery'
42-
MS_HEADERS = {
43-
'content-type': 'application/json',
44-
'accept': 'application/json;api-version=3.0-preview.1',
45-
'accept-encoding': 'gzip'
46-
}
47-
API_ENDPOINT = os.environ['API_ENDPOINT']
48-
VSX_API = '%sapi' % API_ENDPOINT
49-
50-
# Looks like 1000 is the max page size
51-
get_all_extensions_payload = {
52-
"assetTypes": [
53-
"Microsoft.VisualStudio.Services.Icons.Default",
54-
"Microsoft.VisualStudio.Services.Icons.Branding",
55-
"Microsoft.VisualStudio.Services.Icons.Small"
56-
],
57-
"filters": [
58-
{
59-
"criteria": [
60-
{
61-
"filterType": 8,
62-
"value": "Microsoft.VisualStudio.Code"
63-
},
64-
{
65-
"filterType": 10,
66-
"value": "target:\"Microsoft.VisualStudio.Code\" "
67-
},
37+
if __name__ == '__main__':
38+
try:
39+
CSV_FILE_NAME = 'all_vs_extensions.csv'
40+
JSON_FILE_NAME = 'all_vs_extensions.json'
41+
MS_API_URL = 'https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery'
42+
MS_HEADERS = {
43+
'content-type': 'application/json',
44+
'accept': 'application/json;api-version=3.0-preview.1',
45+
'accept-encoding': 'gzip'
46+
}
47+
API_ENDPOINT = os.environ['API_ENDPOINT']
48+
VSX_API = '%sapi' % API_ENDPOINT
49+
50+
# Looks like 1000 is the max page size
51+
get_all_extensions_payload = {
52+
"assetTypes": [
53+
"Microsoft.VisualStudio.Services.Icons.Default",
54+
"Microsoft.VisualStudio.Services.Icons.Branding",
55+
"Microsoft.VisualStudio.Services.Icons.Small"
56+
],
57+
"filters": [
6858
{
69-
"filterType": 12,
70-
"value": "37888"
59+
"criteria": [
60+
{
61+
"filterType": 8,
62+
"value": "Microsoft.VisualStudio.Code"
63+
},
64+
{
65+
"filterType": 10,
66+
"value": "target:\"Microsoft.VisualStudio.Code\" "
67+
},
68+
{
69+
"filterType": 12,
70+
"value": "37888"
71+
}
72+
],
73+
"direction": 2,
74+
"pageSize": 1000,
75+
"pageNumber": 1,
76+
"sortBy": 4,
77+
"sortOrder": 0,
78+
"pagingToken": None
7179
}
7280
],
73-
"direction": 2,
74-
"pageSize": 1000,
75-
"pageNumber": 1,
76-
"sortBy": 4,
77-
"sortOrder": 0,
78-
"pagingToken": None
79-
}
80-
],
81-
"flags": 870
82-
}
83-
all_extensions = []
84-
total_all_versions = 0
85-
while True:
86-
response = requests.post(MS_API_URL, headers=MS_HEADERS, data=json.dumps(get_all_extensions_payload))
87-
if response.status_code != 200:
88-
print('HTTP %s error' % response.status_code)
89-
break
90-
else:
91-
vsx_results = response.json()
92-
extensions = vsx_results['results'][0]['extensions']
93-
all_extensions = all_extensions + extensions
94-
for extension in extensions:
95-
versions = extension['versions']
96-
total_all_versions += len(versions)
97-
total = vsx_results['results'][0]['resultMetadata'][0]['metadataItems'][0]['count']
98-
print('Retrieved %s of %s MS Marketplace extensions. %s total versions.' % (len(all_extensions), total, total_all_versions))
99-
if len(all_extensions) == total:
81+
"flags": 870
82+
}
83+
all_extensions = []
84+
total_all_versions = 0
85+
while True:
86+
response = requests.post(MS_API_URL, headers=MS_HEADERS, data=json.dumps(get_all_extensions_payload))
87+
if response.status_code != 200:
88+
print('HTTP %s error' % response.status_code)
10089
break
10190
else:
102-
get_all_extensions_payload['filters'][0]['pageNumber'] = get_all_extensions_payload['filters'][0]['pageNumber'] + 1
103-
104-
# Output CSV File
105-
csv_file = open(CSV_FILE_NAME, 'w')
106-
csv_file.write("MS Publisher (Namespace), MS Extension, MS DisplayName, MS Pricing, MS Version, MS Date, VSX Version, VSX Date, VSX Publisher, VSX License, Repo\n")
107-
for ext in extensions:
108-
print("%s.%s" % (ext['publisher']['publisherName'], ext['extensionName']))
109-
ms_extension_name, ms_publisher_name, ms_display_name, ms_latest_version, ms_last_updated, ms_repo, ms_pricing = get_ms_info(ext)
110-
vsx_extension_url = '%s/%s/%s' % (VSX_API, ms_publisher_name, ms_extension_name)
111-
response = requests.get(vsx_extension_url)
112-
if response.status_code == 200:
113-
vsx_results = response.json()
114-
csv_file.write("%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s\n" % (
115-
ms_publisher_name,
116-
ms_extension_name,
117-
ms_display_name,
118-
ms_pricing,
119-
ms_latest_version,
120-
convert_date_str(ms_last_updated),
121-
vsx_results['version'],
122-
convert_date_str(vsx_results['timestamp']),
123-
vsx_results['publishedBy']['loginName'],
124-
vsx_results.get('license', None),
125-
ms_repo
126-
))
127-
elif response.status_code == 404:
128-
csv_file.write("%s, %s, %s, %s, %s, %s, , , , %s, %s\n" % (
129-
ms_publisher_name,
130-
ms_extension_name,
131-
ms_display_name,
132-
ms_pricing,
133-
ms_latest_version,
134-
convert_date_str(ms_last_updated),
135-
vsx_results.get('license', None),
136-
ms_repo
137-
))
138-
139-
else:
140-
print(response.status_code)
141-
print(response.content)
142-
response.raise_for_status()
143-
144-
# Output JSON File
145-
json_file = open(JSON_FILE_NAME, 'w')
146-
json_file.write(json.dumps(all_extensions, indent=4))
147-
json_file.close()
91+
vsx_results = response.json()
92+
extensions = vsx_results['results'][0]['extensions']
93+
all_extensions = all_extensions + extensions
94+
for extension in extensions:
95+
versions = extension['versions']
96+
total_all_versions += len(versions)
97+
total = vsx_results['results'][0]['resultMetadata'][0]['metadataItems'][0]['count']
98+
print('Retrieved %s of %s MS Marketplace extensions. %s total versions.' % (len(all_extensions), total, total_all_versions))
99+
if len(all_extensions) == total:
100+
break
101+
else:
102+
get_all_extensions_payload['filters'][0]['pageNumber'] = get_all_extensions_payload['filters'][0]['pageNumber'] + 1
148103

104+
# Output CSV File
105+
csv_file = open(CSV_FILE_NAME, 'w')
106+
csv_file.write("MS Publisher (Namespace), MS Extension, MS DisplayName, MS Pricing, MS Version, MS Date, VSX Version, VSX Date, VSX Publisher, VSX License, Repo\n")
107+
for ext in extensions:
108+
print("%s.%s" % (ext['publisher']['publisherName'], ext['extensionName']))
109+
ms_extension_name, ms_publisher_name, ms_display_name, ms_latest_version, ms_last_updated, ms_repo, ms_pricing = get_ms_info(ext)
110+
vsx_extension_url = '%s/%s/%s' % (VSX_API, ms_publisher_name, ms_extension_name)
111+
response = requests.get(vsx_extension_url)
112+
if response.status_code == 200:
113+
vsx_results = response.json()
114+
csv_file.write("%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s\n" % (
115+
ms_publisher_name,
116+
ms_extension_name,
117+
ms_display_name,
118+
ms_pricing,
119+
ms_latest_version,
120+
convert_date_str(ms_last_updated),
121+
vsx_results['version'],
122+
convert_date_str(vsx_results['timestamp']),
123+
vsx_results['publishedBy']['loginName'],
124+
vsx_results.get('license', None),
125+
ms_repo
126+
))
127+
elif response.status_code == 404:
128+
csv_file.write("%s, %s, %s, %s, %s, %s, , , , %s, %s\n" % (
129+
ms_publisher_name,
130+
ms_extension_name,
131+
ms_display_name,
132+
ms_pricing,
133+
ms_latest_version,
134+
convert_date_str(ms_last_updated),
135+
vsx_results.get('license', None),
136+
ms_repo
137+
))
149138

150-
except Exception as e:
151-
print('Error: %s' % e)
152-
print(traceback.print_stack())
139+
else:
140+
print(response.status_code)
141+
print(response.content)
142+
response.raise_for_status()
143+
144+
# Output JSON File
145+
json_file = open(JSON_FILE_NAME, 'w')
146+
json_file.write(json.dumps(all_extensions, indent=4))
147+
json_file.close()
148+
except Exception as e:
149+
print('Error: %s' % e)
150+
traceback.print_stack()

0 commit comments

Comments
 (0)