Skip to content

Commit ae9bbd4

Browse files
committed
improve error display on early errors
1 parent 61fb996 commit ae9bbd4

File tree

3 files changed

+47
-25
lines changed

3 files changed

+47
-25
lines changed

backend/maelstro/core/copy_manager.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -114,18 +114,20 @@ def copy_preview(
114114
for layer in layers.values():
115115
styles.update(self.get_styles_from_layer(layer).keys())
116116

117-
preview["geoserver_resources"].append(
118-
{
119-
"src": server_url,
120-
"dst": dst_gs_url,
121-
"layers": (
122-
[str(layer_name) for layer_name in layer_names]
123-
if self.include_layers
124-
else []
125-
),
126-
"styles": list(styles) if self.include_styles else [],
127-
}
128-
)
117+
if layer_names or styles:
118+
# only output servers where some layers or styles have been identified
119+
preview["geoserver_resources"].append(
120+
{
121+
"src": server_url,
122+
"dst": dst_gs_url,
123+
"layers": (
124+
[str(layer_name) for layer_name in layer_names]
125+
if self.include_layers
126+
else []
127+
),
128+
"styles": list(styles) if self.include_styles else [],
129+
}
130+
)
129131

130132
return CopyPreview(**preview) # type: ignore
131133

frontend/src/services/synchronize.service.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,15 @@ export type CopyPreviewGeoserver = {
2828
}
2929

3030
export type CopyPreview = {
31-
geonetwork_resources: CopyPreviewGeonetwork[]
32-
geoserver_resources: CopyPreviewGeoserver[]
31+
geonetwork_resources?: CopyPreviewGeonetwork[]
32+
geoserver_resources?: CopyPreviewGeoserver[]
33+
info?: string
34+
operations?: LogDetail[]
35+
}
36+
37+
export type CopyResponse = {
38+
info: string
39+
operations: LogDetail[]
3340
}
3441

3542
function toSynchronizeParams(params: SynchronizeParams): URLSearchParams {
@@ -47,14 +54,14 @@ export const synchronizeService = {
4754
return await response.json()
4855
},
4956

50-
async synchronize(params: SynchronizeParams): Promise<LogDetail[]> {
57+
async synchronize(params: SynchronizeParams): Promise<CopyResponse> {
5158
const response = await fetch('/maelstro-backend/copy?' + toSynchronizeParams(params), {
5259
method: 'PUT',
5360
headers: {
5461
Accept: 'application/json',
5562
'Content-Type': 'application/json',
5663
},
5764
})
58-
return (await response.json()).operations
65+
return await response.json()
5966
},
6067
}

frontend/src/views/FormView.vue

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<script setup lang="ts">
22
import LogsReport from '@/components/LogsReport.vue'
33
import type { SearchResult } from '@/services/geonetworkSearch.service'
4-
import type { LogDetail } from '@/services/logs.service'
54
import {
65
synchronizeService,
76
type CopyPreview,
7+
type CopyResponse,
88
type SynchronizeParams,
99
} from '@/services/synchronize.service'
1010
import { useConfigStore } from '@/stores/config.store'
@@ -57,7 +57,7 @@ const copyPreview = ref<CopyPreview>({
5757
geoserver_resources: [],
5858
})
5959
60-
const logs = ref<LogDetail[]>([])
60+
const copyResponse = ref<CopyResponse>({})
6161
6262
const synchronizeParams = computed(
6363
() =>
@@ -98,14 +98,16 @@ const confirm = async () => {
9898
} as unknown as SynchronizeParams
9999
100100
try {
101-
logs.value = await synchronizeService.synchronize(params)
101+
copyResponse.value = await synchronizeService.synchronize(params)
102102
} catch (error) {
103103
console.error(error)
104104
} finally {
105105
isRunning.value = false
106106
}
107107
}
108108
109+
const logs = computed(() => copyPreview.value.operations || copyResponse.value.operations || [])
110+
109111
const backToForm = () => {
110112
confirmation.value = false
111113
logs.value = []
@@ -124,12 +126,13 @@ const metaFailed = computed(() => metaLogs.value.some((l) => l.status != 'OK'))
124126
const layerFailed = computed(() => layerLogs.value.some((l) => l.status != 'OK'))
125127
const styleFailed = computed(() => styleLogs.value.some((l) => l.status != 'OK'))
126128
127-
const hasMeta = computed(() => copyPreview.value.geonetwork_resources.some((gn) => gn.metadata.length > 0))
128-
const hasLayers = computed(() => copyPreview.value.geoserver_resources.some((gs) => gs.layers.length > 0))
129-
const hasStyles = computed(() => copyPreview.value.geoserver_resources.some((gs) => gs.styles.length > 0))
129+
const hasMeta = computed(() => copyPreview.value.geonetwork_resources?.some((gn) => gn.metadata.length > 0))
130+
const hasLayers = computed(() => copyPreview.value.geoserver_resources?.some((gs) => gs.layers.length > 0))
131+
const hasStyles = computed(() => copyPreview.value.geoserver_resources?.some((gs) => gs.styles.length > 0))
130132
131133
const success = computed(() => (
132-
(!hasMeta.value || metaSuccessful.value)
134+
(metaSuccessful.value || layerSuccessful.value || styleSuccessful.value)
135+
&& (!hasMeta.value || metaSuccessful.value)
133136
&& (!hasLayers.value || layerSuccessful.value)
134137
&& (!hasStyles.value || styleSuccessful.value)
135138
))
@@ -220,7 +223,7 @@ const success = computed(() => (
220223

221224
<div
222225
class="mt-4 p-4 border rounded shadow"
223-
v-for="(geonetwork, index) in copyPreview.geonetwork_resources"
226+
v-for="(geonetwork, index) in copyPreview.geonetwork_resources || []"
224227
:key="index"
225228
>
226229
<div class="my-1">{{ $t('Source:') }} {{ geonetwork.src }}</div>
@@ -240,7 +243,7 @@ const success = computed(() => (
240243

241244
<div
242245
class="mt-4 p-4 border rounded shadow"
243-
v-for="(server, index) in copyPreview.geoserver_resources"
246+
v-for="(server, index) in copyPreview.geoserver_resources || []"
244247
:key="index"
245248
>
246249
<div class="my-1">{{ $t('Source:') }} {{ server.src }}</div>
@@ -281,6 +284,16 @@ const success = computed(() => (
281284
<template #header>
282285
<div class="my-1">{{ success ? $t('Success') + ' ✅' : $t('Failure') + ' ❌' }}</div>
283286
</template>
287+
<div v-if="!success">
288+
<div v-if="copyPreview.info.err">
289+
{{ copyPreview.info.err }} [{{ copyPreview.info.status_code }}]<br>
290+
{{ copyPreview.info.server }}
291+
</div>
292+
<div v-else>
293+
{{ copyResponse.info.err }} [{{ copyResponse.info.status_code }}]<br>
294+
{{ copyResponse.info.server }}
295+
</div>
296+
</div>
284297
<LogsReport :logs="logs"></LogsReport>
285298
</Panel>
286299
</div>

0 commit comments

Comments
 (0)