Package copr :: Package client :: Module responses
[hide private]
[frames] | no frames]

Source Code for Module copr.client.responses

  1  from __future__ import print_function 
  2  from __future__ import unicode_literals 
  3  from __future__ import division 
  4  from __future__ import absolute_import 
  5   
  6  import weakref 
7 8 9 -class BaseResponse(object):
10 """ 11 Base class for API responses. 12 Some response provides further actions based on response content. 13 """ 14 _simple_fields = [] 15
16 - def __init__(self, client, response):
17 """ 18 :param client: copr.main.Client 19 :param response: 20 """ 21 self.response = response 22 self.client = weakref.proxy(client)
23
24 - def __str__(self):
25 return str(self.response)
26
27 - def __unicode__(self):
28 return unicode(self.response)
29
30 - def __getattr__(self, item):
31 if item not in self._simple_fields: 32 raise KeyError(item) 33 if self.response is None: 34 raise RuntimeError() 35 36 return self.response[item]
37
38 - def repeat_action(self):
39 raise NotImplementedError()
40
41 42 -class ProjectMixin(object):
43 """ 44 Provides methods related to copr project. 45 Object must have fields "client" and "project_name" 46 """
47 - def get_project_details(self):
48 return self.client.get_project_details(self.project_name)
49
50 - def delete_project(self):
51 return self.client.delete_project(self.project_name)
52
53 54 -class ProjectWrapper(object):
55 - def __init__(self, username, projectname, 56 description=None, instructions=None, 57 yum_repos=None, additional_repos=None):
58 59 self.username = username 60 self.projectname = projectname 61 self.description = description 62 self.instructions = instructions 63 self.yum_repos = yum_repos or {} 64 self.additional_repos = additional_repos or {}
65
66 - def __str__(self):
67 out = list() 68 out.append("Name: {0}".format(self.projectname)) 69 out.append(" Description: {0}".format(self.description)) 70 71 if self.yum_repos: 72 out.append(" Yum repo(s):") 73 for k in sorted(self.yum_repos.keys()): 74 out.append(" {0}: {1}".format(k, self.yum_repos[k])) 75 if self.additional_repos: 76 out.append(" Additional repo: {0}".format(self.additional_repos)) 77 if self.instructions: 78 out.append(" Instructions: {0}".format(self.instructions)) 79 80 out.append("") 81 return "\n".join(out)
82
83 84 -class GetProjectsListResponse(BaseResponse):
85 _simple_fields = ["output", "repos"] 86
87 - def __init__(self, client, response, username=None):
88 super(GetProjectsListResponse, self).__init__(client, response) 89 self.username = username or self.client.username
90 91 @property
92 - def projects(self):
93 if not self.response or \ 94 self.response.get("output", None) != "ok" or \ 95 not self.response.get("repos"): 96 return None 97 else: 98 return [ 99 ProjectWrapper( 100 username=self.username, 101 projectname=prj.get("name"), 102 description=prj.get("description"), 103 yum_repos=prj.get("yum_repos"), 104 additional_repos=prj.get("additional_repos"), 105 ) for prj in self.response["repos"] 106 ]
107
108 109 -class CreateProjectResponse(ProjectMixin, BaseResponse):
110 _simple_fields = ["message", "output"] 111
112 - def __init__(self, client, response, 113 name, description, instructions, 114 chroots, repos, initial_pkgs):
115 super(CreateProjectResponse, self).__init__(client, response) 116 self.project_name = name 117 self.description = description 118 self.instructions = instructions 119 self.chroots = chroots 120 self.repos = repos 121 self.initial_pkgs = initial_pkgs
122
123 - def __str__(self):
124 if hasattr(self, "message"): 125 return str(self.message)
126
127 - def __unicode__(self):
128 if hasattr(self, "message"): 129 return unicode(self.message)
130
131 132 -class ModifyProjectResponse(ProjectMixin, BaseResponse):
133 - def __init__(self, client, response, 134 name, description=None, 135 instructions=None, repos=None):
136 super(ModifyProjectResponse, self).__init__(client, response) 137 self.project_name = name 138 self.description = description 139 self.instructions = instructions 140 self.repos = repos
141
142 143 -class ProjectDetailsResponse(ProjectMixin, BaseResponse):
144 _simple_fields = ["detail", "output"] 145
146 - def __init__(self, client, response, name):
147 super(ProjectDetailsResponse, self).__init__(client, response) 148 self.project_name = name
149
150 - def __str__(self):
151 if hasattr(self, "detail"): 152 return str(self.detail)
153
154 - def __unicode__(self):
155 if hasattr(self, "detail."): 156 return unicode(self.detail)
157
158 - def repeat_action(self):
159 return self.get_project_details()
160
161 162 -class DeleteProjectResponse(ProjectMixin, BaseResponse):
163 _simple_fields = ["message", "output"] 164
165 - def __init__(self, client, response, name):
166 super(DeleteProjectResponse, self).__init__(client, response) 167 self.project_name = name
168
169 - def __str__(self):
170 if hasattr(self, "message"): 171 return str(self.message)
172
173 - def __unicode__(self):
174 if hasattr(self, "message"): 175 return unicode(self.message)
176
177 - def repeat_action(self):
178 return self.delete_project()
179
180 181 -class BuildMixin(object):
182 """ 183 Provides methods related to individual builds 184 Object must have fields "client" and "build_id" 185 """
186 - def get_build_status(self):
187 return self.client.get_build_status(self.build_id)
188
189 - def get_build_details(self):
190 return self.client.get_build_details(self.build_id)
191
192 - def cancel_build(self):
193 return self.client.cancel_build(self.build_id)
194
195 - def __str__(self):
196 if not self.response: 197 return super(BuildMixin, self).__str__() 198 elif self.response["output"] == "ok": 199 return self.response["status"] 200 else: 201 return self.response["error"]
202
203 204 -class BuildStatusResponse(BuildMixin, BaseResponse):
205 _simple_fields = ["status", "output", "error"] 206
207 - def __init__(self, client, response, build_id):
208 super(BuildStatusResponse, self).__init__(client, response) 209 self.build_id = build_id
210
211 - def repeat_action(self):
212 return self.get_build_status()
213
214 215 -class BuildDetailsResponse(BuildMixin, BaseResponse):
216 _simple_fields = [ 217 'status', 'error', 'submitted_by', 'results', 'src_pkg', 'started_on', 218 'submitted_on', 'owner', 'chroots', 'project', 'built_pkgs', 219 'ended_on', 'output', 'src_version' 220 ] 221
222 - def __init__(self, client, response, build_id):
223 super(BuildDetailsResponse, self).__init__(client, response) 224 self.build_id = build_id
225
226 - def repeat_action(self):
227 return self.get_build_details()
228
229 230 -class CancelBuildResponse(BuildMixin, BaseResponse):
231 _simple_fields = ["message", "output", "error"] 232
233 - def __init__(self, client, response, build_id):
234 super(CancelBuildResponse, self).__init__(client, response) 235 self.build_id = build_id
236
237 - def repeat_action(self):
238 return self.client.cancel_build(self.build_id)
239
240 # def __str__(self): 241 # if not self.response: 242 # return super(CancelBuildResponse, self).__str__() 243 # elif self.response["output"] == "ok": 244 # return self.response["status"] 245 # else: 246 # return self.response["error"] 247 248 249 -class BuildRequestResponse(ProjectMixin, BaseResponse):
250 _simple_fields = ["message", "output", "error", "ids"] 251
252 - def __init__(self, client, response, 253 copr_project, pkgs, memory, timeout, chroots):
254 super(BuildRequestResponse, self).__init__(client, response) 255 self.copr_project = copr_project 256 self.pkgs = pkgs 257 self.memory = memory 258 self.timeout = timeout 259 self.chroots = chroots
260
261 - def repeat_action(self):
262 return self.client.send_new_build( 263 copr_project=self.copr_project, 264 pkgs=self.pkgs, 265 memory=self.memory, 266 timeout=self.timeout, 267 chroots=self.chroots 268 )
269
270 271 -class ProjectChrootMixin(ProjectMixin):
272 """ 273 Provides methods related to project chroots 274 Object must have fields "client", "project_name", "chroot" 275 """
277 return self.client.get_project_chroot_details(self.project_name, self.chroot)
278
279 - def modify_project_chroot_details(self, pkgs):
280 return self.client.modify_project_chroot_details( 281 self.project_name, self.chroot, pkgs=pkgs)
282
283 284 -class ProjectChrootDetailsResponse(ProjectChrootMixin, BaseResponse):
285 - def __init__(self, client, response, name, chroot):
286 super(ProjectChrootDetailsResponse, self).__init__(client, response) 287 self.project_name = name 288 self.chroot = chroot
289
290 - def repeat_action(self):
291 return self.get_project_details()
292
293 294 -class ModifyProjectChrootResponse(ProjectChrootMixin, BaseResponse):
295 - def __init__(self, client, response, name, chroot, pkgs):
296 super(ModifyProjectChrootResponse, self).__init__(client, response) 297 self.project_name = name 298 self.chroot = chroot 299 self.pkgs = pkgs
300
301 - def repeat_action(self):
302 return self.modify_project_chroot_details(self.pkgs)
303
304 305 -class SearchResponse(BaseResponse):
306 _simple_fields = ["output", "repos"] 307
308 - def __init__(self, client, response, query):
309 super(SearchResponse, self).__init__(client, response) 310 self.query = query
311
312 - def repeat_action(self):
313 return self.client.search_projects(self.query)
314