Skip to content

Commit a174518

Browse files
author
mattRedBox
committed
Merge branch 'release/1.2.4-beta'
2 parents 37aff73 + e380003 commit a174518

File tree

5 files changed

+939
-868
lines changed

5 files changed

+939
-868
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121

2222

23+
2324
[![Unit Test Coverage Status](https://coveralls.io/repos/github/qcif/data-curator/badge.svg?branch=ci)](https://coveralls.io/github/qcif/data-curator?branch=ci)
2425
[![Github All Releases](https://img.shields.io/github/downloads/qcif/data-curator/total.svg)](https://github.com/qcif/data-curator/releases)
2526
[![Github Releases](https://img.shields.io/github/downloads/qcif/data-curator/latest/total.svg?label=Latest%20version%20downloads)](https://github.com/qcif/data-curator/releases/latest)

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "DataCurator",
3-
"version": "1.2.3-beta",
3+
"version": "1.2.4-beta",
44
"author": " <[email protected]>",
55
"description": "Data Curator is a simple desktop CSV editor to help describe, validate and share usable open data",
66
"license": "MIT",

src/renderer/frictionlessDataPackage.js

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@ import tabStore from '@/store/modules/tabs.js'
44
import hotStore from '@/store/modules/hots.js'
55
import path from 'path'
66
import { createJsonFile, createZipFile } from '@/exportPackage.js'
7-
import { getValidNames, hasAllColumnNames } from '@/frictionlessUtilities.js'
7+
import {
8+
getValidNames,
9+
hasAllColumnNames,
10+
addErrorCauseToMessage,
11+
handleFrictionlessError
12+
} from './frictionlessUtilities'
813
import _ from 'lodash'
914

1015
export async function createDataPackageAsZippedResources () {
@@ -25,26 +30,36 @@ export async function createDataPackage (postCreateFunc) {
2530
try {
2631
let dataPackage = await buildDataPackage(errorMessages)
2732
if (_.isEmpty(errorMessages) && dataPackage) {
28-
dataPackage.commit()
33+
commitPackage(dataPackage)
2934
if (dataPackage.valid) {
3035
postCreateFunc(dataPackage.descriptor)
3136
} else {
3237
errorMessages.push('There is a problem with at least 1 package property. Please check and try again.')
3338
}
3439
}
3540
} catch (err) {
36-
console.error('There was an error creating the data package.', err)
41+
let errorMessage = 'There was an error creating the data package.'
42+
errorMessages.push(addErrorCauseToMessage(err, errorMessage))
43+
console.error(errorMessage, err)
3744
}
3845
return errorMessages
3946
}
4047

48+
export function commitPackage (dataPackage) {
49+
try {
50+
dataPackage.commit()
51+
} catch (err) {
52+
handleFrictionlessError(err)
53+
}
54+
}
55+
4156
export function haveAllTabsGotFilenames () {
4257
return tabStore.getters.getTabFilenames(tabStore.state).length === tabStore.state.tabs.length
4358
}
4459

4560
async function buildDataPackage (errorMessages) {
4661
auditPackageRequirements(errorMessages)
47-
let dataPackage = await initPackage()
62+
let dataPackage = await Package.load()
4863
await buildAllResourcesForDataPackage(dataPackage, errorMessages)
4964
// adding package properties for validation only
5065
addPackageProperties(dataPackage.descriptor)
@@ -69,11 +84,6 @@ function auditPackageRequirements (requiredMessages) {
6984
}
7085
}
7186

72-
async function initPackage () {
73-
const dataPackage = await Package.load()
74-
return dataPackage
75-
}
76-
7787
function addPackageProperties (descriptor) {
7888
let packageProperties = _.cloneDeep(hotStore.state.packageProperties)
7989
_.merge(descriptor, packageProperties)
@@ -98,7 +108,9 @@ async function buildAllResourcesForDataPackage (dataPackage, errorMessages) {
98108
resourcePaths.push(resource.descriptor.path)
99109
dataPackage.addResource(resource.descriptor)
100110
} catch (err) {
101-
console.error('There was an error creating a resource.', err)
111+
let errorMessage = 'There was an error creating a resource.'
112+
errorMessages.push(addErrorCauseToMessage(err, errorMessage))
113+
console.error(errorMessage, err)
102114
break
103115
}
104116
}

src/renderer/frictionlessUtilities.js

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
import store from '@/store/modules/hots.js'
22
import { DEFAULT_DIALECT } from 'datapackage/lib/config.js'
3+
import { TableSchemaError } from 'datapackage'
4+
import _ from 'lodash'
5+
6+
const errorMatchMappings = [
7+
{
8+
errorClass: TableSchemaError,
9+
messagePatterns: [/Tabular format.*tsv.*is not supported/gi]
10+
}
11+
]
312

413
export function includeHeadersInData (hot) {
514
let allData = hot.getData()
@@ -44,3 +53,52 @@ export function isCaseSensitive (hotId) {
4453
}
4554
return caseSensitiveHeader
4655
}
56+
57+
export function handleFrictionlessError (error) {
58+
if (!isErrorWhitelisted(error)) {
59+
throw error
60+
} else {
61+
console.warn('Recovered from frictionless library problem.', error)
62+
}
63+
}
64+
65+
export function isErrorWhitelisted (error) {
66+
let isWhiteListed = false
67+
let extraErrorMessage = extractMessageFromFrictionlessError(error)
68+
if (!_.isEmpty(extraErrorMessage)) {
69+
_.each(errorMatchMappings, function (next) {
70+
if (error instanceof next.errorClass) {
71+
for (const messagePattern of next.messagePatterns) {
72+
let indexFound = extraErrorMessage.search(messagePattern)
73+
if (indexFound > -1) {
74+
isWhiteListed = true
75+
break
76+
}
77+
}
78+
}
79+
})
80+
}
81+
return isWhiteListed
82+
}
83+
84+
export function addErrorCauseToMessage (error, errorMessage) {
85+
let errorCauseMessage = extractMessageFromFrictionlessError(error)
86+
return addExtraToErrorMessage(errorCauseMessage, errorMessage)
87+
}
88+
89+
export function extractMessageFromFrictionlessError (error) {
90+
let errorMessage = _.trim(_.get(error, 'message', ''))
91+
if (_.isEmpty(errorMessage)) {
92+
if (_.isArray(error) && !_.isEmpty(error)) {
93+
errorMessage = _.trim(_.get(error[0], 'message', ''))
94+
}
95+
}
96+
return errorMessage
97+
}
98+
99+
export function addExtraToErrorMessage (extraMessage, errorMessage) {
100+
if (!_.isEmpty(_.trim(extraMessage))) {
101+
errorMessage = `${errorMessage}\n (${extraMessage})`
102+
}
103+
return errorMessage
104+
}

0 commit comments

Comments
 (0)