coque 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/script.py ADDED
@@ -0,0 +1,129 @@
1
+ # 1 reverse-engineer the protocol
2
+ # SO Post: https://stackoverflow.com/questions/6954116/ruby-s-method-missing-in-python
3
+ # A missing method was called.
4
+ # The object was <__main__.ProcessLike object at 0x7f31b98a2be0>, the method was 'popen'.
5
+ # It was called with () and {'stdin': <_io.BufferedReader name=3>} as arguments
6
+
7
+ import tempfile
8
+ from tempfile import NamedTemporaryFile
9
+ from plumbum import local
10
+ from io import StringIO
11
+ import io
12
+ import os
13
+ from collections import namedtuple
14
+
15
+ # ProcessReturn = namedtuple('ProcessReturn', ['code', 'stderr', 'stdout'])
16
+ # first tried namedtuple, but the problem is plumbum
17
+ # tries to assign these values crosswise based on the pipeline, and namedtuples
18
+ # are immutable, so you run into this:
19
+ # dstproc.stderr = srcproc.stderr
20
+ # AttributeError: can't set attribute
21
+
22
+ # Went to dummy ProcessReturn class to try to patch in the gaps
23
+ # class ProcessReturn(object):
24
+ # code = 0
25
+ # retcode = 0
26
+ # returncode = 0
27
+
28
+ # def wait(self, *args, **kwargs):
29
+ # pass
30
+
31
+ # def verify(self, *args, **kwargs):
32
+ # pass
33
+
34
+ # def communicate(self, *args, **kwargs):
35
+ # return (self.stdout, self.stderr)
36
+
37
+ class ProcessLike(object):
38
+ returncode = 0
39
+
40
+ # stdin = io.BufferedReader(StringIO())
41
+ # stderr = io.BufferedWriter(StringIO())
42
+ # stdout = io.BufferedWriter(StringIO())
43
+
44
+ stdin = io.BytesIO()
45
+ stderr = io.BytesIO()
46
+ stdout = io.BytesIO()
47
+ custom_encoding = None
48
+ run = None
49
+ wait = lambda *args, **kwargs: print('*** DEFAULT WAIT ***')
50
+ srcproc = None
51
+ verify = None
52
+
53
+ def __init__(self):
54
+ self.stdin = tempfile.TemporaryFile()
55
+ print('Init stdin:' + str(self.stdin))
56
+ self.stdout = tempfile.TemporaryFile()
57
+ self.stderr = tempfile.TemporaryFile()
58
+
59
+ def __setattr__(self, name, value):
60
+ if name in ['stdin', 'stderr', 'stdout', 'custom_encoding', 'run', 'wait', 'srcproc', 'verify']:
61
+ super(ProcessLike, self).__setattr__(name, value)
62
+ else:
63
+ print('*** Attempted to set unknown attr ***')
64
+ print('Attr: ' + name + ', value: ' + str(value))
65
+
66
+ def __enter__(self, *args, **kwargs):
67
+ print('*** __enter__ ***')
68
+ print(args)
69
+ print(kwargs)
70
+
71
+ def __getattr__(self, name):
72
+ def _missing(*args, **kwargs):
73
+ print("A missing method was called.")
74
+ print("The object was %r, the method was %r. " % (self, name))
75
+ print("It was called with %r and %r as arguments" % (args, kwargs))
76
+ return _missing
77
+
78
+ def communicate(self, *args, **kwargs):
79
+ print("tried to communicate with us")
80
+ print(str(args))
81
+ print(str(kwargs))
82
+ return (self.stdout, self.stderr)
83
+
84
+ def verify(self, retcode, timeout, stdout, stderr):
85
+ return True
86
+
87
+ def __del__(self, *args, **kwargs):
88
+ pass
89
+
90
+ # def wait(self, *args, **kwargs):
91
+ # print('wait' + str(args) + str(kwargs))
92
+ # print(self.srcproc)
93
+ # print(self.wait)
94
+ # # returns returncode
95
+ # print(self.stdin)
96
+ # # for line in self.stdin:
97
+ # # print(line)
98
+ # # print(' '.join(list(line.decode())).rstrip())
99
+ # # print(self.stdout)
100
+ # # self.stdout.write(' '.join(list(line.decode())).encode())
101
+ # return 0
102
+
103
+ def popen(self, *args, **kwargs):
104
+ print('*** POPEN ProcessLike')
105
+ print(str(args))
106
+ print(str(kwargs))
107
+ return self
108
+
109
+ def __or__(self, *args, **kwargs):
110
+ print('ORed ' + str(args) + str(kwargs))
111
+
112
+ class MyTask(object):
113
+ def __enter__(self):
114
+ self.tempfile = NamedTemporaryFile()
115
+ return self
116
+
117
+ def fileno(self):
118
+ return self.tempfile.fileno
119
+
120
+ # def __or__(self, other):
121
+
122
+ # def __exit__(self, exc_type, exc_value, traceback):
123
+ # self.tempfile.close()
124
+
125
+
126
+ cmd = local['cat']['/usr/share/dict/words'] | local['head']['-n 5'] | ProcessLike() | local['cat']
127
+ code, out, err = cmd.run()
128
+ print(out)
129
+
metadata ADDED
@@ -0,0 +1,153 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: coque
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Horace Williams
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-06-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '12.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '12.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.11'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.11'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest-reporters
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Like plumbum...for Ruby...with native Ruby streaming interop.
98
+ email:
99
+ - horace@worace.works
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".gitignore"
105
+ - ".travis.yml"
106
+ - CODE_OF_CONDUCT.md
107
+ - Gemfile
108
+ - Gemfile.lock
109
+ - LICENSE.txt
110
+ - README.md
111
+ - Rakefile
112
+ - bin/console
113
+ - bin/setup
114
+ - coque.gemspec
115
+ - drake.rb
116
+ - io.rb
117
+ - lib/coque.rb
118
+ - lib/coque/cmd.rb
119
+ - lib/coque/context.rb
120
+ - lib/coque/errors.rb
121
+ - lib/coque/pipeline.rb
122
+ - lib/coque/rb.rb
123
+ - lib/coque/redirectable.rb
124
+ - lib/coque/result.rb
125
+ - lib/coque/sh.rb
126
+ - lib/coque/version.rb
127
+ - script.py
128
+ homepage: http://github.com/worace/coque
129
+ licenses:
130
+ - MIT
131
+ metadata:
132
+ allowed_push_host: https://rubygems.org
133
+ post_install_message:
134
+ rdoc_options: []
135
+ require_paths:
136
+ - lib
137
+ required_ruby_version: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ required_rubygems_version: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ requirements: []
148
+ rubyforge_project:
149
+ rubygems_version: 2.5.1
150
+ signing_key:
151
+ specification_version: 4
152
+ summary: Shell command utilities with easy integration with Ruby code.
153
+ test_files: []