dropbox-sdk 1.3 → 1.5.1
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/CHANGELOG +10 -0
- data/cli_example.rb +0 -0
- data/lib/dropbox_sdk.rb +112 -13
- metadata +10 -7
data/CHANGELOG
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
1.5.1 (2012-8-20)
|
2
|
+
* Fixed packaging.
|
3
|
+
|
4
|
+
1.5 (2012-8-15)
|
5
|
+
* Support for uploading large files via /chunked_upload
|
6
|
+
|
7
|
+
1.3.1 (2012-5-16)
|
8
|
+
* Increase metadata() file list limit to 25,000 (used to be 10,000).
|
9
|
+
* Use CGI.escape() instead of the deprecated URI.escape().
|
10
|
+
|
1
11
|
1.3 (2012-3-26)
|
2
12
|
* Add support for the /delta API.
|
3
13
|
* Add support for the "copy ref" API.
|
data/cli_example.rb
CHANGED
File without changes
|
data/lib/dropbox_sdk.rb
CHANGED
@@ -9,9 +9,9 @@ module Dropbox # :nodoc:
|
|
9
9
|
API_SERVER = "api.dropbox.com"
|
10
10
|
API_CONTENT_SERVER = "api-content.dropbox.com"
|
11
11
|
WEB_SERVER = "www.dropbox.com"
|
12
|
-
|
12
|
+
|
13
13
|
API_VERSION = 1
|
14
|
-
SDK_VERSION = "1.
|
14
|
+
SDK_VERSION = "1.5.1"
|
15
15
|
|
16
16
|
TRUSTED_CERT_FILE = File.join(File.dirname(__FILE__), 'trusted-certs.crt')
|
17
17
|
end
|
@@ -401,6 +401,107 @@ class DropboxClient
|
|
401
401
|
parse_response(response)
|
402
402
|
end
|
403
403
|
|
404
|
+
# Returns a ChunkedUploader object.
|
405
|
+
#
|
406
|
+
# Args:
|
407
|
+
# * file_obj: The file-like object to be uploaded. Must support .read()
|
408
|
+
# * total_size: The total size of file_obj
|
409
|
+
def get_chunked_uploader(file_obj, total_size)
|
410
|
+
ChunkedUploader.new(self, file_obj, total_size)
|
411
|
+
end
|
412
|
+
|
413
|
+
# ChunkedUploader is responsible for uploading a large file to Dropbox in smaller chunks.
|
414
|
+
# This allows large files to be uploaded and makes allows recovery during failure.
|
415
|
+
class ChunkedUploader
|
416
|
+
attr_accessor :file_obj, :total_size, :offset, :upload_id, :client
|
417
|
+
|
418
|
+
def initialize(client, file_obj, total_size)
|
419
|
+
@client = client
|
420
|
+
@file_obj = file_obj
|
421
|
+
@total_size = total_size
|
422
|
+
@upload_id = nil
|
423
|
+
@offset = 0
|
424
|
+
end
|
425
|
+
|
426
|
+
# Uploads data from this ChunkedUploader's file_obj in chunks, until
|
427
|
+
# an error occurs. Throws an exception when an error occurs, and can
|
428
|
+
# be called again to resume the upload.
|
429
|
+
#
|
430
|
+
# Args:
|
431
|
+
# * chunk_size: The chunk size for each individual upload. Defaults to 4MB.
|
432
|
+
def upload(chunk_size=4*1024*1024)
|
433
|
+
last_chunk = nil
|
434
|
+
|
435
|
+
while @offset < @total_size
|
436
|
+
if not last_chunk
|
437
|
+
last_chunk = @file_obj.read(chunk_size)
|
438
|
+
end
|
439
|
+
|
440
|
+
resp = {}
|
441
|
+
begin
|
442
|
+
resp = @client.parse_response(@client.partial_chunked_upload(last_chunk, @upload_id, @offset))
|
443
|
+
last_chunk = nil
|
444
|
+
rescue DropboxError => e
|
445
|
+
resp = JSON.parse(e.http_response.body)
|
446
|
+
raise unless resp.has_key? 'offset'
|
447
|
+
end
|
448
|
+
|
449
|
+
if resp.has_key? 'offset' and resp['offset'] > @offset
|
450
|
+
@offset += (resp['offset'] - @offset) if resp['offset']
|
451
|
+
last_chunk = nil
|
452
|
+
end
|
453
|
+
@upload_id = resp['upload_id'] if resp['upload_id']
|
454
|
+
end
|
455
|
+
end
|
456
|
+
|
457
|
+
# Completes a file upload
|
458
|
+
#
|
459
|
+
# Args:
|
460
|
+
# * to_path: The directory path to upload the file to. If the destination
|
461
|
+
# directory does not yet exist, it will be created.
|
462
|
+
# * overwrite: Whether to overwrite an existing file at the given path. [default is False]
|
463
|
+
# If overwrite is False and a file already exists there, Dropbox
|
464
|
+
# will rename the upload to make sure it doesn't overwrite anything.
|
465
|
+
# You must check the returned metadata to know what this new name is.
|
466
|
+
# This field should only be True if your intent is to potentially
|
467
|
+
# clobber changes to a file that you don't know about.
|
468
|
+
# * parent_rev: The rev field from the 'parent' of this upload.
|
469
|
+
# If your intent is to update the file at the given path, you should
|
470
|
+
# pass the parent_rev parameter set to the rev value from the most recent
|
471
|
+
# metadata you have of the existing file at that path. If the server
|
472
|
+
# has a more recent version of the file at the specified path, it will
|
473
|
+
# automatically rename your uploaded file, spinning off a conflict.
|
474
|
+
# Using this parameter effectively causes the overwrite parameter to be ignored.
|
475
|
+
# The file will always be overwritten if you send the most-recent parent_rev,
|
476
|
+
# and it will never be overwritten you send a less-recent one.
|
477
|
+
#
|
478
|
+
# Returns:
|
479
|
+
# * A Hash with the metadata of file just uploaded.
|
480
|
+
# For a detailed description of what this call returns, visit:
|
481
|
+
# https://www.dropbox.com/developers/reference/api#metadata
|
482
|
+
def finish(to_path, overwrite=false, parent_rev=nil)
|
483
|
+
response = @client.commit_chunked_upload(to_path, @upload_id, overwrite, parent_rev)
|
484
|
+
@client.parse_response(response)
|
485
|
+
end
|
486
|
+
end
|
487
|
+
|
488
|
+
def commit_chunked_upload(to_path, upload_id, overwrite=false, parent_rev=nil) #:nodoc
|
489
|
+
params = {'overwrite' => overwrite.to_s,
|
490
|
+
'upload_id' => upload_id,
|
491
|
+
'parent_rev' => parent_rev.to_s,
|
492
|
+
}
|
493
|
+
@session.do_post(build_url("/commit_chunked_upload/#{@root}#{format_path(to_path)}", params, content_server=true))
|
494
|
+
end
|
495
|
+
|
496
|
+
def partial_chunked_upload(data, upload_id=nil, offset=nil) #:nodoc
|
497
|
+
params = {}
|
498
|
+
params['upload_id'] = upload_id.to_s if upload_id
|
499
|
+
params['offset'] = offset.to_s if offset
|
500
|
+
@session.do_put(build_url('/chunked_upload', params, content_server=true),
|
501
|
+
{'Content-Type' => "application/octet-stream"},
|
502
|
+
data)
|
503
|
+
end
|
504
|
+
|
404
505
|
# Download a file
|
405
506
|
#
|
406
507
|
# Args:
|
@@ -557,7 +658,7 @@ class DropboxClient
|
|
557
658
|
# * file_limit: The maximum number of file entries to return within
|
558
659
|
# a folder. If the number of files in the directory exceeds this
|
559
660
|
# limit, an exception is raised. The server will return at max
|
560
|
-
#
|
661
|
+
# 25,000 files within a folder.
|
561
662
|
# * hash: Every directory listing has a hash parameter attached that
|
562
663
|
# can then be passed back into this function later to save on
|
563
664
|
# bandwidth. Rather than returning an unchanged folder's contents, if
|
@@ -571,7 +672,7 @@ class DropboxClient
|
|
571
672
|
# * A Hash object with the metadata of the file or folder (and contained files if
|
572
673
|
# appropriate). For a detailed description of what this call returns, visit:
|
573
674
|
# https://www.dropbox.com/developers/reference/api#metadata
|
574
|
-
def metadata(path, file_limit=
|
675
|
+
def metadata(path, file_limit=25000, list=true, hash=nil, rev=nil, include_deleted=false)
|
575
676
|
params = {
|
576
677
|
"file_limit" => file_limit.to_s,
|
577
678
|
"list" => list.to_s,
|
@@ -697,9 +798,9 @@ class DropboxClient
|
|
697
798
|
# Arguments:
|
698
799
|
# * from_path: The path to the file to be thumbnailed.
|
699
800
|
# * size: A string describing the desired thumbnail size. At this time,
|
700
|
-
# 'small', 'medium',
|
701
|
-
# (
|
702
|
-
#
|
801
|
+
# 'small' (32x32), 'medium' (64x64), 'large' (128x128), 's' (64x64),
|
802
|
+
# 'm' (128x128), 'l' (640x640), and 'xl' (1024x1024) are officially supported sizes.
|
803
|
+
# Check https://www.dropbox.com/developers/reference/api#thumbnails
|
703
804
|
# for more details. [defaults to large]
|
704
805
|
# Returns:
|
705
806
|
# * The thumbnail data
|
@@ -708,7 +809,7 @@ class DropboxClient
|
|
708
809
|
parse_response(response, raw=true)
|
709
810
|
end
|
710
811
|
|
711
|
-
# Download a thumbnail for an image
|
812
|
+
# Download a thumbnail for an image along with the image's metadata.
|
712
813
|
#
|
713
814
|
# Arguments:
|
714
815
|
# * from_path: The path to the file to be thumbnailed.
|
@@ -788,9 +889,7 @@ class DropboxClient
|
|
788
889
|
# Returns:
|
789
890
|
# * The HTTPResponse for the thumbnail request.
|
790
891
|
def thumbnail_impl(from_path, size='large') # :nodoc:
|
791
|
-
from_path = format_path(from_path,
|
792
|
-
|
793
|
-
raise DropboxError.new("size must be small medium or large. (not '#{size})") unless ['small','medium','large'].include?(size)
|
892
|
+
from_path = format_path(from_path, true)
|
794
893
|
|
795
894
|
params = {
|
796
895
|
"size" => size
|
@@ -833,7 +932,7 @@ class DropboxClient
|
|
833
932
|
path = "/fileops/copy"
|
834
933
|
|
835
934
|
params = {'from_copy_ref' => copy_ref,
|
836
|
-
'to_path' => "#{
|
935
|
+
'to_path' => "#{to_path}",
|
837
936
|
'root' => @root}
|
838
937
|
|
839
938
|
response = @session.do_post(build_url(path, params))
|
@@ -856,7 +955,7 @@ class DropboxClient
|
|
856
955
|
|
857
956
|
if params
|
858
957
|
target.query = params.collect {|k,v|
|
859
|
-
|
958
|
+
CGI.escape(k) + "=" + CGI.escape(v)
|
860
959
|
}.join("&")
|
861
960
|
end
|
862
961
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dropbox-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.5.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
13
|
-
default_executable:
|
12
|
+
date: 2012-09-06 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: json
|
17
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
18
17
|
none: false
|
19
18
|
requirements:
|
20
19
|
- - ! '>='
|
@@ -22,7 +21,12 @@ dependencies:
|
|
22
21
|
version: '0'
|
23
22
|
type: :runtime
|
24
23
|
prerelease: false
|
25
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
26
30
|
description: ! " A library that provides a plain function-call interface to
|
27
31
|
the\n Dropbox API web endpoints.\n"
|
28
32
|
email:
|
@@ -39,7 +43,6 @@ files:
|
|
39
43
|
- web_file_browser.rb
|
40
44
|
- lib/dropbox_sdk.rb
|
41
45
|
- lib/trusted-certs.crt
|
42
|
-
has_rdoc: true
|
43
46
|
homepage: http://www.dropbox.com/developers/
|
44
47
|
licenses:
|
45
48
|
- MIT
|
@@ -61,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
61
64
|
version: '0'
|
62
65
|
requirements: []
|
63
66
|
rubyforge_project:
|
64
|
-
rubygems_version: 1.
|
67
|
+
rubygems_version: 1.8.24
|
65
68
|
signing_key:
|
66
69
|
specification_version: 3
|
67
70
|
summary: Dropbox REST API Client.
|