waluigi 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: bf264e7bc60318ebd94e03ad6d630fa27a62fbbaa2fd72e06ffc9b57dc62b0da
4
+ data.tar.gz: 9bb762e54934d75a222a6147d4172fa09c35a2ce886599b79c8c98e40a6ecfd6
5
+ SHA512:
6
+ metadata.gz: 38cde6f98d7a0db0bc156cd977209786f1585e2c9ea9942a067bd1d99a18960885e3e3666c3bc8ef340ff6e2d6df3326ab01a83c7a546932106fe9cf0a72a4f6
7
+ data.tar.gz: 53560851fab48e3812c5986fc73f35633bb423bb273f877a776662cf9d4edf539dc391bcdd2b4006543a2ea5e13bbad9f877b9e862f2b6e505b8e20195630ad7
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'waluigi'
4
+ load './Tasksfile'
5
+
6
+ Waluigi.run *ARGV
@@ -0,0 +1,17 @@
1
+ module Waluigi
2
+ module Python
3
+ require 'pycall/import'
4
+ Luigi = PyCall.import_module('luigi')
5
+ WaluigiFacade = PyCall.import_module('waluigi_facade')
6
+ end
7
+
8
+ require 'singleton'
9
+
10
+ require 'waluigi/helpers'
11
+ require 'waluigi/task'
12
+ require 'waluigi/launcher'
13
+
14
+ def self.run *args
15
+ Waluigi::Launcher.instance.run args
16
+ end
17
+ end
@@ -0,0 +1,96 @@
1
+ module Waluigi
2
+ module TaskHelper
3
+ def output
4
+ @python_obj.output
5
+ end
6
+
7
+ def input
8
+ @python_obj.input
9
+ end
10
+
11
+ def method_missing m, *_args, **_kwards, &_block
12
+ @python_obj.send m
13
+ end
14
+ end
15
+
16
+ module TaskDefinitionHelper
17
+ def output(o)
18
+ @ctx.outputs << o
19
+ end
20
+
21
+ def requires(r)
22
+ @ctx.requirements << r
23
+ end
24
+
25
+ def defined_outputs
26
+ @ctx.outputs
27
+ end
28
+
29
+ def parameter(name, type:nil, **kwargs)
30
+ @ctx.parameters << RubyTaskParameter.new(name, type, kwargs)
31
+ end
32
+
33
+ def defined_parameters
34
+ @ctx.parameters.map do |param|
35
+ if param.is_a? RubyTaskParameter
36
+ t = if param.type
37
+ param.type
38
+ else
39
+ Python::Luigi.Parameter
40
+ end
41
+ [param.name, t.new(**param.kwargs)]
42
+ else
43
+ [param.name, param]
44
+ end
45
+ end
46
+ end
47
+
48
+ def defined_requirements
49
+ @ctx.requirements.map do |req|
50
+ if req.is_a? RubyTaskRequirement
51
+ req.build
52
+ elsif req.included_modules.include? Waluigi::Task # FIXME
53
+ RubyTaskRequirement.new(req.name).build
54
+ else
55
+ req
56
+ end
57
+ end
58
+ end
59
+
60
+ def build(*args, **kwargs)
61
+ RubyTaskRequirement.new(name, args, kwargs)
62
+ end
63
+ end
64
+
65
+ class HelperCtx
66
+ attr_reader :outputs, :requirements, :parameters
67
+
68
+ def initialize
69
+ @outputs = []
70
+ @requirements = []
71
+ @parameters = []
72
+ end
73
+ end
74
+
75
+ class RubyTaskRequirement
76
+ def initialize(task, args, kwargs)
77
+ @task = task
78
+ @args = args
79
+ @kwargs = kwargs
80
+ end
81
+
82
+ def build
83
+ Waluigi::Python::WaluigiFacade.tasks[@task].new *@args, **@kwargs
84
+ end
85
+ end
86
+
87
+ class RubyTaskParameter
88
+ attr_reader :name, :type, :kwargs
89
+
90
+ def initialize(name, type, kwargs)
91
+ @name = name
92
+ @type = type
93
+ @kwargs = kwargs
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,20 @@
1
+ module Waluigi
2
+ class Launcher
3
+ include Singleton
4
+
5
+ attr_reader :tasks, :luigi, :waluigi
6
+
7
+ def initialize
8
+ @tasks = []
9
+ end
10
+
11
+ def run args
12
+ tasks.each { |task| register_facade task }
13
+ Waluigi::Python::Luigi.run(args)
14
+ end
15
+
16
+ private def register_facade task
17
+ Waluigi::Python::WaluigiFacade.register_task_facade task.new, task.name
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,10 @@
1
+ module Waluigi
2
+ module Task
3
+ def self.included(task)
4
+ Launcher.instance.tasks << task
5
+ task.instance_variable_set :@ctx, HelperCtx.new
6
+ task.extend TaskDefinitionHelper
7
+ task.send :include, TaskHelper
8
+ end
9
+ end
10
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: waluigi
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Daniel Domínguez
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-02-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pycall
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.3
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.3
33
+ description: A set of abstractions that facade ruby code in luigi tasks running in
34
+ python
35
+ email: daniel.dominguez@imdea.org
36
+ executables:
37
+ - waluigi
38
+ extensions: []
39
+ extra_rdoc_files: []
40
+ files:
41
+ - bin/waluigi
42
+ - lib/waluigi.rb
43
+ - lib/waluigi/helpers.rb
44
+ - lib/waluigi/launcher.rb
45
+ - lib/waluigi/task.rb
46
+ homepage: https://github.com/0xddom/waluigi
47
+ licenses:
48
+ - MIT
49
+ metadata: {}
50
+ post_install_message: Install the python package 'waluigi_facade' in order to be able
51
+ to use this gem!
52
+ rdoc_options: []
53
+ require_paths:
54
+ - lib
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ requirements: []
66
+ rubygems_version: 3.0.1
67
+ signing_key:
68
+ specification_version: 4
69
+ summary: Ruby code running as luigi tasks
70
+ test_files: []