Skip to content

Commit

Permalink
Merge pull request #7234 from meeseeksmachine/auto-backport-of-pr-722…
Browse files Browse the repository at this point in the history
…9-on-1.x

Backport PR #7229 on branch 1.x (Add kernelspec metadata)
  • Loading branch information
jasongrout committed Sep 18, 2019
2 parents aeb2fc0 + 99f2c3b commit 65619c4
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 1 deletion.
5 changes: 5 additions & 0 deletions packages/services/src/kernel/kernel.ts
Expand Up @@ -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;
}

/**
Expand Down
16 changes: 15 additions & 1 deletion packages/services/src/kernel/validate.ts
Expand Up @@ -120,12 +120,26 @@ 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;
}

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
argv: spec.argv,
metadata,
env
};
}

Expand Down
36 changes: 36 additions & 0 deletions tests/test-services/src/kernel/kernel.spec.ts
Expand Up @@ -298,5 +298,41 @@ 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'
);
});

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');
});
});
});

0 comments on commit 65619c4

Please sign in to comment.