dropbox-sdk 1.6.4 → 1.6.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG +6 -0
- data/README +9 -0
- data/examples/chunked_upload.rb +47 -47
- data/examples/cli_example.rb +172 -172
- data/examples/copy_between_accounts.rb +106 -106
- data/examples/dropbox_controller.rb +70 -70
- data/examples/oauth1_upgrade.rb +28 -28
- data/examples/search_cache.rb +231 -231
- data/examples/web_file_browser.rb +111 -111
- data/lib/dropbox_sdk.rb +1273 -1228
- metadata +66 -51
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b96fef902b9021bea9e01dcc8637e056c4a077bf
|
4
|
+
data.tar.gz: 384f6e747666976c9c18727854d6a116d949c9e6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5f938338dce089ed42bd35c78b9dac8b22a4f3caeb33d6c00f914ddca42c9ce3be4d3e5fc75ed5e6ecd3c92868b34ffd0a3b4e4dd825e04f0790d5f1b746bf3c
|
7
|
+
data.tar.gz: 1bd83195c8d90988c3f1e3c26b72e7fd965e72cd61b2dce05c105456c79766f39a448d5a3487aa9a9cce691fd5f2cf351c26e0e68a27bbfdb8719237502c27b8
|
data/CHANGELOG
CHANGED
data/README
CHANGED
@@ -50,3 +50,12 @@ Running the Examples
|
|
50
50
|
There are example programs included in the tarball. Before you can run an
|
51
51
|
example, you need to edit the ".rb" file and put your Dropbox API app key and
|
52
52
|
secret in the "APP_KEY" and "APP_SECRET" constants.
|
53
|
+
|
54
|
+
----------------------------------
|
55
|
+
Running the Tests
|
56
|
+
|
57
|
+
# gem install bundler
|
58
|
+
|
59
|
+
# bundle install
|
60
|
+
# cd test
|
61
|
+
# DROPBOX_RUBY_SDK_ACCESS_TOKEN=<oauth2-access-token> bundle exec ruby sdk_test.rb
|
data/examples/chunked_upload.rb
CHANGED
@@ -10,61 +10,61 @@ APP_SECRET = ''
|
|
10
10
|
STATE_FILE = 'search_cache.json'
|
11
11
|
|
12
12
|
def main()
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
13
|
+
if APP_KEY == '' or APP_SECRET == ''
|
14
|
+
warn "ERROR: Set your APP_KEY and APP_SECRET at the top of search_cache.rb"
|
15
|
+
exit
|
16
|
+
end
|
17
|
+
prog_name = __FILE__
|
18
|
+
args = ARGV
|
19
|
+
if args.size == 0
|
20
|
+
warn("Usage:\n")
|
21
|
+
warn(" #{prog_name} <local-file-path> <dropbox-target-path> <chunk-size-in-bytes>")
|
22
|
+
exit
|
23
|
+
end
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
if args.size != 3
|
26
|
+
warn "ERROR: expecting exactly three arguments. Run with no arguments for help."
|
27
|
+
exit(1)
|
28
|
+
end
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
30
|
+
web_auth = DropboxOAuth2FlowNoRedirect.new(APP_KEY, APP_SECRET)
|
31
|
+
authorize_url = web_auth.start()
|
32
|
+
puts "1. Go to: #{authorize_url}"
|
33
|
+
puts "2. Click \"Allow\" (you might have to log in first)."
|
34
|
+
puts "3. Copy the authorization code."
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
36
|
+
print "Enter the authorization code here: "
|
37
|
+
STDOUT.flush
|
38
|
+
auth_code = STDIN.gets.strip
|
39
39
|
|
40
|
-
|
40
|
+
access_token, user_id = web_auth.finish(auth_code)
|
41
41
|
|
42
|
-
|
42
|
+
c = DropboxClient.new(access_token)
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
|
44
|
+
local_file_path = args[0]
|
45
|
+
dropbox_target_path = args[1]
|
46
|
+
chunk_size = args[2].to_i
|
47
47
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
end
|
48
|
+
# Upload the file
|
49
|
+
local_file_size = File.size(local_file_path)
|
50
|
+
uploader = c.get_chunked_uploader(File.new(local_file_path, "r"), local_file_size)
|
51
|
+
retries = 0
|
52
|
+
puts "Uploading..."
|
53
|
+
while uploader.offset < uploader.total_size
|
54
|
+
begin
|
55
|
+
uploader.upload(chunk_size)
|
56
|
+
rescue DropboxError => e
|
57
|
+
if retries > 10
|
58
|
+
puts "- Error uploading, giving up."
|
59
|
+
break
|
60
|
+
end
|
61
|
+
puts "- Error uploading, trying again..."
|
62
|
+
retries += 1
|
64
63
|
end
|
65
|
-
|
66
|
-
|
67
|
-
|
64
|
+
end
|
65
|
+
puts "Finishing upload..."
|
66
|
+
uploader.finish(dropbox_target_path)
|
67
|
+
puts "Done."
|
68
68
|
|
69
69
|
end
|
70
70
|
|
data/examples/cli_example.rb
CHANGED
@@ -15,178 +15,178 @@ APP_KEY = ''
|
|
15
15
|
APP_SECRET = ''
|
16
16
|
|
17
17
|
class DropboxCLI
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
18
|
+
LOGIN_REQUIRED = %w{put get cp mv rm ls mkdir info logout search thumbnail}
|
19
|
+
|
20
|
+
def initialize
|
21
|
+
if APP_KEY == '' or APP_SECRET == ''
|
22
|
+
puts "You must set your APP_KEY and APP_SECRET in cli_example.rb!"
|
23
|
+
puts "Find this in your apps page at https://www.dropbox.com/developers/"
|
24
|
+
exit
|
25
|
+
end
|
26
|
+
|
27
|
+
@client = nil
|
28
|
+
end
|
29
|
+
|
30
|
+
def login
|
31
|
+
if not @client.nil?
|
32
|
+
puts "already logged in!"
|
33
|
+
else
|
34
|
+
web_auth = DropboxOAuth2FlowNoRedirect.new(APP_KEY, APP_SECRET)
|
35
|
+
authorize_url = web_auth.start()
|
36
|
+
puts "1. Go to: #{authorize_url}"
|
37
|
+
puts "2. Click \"Allow\" (you might have to log in first)."
|
38
|
+
puts "3. Copy the authorization code."
|
39
|
+
|
40
|
+
print "Enter the authorization code here: "
|
41
|
+
STDOUT.flush
|
42
|
+
auth_code = STDIN.gets.strip
|
43
|
+
|
44
|
+
access_token, user_id = web_auth.finish(auth_code)
|
45
|
+
|
46
|
+
@client = DropboxClient.new(access_token)
|
47
|
+
puts "You are logged in. Your access token is #{access_token}."
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def command_loop
|
52
|
+
puts "Enter a command or 'help' or 'exit'"
|
53
|
+
command_line = ''
|
54
|
+
while command_line.strip != 'exit'
|
55
|
+
begin
|
56
|
+
execute_dropbox_command(command_line)
|
57
|
+
rescue RuntimeError => e
|
58
|
+
puts "Command Line Error! #{e.class}: #{e}"
|
59
|
+
puts e.backtrace
|
60
|
+
end
|
61
|
+
print '> '
|
62
|
+
command_line = gets.strip
|
63
|
+
end
|
64
|
+
puts 'goodbye'
|
65
|
+
exit(0)
|
66
|
+
end
|
67
|
+
|
68
|
+
def execute_dropbox_command(cmd_line)
|
69
|
+
command = Shellwords.shellwords cmd_line
|
70
|
+
method = command.first
|
71
|
+
if LOGIN_REQUIRED.include? method
|
72
|
+
if @client
|
73
|
+
send(method.to_sym, command)
|
74
|
+
else
|
75
|
+
puts 'must be logged in; type \'login\' to get started.'
|
76
|
+
end
|
77
|
+
elsif ['login', 'help'].include? method
|
78
|
+
send(method.to_sym)
|
79
|
+
else
|
80
|
+
if command.first && !command.first.strip.empty?
|
81
|
+
puts 'invalid command. type \'help\' to see commands.'
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def logout(command)
|
87
|
+
@client = nil
|
88
|
+
puts "You are logged out."
|
89
|
+
end
|
90
|
+
|
91
|
+
def put(command)
|
92
|
+
fname = command[1]
|
93
|
+
|
94
|
+
#If the user didn't specifiy the file name, just use the name of the file on disk
|
95
|
+
if command[2]
|
96
|
+
new_name = command[2]
|
97
|
+
else
|
98
|
+
new_name = File.basename(fname)
|
99
|
+
end
|
100
|
+
|
101
|
+
if fname && !fname.empty? && File.exists?(fname) && (File.ftype(fname) == 'file') && File.stat(fname).readable?
|
102
|
+
#This is where we call the the Dropbox Client
|
103
|
+
pp @client.put_file(new_name, open(fname))
|
104
|
+
else
|
105
|
+
puts "couldn't find the file #{ fname }"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def get(command)
|
110
|
+
dest = command[2]
|
111
|
+
if !command[1] || command[1].empty?
|
112
|
+
puts "please specify item to get"
|
113
|
+
elsif !dest || dest.empty?
|
114
|
+
puts "please specify full local path to dest, i.e. the file to write to"
|
115
|
+
elsif File.exists?(dest)
|
116
|
+
puts "error: File #{dest} already exists."
|
117
|
+
else
|
118
|
+
src = clean_up(command[1])
|
119
|
+
out,metadata = @client.get_file_and_metadata('/' + src)
|
120
|
+
puts "Metadata:"
|
121
|
+
pp metadata
|
122
|
+
open(dest, 'w'){|f| f.write out }
|
123
|
+
puts "wrote file #{dest}."
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def mkdir(command)
|
128
|
+
pp @client.file_create_folder(command[1])
|
129
|
+
end
|
130
|
+
|
131
|
+
# Example:
|
132
|
+
# > thumbnail pic1.jpg ~/pic1-local.jpg large
|
133
|
+
def thumbnail(command)
|
134
|
+
dest = command[2]
|
135
|
+
command[3] ||= 'small'
|
136
|
+
out,metadata = @client.thumbnail_and_metadata(command[1], command[3])
|
137
|
+
puts "Metadata:"
|
138
|
+
pp metadata
|
139
|
+
open(dest, 'w'){|f| f.write out }
|
140
|
+
puts "wrote thumbnail#{dest}."
|
141
|
+
end
|
142
|
+
|
143
|
+
def cp(command)
|
144
|
+
src = clean_up(command[1])
|
145
|
+
dest = clean_up(command[2])
|
146
|
+
pp @client.file_copy(src, dest)
|
147
|
+
end
|
148
|
+
|
149
|
+
def mv(command)
|
150
|
+
src = clean_up(command[1])
|
151
|
+
dest = clean_up(command[2])
|
152
|
+
pp @client.file_move(src, dest)
|
153
|
+
end
|
154
|
+
|
155
|
+
def rm(command)
|
156
|
+
pp @client.file_delete(clean_up(command[1]))
|
157
|
+
end
|
158
|
+
|
159
|
+
def search(command)
|
160
|
+
resp = @client.search('/',clean_up(command[1]))
|
161
|
+
|
162
|
+
for item in resp
|
163
|
+
puts item['path']
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
def info(command)
|
168
|
+
pp @client.account_info
|
169
|
+
end
|
170
|
+
|
171
|
+
def ls(command)
|
172
|
+
command[1] = '/' + clean_up(command[1] || '')
|
173
|
+
resp = @client.metadata(command[1])
|
174
|
+
|
175
|
+
if resp['contents'].length > 0
|
176
|
+
for item in resp['contents']
|
177
|
+
puts item['path']
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
def help
|
183
|
+
puts "commands are: login #{LOGIN_REQUIRED.join(' ')} help exit"
|
184
|
+
end
|
185
|
+
|
186
|
+
def clean_up(str)
|
187
|
+
return str.gsub(/^\/+/, '') if str
|
188
|
+
str
|
189
|
+
end
|
190
190
|
end
|
191
191
|
|
192
192
|
cli = DropboxCLI.new
|