figshare_api_v2 0.9.9 → 0.9.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5a59303e131674b6b915f07bf0e0aa317a3d5d594c8e87586fe273d8ed83697d
4
- data.tar.gz: b8bdb004509e69e295b110f60f98ac6da83ea2ea3c5d2bf72e9d46ec041d274a
3
+ metadata.gz: 1b02d428dc8877f75c9bf9ba05d54b1465944745ec2ff1ca0c962bc6803cdc0a
4
+ data.tar.gz: 6095dffd50dbd105b0ccadeffd3f9243c0434f44cb79bcec32872008add97fab
5
5
  SHA512:
6
- metadata.gz: ebdcee71baa8b80d0c434c9c041255a8843c897574c00725c60c288670854c0d3bce3e404805f03201951b981148ea8bfc49acf465b686af75cabd2bd47655f9
7
- data.tar.gz: 5cdd11942289e5cb75e4e09afd730ebd12209b161fc68221aa5dadc347a90fc04370d9af464c419b69ed7cb794097254d796cd318ffc9957402cd3736728328b
6
+ metadata.gz: 59456d19b2df1624bd7f276c6672326ce888fa967f51ff8aace4b8317ac67990e579aaa85affcd098f4b390b46073353df479d50cd9a65b1b690e04d2a96fcc1
7
+ data.tar.gz: c06980357bed4295c410ae9f08a04de00108620647268445990c8d7c5a82221d4d824c0a32e1baa08918f9be9c628057afce07dca3c5da2b0013258f1258e485
data/History.txt CHANGED
@@ -1,3 +1,23 @@
1
+ robertburrowes Fri May 13 08:40:05 2022 +1200
2
+ Bumped minor version
3
+ robertburrowes Thu May 12 17:25:07 2022 +1200
4
+ Moved the accounts_wrapper() into institution.accounts(), less the debugging stuff
5
+ robertburrowes Thu May 12 17:06:48 2022 +1200
6
+ Comment
7
+ robertburrowes Thu May 12 16:52:57 2022 +1200
8
+ Check returned account IDs are in order (they do seem to be)
9
+ robertburrowes Thu May 12 16:32:58 2022 +1200
10
+ Incorporate the new id_gte into institute.accounts, as page/page_size pagination has a 9000 record limit.
11
+ robertburrowes Thu May 12 16:22:48 2022 +1200
12
+ return earlier, in _paginate, to not set 'page'
13
+ robertburrowes Thu May 12 15:56:44 2022 +1200
14
+ Added 'once_only' to the post and get _pagination calls, so we don't automatically move onto the next page.
15
+ robertburrowes Thu May 12 11:18:45 2022 +1200
16
+ Refactored _pagination response code to see if it helped fix the duplicate record issue. It didn't.
17
+ robertburrowes Thu May 12 09:43:45 2022 +1200
18
+ Added debug output of updated Figshare API.
19
+ robertburrowes Wed May 11 09:07:42 2022 +1200
20
+ update comments
1
21
  robertburrowes Tue May 10 10:42:27 2022 +1200
2
22
  Comment
3
23
  robertburrowes Tue May 10 10:40:02 2022 +1200
data/lib/base.rb CHANGED
@@ -71,41 +71,53 @@ module Figshare
71
71
  # @param by_offset [Boolean] use offset/limit rather than page/page_size in API calls
72
72
  # @yield [String] if given a block, iterates through the result from figshare
73
73
  # @return [Integer] number of results.
74
- private def get_paginate(api_query:, args: {}, debug: false, by_offset: false, &block)
74
+ private def get_paginate(api_query:, args: {}, debug: false, by_offset: false, once_only: false, &block)
75
75
  args = {} if args.nil?
76
- if ! args.is_a?(Hash)
77
- raise 'get_paginate(): Expecting args to be a Hash'
78
- end
79
-
80
- # Loop variables, if we are using pages
81
- page = args['page'].nil? ? 1 : args['page']
82
- page_size = args['page_size'].nil? ? 100 : args['page_size']
83
-
84
- # Loop variables, if we are using offsets
85
- offset = args['offset'].nil? ? 0 : args['offset']
86
- limit = args['limit'].nil? ? 100 : args['limit']
76
+ raise 'get_paginate(): Expecting args to be a Hash' unless args.is_a?(Hash)
87
77
 
88
78
  by_offset = true if args['page'].nil? && ! args['offset'].nil?
79
+ if by_offset
80
+ # Loop variables, if we are using offsets
81
+ offset = args['offset'].nil? ? 0 : args['offset']
82
+ limit = args['limit'].nil? ? 100 : args['limit']
83
+ args['offset'] = offset
84
+ args['limit'] = limit
85
+ else
86
+ page = args['page'].nil? ? 1 : args['page']
87
+ page_size = args['page_size'].nil? ? 100 : args['page_size']
88
+ args['page'] = page
89
+ args['page_size'] = page_size
90
+ end
89
91
 
90
92
  # How many results so far.
91
93
  result_count = 0
92
94
 
93
95
  loop do
94
96
  content_type = response = nil
95
- form_args = by_offset ? { 'limit' => limit, 'offset' => offset } : { 'page_size' => page_size, 'page' => page }
96
97
  WIKK::WebBrowser.https_session( host: @hostname, verify_cert: false ) do |ws|
97
98
  response = ws.get_page( query: "#{@api_url}#{api_query}",
98
99
  authorization: "token #{@auth_token}",
99
- form_values: form_args.merge(args)
100
+ form_values: args
100
101
  )
101
102
  content_type = ws.header_value(key: 'Content-Type')
102
103
  end
104
+ # File.write("/tmp/debug_#{args['id_gte']}_#{page}.json", response)
103
105
  page_count = iterate_json_response(response: response, content_type: content_type, debug: debug, &block)
104
106
  result_count += page_count
105
- break if page_count < page_size # Got less results than we asked for, so it was the last page
106
107
 
107
- page += 1 # Ready to fetch next page
108
- offset += limit # if we use offset, then mor
108
+ return result_count if once_only
109
+
110
+ if by_offset
111
+ break if page_count < limit # Got less results than we asked for, so it was the last page
112
+
113
+ offset += limit # if we use offset
114
+ args['offset'] = offset
115
+ else
116
+ break if page_count < page_size # Got less results than we asked for, so it was the last page
117
+
118
+ page += 1 # Ready to fetch next page
119
+ args['page'] = page
120
+ end
109
121
  end
110
122
 
111
123
  return result_count
@@ -156,42 +168,54 @@ module Figshare
156
168
  # @param by_offset [Boolean] use offset/limit rather than page/page_size in API calls
157
169
  # @yield [String] if given a block, iterates through the result from figshare
158
170
  # @return [Integer] number of results.
159
- private def post_paginate(api_query:, args: {}, debug: false, by_offset: false, &block)
171
+ private def post_paginate(api_query:, args: {}, debug: false, by_offset: false, once_only: false, &block)
160
172
  # Loop variables, if we are using pages
161
- page = args['page'].nil? ? 1 : args['page']
162
- page_size = args['page_size'].nil? ? 100 : args['page_size']
173
+ args = {} if args.nil?
174
+ raise 'post_paginate(): Expecting args to be a Hash' unless args.is_a?(Hash)
163
175
 
164
- # Loop variables, if we are using offsets
165
- offset = args['offset'].nil? ? 0 : args['offset']
166
- limit = args['limit'].nil? ? 100 : args['limit']
176
+ by_offset = true if args['page'].nil? && ! args['offset'].nil?
177
+ if by_offset
178
+ # Loop variables, if we are using offsets
179
+ offset = args['offset'].nil? ? 0 : args['offset']
180
+ limit = args['limit'].nil? ? 100 : args['limit']
181
+ args['offset'] = offset
182
+ args['limit'] = limit
183
+ else
184
+ page = args['page'].nil? ? 1 : args['page']
185
+ page_size = args['page_size'].nil? ? 100 : args['page_size']
186
+ args['page'] = page
187
+ args['page_size'] = page_size
188
+ end
167
189
 
168
190
  # How many results so far.
169
191
  result_count = 0
170
192
 
171
- by_offset = true if args['page'].nil? && ! args['offset'].nil?
172
-
173
- args = {} if args.nil?
174
- if ! args.is_a?(Hash)
175
- raise 'post_paginate(): Expecting args to be a Hash'
176
- end
177
-
178
193
  loop do
179
194
  content_type = response = nil
180
- form_args = by_offset ? { 'limit' => limit, 'offset' => offset } : { 'page_size' => page_size, 'page' => page }
181
195
  WIKK::WebBrowser.https_session( host: @hostname, verify_cert: false ) do |ws|
182
196
  response = ws.post_page( query: "#{@api_url}#{api_query}",
183
197
  content_type: 'application/json; charset=UTF-8',
184
198
  authorization: "token #{@auth_token}",
185
- data: args.merge(form_args).to_j
199
+ data: args.to_j
186
200
  )
187
201
  content_type = ws.header_value(key: 'Content-Type')
188
202
  end
189
203
  page_count = iterate_json_response(response: response, content_type: content_type, debug: debug, &block)
190
204
  result_count += page_count
191
- break if page_count < page_size # Got less results than we asked for, so it was the last page
192
205
 
193
- page += 1 # Ready to fetch next page
194
- offset += limit # if we use offset
206
+ return result_count if once_only
207
+
208
+ if by_offset
209
+ break if page_count < limit # Got less results than we asked for, so it was the last page
210
+
211
+ offset += limit # if we use offset
212
+ args['offset'] = offset
213
+ else
214
+ break if page_count < page_size # Got less results than we asked for, so it was the last page
215
+
216
+ page += 1 # Ready to fetch next page
217
+ args['page'] = page
218
+ end
195
219
  end
196
220
  return result_count
197
221
  end
@@ -1,7 +1,7 @@
1
1
  module Figshare # :nodoc:
2
2
  # Figshare module initialization
3
3
  #
4
- VERSION = '0.9.9'
4
+ VERSION = '0.9.10'
5
5
 
6
6
  require 'wikk_webbrowser'
7
7
  require 'wikk_json'
data/lib/institutions.rb CHANGED
@@ -14,9 +14,9 @@ module Figshare
14
14
  end
15
15
  end
16
16
 
17
- # Get the institional account details
17
+ # Get the institional account's details (not a person's account details)
18
18
  #
19
- # @yield [Hash]
19
+ # @yield [Hash] {id:, name: "institute"}
20
20
  def account(&block)
21
21
  get(api_query: 'account/institution', &block)
22
22
  end
@@ -137,12 +137,13 @@ module Figshare
137
137
  end
138
138
 
139
139
  # Get the accounts for which the account has administrative privileges (assigned and inherited).
140
+ # Accounts are returned in account id order, and there is a 9000 user upper limit. See id_gte.
140
141
  #
141
142
  # @param is_active [Boolean] user account is active
142
143
  # @param institution_user_id [String] As set in the HR upload
143
144
  # @param email [String] as set in the HR upload
144
- # @param id_lte [Integer] ID is <=
145
- # @param id_gte [Integer] ID is >=
145
+ # @param id_lte [Integer] ID is <= Introduced to get around the buffer limit of 9000 users
146
+ # @param id_gte [Integer] ID is >= Introduced to get around the buffer limit of 9000 users
146
147
  # @param page [Numeric] Pages start at 1. Page and Page size go together
147
148
  # @param page_size [Numeric]
148
149
  # @param offset [Numeric] offset is 0 based. Offset and Limit go together
@@ -157,6 +158,7 @@ module Figshare
157
158
  page_size: nil,
158
159
  offset: nil,
159
160
  limit: nil,
161
+ cursor_pagination: true,
160
162
  &block
161
163
  )
162
164
  args = {}
@@ -169,7 +171,26 @@ module Figshare
169
171
  args['page_size'] = page_size unless page_size.nil?
170
172
  args['offset'] = offset unless offset.nil?
171
173
  args['limit'] = limit unless limit.nil?
172
- get_paginate(api_query: 'account/institution/accounts', args: args, &block)
174
+ if cursor_pagination
175
+ highest_id_gte = 0
176
+ args['id_lte'] = nil
177
+ args['page_size'] = 100
178
+ loop do
179
+ count = 0
180
+ args['page'] = 1
181
+ args['id_gte'] = highest_id_gte + 1
182
+ get_paginate(api_query: 'account/institution/accounts', args: args, once_only: true) do |account|
183
+ next if account.nil? || account['id'].nil?
184
+
185
+ count += 1
186
+ highest_id_gte = account['id'].to_i if highest_id_gte < account['id'].to_i
187
+ yield account
188
+ end
189
+ break if count < 100 # Didn't reach the page_size limit.
190
+ end
191
+ else # Do it the old broken way (Pagination only works for the first 9000 entries)
192
+ get_paginate(api_query: 'account/institution/accounts', args: args, &block)
193
+ end
173
194
  end
174
195
 
175
196
  # Create new Institution Account
@@ -363,7 +363,7 @@ module Figshare
363
363
  # @param project_id [Integer] Figshare id of the project
364
364
  # @param article_id [Integer] Figshare id of the article
365
365
  # @param impersonate [Integer] Figshare account_id of the user we are making this call on behalf of
366
- # @yield [Array] See docs.figshare.com for article hash
366
+ # @yield [Array] See docs.figshare.com
367
367
  def artilce_files(project_id:, article_id:, impersonate: nil, &block)
368
368
  args = {}
369
369
  args['impersonate'] = impersonate unless impersonate.nil?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: figshare_api_v2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.9
4
+ version: 0.9.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Burrowes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-10 00:00:00.000000000 Z
11
+ date: 2022-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: wikk_json