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.
- checksums.yaml +7 -0
- data/bin/waluigi +6 -0
- data/lib/waluigi.rb +17 -0
- data/lib/waluigi/helpers.rb +96 -0
- data/lib/waluigi/launcher.rb +20 -0
- data/lib/waluigi/task.rb +10 -0
- metadata +70 -0
checksums.yaml
ADDED
@@ -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
|
data/bin/waluigi
ADDED
data/lib/waluigi.rb
ADDED
@@ -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
|
data/lib/waluigi/task.rb
ADDED
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: []
|