piwigo-api 0.4.0 → 0.5.0

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: 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