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 +4 -4
- data/.rubocop.yaml +9 -5
- data/.vscode/launch.json +2 -2
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +17 -1
- data/examples/Upload_Image.md +15 -0
- data/lib/piwigo/albums.rb +33 -6
- data/lib/piwigo/folder_sync.rb +58 -0
- data/lib/piwigo/image_uploader.rb +6 -6
- data/lib/piwigo/images.rb +9 -7
- data/lib/piwigo/version.rb +1 -1
- data/piwigo-api.gemspec +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25b24077502730104d7ff8bb0fc3e4de59c1de1de94157936dd80846da1ee876
|
4
|
+
data.tar.gz: ecc50b004fc354d5f45599c745ccec83a5f77293eed1fd41d4ab34280e23cde9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
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
|
+
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:
|
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
|
-
|
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
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
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
|
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 =
|
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.
|
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.
|
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.
|
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.
|
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.
|
129
|
-
ImageUploader.new(session, file, name).
|
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.
|
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
|
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
|
167
|
+
logger.error "Image lookup failed: #{e.message}"
|
166
168
|
nil
|
167
169
|
end
|
168
170
|
end
|
data/lib/piwigo/version.rb
CHANGED
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
|
+
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-
|
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
|