Module: A2KM

Defined in:
lib/a2km/version.rb,
lib/a2km/api.rb,
lib/a2km/env.rb,
lib/a2km/command.rb

Overview

Copyright Min RK, License: BSD 3-clause

Defined Under Namespace

Modules: ENV_UTILS Classes: CLI

Constant Summary collapse

VERSION =
'0.0.7'

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.get_kernel(name) ⇒ Object



30
31
32
33
34
35
36
37
38
# File 'lib/a2km/api.rb', line 30

def A2KM.get_kernel(name)
  "Get a kernel by name. Die with message if not found."
  if not kernels.has_key? name
    STDERR.puts "No such kernel: #{name}"
    STDERR.puts "Found kernels: #{kernels.keys.sort.join(' ')}"
    exit(-1)
  end
  kernels[name]
end

.get_kernel_json(name) ⇒ Object



46
47
48
49
50
51
# File 'lib/a2km/api.rb', line 46

def A2KM.get_kernel_json(name)
  "Return kernel.json contents for a given kernelspec"
  File.open(kernel_json_path(name)) do |f|
    return JSON.parse f.read
  end
end

.kernel_dirsObject



19
20
21
22
23
24
# File 'lib/a2km/api.rb', line 19

def A2KM.kernel_dirs
  paths = JSON.parse `jupyter --paths --json`
  paths['data'].map do |p|
    p + '/' + 'kernels'
  end
end

.kernel_json_path(name) ⇒ Object



40
41
42
43
44
# File 'lib/a2km/api.rb', line 40

def A2KM.kernel_json_path(name)
  "Return path to a kernel's kernel.json"
  kernel = get_kernel(name)
  File.join(kernel['resource_dir'], 'kernel.json')
end

.kernelsObject



11
12
13
14
15
16
17
# File 'lib/a2km/api.rb', line 11

def A2KM.kernels
  if @kernels.nil?
    js = JSON.parse `jupyter kernelspec list --json`
    @kernels = js['kernelspecs']
  end
  @kernels
end

.make_env_kernel(kernel_name, env_name, kind: 'conda', user: true) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/a2km/env.rb', line 80

def self.make_env_kernel(kernel_name, env_name, kind: 'conda', user: true)
  v = ENV_UTILS.ipykernel_version(env_name, kind: kind)
  
  puts "Found ipykernel-#{v}"
  if user
    user_arg = '--user'
  else
    user_arg = ''
  end
  
  ENV_UTILS.in_env(env_name, "python -m ipykernel.kernelspec --name #{kernel_name} #{user_arg}", kind: kind)
  exe = ENV_UTILS.make_kernel_exe(kernel_name, env_name, kind: kind)
  
  spec = A2KM.get_kernel_json(kernel_name)
  spec['argv'] = [exe, '-f', '{connection_file}']
  spec['display_name'] = "#{spec['display_name']} (#{kind}:#{env_name})"
  A2KM.save_kernel_json(kernel_name, spec)
  
end

.runObject

Start the a2km entrypoint



13
14
15
# File 'lib/a2km/command.rb', line 13

def A2KM.run
  CLI.new.run
end

.save_kernel_json(name, data) ⇒ Object



53
54
55
56
57
58
# File 'lib/a2km/api.rb', line 53

def A2KM.save_kernel_json(name, data)
  "save new kernel JSON"
  File.open(kernel_json_path(name), 'w') do |f|
    f.write JSON.pretty_generate(data)
  end
end

.user_kernel_dirObject



26
27
28
# File 'lib/a2km/api.rb', line 26

def A2KM.user_kernel_dir
  kernel_dirs.first
end

Instance Method Details

#initializeObject



7
8
9
# File 'lib/a2km/api.rb', line 7

def initialize
  @kernels = nil
end