mortar 0.8.7 → 0.8.8

Sign up to get free protection for your applications and to get access to all the features.
data/lib/mortar/auth.rb CHANGED
@@ -88,8 +88,9 @@ class Mortar::Auth
88
88
  get_credentials[1]
89
89
  end
90
90
 
91
- def user_s3_safe
92
- return user.gsub(/[^0-9a-zA-Z]/i, '-')
91
+ def user_s3_safe(local = false)
92
+ user_email = (local && !has_credentials) ? "notloggedin@user.org" : user
93
+ return user_email.gsub(/[^0-9a-zA-Z]/i, '-')
93
94
  end
94
95
 
95
96
  def api_key(user = get_credentials[0], password = get_credentials[1])
@@ -74,8 +74,9 @@ class Mortar::Command::Base
74
74
  paramfile_params = {}
75
75
  if options[:param_file]
76
76
  File.open(options[:param_file], "r").each do |line|
77
+ line = line.chomp
77
78
  # If the line isn't empty
78
- if not line.chomp.empty? and not line.chomp.match(/^;/)
79
+ if not line.empty? and not line.match(/^;/) and not line.start_with?("#")
79
80
  name, value = line.split('=', 2)
80
81
  if not name or not value
81
82
  error("Parameter file is malformed")
@@ -14,6 +14,7 @@
14
14
  # limitations under the License.
15
15
  #
16
16
 
17
+ require "fileutils"
17
18
  require "mortar/generators/generator_base"
18
19
  module Mortar
19
20
  module Generators
@@ -42,7 +43,10 @@ module Mortar
42
43
  mkdir "controlscripts"
43
44
 
44
45
  inside "controlscripts" do
45
- copy_file "gitkeep", ".gitkeep"
46
+ mkdir "lib"
47
+ inside "lib" do
48
+ copy_file "__init__.py", "__init__.py"
49
+ end
46
50
  end
47
51
 
48
52
  mkdir "macros"
@@ -64,6 +68,56 @@ module Mortar
64
68
  inside "python" do
65
69
  copy_file "python_udf.py", "#{project_name}.py"
66
70
  end
71
+
72
+ mkdir "jython"
73
+ inside "jython" do
74
+ copy_file "gitkeep", ".gitkeep"
75
+ end
76
+
77
+ mkdir "java"
78
+ inside "java" do
79
+ copy_file "gitkeep", ".gitkeep"
80
+ end
81
+ end
82
+
83
+ mkdir "vendor"
84
+
85
+ inside "vendor" do
86
+ mkdir "controlscripts"
87
+ inside "controlscripts" do
88
+ mkdir "lib"
89
+ inside "lib" do
90
+ copy_file "__init__.py", "__init__.py"
91
+ end
92
+ end
93
+
94
+ mkdir "pigscripts"
95
+ inside "pigscripts" do
96
+ copy_file "gitkeep", ".gitkeep"
97
+ end
98
+
99
+ mkdir "macros"
100
+ inside "macros" do
101
+ copy_file "gitkeep", ".gitkeep"
102
+ end
103
+
104
+ mkdir "udfs"
105
+ inside "udfs" do
106
+ mkdir "python"
107
+ inside "python" do
108
+ copy_file "gitkeep", ".gitkeep"
109
+ end
110
+
111
+ mkdir "jython"
112
+ inside "jython" do
113
+ copy_file "gitkeep", ".gitkeep"
114
+ end
115
+
116
+ mkdir "java"
117
+ inside "java" do
118
+ copy_file "gitkeep", ".gitkeep"
119
+ end
120
+ end
67
121
  end
68
122
 
69
123
  rescue => e
data/lib/mortar/git.rb CHANGED
@@ -154,6 +154,10 @@ module Mortar
154
154
  if File.directory?('controlscripts') and not contents.include?('controlscripts')
155
155
  manifest.puts "controlscripts"
156
156
  end
157
+
158
+ if File.directory?("vendor") and not contents.include?("vendor")
159
+ manifest.puts "vendor"
160
+ end
157
161
  end
158
162
  else
159
163
  create_mortar_project_manifest('.')
@@ -174,6 +178,9 @@ module Mortar
174
178
  manifest.puts "pigscripts"
175
179
  manifest.puts "macros"
176
180
  manifest.puts "udfs"
181
+ if File.directory? "#{path}/vendor"
182
+ manifest.puts "vendor"
183
+ end
177
184
  end
178
185
  end
179
186
 
@@ -305,7 +305,7 @@ class Mortar::Local::Pig
305
305
  opts['python.verbose'] = 'error'
306
306
  opts['jython.output'] = true
307
307
  opts['python.home'] = jython_directory
308
- opts['python.path'] = local_install_directory + "/../controlscripts"
308
+ opts['python.path'] = "#{local_install_directory}/../controlscripts/lib:#{local_install_directory}/../vendor/controlscripts/lib"
309
309
  opts['python.cachedir'] = jython_cache_directory
310
310
  return opts
311
311
  end
@@ -318,13 +318,7 @@ class Mortar::Local::Pig
318
318
  if ENV['MORTAR_EMAIL_S3_ESCAPED']
319
319
  params['MORTAR_EMAIL_S3_ESCAPED'] = ENV['MORTAR_EMAIL_S3_ESCAPED']
320
320
  else
321
- params['MORTAR_EMAIL_S3_ESCAPED'] = Mortar::Auth.user_s3_safe
322
- end
323
-
324
- if ENV['MORTAR_SOFTWARE_MIRROR']
325
- params['BACON_BITS'] = "s3n://" + ENV['MORTAR_SOFTWARE_MIRROR'] + "/bacon-bits"
326
- else
327
- params['BACON_BITS'] = "s3n://mhc-software-mirror/bacon-bits"
321
+ params['MORTAR_EMAIL_S3_ESCAPED'] = Mortar::Auth.user_s3_safe(true)
328
322
  end
329
323
 
330
324
  # Coerce into the same format as pig parameters that were
File without changes
File without changes
@@ -16,5 +16,5 @@
16
16
 
17
17
  module Mortar
18
18
  # see http://semver.org/
19
- VERSION = "0.8.7"
19
+ VERSION = "0.8.8"
20
20
  end
@@ -388,7 +388,7 @@ STDOUT
388
388
  cluster_size = 5
389
389
 
390
390
  mock(Mortar::Auth.api).post_job_new_cluster("myproject", "my_script", is_a(String), cluster_size,
391
- :parameters => match_array([{"name" => "FIRST", "value" => "FOO"}, {"name" => "SECOND", "value" => "BAR"}, {"name" => "THIRD", "value" => "BEAR\n"}]),
391
+ :parameters => match_array([{"name" => "FIRST", "value" => "FOO"}, {"name" => "SECOND", "value" => "BAR"}, {"name" => "THIRD", "value" => "BEAR"}]),
392
392
  :cluster_type => Jobs::CLUSTER_TYPE__PERSISTENT,
393
393
  :notify_on_job_finish => true,
394
394
  :is_control_script=>false) {Excon::Response.new(:body => {"job_id" => job_id})}
@@ -413,7 +413,7 @@ PARAMS
413
413
  cluster_size = 5
414
414
 
415
415
  mock(Mortar::Auth.api).post_job_new_cluster("myproject", "my_script", is_a(String), cluster_size,
416
- :parameters => match_array([{"name" => "FIRST", "value" => "FOO"}, {"name" => "SECOND", "value" => "BAR"}, {"name" => "THIRD", "value" => "BEAR\n"}]),
416
+ :parameters => match_array([{"name" => "FIRST", "value" => "FOO"}, {"name" => "SECOND", "value" => "BAR"}, {"name" => "THIRD", "value" => "BEAR"}]),
417
417
  :cluster_type => Jobs::CLUSTER_TYPE__PERSISTENT,
418
418
  :notify_on_job_finish => true,
419
419
  :is_control_script=>false) {Excon::Response.new(:body => {"job_id" => job_id})}
@@ -128,7 +128,8 @@ STDOUT
128
128
  \e[1;32m create\e[0m pigscripts
129
129
  \e[1;32m create\e[0m pigscripts/some_new_project.pig
130
130
  \e[1;32m create\e[0m controlscripts
131
- \e[1;32m create\e[0m controlscripts/.gitkeep
131
+ \e[1;32m create\e[0m controlscripts/lib
132
+ \e[1;32m create\e[0m controlscripts/lib/__init__.py
132
133
  \e[1;32m create\e[0m macros
133
134
  \e[1;32m create\e[0m macros/.gitkeep
134
135
  \e[1;32m create\e[0m fixtures
@@ -136,6 +137,25 @@ STDOUT
136
137
  \e[1;32m create\e[0m udfs
137
138
  \e[1;32m create\e[0m udfs/python
138
139
  \e[1;32m create\e[0m udfs/python/some_new_project.py
140
+ \e[1;32m create\e[0m udfs/jython
141
+ \e[1;32m create\e[0m udfs/jython/.gitkeep
142
+ \e[1;32m create\e[0m udfs/java
143
+ \e[1;32m create\e[0m udfs/java/.gitkeep
144
+ \e[1;32m create\e[0m vendor
145
+ \e[1;32m create\e[0m vendor/controlscripts
146
+ \e[1;32m create\e[0m vendor/controlscripts/lib
147
+ \e[1;32m create\e[0m vendor/controlscripts/lib/__init__.py
148
+ \e[1;32m create\e[0m vendor/pigscripts
149
+ \e[1;32m create\e[0m vendor/pigscripts/.gitkeep
150
+ \e[1;32m create\e[0m vendor/macros
151
+ \e[1;32m create\e[0m vendor/macros/.gitkeep
152
+ \e[1;32m create\e[0m vendor/udfs
153
+ \e[1;32m create\e[0m vendor/udfs/python
154
+ \e[1;32m create\e[0m vendor/udfs/python/.gitkeep
155
+ \e[1;32m create\e[0m vendor/udfs/jython
156
+ \e[1;32m create\e[0m vendor/udfs/jython/.gitkeep
157
+ \e[1;32m create\e[0m vendor/udfs/java
158
+ \e[1;32m create\e[0m vendor/udfs/java/.gitkeep
139
159
  Sending request to register project: some_new_project... done\n\n\r\e[0KStatus: ACTIVE \n\nYour project is ready for use. Type 'mortar help' to see the commands you can perform on the project.\n
140
160
  NOTE: You'll need to change to the new directory to use your project:
141
161
  cd some_new_project
@@ -17,14 +17,13 @@
17
17
  require 'spec_helper'
18
18
  require 'fakefs/spec_helpers'
19
19
  require 'mortar/local/pig'
20
+ require 'mortar/auth'
20
21
  require 'launchy'
21
22
 
22
-
23
23
  class Mortar::Local::Pig
24
24
  attr_reader :command
25
25
  end
26
26
 
27
-
28
27
  module Mortar::Local
29
28
  describe Pig do
30
29
 
@@ -199,6 +198,16 @@ module Mortar::Local
199
198
  pig.illustrate_alias(script, 'my_alias', false, [])
200
199
  end
201
200
 
201
+ it "does not require login credentials for illustration" do
202
+ any_instance_of(Mortar::Project::PigScripts, :elements => nil, :path => "/foo/bar/baz.pig")
203
+ script = Mortar::Project::PigScripts.new('/foo/bar/baz.pig', 'baz', 'pig')
204
+ pig = Mortar::Local::Pig.new
205
+ mock(Mortar::Auth).user_s3_safe(true).returns('notloggedin-user-org')
206
+ mock(pig).run_pig_command.with_any_args.returns(true)
207
+ mock(pig).show_illustrate_output.with_any_args
208
+ pig.illustrate_alias(script, 'my_alias', false, [])
209
+ end
210
+
202
211
  end
203
212
 
204
213
  context "reset_local_logs" do
metadata CHANGED
@@ -1,164 +1,167 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: mortar
3
- version: !ruby/object:Gem::Version
4
- hash: 49
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.8
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 8
9
- - 7
10
- version: 0.8.7
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Mortar Data
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2013-06-20 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2013-06-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: mortar-api-ruby
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
18
+ requirements:
26
19
  - - ~>
27
- - !ruby/object:Gem::Version
28
- hash: 1
29
- segments:
30
- - 0
31
- - 6
32
- - 3
20
+ - !ruby/object:Gem::Version
33
21
  version: 0.6.3
34
22
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: netrc
38
23
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
40
25
  none: false
41
- requirements:
26
+ requirements:
42
27
  - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 5
45
- segments:
46
- - 0
47
- - 7
48
- version: "0.7"
28
+ - !ruby/object:Gem::Version
29
+ version: 0.6.3
30
+ - !ruby/object:Gem::Dependency
31
+ name: netrc
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '0.7'
49
38
  type: :runtime
50
- version_requirements: *id002
51
- - !ruby/object:Gem::Dependency
52
- name: launchy
53
39
  prerelease: false
54
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
55
41
  none: false
56
- requirements:
42
+ requirements:
57
43
  - - ~>
58
- - !ruby/object:Gem::Version
59
- hash: 1
60
- segments:
61
- - 2
62
- - 1
63
- version: "2.1"
44
+ - !ruby/object:Gem::Version
45
+ version: '0.7'
46
+ - !ruby/object:Gem::Dependency
47
+ name: launchy
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '2.1'
64
54
  type: :runtime
65
- version_requirements: *id003
66
- - !ruby/object:Gem::Dependency
67
- name: excon
68
55
  prerelease: false
69
- requirement: &id004 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '2.1'
62
+ - !ruby/object:Gem::Dependency
63
+ name: excon
64
+ requirement: !ruby/object:Gem::Requirement
70
65
  none: false
71
- requirements:
66
+ requirements:
72
67
  - - ~>
73
- - !ruby/object:Gem::Version
74
- hash: 21
75
- segments:
76
- - 0
77
- - 15
78
- version: "0.15"
68
+ - !ruby/object:Gem::Version
69
+ version: '0.15'
79
70
  type: :development
80
- version_requirements: *id004
81
- - !ruby/object:Gem::Dependency
82
- name: fakefs
83
71
  prerelease: false
84
- requirement: &id005 !ruby/object:Gem::Requirement
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '0.15'
78
+ - !ruby/object:Gem::Dependency
79
+ name: fakefs
80
+ requirement: !ruby/object:Gem::Requirement
85
81
  none: false
86
- requirements:
82
+ requirements:
87
83
  - - ~>
88
- - !ruby/object:Gem::Version
89
- hash: 11
90
- segments:
91
- - 0
92
- - 4
93
- - 2
84
+ - !ruby/object:Gem::Version
94
85
  version: 0.4.2
95
86
  type: :development
96
- version_requirements: *id005
97
- - !ruby/object:Gem::Dependency
98
- name: gem-release
99
87
  prerelease: false
100
- requirement: &id006 !ruby/object:Gem::Requirement
88
+ version_requirements: !ruby/object:Gem::Requirement
101
89
  none: false
102
- requirements:
103
- - - ">="
104
- - !ruby/object:Gem::Version
105
- hash: 3
106
- segments:
107
- - 0
108
- version: "0"
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 0.4.2
94
+ - !ruby/object:Gem::Dependency
95
+ name: gem-release
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
109
102
  type: :development
110
- version_requirements: *id006
111
- - !ruby/object:Gem::Dependency
112
- name: rake
113
103
  prerelease: false
114
- requirement: &id007 !ruby/object:Gem::Requirement
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rake
112
+ requirement: !ruby/object:Gem::Requirement
115
113
  none: false
116
- requirements:
117
- - - ">="
118
- - !ruby/object:Gem::Version
119
- hash: 3
120
- segments:
121
- - 0
122
- version: "0"
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
123
118
  type: :development
124
- version_requirements: *id007
125
- - !ruby/object:Gem::Dependency
126
- name: rr
127
119
  prerelease: false
128
- requirement: &id008 !ruby/object:Gem::Requirement
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rr
128
+ requirement: !ruby/object:Gem::Requirement
129
129
  none: false
130
- requirements:
131
- - - ">="
132
- - !ruby/object:Gem::Version
133
- hash: 3
134
- segments:
135
- - 0
136
- version: "0"
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
137
134
  type: :development
138
- version_requirements: *id008
139
- - !ruby/object:Gem::Dependency
140
- name: rspec
141
135
  prerelease: false
142
- requirement: &id009 !ruby/object:Gem::Requirement
136
+ version_requirements: !ruby/object:Gem::Requirement
143
137
  none: false
144
- requirements:
145
- - - ">="
146
- - !ruby/object:Gem::Version
147
- hash: 3
148
- segments:
149
- - 0
150
- version: "0"
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ name: rspec
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
151
150
  type: :development
152
- version_requirements: *id009
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
153
158
  description: Client library and command-line tool to interact with the Mortar service.
154
159
  email: support@mortardata.com
155
- executables:
160
+ executables:
156
161
  - mortar
157
162
  extensions: []
158
-
159
163
  extra_rdoc_files: []
160
-
161
- files:
164
+ files:
162
165
  - README.md
163
166
  - bin/mortar
164
167
  - css/illustrate.css
@@ -207,12 +210,20 @@ files:
207
210
  - lib/mortar/templates/pigscript/pigscript.pig
208
211
  - lib/mortar/templates/pigscript/python_udf.py
209
212
  - lib/mortar/templates/project/README.md
210
- - lib/mortar/templates/project/controlscripts/gitkeep
213
+ - lib/mortar/templates/project/controlscripts/lib/__init__.py
211
214
  - lib/mortar/templates/project/fixtures/gitkeep
212
215
  - lib/mortar/templates/project/gitignore
213
216
  - lib/mortar/templates/project/macros/gitkeep
214
217
  - lib/mortar/templates/project/pigscripts/pigscript.pig
218
+ - lib/mortar/templates/project/udfs/java/gitkeep
219
+ - lib/mortar/templates/project/udfs/jython/gitkeep
215
220
  - lib/mortar/templates/project/udfs/python/python_udf.py
221
+ - lib/mortar/templates/project/vendor/controlscripts/lib/__init__.py
222
+ - lib/mortar/templates/project/vendor/macros/gitkeep
223
+ - lib/mortar/templates/project/vendor/pigscripts/gitkeep
224
+ - lib/mortar/templates/project/vendor/udfs/java/gitkeep
225
+ - lib/mortar/templates/project/vendor/udfs/jython/gitkeep
226
+ - lib/mortar/templates/project/vendor/udfs/python/gitkeep
216
227
  - lib/mortar/templates/report/illustrate-report.html
217
228
  - lib/mortar/templates/script/runpig.sh
218
229
  - lib/mortar/templates/udf/python_udf.py
@@ -249,38 +260,26 @@ files:
249
260
  - spec/support/display_message_matcher.rb
250
261
  homepage: http://mortardata.com/
251
262
  licenses: []
252
-
253
263
  post_install_message:
254
264
  rdoc_options: []
255
-
256
- require_paths:
265
+ require_paths:
257
266
  - lib
258
- required_ruby_version: !ruby/object:Gem::Requirement
267
+ required_ruby_version: !ruby/object:Gem::Requirement
259
268
  none: false
260
- requirements:
261
- - - ">="
262
- - !ruby/object:Gem::Version
263
- hash: 57
264
- segments:
265
- - 1
266
- - 8
267
- - 7
269
+ requirements:
270
+ - - ! '>='
271
+ - !ruby/object:Gem::Version
268
272
  version: 1.8.7
269
- required_rubygems_version: !ruby/object:Gem::Requirement
273
+ required_rubygems_version: !ruby/object:Gem::Requirement
270
274
  none: false
271
- requirements:
272
- - - ">="
273
- - !ruby/object:Gem::Version
274
- hash: 3
275
- segments:
276
- - 0
277
- version: "0"
275
+ requirements:
276
+ - - ! '>='
277
+ - !ruby/object:Gem::Version
278
+ version: '0'
278
279
  requirements: []
279
-
280
280
  rubyforge_project:
281
- rubygems_version: 1.8.24
281
+ rubygems_version: 1.8.23
282
282
  signing_key:
283
283
  specification_version: 3
284
284
  summary: Client library and CLI to interact with the Mortar service.
285
285
  test_files: []
286
-