piwigo-api 0.4.0 → 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
  SHA256:
3
- metadata.gz: 7b631bbf1feb2e43cdc914db7f8ae0e839739951a99bbf00d1789c65f64524d1
4
- data.tar.gz: 460e4d390cc2362865f0b9f168bd821f0b0451599daceaa8afaceca137ebc71e
3
+ metadata.gz: 25b24077502730104d7ff8bb0fc3e4de59c1de1de94157936dd80846da1ee876
4
+ data.tar.gz: ecc50b004fc354d5f45599c745ccec83a5f77293eed1fd41d4ab34280e23cde9
5
5
  SHA512:
6
- metadata.gz: 68fe0e10a5ccfc1522b8fdef5c0f964e7702ff0d676282d406aa811d5f39bf29fb4893be125a8143ce9033f077043c3277fc6d871c23374060bab506bac687b3
7
- data.tar.gz: 9e42d435b2c00cd85db2ebc2d77511497f9f7ba7ec7d2deb7b1e61d08434566a31d844fa80a864a2bbe92431fb81bbc545eaa1277c4eb51518ee650b8ac83549
6
+ metadata.gz: 7de1e335ce5f1a13e912cce73fe2cd3312876d687a64cc3ae488f419c11849b9484ba70d60393215566c3de8c6e9f489d9fdc1099d755c6f7670234a46ce83f6
7
+ data.tar.gz: 8cbc75ee1512e858c9190263c1c4a741ffccf0d71249c8813e7c501c73785534db59eefb85de8ddd472d6d519dd890a7609e41e7a4374d1fd9c869011cc6e6cb
data/.rubocop.yaml CHANGED
@@ -1,3 +1,11 @@
1
+ AllCops:
2
+ Exclude:
3
+ - 'tests/*.rb'
4
+ TargetRubyVersion: 2.6
5
+
6
+ Style/FrozenStringLiteralComment:
7
+ Enabled: false
8
+
1
9
  Style/Encoding:
2
10
  Enabled: false
3
11
 
@@ -11,8 +19,4 @@ Metrics/AbcSize:
11
19
  Max: 40
12
20
 
13
21
  Metrics/MethodLength:
14
- Max: 40
15
-
16
- AllCops:
17
- Exclude:
18
- - 'tests/*.rb'
22
+ Max: 40
data/.vscode/launch.json CHANGED
@@ -4,8 +4,8 @@
4
4
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5
5
  "version": "0.2.0",
6
6
  "configurations": [
7
-
8
-
7
+
8
+
9
9
  {
10
10
  "name": "Debug Local File",
11
11
  "type": "Ruby",
data/CHANGELOG.md CHANGED
@@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ 0.5.0 - 2019-11-23
8
+ - Added a directory of example scripts
9
+ - Added a folder-album syncronization methods
10
+
7
11
  0.4.0 - 2019-11-20
8
12
  - Add methods to check for the existance of a specific image and to upload images
9
13
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- piwigo-api (0.4.0)
4
+ piwigo-api (0.5.0)
5
5
  http (~> 4.2)
6
6
  logger (~> 1.4)
7
7
 
@@ -14,9 +14,11 @@ GEM
14
14
  json
15
15
  simplecov
16
16
  url
17
+ diff-lcs (1.3)
17
18
  docile (1.3.2)
18
19
  domain_name (0.5.20190701)
19
20
  unf (>= 0.0.5, < 1.0.0)
21
+ ffi (1.11.2)
20
22
  ffi (1.11.2-x64-mingw32)
21
23
  ffi-compiler (1.0.1)
22
24
  ffi (>= 1.0.0)
@@ -36,6 +38,19 @@ GEM
36
38
  minitest (5.13.0)
37
39
  public_suffix (4.0.1)
38
40
  rake (10.5.0)
41
+ rspec (3.9.0)
42
+ rspec-core (~> 3.9.0)
43
+ rspec-expectations (~> 3.9.0)
44
+ rspec-mocks (~> 3.9.0)
45
+ rspec-core (3.9.0)
46
+ rspec-support (~> 3.9.0)
47
+ rspec-expectations (3.9.0)
48
+ diff-lcs (>= 1.2.0, < 2.0)
49
+ rspec-support (~> 3.9.0)
50
+ rspec-mocks (3.9.0)
51
+ diff-lcs (>= 1.2.0, < 2.0)
52
+ rspec-support (~> 3.9.0)
53
+ rspec-support (3.9.0)
39
54
  simplecov (0.17.1)
40
55
  docile (~> 1.1)
41
56
  json (>= 1.8, < 3)
@@ -56,6 +71,7 @@ DEPENDENCIES
56
71
  minitest (~> 5.0)
57
72
  piwigo-api!
58
73
  rake (~> 10.0)
74
+ rspec (~> 3.9)
59
75
 
60
76
  BUNDLED WITH
61
77
  2.0.2
@@ -0,0 +1,15 @@
1
+ ## Upload a single image
2
+
3
+ Upload a single image if it doesn't already exist. Image is not associated with any Albums. The image will named apple-pie-bars
4
+
5
+ ```ruby
6
+ session = Piwigo::Session.login('10.100.230.78', 'Adrian', 'mypassword', https: false)
7
+ unless session.nil?
8
+ filename = 'C:\photos\apple-pie-bars-articleLarge.jpg'
9
+ if Piwigo::Images.Lookup(session, filename).nil?
10
+ Piwigo::Images.Upload(session, filename, 'apple-pie-bars')
11
+ end
12
+ end
13
+ ```
14
+
15
+ Piwigo will automatically associate the Author of the image as `Adrian` matching the session login id.
data/lib/piwigo/albums.rb CHANGED
@@ -72,7 +72,7 @@ module Piwigo
72
72
  # @param [Logger] logger logger to output debug messages to (Optional)
73
73
  #
74
74
  # @return [Array<Album>] All albums that match the criteria, or nil there were no matches
75
- def self.list(session, album_id: nil, recursive: false, public: false, fullname: false, thumbnail_size: 'thumb', logger: nil)
75
+ def self.list(session, album_id: nil, recursive: nil, public: nil, fullname: nil, thumbnail_size: nil, logger: nil)
76
76
  raise 'Invalid session' if session.uri.nil?
77
77
 
78
78
  logger ||= Logger.new(STDOUT)
@@ -80,7 +80,15 @@ module Piwigo
80
80
  begin
81
81
  http = Net::HTTP.new(session.uri.host, session.uri.port)
82
82
  request = Net::HTTP::Post.new(session.uri.request_uri)
83
- request.body = "method=pwg.categories.getList&cat_id=#{album_id}&recursive=#{recursive}&public=#{public}&fullname=#{fullname}&thumbnail_size=#{thumbnail_size}"
83
+ form = {
84
+ method: 'pwg.categories.getList'
85
+ }
86
+ form[:cat_id] = album_id unless album_id.nil?
87
+ form[:recursive] = recursive unless recursive.nil?
88
+ form[:public] = public unless public.nil?
89
+ form[:fullname] = fullname unless fullname.nil?
90
+ form[:thumbnail_size] = thumbnail_size unless thumbnail_size.nil?
91
+ request.set_form_data(form)
84
92
  request['Cookie'] = [session.id]
85
93
 
86
94
  # Send the request
@@ -97,6 +105,21 @@ module Piwigo
97
105
  end
98
106
  end
99
107
 
108
+ # lookup a specific Album from a list of albums
109
+ #
110
+ # @param [<Type>] session
111
+ # @param [<Type>] album_name - Name of the album to locate
112
+ # @param [<Type>] logger <description>
113
+ #
114
+ # @return [<Type>] Album if located, nil otherwise
115
+ def self.lookup(session, album_name, logger: nil)
116
+ albums = list(session, recursive: true, fullname: false, logger: logger)
117
+ filtered = albums.select do |album|
118
+ album.name == album_name
119
+ end
120
+ filtered.size == 1 ? filtered[0] : nil
121
+ end
122
+
100
123
  # Adds an album.
101
124
  #
102
125
  # @param [Session] session to interact with Piwigo
@@ -113,10 +136,14 @@ module Piwigo
113
136
  begin
114
137
  http = Net::HTTP.new(session.uri.host, session.uri.port)
115
138
  request = Net::HTTP::Post.new(session.uri.request_uri)
116
- request.body = "method=pwg.categories.add&name=#{album.name}"
117
- request.body.concat "&parent=#{album.id_uppercat}" unless album.id_uppercat.nil?
118
- request.body.concat "&comment=#{album.comment}" unless album.comment.nil?
119
- request.body.concat "&status=#{album.status}" unless album.status.nil?
139
+ form = {
140
+ method: 'pwg.categories.add',
141
+ name: album.name
142
+ }
143
+ form[:parent] = album.id_uppercat unless album.id_uppercat.nil?
144
+ form[:comment] = album.comment unless album.comment.nil?
145
+ form[:status] = album.status unless album.status.nil?
146
+ request.set_form_data(form)
120
147
  request['Cookie'] = [session.id]
121
148
 
122
149
  # Send the request
@@ -0,0 +1,58 @@
1
+ require 'logger'
2
+ require 'find'
3
+ require_relative 'albums'
4
+ require_relative 'image_uploader'
5
+
6
+ module Piwigo
7
+ # Syncronize a folder with Piwigo
8
+ # - Album name will be the same as the folder name
9
+ # - Will be created as a top-level folder unless specified
10
+ class FolderSync
11
+ # Create a new ImageUploader
12
+ #
13
+ # @param [Session] session - session to a piwigo instance
14
+ def initialize(session, logger: nil)
15
+ @logger = logger || Logger.new(STDOUT)
16
+ @session = session
17
+ @current_album = nil
18
+ @parent_album = nil
19
+ end
20
+
21
+ def self.synchronize(session, directory, logger: nil)
22
+ unless File.directory?(directory)
23
+ @Logger.error "No such directory: #{directory}"
24
+ return false
25
+ end
26
+ FolderSync.new(session, logger: logger).synchronize(directory)
27
+ end
28
+
29
+ # Syncronize a folder with Piwigo
30
+ #
31
+ # @param [String] directory - directory to syncronize.
32
+ def synchronize(directory)
33
+ @logger.info "Processing Directory: #{directory}"
34
+
35
+ Find.find(directory) do |directory_entry|
36
+ next unless directory_entry != directory
37
+
38
+ if directory != directory_entry && File.directory?(directory_entry)
39
+ @parent_album = @current_album
40
+ @current_album = Piwigo::Albums::lookup(@session, File.basename(directory_entry))
41
+ if @current_album.nil?
42
+ album = Piwigo::Albums::Album.new(hash: { 'name' => File.basename(directory_entry),
43
+ 'id_uppercat' => @parent_album.nil? ? nil : @parent_album.id })
44
+ @current_album = Piwigo::Albums.add @session, album
45
+ end
46
+
47
+ synchronize directory_entry
48
+ else
49
+ @logger.info "Processing Image: #{directory_entry} in album '#{@current_album}''"
50
+ image = Piwigo::Images::lookup(@session, directory_entry)
51
+ if image.nil?
52
+ Piwigo::Images::ImageUploader.new(logger: @logger).upload(@session, directory_entry, File.basename(directory_entry))
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -30,7 +30,7 @@ module Piwigo
30
30
  # @param [<Type>] name of the image
31
31
  #
32
32
  # @return [Boolean] True if successful
33
- def Upload(session, filename, name)
33
+ def upload(session, filename, name)
34
34
  @session = session
35
35
  raise 'Invalid session' if @session.uri.nil?
36
36
 
@@ -41,7 +41,7 @@ module Piwigo
41
41
  chunk_num = 0
42
42
  image_content = File.binread(filename)
43
43
  original_sum = Digest::MD5.hexdigest(image_content)
44
- encoded_content = Base64.encode64(image_content)
44
+ encoded_content = image_content
45
45
  io = StringIO.new(encoded_content)
46
46
  until io.eof?
47
47
  chunk = io.read(MEGABYTE)
@@ -67,7 +67,7 @@ module Piwigo
67
67
  method: 'pwg.images.addChunk',
68
68
  original_sum: original_sum,
69
69
  position: position,
70
- data: data
70
+ data: Base64.encode64(data)
71
71
  }
72
72
  request.set_form_data(form)
73
73
  request['Cookie'] = [@session.id]
@@ -81,7 +81,7 @@ module Piwigo
81
81
  false
82
82
  end
83
83
  rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
84
- @logger.error "Image AddChunk failed: #{e.messages}"
84
+ @logger.error "Image AddChunk failed: #{e.message}"
85
85
  false
86
86
  end
87
87
 
@@ -123,7 +123,7 @@ module Piwigo
123
123
 
124
124
  response = http.request(request)
125
125
  if response.code == '500'
126
- @logger.error "Image Add failed: #{response.messages}"
126
+ @logger.error "Image Add failed: #{response.message}"
127
127
  false
128
128
  elsif response.code == '200'
129
129
  data = JSON.parse(response.body)
@@ -134,7 +134,7 @@ module Piwigo
134
134
  false
135
135
  end
136
136
  rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
137
- @logger.error "Image Add failed: #{e.messages}"
137
+ @logger.error "Image Add failed: #{e.message}"
138
138
  false
139
139
  end
140
140
  end
data/lib/piwigo/images.rb CHANGED
@@ -100,6 +100,7 @@ module Piwigo
100
100
  form[:recursive] = recursive unless recursive.nil?
101
101
  form[:per_page] = per_page unless per_page.nil?
102
102
  form[:order] = order unless order.nil?
103
+ form[:page] = page unless page.nil?
103
104
  request.set_form_data(form)
104
105
  request['Cookie'] = [session.id]
105
106
 
@@ -113,7 +114,7 @@ module Piwigo
113
114
  { paging: paging, images: images }
114
115
  end
115
116
  rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
116
- logger.error "Image List failed: #{e.messages}"
117
+ logger.error "Image List failed: #{e.message}"
117
118
  nil
118
119
  end
119
120
  end
@@ -125,8 +126,8 @@ module Piwigo
125
126
  # @param [<Type>] name of the image
126
127
  #
127
128
  # @return [Boolean] True if successful
128
- def self.Upload(session, file, name)
129
- ImageUploader.new(session, file, name).Upload
129
+ def self.upload(session, file, name)
130
+ ImageUploader.new(session, file, name).upload
130
131
  end
131
132
 
132
133
  # Checks existence of images
@@ -136,7 +137,7 @@ module Piwigo
136
137
  # @param [Logger] logger
137
138
  #
138
139
  # @return [Number] Piwigo image_id if matched, nil if not present
139
- def self.Lookup(session, file, logger: nil)
140
+ def self.lookup(session, file, logger: nil)
140
141
  raise 'Invalid session' if session.uri.nil?
141
142
 
142
143
  logger ||= Logger.new(STDOUT)
@@ -158,11 +159,12 @@ module Piwigo
158
159
  response = http.request(request)
159
160
  if response.code == '200'
160
161
  data = JSON.parse(response.body)
161
- logger.info "Image Lookup succeeded: #{data['result']}"
162
- data['result'][file_sum]
162
+ logger.info "Image lookup succeeded: #{data['result']}"
163
+ result = data['result'][file_sum]
164
+ result.nil? ? nil : result[file_sum]
163
165
  end
164
166
  rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
165
- logger.error "Image Lookup failed: #{e.messages}"
167
+ logger.error "Image lookup failed: #{e.message}"
166
168
  nil
167
169
  end
168
170
  end
@@ -1,3 +1,3 @@
1
1
  module Piwigo
2
- VERSION = '0.4.0'
2
+ VERSION = '0.5.0'.freeze
3
3
  end
data/piwigo-api.gemspec CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency 'codecov', '>= 0.1.10'
32
32
  spec.add_development_dependency 'minitest', '~> 5.0'
33
33
  spec.add_development_dependency 'rake', '~> 10.0'
34
-
34
+
35
35
  spec.add_runtime_dependency 'http', '~>4.2'
36
36
  spec.add_runtime_dependency 'logger', '~>1.4'
37
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: piwigo-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrian Gilbert
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-20 00:00:00.000000000 Z
11
+ date: 2019-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -118,8 +118,10 @@ files:
118
118
  - bin/console
119
119
  - bin/setup
120
120
  - codecov.yml
121
+ - examples/Upload_Image.md
121
122
  - lib/piwigo.rb
122
123
  - lib/piwigo/albums.rb
124
+ - lib/piwigo/folder_sync.rb
123
125
  - lib/piwigo/image_uploader.rb
124
126
  - lib/piwigo/images.rb
125
127
  - lib/piwigo/session.rb