jekyll-indico 0.4.2 → 0.5.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3ba6c0b97ed60402adc30d9f4d0c0077b7c7293b
4
- data.tar.gz: '0322806b14154b9d0da3441ed64ff0931276736e'
3
+ metadata.gz: 4e2a1ea8813f626061be2c5da553cafe9453aaac
4
+ data.tar.gz: '06758dd8b0908b58f065a13a5fc8f8990ff1ab0d'
5
5
  SHA512:
6
- metadata.gz: 60013b3c444d121db0b865797eb9353b47220f2b6b186f5d949aa27b7426976ad3d7914624b9cb4578a5c397a08847907b0637dd531fc47a121ef005f279061e
7
- data.tar.gz: 82c1b136bec61c8fe09011e3a62376c39981e1195febcd70e5ae4f30e9bbc7dcaf6f77626129e2782e0f0831707231b68d6a4c84063439a21b1a0a8f0a17305d
6
+ metadata.gz: 7f909dd6bffbd0f595c03daa73d2da3fc234a3ff9f72ccca3e35e532a962dada79dc5be4f978b3aa4e4c92edbb6248807d03be92e08658fb7d45c679576a4dc1
7
+ data.tar.gz: 246baf00d16729890482b79743ef9c625e6976c52bf8c336c91b66bfd039c6a6c3f1333f6984e393e8de366b391ce6be2b499b1ddd257a7b50161b42550967ad
data/CHANGELOG.md CHANGED
@@ -1,3 +1,20 @@
1
+ # Version 0.5
2
+
3
+ Added a way to paginate. Use `paginate: N` to iterate over pages of results.
4
+
5
+ # Version 0.4.5
6
+
7
+ Fix timeout being incorrectly called again.
8
+
9
+ # Version 0.4.4
10
+
11
+ Fix timeout being incorrectly called.
12
+
13
+ # Version 0.4.3
14
+
15
+ Fix warning message for classic tokens. Add time printout to help judge need for
16
+ timeout setting.
17
+
1
18
  # Version 0.4.2
2
19
 
3
20
  Remove broken support for classic tokens. Modern `INDICO_TOKEN` required.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- jekyll-indico (0.4.2)
4
+ jekyll-indico (0.5.0)
5
5
  jekyll (>= 3.8, < 5.0)
6
6
 
7
7
  GEM
@@ -54,12 +54,12 @@ GEM
54
54
  public_suffix (4.0.6)
55
55
  rainbow (3.1.1)
56
56
  rake (13.0.6)
57
- rb-fsevent (0.11.0)
57
+ rb-fsevent (0.11.1)
58
58
  rb-inotify (0.10.1)
59
59
  ffi (~> 1.0)
60
60
  regexp_parser (2.2.0)
61
61
  rexml (3.2.5)
62
- rouge (3.27.0)
62
+ rouge (3.28.0)
63
63
  rspec (3.10.0)
64
64
  rspec-core (~> 3.10.0)
65
65
  rspec-expectations (~> 3.10.0)
data/README.md CHANGED
@@ -14,13 +14,15 @@ indico:
14
14
  url: https://indico.cern.ch # Indico instance to use (REQUIRED)
15
15
  data: indico # Optional, folder name in _data to use
16
16
  cache-command: bundle exec rake cache # Optional, user msg if you support it
17
+ paginate: 20 # Optional integer number of results per page (auto-iterates over all pages)
18
+ timeout: 120 # Optional timeout in number of seconds (default: 60)
17
19
  ids:
18
20
  topical: 10570
19
21
  blueprint: 11329
20
22
  ```
21
23
 
22
24
  This plugin will automatically use an API token if your environment contains
23
- `INDICO_TOKEN`. You should generate this and replace `INDICO_API` and
25
+ `INDICO_TOKEN`. You should generate this and replace `INDICO_API_KEY` and
24
26
  `INDICO_SECRET_KEY` with it. You'll want the "Classic API" read permissions set
25
27
  on it.
26
28
 
@@ -23,10 +23,10 @@ module JekyllIndico
23
23
  attr_accessor :dict
24
24
 
25
25
  # ID for IRIS-HEP: 10570
26
- def initialize(base_url, indico_id, **kargs)
26
+ def initialize(base_url, indico_id, limit: nil, **kargs)
27
27
  @dict = {}
28
28
 
29
- download_and_iterate(base_url, indico_id, **kargs) do |i|
29
+ download_and_iterate(base_url, indico_id, limit: limit, **kargs) do |i|
30
30
  # Trim paragraph tags
31
31
  d = i['description']
32
32
  d = d[3..-1] if d.start_with? '<p>'
@@ -62,25 +62,43 @@ module JekyllIndico
62
62
 
63
63
  private
64
64
 
65
- # Run a block over each item in the downloaded results
66
- def download_and_iterate(base_url, indico_id, **params, &block)
67
- params[:pretty] = 'no'
65
+ def get_parsed_results(base_url, indico_id, timeout: nil, **params)
66
+ opts = { use_ssl: true }
67
+ opts[:read_timeout] = timeout if timeout
68
+
68
69
  uri = URI.join(base_url, "/export/categ/#{indico_id}.json")
69
70
  uri.query = URI.encode_www_form(params)
70
71
 
71
72
  req = Net::HTTP::Get.new(uri)
72
73
  if ENV['INDICO_TOKEN']
73
74
  req['Authorization'] = "Bearer #{ENV['INDICO_TOKEN']}"
74
- elsif ENV['INDICO_SECRET_KEY'] || ENV['INDICO_API']
75
+ elsif ENV['INDICO_SECRET_KEY'] || ENV['INDICO_API_KEY']
75
76
  raise Error, 'Use INDICO_TOKEN with a new-style token'
76
77
  end
77
78
 
78
- response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
79
+ response = Net::HTTP.start(uri.hostname, uri.port, **opts) { |http| http.request(req) }
79
80
 
80
- string = response.body
81
- parsed = JSON.parse(string) # returns a hash
81
+ parsed = JSON.parse(response.body)
82
+ parsed['results']
83
+ end
82
84
 
83
- parsed['results'].each(&block)
85
+ # Run a block over each item in the downloaded results
86
+ def download_and_iterate(base_url, indico_id, limit: nil, **params, &block)
87
+ params[:limit] = limit if limit
88
+ params[:pretty] = 'no'
89
+
90
+ unless limit
91
+ results = get_parsed_results(base_url, indico_id, **params)
92
+ results.each(&block)
93
+ return
94
+ end
95
+
96
+ 0.step.each do |n|
97
+ results = get_parsed_results(base_url, indico_id, offset: n * limit, **params)
98
+ break if results.empty?
99
+
100
+ results.each(&block)
101
+ end
84
102
  end
85
103
  end
86
104
  end
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'benchmark'
4
+ require 'net/http'
3
5
  require 'yaml'
4
6
 
5
7
  require 'jekyll'
6
8
 
7
9
  require 'jekyll-indico/core'
8
10
 
9
- require 'net/http'
10
-
11
11
  module JekyllIndico
12
12
  # This is a Jekyll Generator
13
13
  class GetIndico < Jekyll::Generator
@@ -16,9 +16,6 @@ module JekyllIndico
16
16
  @site = site
17
17
  @cache_msg = @site.config.dig('indico', 'cache-command')
18
18
 
19
- timeout = @site.config.dig('indico', 'timeout')
20
- Net::HTTP.read_timeout = timeout if timeout
21
-
22
19
  meeting_ids = @site.config.dig('indico', 'ids')
23
20
  raise MissingIDs, 'indico: ids: MISSING from your config!' unless meeting_ids
24
21
  raise MissingIDs, 'indico: ids: must be a hash!' unless meeting_ids.is_a?(Hash)
@@ -37,13 +34,19 @@ module JekyllIndico
37
34
  data_path = @site.config.dig('indico', 'data') || 'indico'
38
35
  @site.data[data_path] = {} unless @site.data.key? data_path
39
36
 
37
+ timeout = @site.config.dig('indico', 'timeout')
38
+ limit = @site.config.dig('indico', 'paginate')
39
+
40
40
  # Do nothing if already downloaded
41
41
  return if @site.data[data_path].key? name
42
42
 
43
43
  msg = @cache_msg ? " - run `#{@cache_msg}` to cache" : ''
44
- puts "Accessing Indico meeting API for #{name}:#{number}#{msg}"
45
- iris_meeting = Meetings.new(base_url, number)
46
- @site.data[data_path][name] = iris_meeting.dict
44
+ print "Accessing Indico meeting API for #{name}:#{number}#{msg}"
45
+ time = Benchmark.realtime do
46
+ iris_meeting = Meetings.new(base_url, number, timeout: timeout, limit: limit)
47
+ @site.data[data_path][name] = iris_meeting.dict
48
+ end
49
+ puts ", took #{time.round(1)} s"
47
50
  end
48
51
  end
49
52
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JekyllIndico
4
- VERSION = '0.4.2'
4
+ VERSION = '0.5.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-indico
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henry Schreiner
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-01 00:00:00.000000000 Z
11
+ date: 2022-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll