Skip to content

Commit 24daae5

Browse files
authored
Skip packages API call for incomplete content (#226)
* Skip packages API call for incomplete content * Update manifest checksums
1 parent 86d48b6 commit 24daae5

File tree

6 files changed

+45
-6
lines changed

6 files changed

+45
-6
lines changed

extensions/package-vulnerability-scanner/manifest.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@
2020
},
2121
"packages": {},
2222
"files": {
23-
"dist/assets/index-BeB0Q4U9.js": {
24-
"checksum": "eec48b7aef372e410f6eddb398ec9b53"
25-
},
2623
"dist/assets/index-C-y7BWfk.css": {
2724
"checksum": "9c79124c79ef1f350c8af2a925a7f4ad"
2825
},
26+
"dist/assets/index-CIpfqLN8.js": {
27+
"checksum": "f39ee65bd9c1a23d4b5babf37e39683f"
28+
},
2929
"dist/index.html": {
30-
"checksum": "a555313182523439d7b4001d392385af"
30+
"checksum": "13d888e5f1a3a3c9953e1099082a9d48"
3131
},
3232
"main.py": {
3333
"checksum": "f8385dbd8a8cd24204f1eb6209f8bb30"

extensions/package-vulnerability-scanner/src/components/ContentCard.vue

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const props = defineProps<{
1515
py_version?: string;
1616
r_version?: string;
1717
quarto_version?: string;
18+
bundle_id?: string | null;
1819
};
1920
}>();
2021
@@ -35,6 +36,7 @@ const hasError = computed(
3536
const packageCount = computed(
3637
() => packagesStore.contentItems[props.content.guid]?.packages.length || 0,
3738
);
39+
const isIncomplete = computed(() => props.content.bundle_id === null);
3840
3941
// Count vulnerable packages in this content item
4042
function countVulnerablePackages(): number {
@@ -117,6 +119,9 @@ function handleClick() {
117119
<span v-if="packageCount > 0" class="text-gray-600">
118120
{{ packageCount }} packages
119121
</span>
122+
<span v-else-if="isIncomplete" class="text-red-700">
123+
Incomplete content
124+
</span>
120125
<span v-else-if="hasError" class="text-red-700">
121126
Error loading packages
122127
</span>

extensions/package-vulnerability-scanner/src/components/ContentList.vue

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ async function fetchPackagesInBatches(batchSize = 3) {
2121
2222
// Fetch packages for this batch in parallel
2323
const fetchPromises = batch.map(async (content) => {
24+
if (content.bundle_id === null) {
25+
packagesStore.setPackagesForContent(
26+
content.guid,
27+
[],
28+
new Error("This content has not been fully deployed."),
29+
);
30+
return;
31+
}
2432
try {
2533
return await packagesStore.fetchPackagesForContent(content.guid);
2634
} catch (err) {

extensions/package-vulnerability-scanner/src/components/VulnerabilityChecker.vue

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,11 @@ const filteredPackages = computed((): PackageWithVulnsAndFix[] => {
148148
return packages.value;
149149
}
150150
});
151+
152+
const isIncomplete = computed(() => {
153+
const content = contentStore.currentContent;
154+
return content ? content.bundle_id === null : false;
155+
});
151156
</script>
152157

153158
<template>
@@ -198,7 +203,12 @@ const filteredPackages = computed((): PackageWithVulnsAndFix[] => {
198203
<!-- Loading state -->
199204
<LoadingSpinner v-if="isLoading" :message="loadingMessage" size="md" />
200205

201-
<!-- Error state -->
206+
<StatusMessage
207+
v-if="isIncomplete"
208+
type="error"
209+
message="This has not been fully deployed. Try publishing again."
210+
/>
211+
202212
<StatusMessage
203213
v-else-if="hasError"
204214
type="error"

extensions/package-vulnerability-scanner/src/stores/content.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export interface ContentListItem {
1313
py_version?: string;
1414
r_version?: string;
1515
quarto_version?: string;
16+
bundle_id?: string | null;
1617
}
1718

1819
export const useContentStore = defineStore("content", () => {

extensions/package-vulnerability-scanner/src/stores/packages.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ export const usePackagesStore = defineStore("packages", () => {
2525

2626
// Fetch packages for a specific content ID
2727
async function fetchPackagesForContent(contentId: string) {
28-
// Initialize or update the content item
2928
if (!contentItems.value[contentId]) {
3029
// Initialize content item
3130
contentItems.value[contentId] = {
@@ -65,6 +64,21 @@ export const usePackagesStore = defineStore("packages", () => {
6564
}
6665
}
6766

67+
function setPackagesForContent(
68+
guid: string,
69+
packages: Package[],
70+
error: Error | null = null,
71+
) {
72+
contentItems.value[guid] = {
73+
guid,
74+
packages,
75+
isLoading: false,
76+
error,
77+
isFetched: true,
78+
lastFetchTime: new Date(),
79+
};
80+
}
81+
6882
return {
6983
// State
7084
contentItems,
@@ -73,5 +87,6 @@ export const usePackagesStore = defineStore("packages", () => {
7387

7488
// Actions
7589
fetchPackagesForContent,
90+
setPackagesForContent,
7691
};
7792
});

0 commit comments

Comments
 (0)