runcible 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -44,7 +44,8 @@ module Runcible
44
44
  :user => '',
45
45
  :http_auth => {:password => {} },
46
46
  :headers => {:content_type => 'application/json',
47
- :accept => 'application/json'}
47
+ :accept => 'application/json'},
48
+ :logging => {}
48
49
  }.merge(conf)
49
50
  end
50
51
 
@@ -57,14 +58,16 @@ module Runcible
57
58
  #on occation path will already have prefix (sync cancel)
58
59
  path = clone_config[:api_path] + path if !path.start_with?(clone_config[:api_path])
59
60
 
60
- RestClient.log = clone_config[:logger] if clone_config[:logger]
61
+ RestClient.log = []
62
+ logger = clone_config[:logging][:logger]
63
+ debug_logging = clone_config[:logging][:debug]
64
+ exception_logging = clone_config[:logging][:exception]
61
65
 
62
66
  headers = clone_config[:headers].clone
63
67
 
64
68
  get_params = options[:params] if options[:params]
65
69
  path = combine_get_params(path, get_params) if get_params
66
70
 
67
-
68
71
  if clone_config[:oauth]
69
72
  headers = add_oauth_header(method, path, headers) if clone_config[:oauth]
70
73
  headers["pulp-user"] = clone_config[:user]
@@ -77,7 +80,20 @@ module Runcible
77
80
  args << generate_payload(options) if [:post, :put].include?(method)
78
81
  args << headers
79
82
 
80
- process_response(client[path].send(*args))
83
+ response = get_response(client, path, *args)
84
+ process_response(response)
85
+
86
+ rescue => e
87
+ log_exception
88
+ raise e
89
+ end
90
+
91
+ def self.get_response(client, path, *args)
92
+ client[path].send(*args) do |response, request, result, &block|
93
+ resp = response.return!(request, result)
94
+ log_debug
95
+ return resp
96
+ end
81
97
  end
82
98
 
83
99
  def self.combine_get_params(path, params)
@@ -174,5 +190,23 @@ module Runcible
174
190
  return headers
175
191
  end
176
192
 
193
+ def self.log_debug
194
+ if self.config[:logging][:debug]
195
+ log_message = generate_log_message
196
+ self.config[:logging][:logger].debug(log_message)
197
+ end
198
+ end
199
+
200
+ def self.log_exception
201
+ if self.config[:logging][:exception]
202
+ log_message = generate_log_message
203
+ self.config[:logging][:logger].error(log_message)
204
+ end
205
+ end
206
+
207
+ def self.generate_log_message
208
+ RestClient.log.join('\n')
209
+ end
210
+
177
211
  end
178
212
  end
@@ -29,7 +29,6 @@ module Runcible
29
29
  def self.content_type
30
30
  'distribution'
31
31
  end
32
-
33
32
  end
34
33
  end
35
34
  end
@@ -29,7 +29,6 @@ module Runcible
29
29
  def self.content_type
30
30
  'package_group'
31
31
  end
32
-
33
32
  end
34
33
  end
35
34
  end
@@ -98,114 +98,13 @@ module Runcible
98
98
  search(criteria)
99
99
  end
100
100
 
101
- # Copies RPMs from one repository to another
102
- #
103
- # optional
104
- # :package_ids
105
- # :name_blacklist
106
- #
107
- # @param [String] source_repo_id the source repository ID
108
- # @param [String] destination_repo_id the destination repository ID
109
- # @param [Hash] optional container for all optional parameters
110
- # @return [RestClient::Response] a task representing the unit copy operation
111
- def self.rpm_copy(source_repo_id, destination_repo_id, optional={})
112
-
113
- criteria = {:type_ids => ['rpm'], :filters => {}}
114
- criteria[:filters]['association'] = {'unit_id' => {'$in' => optional[:package_ids]}} if optional[:package_ids]
115
- criteria[:filters]['unit'] = { 'name' => {'$not' => {'$in' => optional[:name_blacklist]}}} if optional[:name_blacklist]
116
-
117
- payload = {:criteria=>criteria}
118
- payload[:override_config] = optional[:override_config] if optional[:override_config]
119
- unit_copy(destination_repo_id, source_repo_id, payload)
120
- end
121
-
122
- # Removes RPMs from a repository
123
- #
124
- # @param [String] repo_id the repository ID to remove RPMs from
125
- # @param [Array] rpm_ids array of RPM IDs to remove
126
- # @return [RestClient::Response] a task representing the unit unassociate operation
127
- def self.rpm_remove(repo_id, rpm_ids)
128
- criteria = {:type_ids => ['rpm'], :filters => {}}
129
- criteria[:filters]['association'] = {'unit_id' => {'$in' => rpm_ids}}
130
- self.unassociate_units(repo_id, criteria)
131
- end
132
-
133
- # Copies errata from one repository to another
134
- #
135
- # optional
136
- # :errata_ids
137
- #
138
- # @param [String] source_repo_id the source repository ID
139
- # @param [String] destination_repo_id the destination repository ID
140
- # @param [Hash] optional container for all optional parameters
141
- # @return [RestClient::Response] a task representing the unit copy operation
142
- def self.errata_copy(source_repo_id, destination_repo_id, optional={})
143
- criteria = {:type_ids => ['erratum'], :filters => {}}
144
- criteria[:filters]['association'] = {'unit_id' => {'$in' => optional[:errata_ids]}} if optional[:errata_ids]
145
- payload = {:criteria => criteria}
146
- unit_copy(destination_repo_id, source_repo_id, payload)
147
- end
148
-
149
- # Removes errata from a repository
150
- #
151
- # @param [String] repo_id the repository ID to remove errata from
152
- # @param [Array] errata_ids array of errata IDs to remove
153
- # @return [RestClient::Response] a task representing the unit unassociate operation
154
- def self.errata_remove(repo_id, errata_ids)
155
- criteria = {:type_ids => ['erratum'], :filters => {}}
156
- criteria[:filters]['association'] = {'unit_id' => {'$in' => errata_ids}}
157
- self.unassociate_units(repo_id, criteria)
158
- end
159
-
160
- # Copies distributions from one repository to another
161
- #
162
- # optoinal
163
- # :distribution_ids
164
- #
165
- # @param [String] source_repo_id the source repository ID
166
- # @param [String] destination_repo_id the destination repository ID
167
- # @param [Hash] optional container for all optional parameters
168
- # @return [RestClient::Response] a task representing the unit copy operation
169
- def self.distribution_copy(source_repo_id, destination_repo_id, optional={})
170
- criteria = {:type_ids => ['distribution'], :filters => {}}
171
- criteria[:filters][:unit] = { :id=>{ '$in' => optional[:distribution_ids] } } if optional[:distribution_ids]
172
- payload = {:criteria => criteria}
173
- unit_copy(destination_repo_id, source_repo_id, payload)
174
- end
175
-
176
- # Removes a distribution from a repository
177
- #
178
- # @param [String] repo_id the repository ID to remove the distribution from
179
- # @param [String] distribution_id the distribution ID to remove
180
- # @return [RestClient::Response] a task representing the unit unassociate operation
181
- def self.distribution_remove(repo_id, distribution_id)
182
- criteria = {:type_ids => ['distribution'], :filters => {}}
183
- criteria[:filters][:unit] = { :id=>{ '$in' => [distribution_id] } }
184
- self.unassociate_units(repo_id, criteria)
185
- end
186
-
187
- # Copies package groups from one repository to another
188
- #
189
- # optoinal
190
- # :package_group_ids
191
- #
192
- # @param [String] source_repo_id the source repository ID
193
- # @param [String] destination_repo_id the destination repository ID
194
- # @param [Hash] optional container for all optional parameters
195
- # @return [RestClient::Response] a task representing the unit copy operation
196
- def self.package_group_copy(source_repo_id, destination_repo_id, optional={})
197
- criteria = {:type_ids => [Runcible::Extensions::PackageGroup.content_type], :filters => {}}
198
- criteria[:filters][:unit] = { :id=>{ '$in' => optional[:package_group_ids] } } if optional[:package_group_ids]
199
- payload = {:criteria => criteria}
200
- unit_copy(destination_repo_id, source_repo_id, payload)
201
- end
202
101
 
203
102
  # Retrieves the RPM IDs for a single repository
204
103
  #
205
104
  # @param [String] id the ID of the repository
206
105
  # @return [RestClient::Response] the set of repository RPM IDs
207
106
  def self.rpm_ids(id)
208
- criteria = {:type_ids=>['rpm']}
107
+ criteria = {:type_ids=>[Runcible::Extensions::Rpm.content_type]}
209
108
  self.unit_search(id, criteria).collect{|i| i['unit_id']}
210
109
  end
211
110
 
@@ -214,7 +113,7 @@ module Runcible
214
113
  # @param [String] id the ID of the repository
215
114
  # @return [RestClient::Response] the set of repository RPMs
216
115
  def self.rpms(id)
217
- criteria = {:type_ids=>['rpm']}
116
+ criteria = {:type_ids=>[Runcible::Extensions::Rpm.content_type]}
218
117
  self.unit_search(id, criteria).collect{|i| i['metadata'].with_indifferent_access}
219
118
  end
220
119
 
@@ -233,7 +132,7 @@ module Runcible
233
132
  and_condition << {:release=>release} if release
234
133
  and_condition << {:epoch=>epoch} if epoch
235
134
 
236
- criteria = {:type_ids=>['rpm'],
135
+ criteria = {:type_ids=>[Runcible::Extensions::Rpm.content_type],
237
136
  :filters => {
238
137
  :unit => {
239
138
  "$and" => and_condition
@@ -250,7 +149,7 @@ module Runcible
250
149
  # @param [String] id the ID of the repository
251
150
  # @return [RestClient::Response] the set of repository errata IDs
252
151
  def self.errata_ids(id)
253
- criteria = {:type_ids=>['erratum']}
152
+ criteria = {:type_ids=>[Runcible::Extensions::Errata.content_type]}
254
153
 
255
154
  self.unit_search(id, criteria).collect{|i| i['unit_id']}
256
155
  end
@@ -260,7 +159,7 @@ module Runcible
260
159
  # @param [String] id the ID of the repository
261
160
  # @return [RestClient::Response] the set of repository errata
262
161
  def self.errata(id)
263
- criteria = {:type_ids=>['erratum']}
162
+ criteria = {:type_ids=>[Runcible::Extensions::Errata.content_type]}
264
163
  self.unit_search(id, criteria).collect{|i| i['metadata'].with_indifferent_access}
265
164
  end
266
165
 
@@ -269,7 +168,7 @@ module Runcible
269
168
  # @param [String] id the ID of the repository
270
169
  # @return [RestClient::Response] the set of repository distributions
271
170
  def self.distributions(id)
272
- criteria = {:type_ids=>['distribution']}
171
+ criteria = {:type_ids=>[Runcible::Extensions::Distribution.content_type]}
273
172
 
274
173
  self.unit_search(id, criteria).collect{|i| i['metadata'].with_indifferent_access}
275
174
  end
@@ -40,6 +40,10 @@ module Runcible
40
40
  raise NotImplementedError
41
41
  end
42
42
 
43
+ # This function is not implemented for RPMs since they do not have content IDs
44
+ def self.unassociate_ids_from_repo(repo_id, ids)
45
+ raise NotImplementedError
46
+ end
43
47
  end
44
48
  end
45
49
  end
@@ -74,6 +74,54 @@ module Runcible
74
74
  self.search(content_type, { :filters => {:_id=> {'$in'=> ids}} }, optional)
75
75
  end
76
76
 
77
+ # unassociates content units from a repository
78
+ #
79
+ # @param [String] repo_id the repository ID to remove units from
80
+ # @param [Hash] filters the filters to find the units this content type to remove
81
+ # @return [RestClient::Response] a task representing the unit unassociate operation
82
+ def self.unassociate_from_repo(repo_id, filters)
83
+ criteria = {:type_ids => [content_type]}
84
+ criteria[:filters] = filters
85
+ Runcible::Extensions::Repository.unassociate_units(repo_id, criteria)
86
+ end
87
+
88
+ # unassociates content units from a repository
89
+ #
90
+ # @param [String] repo_id the repository ID to remove units from
91
+ # @param [Array] ids list of content unit ids of this
92
+ # content type, aka metadata id or content id
93
+ # ex: "RHEA-2010:0001" for errata..,
94
+ # Note rpms do not have ids, so cant use this.
95
+ # @return [RestClient::Response] a task representing the unit unassociate operation
96
+ def self.unassociate_ids_from_repo(repo_id, ids)
97
+ unassociate_from_repo(repo_id, :unit => {'id' => {'$in' => ids}})
98
+ end
99
+
100
+ # unassociates content units from a repository
101
+ #
102
+ # @param [String] repo_id the repository ID to remove units from
103
+ # @param [Array] ids list of the unique hash ids of the content unit
104
+ # with respect to this repo. unit_id, _id are other names for this.
105
+ # for example: "efdd2d63-b275-4728-a298-f68cf4c174e7"
106
+ #
107
+ # @return [RestClient::Response] a task representing the unit unassociate operation
108
+ def self.unassociate_unit_ids_from_repo(repo_id, ids)
109
+ unassociate_from_repo(repo_id, :association => {'unit_id' => {'$in' => ids}})
110
+ end
111
+
112
+ #copy contents from source repo to the destination repo
113
+ #
114
+ # @param [String] source_repo_id the source repository ID
115
+ # @param [String] destination_repo_id the destination repository ID
116
+ # @param [Hash] optional container for all optional parameters
117
+ # @return [RestClient::Response] a task representing the unit copy operation
118
+ def self.copy(source_repo_id, destination_repo_id, optional={})
119
+ criteria = {:type_ids => [content_type], :filters => {}}
120
+ criteria[:filters]['association'] = {'unit_id' => {'$in' => optional[:ids]}} if optional[:ids]
121
+ payload = {:criteria => criteria}
122
+ Runcible::Extensions::Repository.unit_copy(destination_repo_id, source_repo_id, payload)
123
+ end
124
+
77
125
  end
78
126
  end
79
127
  end
@@ -27,7 +27,6 @@ module Runcible
27
27
  module Resources
28
28
  # @see https://pulp-dev-guide.readthedocs.org/en/latest/rest-api/repo/index.html
29
29
  class Repository < Runcible::Base
30
-
31
30
  # Generates the API path for Repositories
32
31
  #
33
32
  # @param [String] id the id of the repository
@@ -1,3 +1,3 @@
1
1
  module Runcible
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
metadata CHANGED
@@ -1,26 +1,103 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: runcible
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 1
10
- version: 0.3.1
9
+ - 2
10
+ version: 0.3.2
11
11
  platform: ruby
12
12
  authors:
13
- - Eric D Helms
13
+ - Eric D Helms, Justin Sherrill
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2013-01-16 00:00:00 Z
19
- dependencies: []
20
-
18
+ date: 2013-02-04 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: json
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - "="
27
+ - !ruby/object:Gem::Version
28
+ hash: 1
29
+ segments:
30
+ - 1
31
+ - 7
32
+ - 5
33
+ version: 1.7.5
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: rest-client
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 13
45
+ segments:
46
+ - 1
47
+ - 6
48
+ - 1
49
+ version: 1.6.1
50
+ type: :runtime
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: oauth
54
+ prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ hash: 3
61
+ segments:
62
+ - 0
63
+ version: "0"
64
+ type: :runtime
65
+ version_requirements: *id003
66
+ - !ruby/object:Gem::Dependency
67
+ name: activesupport
68
+ prerelease: false
69
+ requirement: &id004 !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ hash: 19
75
+ segments:
76
+ - 3
77
+ - 0
78
+ - 10
79
+ version: 3.0.10
80
+ type: :runtime
81
+ version_requirements: *id004
82
+ - !ruby/object:Gem::Dependency
83
+ name: i18n
84
+ prerelease: false
85
+ requirement: &id005 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ hash: 11
91
+ segments:
92
+ - 0
93
+ - 5
94
+ - 0
95
+ version: 0.5.0
96
+ type: :runtime
97
+ version_requirements: *id005
21
98
  description: Exposing Pulp's juiciest components to the Ruby world.
22
99
  email:
23
- - ehelms@redhat.com
100
+ - ehelms@redhat.com, jsherril@redhat.com
24
101
  executables: []
25
102
 
26
103
  extensions: []