coque 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.
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: []