Class: RubyPyMill::Runner

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_pymill.rb

Instance Method Summary collapse

Constructor Details

#initialize(kernel: "rpymill", cwd: nil, logger: $stdout, cell_tags: []) ⇒ Runner



11
12
13
14
15
16
# File 'lib/ruby_pymill.rb', line 11

def initialize(kernel: "rpymill", cwd: nil, logger: $stdout, cell_tags: [])
  @kernel    = kernel
  @cwd       = cwd
  @logger    = logger
  @cell_tags = normalize_tags(cell_tags)  # ← 文字列/配列どちらでもOKに
end

Instance Method Details

#run(input_ipynb:, output_ipynb:, params_json: nil, kernel: nil, dry_run: false, cell_tags: nil) ⇒ Object

params_json: path to json file or JSON string cell_tags : initialize の指定を上書き可能(カンマ/空白区切り文字列 or 配列)



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/ruby_pymill.rb', line 20

def run(input_ipynb:, output_ipynb:, params_json: nil, kernel: nil, dry_run: false, cell_tags: nil)
  k    = kernel || @kernel
  tags = normalize_tags(cell_tags.nil? ? @cell_tags : cell_tags)  # ← 正規化して複数タグ対応

  # 1) タグ指定があればノートを事前フィルタ
  filtered_input = tags.empty? ? input_ipynb : filter_by_tags(input_ipynb, tags)

  # 2) papermill コマンドを組み立て
  args = ["papermill", filtered_input, output_ipynb, "-k", k]

  if params_json
    if File.exist?(params_json)
      args += ["-f", params_json]
    else
      tmpdir = Dir.mktmpdir("rpymill_params")
      tmp    = File.join(tmpdir, "params.json")
      File.write(tmp, params_json)
      args += ["-f", tmp]
    end
  end

  cmd = args.join(" ")
  @logger.puts "[RubyPyMill] #{dry_run ? 'DRY' : 'RUN'}: #{cmd}"
  return true if dry_run

  stdout_str, stderr_str, status = Open3.capture3(cmd, chdir: @cwd || Dir.pwd)
  @logger.puts stdout_str unless stdout_str.empty?
  @logger.puts stderr_str unless stderr_str.empty?
  status.success?
end