Skip to content

Commit

Permalink
Merge branch 'feature/int-types' into 'master'
Browse files Browse the repository at this point in the history
Feature/int types

Closes #162

See merge request b650/Deep-Lynx!131
  • Loading branch information
DnOberon committed Nov 30, 2021
2 parents d801820 + 4757314 commit beaaaf0
Show file tree
Hide file tree
Showing 11 changed files with 57 additions and 24 deletions.
10 changes: 10 additions & 0 deletions API Documentation/Core.swagger_collection.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6502,6 +6502,16 @@ components:
type: object
config:
$ref: '#/components/schemas/TaskConfig'
status_message:
type: string
created_at:
type: string
modified_at:
type: string
created_by:
type: string
modified_by:
type: string
TaskConfig:
title: TaskConfig
type: object
Expand Down
2 changes: 1 addition & 1 deletion AdminWebApp/src/components/createMetatypeKeyDialog.vue
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ export default class CreateMetatypeKeyDialog extends Vue {
dialog = false
formValid = false
metatypeKey: MetatypeKeyT = {validation: {regex: "", min: 0, max: 0}, required: false} as MetatypeKeyT
dataTypes = ["number", "date", "string", "boolean", "enumeration", "file"]
dataTypes = ["number", "number64", "float", "float64", "date", "string", "boolean", "enumeration", "file"]
booleanOptions = [true, false]
@Watch('dialog', {immediate: true})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ export default class CreateMetatypeRelationshipKeyDialog extends Vue {
dialog = false
formValid = false
metatypeRelationshipKey: MetatypeRelationshipKeyT = {validation: {regex: "", min: 0, max: 0}, required: false} as MetatypeRelationshipKeyT
dataTypes = ["number", "date", "string", "boolean", "enumeration", "file"]
dataTypes = ["number", "number64", "float", "float64", "date", "string", "boolean", "enumeration", "file"]
booleanOptions = [true, false]
@Watch('dialog', {immediate: true})
Expand Down
2 changes: 1 addition & 1 deletion AdminWebApp/src/components/editMetatypeKeyDialog.vue
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ export default class EditMetatypeKeyDialog extends Vue {
dialog = false
formValid = false
selectedMetatypeKey: MetatypeKeyT | null = null
dataTypes = ["number", "date", "string", "boolean", "enumeration", "file"]
dataTypes = ["number", "number64", "float", "float64", "date", "string", "boolean", "enumeration", "file"]
booleanOptions = [true, false]
@Watch('dialog', {immediate: true})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ export default class EditMetatypeRelationshipKeyDialog extends Vue {
dialog = false
formValid = false
selectedMetatypeRelationshipKey: MetatypeRelationshipKeyT | null = null
dataTypes = ["number", "date", "string", "boolean", "enumeration", "file"]
dataTypes = ["number", "number64", "float", "float64", "date", "string", "boolean", "enumeration", "file"]
booleanOptions = [true, false]
@Watch('dialog', {immediate: true})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,22 +56,22 @@ export default class ContainerImport {
if (!['string', 'number', 'boolean', 'date', 'enumeration', 'file'].includes(target) && !regex.test(target)) {
switch (target) {
case 'integer':
target = 'number';
target = 'number64';
break;
case 'int':
target = 'number';
target = 'number64';
break;
case 'decimal':
target = 'number';
target = 'float64';
break;
case 'float':
target = 'number';
target = 'float';
break;
case 'double':
target = 'number';
target = 'float64';
break;
case 'rational':
target = 'number';
target = 'float64';
break;
case 'dateTimeStamp':
target = 'date';
Expand Down Expand Up @@ -288,8 +288,9 @@ export default class ContainerImport {
target = dataRange; // This contains the class or datatype with a cardinality
target = this.ValidateTarget(target);

// Determine if primitive or relationship property
const regex = new RegExp('[1-9:-]');
// Determine if primitive or relationship property by looking for :
// This will indicate that the target is another class (e.g. ontologyName:0001)
const regex = new RegExp('[:-]');
if (regex.test(target)) {
// The target is an identifier for another class
propertyType = 'relationship';
Expand Down
25 changes: 24 additions & 1 deletion src/domain_objects/data_warehouse/etl/type_transformation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -653,7 +653,7 @@ export default class TypeTransformation extends BaseDomainClass {
return null;
}

const convertedValue = parseFloat(value);
const convertedValue = parseInt(value, 10);
if (isNaN(convertedValue)) {
return new Conversion({original_value: value, errors: 'unable to convert value to number'});
}
Expand All @@ -663,6 +663,29 @@ export default class TypeTransformation extends BaseDomainClass {
: new Conversion({original_value: value, converted_value: convertedValue});
}

case 'float': {
if (typeof value === 'number') {
return null;
}

const convertedValue = parseFloat(value);
if (isNaN(convertedValue)) {
return new Conversion({original_value: value, errors: 'unable to convert value to float'});
}

return convertedValue % 1 === 0
? new Conversion({original_value: value, converted_value: Math.floor(convertedValue)})
: new Conversion({original_value: value, converted_value: convertedValue});
}

case 'number64' || 'float64': {
if (typeof value === 'string') {
return null;
}

return new Conversion({original_value: value, converted_value: String(value)});
}

// because dates can be formatted in various ways, all we can really do for conversion is to
// set it to string - Deep Lynx only checks to see if dates are strings currently
case 'date': {
Expand Down
2 changes: 1 addition & 1 deletion src/domain_objects/data_warehouse/ontology/metatype_key.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export default class MetatypeKey extends BaseDomainClass {

@IsNotEmpty()
@IsString()
@IsIn(['number', 'date', 'string', 'boolean', 'enumeration', 'file', 'list', 'unknown'])
@IsIn(['number', 'number64', 'float', 'float64', 'date', 'string', 'boolean', 'enumeration', 'file', 'list', 'unknown'])
data_type = 'unknown';

@IsBoolean()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export default class MetatypeRelationshipKey extends BaseDomainClass {

@IsNotEmpty()
@IsString()
@IsIn(['number', 'date', 'string', 'boolean', 'enumeration', 'file', 'list', 'unknown'])
@IsIn(['number', 'number64', 'float', 'float64', 'date', 'string', 'boolean', 'enumeration', 'file', 'list', 'unknown'])
data_type = 'unknown';

@IsBoolean()
Expand Down
16 changes: 8 additions & 8 deletions src/tests/data_warehouse/etl/type_transformation_mapper.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -298,8 +298,8 @@ describe('A Data Type Mapping Transformation', async () => {
container_id: containerID,
name: faker.name.findName(),
description: faker.random.alphaNumeric(),
})
)
}),
);

expect(relationship.isError).false;
expect(relationship.value).not.empty;
Expand All @@ -313,9 +313,9 @@ describe('A Data Type Mapping Transformation', async () => {
origin_metatype: metatype.value.id!,
destination_metatype: metatype.value.id!,
relationship: relationship.value.id!,
relationship_type: 'many:many'
})
)
relationship_type: 'many:many',
}),
);

expect(relationshipPair.isError).false;
expect(relationshipPair.value).not.empty;
Expand Down Expand Up @@ -420,7 +420,7 @@ describe('A Data Type Mapping Transformation', async () => {
);

expect(updatedRelationshipTransformation.isError).false;
})
});

it('can fetch keys from payload using dot notation', async () => {
let value = TypeTransformation.getNestedValue('car.id', test_payload[0]);
Expand Down Expand Up @@ -461,11 +461,11 @@ describe('A Data Type Mapping Transformation', async () => {
expect(conversion?.errors).undefined;
expect(conversion?.converted_value).eq(1);

conversion = TypeTransformation.convertValue({data_type: 'number'} as MetatypeKey, '.02');
conversion = TypeTransformation.convertValue({data_type: 'float'} as MetatypeKey, '.02');
expect(conversion?.errors).undefined;
expect(conversion?.converted_value).eq(0.02);

conversion = TypeTransformation.convertValue({data_type: 'number'} as MetatypeKey, '5.600e-3');
conversion = TypeTransformation.convertValue({data_type: 'float'} as MetatypeKey, '5.600e-3');
expect(conversion?.errors).undefined;
expect(conversion?.converted_value).eq(0.0056);

Expand Down
1 change: 0 additions & 1 deletion src/tests/graphql/schema.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,6 @@ describe('The GraphQL Schema Generator', async () => {
expect((typeMap['Car'] as GraphQLObjectType).getFields()['id'].type).eq(GraphQLString);
expect((typeMap['Car'] as GraphQLObjectType).getFields()['name'].type).eq(GraphQLString);
expect((typeMap['Car'] as GraphQLObjectType).getFields()['drivers'].type.toString).eq(GraphQLList(GraphQLJSON).toString);
expect((typeMap['Car'] as GraphQLObjectType).getFields()['trim'].type.toString()).eq('Car-trim Enum Type');
// check the enum values
const values = ((typeMap['Car'] as GraphQLObjectType).getFields()['trim'].type as GraphQLEnumType).getValues();
expect(values.length).eq(2);
Expand Down

0 comments on commit beaaaf0

Please sign in to comment.