Mercurial > gemma
comparison pkg/imports/sr.go @ 3748:4bb5dfa0b7e3
SR import: Accept TXT file for uploads.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 24 Jun 2019 16:28:12 +0200 |
parents | 879c297c47e9 |
children | 98d5dd2f0ca1 |
comparison
equal
deleted
inserted
replaced
3747:ad67e4286d65 | 3748:4bb5dfa0b7e3 |
---|---|
218 feedback Feedback, | 218 feedback Feedback, |
219 ) (interface{}, error) { | 219 ) (interface{}, error) { |
220 | 220 |
221 start := time.Now() | 221 start := time.Now() |
222 | 222 |
223 z, err := zip.OpenReader(filepath.Join(sr.Dir, "sr.zip")) | 223 zpath := filepath.Join(sr.Dir, "sr.zip") |
224 if err != nil { | 224 |
225 return nil, err | 225 z, err := zip.OpenReader(zpath) |
226 } | 226 if err != nil { |
227 defer z.Close() | 227 feedback.Warn("Expected ZIP file: %v", err) |
228 feedback.Warn("Falling back to TXT file mode.") | |
229 z = nil | |
230 } | |
231 if z != nil { | |
232 defer z.Close() | |
233 } | |
228 | 234 |
229 feedback.Info("Looking for 'meta.json'") | 235 feedback.Info("Looking for 'meta.json'") |
230 | 236 |
231 mf := common.FindInZIP(z, "meta.json") | 237 mf := common.FindInZIP(z, "meta.json") |
232 if mf == nil && !sr.completeOverride() { | 238 if mf == nil && !sr.completeOverride() { |
269 | 275 |
270 if err := m.Validate(ctx, conn); err != nil { | 276 if err := m.Validate(ctx, conn); err != nil { |
271 return nil, common.ToError(err) | 277 return nil, common.ToError(err) |
272 } | 278 } |
273 | 279 |
274 var xyzf *zip.File | 280 var xyz octree.MultiPointZ |
275 for _, ext := range []string{".xyz", ".txt"} { | 281 |
276 feedback.Info("Looking for '*%s'", ext) | 282 if z != nil { // Scanning ZIP file for *.xyz file. |
277 if xyzf = common.FindInZIP(z, ext); xyzf != nil { | 283 var xyzf *zip.File |
278 break | 284 for _, ext := range []string{".xyz", ".txt"} { |
279 } | 285 feedback.Info("Looking for '*%s'", ext) |
280 } | 286 if xyzf = common.FindInZIP(z, ext); xyzf != nil { |
281 if xyzf == nil { | 287 break |
282 return nil, errors.New("Cannot find any *.xyz or *.txt file") | 288 } |
283 } | 289 } |
284 | 290 if xyzf == nil { |
285 xyz, err := loadXYZ(xyzf, feedback, xform) | 291 return nil, errors.New("Cannot find any *.xyz or *.txt file") |
292 } | |
293 xyz, err = loadXYZ(xyzf, feedback, xform) | |
294 } else { // TXT file mode | |
295 xyz, err = loadXYZFile(zpath, feedback, xform) | |
296 } | |
286 if err != nil { | 297 if err != nil { |
287 return nil, err | 298 return nil, err |
288 } | 299 } |
289 | 300 |
290 if len(xyz) == 0 { | 301 if len(xyz) == 0 { |
756 } | 767 } |
757 defer r.Close() | 768 defer r.Close() |
758 return loadXYZReader(r, feedback, xform) | 769 return loadXYZReader(r, feedback, xform) |
759 } | 770 } |
760 | 771 |
772 func loadXYZFile(f string, feedback Feedback, xform vertexTransform) (octree.MultiPointZ, error) { | |
773 r, err := os.Open(f) | |
774 if err != nil { | |
775 return nil, err | |
776 } | |
777 defer r.Close() | |
778 return loadXYZReader(r, feedback, xform) | |
779 } | |
780 | |
761 func loadBoundary(z *zip.ReadCloser) (polygonSlice, error) { | 781 func loadBoundary(z *zip.ReadCloser) (polygonSlice, error) { |
762 shpF := common.FindInZIP(z, ".shp") | 782 shpF := common.FindInZIP(z, ".shp") |
763 if shpF == nil { | 783 if shpF == nil { |
764 return nil, nil | 784 return nil, nil |
765 } | 785 } |