webhdfs 0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ /pkg/
2
+ /coverage/
3
+ /vendor/
4
+ Gemfile.lock
data/AUTHORS ADDED
@@ -0,0 +1 @@
1
+ Kazuki Ohta <kazuki.ohta@gmail.com>
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source :rubygems
2
+
3
+ gemspec
4
+
5
+ gem "simplecov", :require => false
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rake/testtask'
5
+
6
+ Rake::TestTask.new(:test) do |test|
7
+ test.libs << 'lib' << 'test'
8
+ test.test_files = FileList['test/webhdfs/*.rb']
9
+ test.verbose = true
10
+ end
11
+
12
+ task :coverage do |t|
13
+ ENV['SIMPLE_COV'] = '1'
14
+ Rake::Task["test"].invoke
15
+ end
16
+
17
+ task :default => [:build]
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1
data/lib/webhdfs.rb ADDED
@@ -0,0 +1 @@
1
+ require File.join(File.dirname(__FILE__), 'webhdfs', 'fileutils.rb')
@@ -0,0 +1,162 @@
1
+ module WebHDFS
2
+ module FileUtils
3
+ require 'rest_client'
4
+
5
+ # This hash table holds command options.
6
+ OPT_TABLE = {} # internal use only
7
+
8
+ @fu_host = 'localhost'
9
+ @fu_port = 50070
10
+ def set_host(host, port)
11
+ @fu_host = host
12
+ @fu_port = port
13
+ end
14
+
15
+ def mkdir(list, options={})
16
+ fu_check_options options, OPT_TABLE['mkdir']
17
+ list = fu_list(list)
18
+ fu_log "mkdir #{options[:mode] ? ('-m %03o ' % options[:mode]) : ''}#{list.join ' '}" if options[:verbose]
19
+ if mode = options[:mode]
20
+ mode = ('0%03o' % mode) if mode.is_a? Integer
21
+ else
22
+ mode = '0755'
23
+ end
24
+ list.each { |dir|
25
+ fu_put(dir, 'MKDIRS', {:permission => mode})
26
+ }
27
+ end
28
+ OPT_TABLE['mkdir'] = [:mode, :verbose]
29
+ module_function :mkdir
30
+
31
+ alias mkdir_p mkdir
32
+ module_function :mkdir_p
33
+
34
+ def rm(list, options={})
35
+ fu_check_options options, OPT_TABLE['rm']
36
+ list = fu_list(list)
37
+ fu_log "rm #{list.join ' '}" if options[:verbose]
38
+ list.each { |dir|
39
+ fu_delete(dir, 'DELETE', {:recursive => options[:recursive] || false})
40
+ }
41
+ end
42
+ OPT_TABLE['rm'] = [:verbose, :recursive]
43
+ module_function :rm
44
+
45
+ def rmr(list, options={})
46
+ fu_check_options options, OPT_TABLE['rmr']
47
+ self.rm(list, options.merge({:recursive => true}))
48
+ end
49
+ OPT_TABLE['rmr'] = [:verbose, :recursive]
50
+ module_function :rmr
51
+
52
+ def rename(src, dst, options={})
53
+ fu_check_options options, OPT_TABLE['rename']
54
+ fu_log "rename #{src} #{dst}" if options[:verbose]
55
+ fu_put(src, 'RENAME', {:destination => dst})
56
+ end
57
+ OPT_TABLE['rename'] = [:verbose]
58
+ module_function :rename
59
+
60
+ def chmod(mode, list, options={})
61
+ fu_check_options options, OPT_TABLE['chmod']
62
+ list = fu_list(list)
63
+ fu_log sprintf('chmod %o %s', mode, list.join(' ')) if options[:verbose]
64
+ mode = ('0%03o' % mode) if mode.is_a? Integer
65
+ list.each { |dir|
66
+ fu_put(dir, 'SETPERMISSION', {:permission => mode})
67
+ }
68
+ end
69
+ OPT_TABLE['chmod'] = [:verbose]
70
+ module_function :chmod
71
+
72
+ def chown(user, group, list, options={})
73
+ fu_check_options options, OPT_TABLE['chown']
74
+ list = fu_list(list)
75
+ fu_log sprintf('chown %s%s',
76
+ [user,group].compact.join(':') + ' ',
77
+ list.join(' ')) if options[:verbose]
78
+ list.each { |dir|
79
+ fu_put(dir, 'SETOWNER', {:owner => user, :group => group})
80
+ }
81
+ end
82
+ OPT_TABLE['chown'] = [:verbose]
83
+ module_function :chown
84
+
85
+ def set_repl_factor(list, num, options={})
86
+ fu_check_options options, OPT_TABLE['set_repl_factor']
87
+ list = fu_list(list)
88
+ fu_log sprintf('set_repl_factor %s %d',
89
+ list.join(' '), num) if options[:verbose]
90
+ list.each { |dir|
91
+ fu_put(dir, 'SETREPLICATION', {:replication => num})
92
+ }
93
+ end
94
+ OPT_TABLE['set_repl_factor'] = [:verbose]
95
+ module_function :set_repl_factor
96
+
97
+ def set_atime(list, time, options={})
98
+ fu_check_options options, OPT_TABLE['set_atime']
99
+ list = fu_list(list)
100
+ time = time.to_i
101
+ fu_log sprintf('set_atime %s %d', list.join(' '), time) if options[:verbose]
102
+ list.each { |dir|
103
+ fu_put(dir, 'SETTIMES', {:accesstime => time})
104
+ }
105
+ end
106
+ OPT_TABLE['set_atime'] = [:verbose]
107
+ module_function :set_atime
108
+
109
+ def set_mtime(list, time, options={})
110
+ fu_check_options options, OPT_TABLE['set_mtime']
111
+ list = fu_list(list)
112
+ time = time.to_i
113
+ fu_log sprintf('set_mtime %s %d', list.join(' '), time) if options[:verbose]
114
+ list.each { |dir|
115
+ fu_put(dir, 'SETTIMES', {:modificationtime => time})
116
+ }
117
+ end
118
+ OPT_TABLE['set_mtime'] = [:verbose]
119
+ module_function :set_mtime
120
+
121
+ ##
122
+ def self.private_module_function(name)
123
+ module_function name
124
+ private_class_method name
125
+ end
126
+
127
+ def fu_list(arg)
128
+ [arg].flatten
129
+ end
130
+ private_module_function :fu_list
131
+
132
+ def fu_put(path, op, params={}, payload='')
133
+ url = "http://#{@fu_host}:#{@fu_port}/webhdfs/v1/#{path}"
134
+ RestClient.put url, payload, :params => params.merge({:op => op})
135
+ end
136
+ private_module_function :fu_put
137
+
138
+ def fu_delete(path, op, params={})
139
+ url = "http://#{@fu_host}:#{@fu_port}/webhdfs/v1/#{path}"
140
+ RestClient.delete url, :params => params.merge({:op => op})
141
+ end
142
+ private_module_function :fu_delete
143
+
144
+ def fu_check_options(options, optdecl)
145
+ h = options.dup
146
+ optdecl.each do |opt|
147
+ h.delete opt
148
+ end
149
+ raise ArgumentError, "no such option: #{h.keys.join(' ')}" unless h.empty?
150
+ end
151
+ private_module_function :fu_check_options
152
+
153
+ @fileutils_output = $stderr
154
+ @fileutils_label = '[webhdfs]: '
155
+ def fu_log(msg)
156
+ @fileutils_output ||= $stderr
157
+ @fileutils_label ||= ''
158
+ @fileutils_output.puts @fileutils_label + msg
159
+ end
160
+ private_module_function :fu_log
161
+ end
162
+ end
@@ -0,0 +1,19 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+
4
+ require 'rr'
5
+ require 'test/unit'
6
+ class Test::Unit::TestCase
7
+ include RR::Adapters::TestUnit
8
+ end
9
+
10
+ if ENV['SIMPLE_COV']
11
+ require 'simplecov'
12
+ SimpleCov.start do
13
+ add_filter 'test/'
14
+ add_filter 'pkg/'
15
+ add_filter 'vendor/'
16
+ end
17
+ end
18
+
19
+ require 'test/unit'
@@ -0,0 +1,54 @@
1
+ require 'test_helper'
2
+
3
+ class FileUtilsTest < Test::Unit::TestCase
4
+ def setup
5
+ require 'webhdfs'
6
+ end
7
+
8
+ def test_rm
9
+ WebHDFS::FileUtils.mkdir('foo', :mode => 0777, :verbose => true)
10
+ WebHDFS::FileUtils.rm('foo', :verbose => true)
11
+ end
12
+
13
+ def test_rmr
14
+ WebHDFS::FileUtils.mkdir_p('foo/bar/buzz', :mode => 0777, :verbose => true)
15
+ WebHDFS::FileUtils.rmr('foo', :verbose => true)
16
+ end
17
+
18
+ def test_rename
19
+ #WebHDFS::FileUtils.mkdir_p('foo', :mode => 0777, :verbose => true)
20
+ #WebHDFS::FileUtils.rename('foo', 'foo2', :verbose => true)
21
+ #WebHDFS::FileUtils.rmr('foo2', :verbose => true)
22
+ end
23
+
24
+ def test_chmod
25
+ WebHDFS::FileUtils.mkdir('foo', :mode => 0777, :verbose => true)
26
+ WebHDFS::FileUtils.chmod(0755, 'foo', :verbose => true)
27
+ WebHDFS::FileUtils.chmod(0777, 'foo', :verbose => true)
28
+ WebHDFS::FileUtils.rm('foo', :verbose => true)
29
+ end
30
+
31
+ def test_chown
32
+ #WebHDFS::FileUtils.mkdir('foo', :mode => 0777, :verbose => true)
33
+ #WebHDFS::FileUtils.chown('webuser', 'supergroup', 'foo', :verbose => true)
34
+ #WebHDFS::FileUtils.rm('foo', :verbose => true)
35
+ end
36
+
37
+ def test_set_repl_factor
38
+ WebHDFS::FileUtils.mkdir('foo', :mode => 0777, :verbose => true)
39
+ WebHDFS::FileUtils.set_repl_factor('foo', 5)
40
+ WebHDFS::FileUtils.rm('foo', :verbose => true)
41
+ end
42
+
43
+ def test_set_atime
44
+ #WebHDFS::FileUtils.mkdir('foo', :mode => 0777, :verbose => true)
45
+ #WebHDFS::FileUtils.set_atime('foo', Time.now)
46
+ #WebHDFS::FileUtils.rm('foo', :verbose => true)
47
+ end
48
+
49
+ def test_set_mtime
50
+ #WebHDFS::FileUtils.mkdir('foo', :mode => 0777, :verbose => true)
51
+ #WebHDFS::FileUtils.set_mtime('foo', Time.now)
52
+ #WebHDFS::FileUtils.rm('foo', :verbose => true)
53
+ end
54
+ end
data/webhdfs.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.name = "webhdfs"
6
+ gem.description = "Ruby WebHDFS client"
7
+ gem.homepage = ""
8
+ gem.summary = gem.description
9
+ gem.version = File.read("VERSION").strip
10
+ gem.authors = ["Kazuki Ohta"]
11
+ gem.email = "kazuki.ohta@gmail.com"
12
+ gem.has_rdoc = false
13
+ #gem.platform = Gem::Platform::RUBY
14
+ gem.files = `git ls-files`.split("\n")
15
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ gem.require_paths = ['lib']
18
+
19
+ gem.add_dependency "rest-client", "~> 1.6.7"
20
+ gem.add_development_dependency "rake", ">= 0.9.2"
21
+ gem.add_development_dependency "simplecov", ">= 0.5.4"
22
+ gem.add_development_dependency "rr", ">= 1.0.0"
23
+ end
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: webhdfs
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Kazuki Ohta
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-11 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rest-client
16
+ requirement: &2154610720 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.6.7
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2154610720
25
+ - !ruby/object:Gem::Dependency
26
+ name: rake
27
+ requirement: &2154610240 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 0.9.2
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *2154610240
36
+ - !ruby/object:Gem::Dependency
37
+ name: simplecov
38
+ requirement: &2154609780 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: 0.5.4
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *2154609780
47
+ - !ruby/object:Gem::Dependency
48
+ name: rr
49
+ requirement: &2154609320 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.0
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *2154609320
58
+ description: Ruby WebHDFS client
59
+ email: kazuki.ohta@gmail.com
60
+ executables: []
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - .gitignore
65
+ - AUTHORS
66
+ - Gemfile
67
+ - Rakefile
68
+ - VERSION
69
+ - lib/webhdfs.rb
70
+ - lib/webhdfs/fileutils.rb
71
+ - test/test_helper.rb
72
+ - test/webhdfs/fileutils.rb
73
+ - webhdfs.gemspec
74
+ homepage: ''
75
+ licenses: []
76
+ post_install_message:
77
+ rdoc_options: []
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ! '>='
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ requirements: []
93
+ rubyforge_project:
94
+ rubygems_version: 1.8.6
95
+ signing_key:
96
+ specification_version: 3
97
+ summary: Ruby WebHDFS client
98
+ test_files:
99
+ - test/test_helper.rb
100
+ - test/webhdfs/fileutils.rb
101
+ has_rdoc: false