From 835b232cbf5227a357a3a2e11b9d1641c39ace99 Mon Sep 17 00:00:00 2001 From: Declan Kelly Date: Wed, 18 Sep 2019 10:12:10 -0700 Subject: [PATCH 1/3] Add test for metadata in kernelspec model --- tests/test-services/src/kernel/kernel.spec.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/test-services/src/kernel/kernel.spec.ts b/tests/test-services/src/kernel/kernel.spec.ts index c67df74c3ad8..8b589fe8d138 100644 --- a/tests/test-services/src/kernel/kernel.spec.ts +++ b/tests/test-services/src/kernel/kernel.spec.ts @@ -298,5 +298,23 @@ describe('kernel', () => { const promise = Kernel.getSpecs(serverSettings); await expectFailure(promise, 'Invalid response: 201 Created'); }); + + it('should handle metadata', async () => { + const PYTHON_SPEC_W_MD = JSON.parse(JSON.stringify(PYTHON_SPEC)); + PYTHON_SPEC_W_MD.spec.metadata = { some_application: { key: 'value' } }; + const serverSettings = getRequestHandler(200, { + default: 'python', + kernelspecs: { python: PYTHON_SPEC_W_MD } + }); + const specs = await Kernel.getSpecs(serverSettings); + + expect(specs.kernelspecs['python']).to.have.property('metadata'); + const metadata = specs.kernelspecs['python'].metadata; + expect(metadata).to.have.property('some_application'); + expect((metadata as any).some_application).to.have.property( + 'key', + 'value' + ); + }); }); }); From 72a4f5fe19c194ed2543d7f88af3b289006f99dd Mon Sep 17 00:00:00 2001 From: Declan Kelly Date: Wed, 18 Sep 2019 11:06:30 -0700 Subject: [PATCH 2/3] Added metadata to spec model & validate --- packages/services/src/kernel/kernel.ts | 5 +++++ packages/services/src/kernel/validate.ts | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/services/src/kernel/kernel.ts b/packages/services/src/kernel/kernel.ts index 148e0c01c3b9..9164ef5381a8 100644 --- a/packages/services/src/kernel/kernel.ts +++ b/packages/services/src/kernel/kernel.ts @@ -1061,6 +1061,11 @@ export namespace Kernel { * A mapping of resource file name to download path. */ readonly resources: { [key: string]: string }; + + /** + * A dictionary of additional attributes about this kernel; used by clients to aid in kernel selection. + */ + readonly metadata?: JSONObject; } /** diff --git a/packages/services/src/kernel/validate.ts b/packages/services/src/kernel/validate.ts index c92d9c546947..d573ce4fff22 100644 --- a/packages/services/src/kernel/validate.ts +++ b/packages/services/src/kernel/validate.ts @@ -120,12 +120,19 @@ export function validateSpecModel(data: any): Kernel.ISpecModel { validateProperty(spec, 'language', 'string'); validateProperty(spec, 'display_name', 'string'); validateProperty(spec, 'argv', 'array'); + + let metadata: any = null; + if (spec.hasOwnProperty('metadata')) { + validateProperty(spec, 'metadata', 'object'); + metadata = spec.metadata; + } return { name: data.name, resources: data.resources, language: spec.language, display_name: spec.display_name, - argv: spec.argv + argv: spec.argv, + metadata }; } From 5de6609cbadcc63c9a70e51ac5e6ee737819a65c Mon Sep 17 00:00:00 2001 From: Declan Kelly Date: Wed, 18 Sep 2019 11:08:58 -0700 Subject: [PATCH 3/3] Add env validate and test --- packages/services/src/kernel/validate.ts | 9 ++++++++- tests/test-services/src/kernel/kernel.spec.ts | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/packages/services/src/kernel/validate.ts b/packages/services/src/kernel/validate.ts index d573ce4fff22..a728a165d8e5 100644 --- a/packages/services/src/kernel/validate.ts +++ b/packages/services/src/kernel/validate.ts @@ -126,13 +126,20 @@ export function validateSpecModel(data: any): Kernel.ISpecModel { validateProperty(spec, 'metadata', 'object'); metadata = spec.metadata; } + + let env: any = null; + if (spec.hasOwnProperty('env')) { + validateProperty(spec, 'env', 'object'); + env = spec.env; + } return { name: data.name, resources: data.resources, language: spec.language, display_name: spec.display_name, argv: spec.argv, - metadata + metadata, + env }; } diff --git a/tests/test-services/src/kernel/kernel.spec.ts b/tests/test-services/src/kernel/kernel.spec.ts index 8b589fe8d138..a8d3a29d6785 100644 --- a/tests/test-services/src/kernel/kernel.spec.ts +++ b/tests/test-services/src/kernel/kernel.spec.ts @@ -316,5 +316,23 @@ describe('kernel', () => { 'value' ); }); + + it('should handle env values', async () => { + const PYTHON_SPEC_W_ENV = JSON.parse(JSON.stringify(PYTHON_SPEC)); + PYTHON_SPEC_W_ENV.spec.env = { + SOME_ENV: 'some_value', + LANG: 'en_US.UTF-8' + }; + const serverSettings = getRequestHandler(200, { + default: 'python', + kernelspecs: { python: PYTHON_SPEC_W_ENV } + }); + const specs = await Kernel.getSpecs(serverSettings); + + expect(specs.kernelspecs['python']).to.have.property('env'); + const env = specs.kernelspecs['python'].env; + expect(env).to.have.property('SOME_ENV', 'some_value'); + expect(env).to.have.property('LANG', 'en_US.UTF-8'); + }); }); });