Merge lp:~arsenal-devel/arsenal/python-launchpadlib-toolkit into lp:arsenal/trunk

Proposed by Brian Murray
Status: Merged
Merge reported by: Bryce Harrington
Merged at revision: not available
Proposed branch: lp:~arsenal-devel/arsenal/python-launchpadlib-toolkit
Merge into: lp:arsenal/trunk
Diff against target: 1411 lines (+1320/-0) (has conflicts)
17 files modified
AUTHORS (+5/-0)
COPYING (+341/-0)
COPYING.LIB (+510/-0)
NEWS (+26/-0)
README (+116/-0)
debian/changelog (+21/-0)
debian/compat (+1/-0)
debian/control (+20/-0)
debian/copyright (+34/-0)
debian/docs (+1/-0)
debian/pycompat (+1/-0)
debian/rules (+13/-0)
example-ls-series.py (+22/-0)
lpltoolkit/LaunchpadService.py (+142/-0)
lpltoolkit/__init__.py (+3/-0)
lpltoolkit/debug.py (+44/-0)
setup.py (+20/-0)
Conflict adding file AUTHORS.  Moved existing file to AUTHORS.moved.
Conflict adding file README.  Moved existing file to README.moved.
Conflict adding file debian.  Moved existing file to debian.moved.
Conflict adding file setup.py.  Moved existing file to setup.py.moved.
To merge this branch: bzr merge lp:~arsenal-devel/arsenal/python-launchpadlib-toolkit
Reviewer Review Type Date Requested Status
Bryce Harrington Approve
Review via email: mp+21182@code.launchpad.net

Description of the change

example-ls-series.py wasn't working for me so I fixed it and as I was adding in load_distro_series I noticed some more die statements in LaunchpadService.py so I fixed those.

To post a comment you must log in.
Revision history for this message
Bryce Harrington (bryce) wrote :

Hi brian, looks good merged.

(Something was wrong with the merge proposal, so I just merged from your branch directly.)

Revision history for this message
Bryce Harrington (bryce) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added file 'AUTHORS'
--- AUTHORS 1970-01-01 00:00:00 +0000
+++ AUTHORS 2010-03-11 21:15:48 +0000
@@ -0,0 +1,5 @@
1Maintainers:
2 Bryce Harrington <bryce@canonical.com>
3
4Contributions, ideas, and inspiration from:
5 Markus Korn <thekorn@gmx.de>
06
=== renamed file 'AUTHORS' => 'AUTHORS.moved'
=== added file 'COPYING'
--- COPYING 1970-01-01 00:00:00 +0000
+++ COPYING 2010-03-11 21:15:48 +0000
@@ -0,0 +1,341 @@
1 GNU GENERAL PUBLIC LICENSE
2 Version 2, June 1991
3
4 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
5 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
6 Everyone is permitted to copy and distribute verbatim copies
7 of this license document, but changing it is not allowed.
8
9 Preamble
10
11 The licenses for most software are designed to take away your
12freedom to share and change it. By contrast, the GNU General Public
13License is intended to guarantee your freedom to share and change free
14software--to make sure the software is free for all its users. This
15General Public License applies to most of the Free Software
16Foundation's software and to any other program whose authors commit to
17using it. (Some other Free Software Foundation software is covered by
18the GNU Library General Public License instead.) You can apply it to
19your programs, too.
20
21 When we speak of free software, we are referring to freedom, not
22price. Our General Public Licenses are designed to make sure that you
23have the freedom to distribute copies of free software (and charge for
24this service if you wish), that you receive source code or can get it
25if you want it, that you can change the software or use pieces of it
26in new free programs; and that you know you can do these things.
27
28 To protect your rights, we need to make restrictions that forbid
29anyone to deny you these rights or to ask you to surrender the rights.
30These restrictions translate to certain responsibilities for you if you
31distribute copies of the software, or if you modify it.
32
33 For example, if you distribute copies of such a program, whether
34gratis or for a fee, you must give the recipients all the rights that
35you have. You must make sure that they, too, receive or can get the
36source code. And you must show them these terms so they know their
37rights.
38
39 We protect your rights with two steps: (1) copyright the software, and
40(2) offer you this license which gives you legal permission to copy,
41distribute and/or modify the software.
42
43 Also, for each author's protection and ours, we want to make certain
44that everyone understands that there is no warranty for this free
45software. If the software is modified by someone else and passed on, we
46want its recipients to know that what they have is not the original, so
47that any problems introduced by others will not reflect on the original
48authors' reputations.
49
50 Finally, any free program is threatened constantly by software
51patents. We wish to avoid the danger that redistributors of a free
52program will individually obtain patent licenses, in effect making the
53program proprietary. To prevent this, we have made it clear that any
54patent must be licensed for everyone's free use or not licensed at all.
55
56 The precise terms and conditions for copying, distribution and
57modification follow.
58
059
60 GNU GENERAL PUBLIC LICENSE
61 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
62
63 0. This License applies to any program or other work which contains
64a notice placed by the copyright holder saying it may be distributed
65under the terms of this General Public License. The "Program", below,
66refers to any such program or work, and a "work based on the Program"
67means either the Program or any derivative work under copyright law:
68that is to say, a work containing the Program or a portion of it,
69either verbatim or with modifications and/or translated into another
70language. (Hereinafter, translation is included without limitation in
71the term "modification".) Each licensee is addressed as "you".
72
73Activities other than copying, distribution and modification are not
74covered by this License; they are outside its scope. The act of
75running the Program is not restricted, and the output from the Program
76is covered only if its contents constitute a work based on the
77Program (independent of having been made by running the Program).
78Whether that is true depends on what the Program does.
79
80 1. You may copy and distribute verbatim copies of the Program's
81source code as you receive it, in any medium, provided that you
82conspicuously and appropriately publish on each copy an appropriate
83copyright notice and disclaimer of warranty; keep intact all the
84notices that refer to this License and to the absence of any warranty;
85and give any other recipients of the Program a copy of this License
86along with the Program.
87
88You may charge a fee for the physical act of transferring a copy, and
89you may at your option offer warranty protection in exchange for a fee.
90
91 2. You may modify your copy or copies of the Program or any portion
92of it, thus forming a work based on the Program, and copy and
93distribute such modifications or work under the terms of Section 1
94above, provided that you also meet all of these conditions:
95
96 a) You must cause the modified files to carry prominent notices
97 stating that you changed the files and the date of any change.
98
99 b) You must cause any work that you distribute or publish, that in
100 whole or in part contains or is derived from the Program or any
101 part thereof, to be licensed as a whole at no charge to all third
102 parties under the terms of this License.
103
104 c) If the modified program normally reads commands interactively
105 when run, you must cause it, when started running for such
106 interactive use in the most ordinary way, to print or display an
107 announcement including an appropriate copyright notice and a
108 notice that there is no warranty (or else, saying that you provide
109 a warranty) and that users may redistribute the program under
110 these conditions, and telling the user how to view a copy of this
111 License. (Exception: if the Program itself is interactive but
112 does not normally print such an announcement, your work based on
113 the Program is not required to print an announcement.)
114
1115
116These requirements apply to the modified work as a whole. If
117identifiable sections of that work are not derived from the Program,
118and can be reasonably considered independent and separate works in
119themselves, then this License, and its terms, do not apply to those
120sections when you distribute them as separate works. But when you
121distribute the same sections as part of a whole which is a work based
122on the Program, the distribution of the whole must be on the terms of
123this License, whose permissions for other licensees extend to the
124entire whole, and thus to each and every part regardless of who wrote it.
125
126Thus, it is not the intent of this section to claim rights or contest
127your rights to work written entirely by you; rather, the intent is to
128exercise the right to control the distribution of derivative or
129collective works based on the Program.
130
131In addition, mere aggregation of another work not based on the Program
132with the Program (or with a work based on the Program) on a volume of
133a storage or distribution medium does not bring the other work under
134the scope of this License.
135
136 3. You may copy and distribute the Program (or a work based on it,
137under Section 2) in object code or executable form under the terms of
138Sections 1 and 2 above provided that you also do one of the following:
139
140 a) Accompany it with the complete corresponding machine-readable
141 source code, which must be distributed under the terms of Sections
142 1 and 2 above on a medium customarily used for software interchange; or,
143
144 b) Accompany it with a written offer, valid for at least three
145 years, to give any third party, for a charge no more than your
146 cost of physically performing source distribution, a complete
147 machine-readable copy of the corresponding source code, to be
148 distributed under the terms of Sections 1 and 2 above on a medium
149 customarily used for software interchange; or,
150
151 c) Accompany it with the information you received as to the offer
152 to distribute corresponding source code. (This alternative is
153 allowed only for noncommercial distribution and only if you
154 received the program in object code or executable form with such
155 an offer, in accord with Subsection b above.)
156
157The source code for a work means the preferred form of the work for
158making modifications to it. For an executable work, complete source
159code means all the source code for all modules it contains, plus any
160associated interface definition files, plus the scripts used to
161control compilation and installation of the executable. However, as a
162special exception, the source code distributed need not include
163anything that is normally distributed (in either source or binary
164form) with the major components (compiler, kernel, and so on) of the
165operating system on which the executable runs, unless that component
166itself accompanies the executable.
167
168If distribution of executable or object code is made by offering
169access to copy from a designated place, then offering equivalent
170access to copy the source code from the same place counts as
171distribution of the source code, even though third parties are not
172compelled to copy the source along with the object code.
173
2174
175 4. You may not copy, modify, sublicense, or distribute the Program
176except as expressly provided under this License. Any attempt
177otherwise to copy, modify, sublicense or distribute the Program is
178void, and will automatically terminate your rights under this License.
179However, parties who have received copies, or rights, from you under
180this License will not have their licenses terminated so long as such
181parties remain in full compliance.
182
183 5. You are not required to accept this License, since you have not
184signed it. However, nothing else grants you permission to modify or
185distribute the Program or its derivative works. These actions are
186prohibited by law if you do not accept this License. Therefore, by
187modifying or distributing the Program (or any work based on the
188Program), you indicate your acceptance of this License to do so, and
189all its terms and conditions for copying, distributing or modifying
190the Program or works based on it.
191
192 6. Each time you redistribute the Program (or any work based on the
193Program), the recipient automatically receives a license from the
194original licensor to copy, distribute or modify the Program subject to
195these terms and conditions. You may not impose any further
196restrictions on the recipients' exercise of the rights granted herein.
197You are not responsible for enforcing compliance by third parties to
198this License.
199
200 7. If, as a consequence of a court judgment or allegation of patent
201infringement or for any other reason (not limited to patent issues),
202conditions are imposed on you (whether by court order, agreement or
203otherwise) that contradict the conditions of this License, they do not
204excuse you from the conditions of this License. If you cannot
205distribute so as to satisfy simultaneously your obligations under this
206License and any other pertinent obligations, then as a consequence you
207may not distribute the Program at all. For example, if a patent
208license would not permit royalty-free redistribution of the Program by
209all those who receive copies directly or indirectly through you, then
210the only way you could satisfy both it and this License would be to
211refrain entirely from distribution of the Program.
212
213If any portion of this section is held invalid or unenforceable under
214any particular circumstance, the balance of the section is intended to
215apply and the section as a whole is intended to apply in other
216circumstances.
217
218It is not the purpose of this section to induce you to infringe any
219patents or other property right claims or to contest validity of any
220such claims; this section has the sole purpose of protecting the
221integrity of the free software distribution system, which is
222implemented by public license practices. Many people have made
223generous contributions to the wide range of software distributed
224through that system in reliance on consistent application of that
225system; it is up to the author/donor to decide if he or she is willing
226to distribute software through any other system and a licensee cannot
227impose that choice.
228
229This section is intended to make thoroughly clear what is believed to
230be a consequence of the rest of this License.
231
3232
233 8. If the distribution and/or use of the Program is restricted in
234certain countries either by patents or by copyrighted interfaces, the
235original copyright holder who places the Program under this License
236may add an explicit geographical distribution limitation excluding
237those countries, so that distribution is permitted only in or among
238countries not thus excluded. In such case, this License incorporates
239the limitation as if written in the body of this License.
240
241 9. The Free Software Foundation may publish revised and/or new versions
242of the General Public License from time to time. Such new versions will
243be similar in spirit to the present version, but may differ in detail to
244address new problems or concerns.
245
246Each version is given a distinguishing version number. If the Program
247specifies a version number of this License which applies to it and "any
248later version", you have the option of following the terms and conditions
249either of that version or of any later version published by the Free
250Software Foundation. If the Program does not specify a version number of
251this License, you may choose any version ever published by the Free Software
252Foundation.
253
254 10. If you wish to incorporate parts of the Program into other free
255programs whose distribution conditions are different, write to the author
256to ask for permission. For software which is copyrighted by the Free
257Software Foundation, write to the Free Software Foundation; we sometimes
258make exceptions for this. Our decision will be guided by the two goals
259of preserving the free status of all derivatives of our free software and
260of promoting the sharing and reuse of software generally.
261
262 NO WARRANTY
263
264 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
265FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
266OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
267PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
268OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
269MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
270TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
271PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
272REPAIR OR CORRECTION.
273
274 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
275WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
276REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
277INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
278OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
279TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
280YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
281PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
282POSSIBILITY OF SUCH DAMAGES.
283
284 END OF TERMS AND CONDITIONS
285
4286
287 How to Apply These Terms to Your New Programs
288
289 If you develop a new program, and you want it to be of the greatest
290possible use to the public, the best way to achieve this is to make it
291free software which everyone can redistribute and change under these terms.
292
293 To do so, attach the following notices to the program. It is safest
294to attach them to the start of each source file to most effectively
295convey the exclusion of warranty; and each file should have at least
296the "copyright" line and a pointer to where the full notice is found.
297
298 <one line to give the program's name and a brief idea of what it does.>
299 Copyright (C) <year> <name of author>
300
301 This program is free software; you can redistribute it and/or modify
302 it under the terms of the GNU General Public License as published by
303 the Free Software Foundation; either version 2 of the License, or
304 (at your option) any later version.
305
306 This program is distributed in the hope that it will be useful,
307 but WITHOUT ANY WARRANTY; without even the implied warranty of
308 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
309 GNU General Public License for more details.
310
311 You should have received a copy of the GNU General Public License
312 along with this program; if not, write to the Free Software
313 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
314
315
316Also add information on how to contact you by electronic and paper mail.
317
318If the program is interactive, make it output a short notice like this
319when it starts in an interactive mode:
320
321 Gnomovision version 69, Copyright (C) year name of author
322 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
323 This is free software, and you are welcome to redistribute it
324 under certain conditions; type `show c' for details.
325
326The hypothetical commands `show w' and `show c' should show the appropriate
327parts of the General Public License. Of course, the commands you use may
328be called something other than `show w' and `show c'; they could even be
329mouse-clicks or menu items--whatever suits your program.
330
331You should also get your employer (if you work as a programmer) or your
332school, if any, to sign a "copyright disclaimer" for the program, if
333necessary. Here is a sample; alter the names:
334
335 Yoyodyne, Inc., hereby disclaims all copyright interest in the program
336 `Gnomovision' (which makes passes at compilers) written by James Hacker.
337
338 <signature of Ty Coon>, 1 April 1989
339 Ty Coon, President of Vice
340
341This General Public License does not permit incorporating your program into
342proprietary programs. If your program is a subroutine library, you may
343consider it more useful to permit linking proprietary applications with the
344library. If this is what you want to do, use the GNU Library General
345Public License instead of this License.
346
5347
=== added file 'COPYING.LIB'
--- COPYING.LIB 1970-01-01 00:00:00 +0000
+++ COPYING.LIB 2010-03-11 21:15:48 +0000
@@ -0,0 +1,510 @@
1
2 GNU LESSER GENERAL PUBLIC LICENSE
3 Version 2.1, February 1999
4
5 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
6 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
7 Everyone is permitted to copy and distribute verbatim copies
8 of this license document, but changing it is not allowed.
9
10[This is the first released version of the Lesser GPL. It also counts
11 as the successor of the GNU Library Public License, version 2, hence
12 the version number 2.1.]
13
14 Preamble
15
16 The licenses for most software are designed to take away your
17freedom to share and change it. By contrast, the GNU General Public
18Licenses are intended to guarantee your freedom to share and change
19free software--to make sure the software is free for all its users.
20
21 This license, the Lesser General Public License, applies to some
22specially designated software packages--typically libraries--of the
23Free Software Foundation and other authors who decide to use it. You
24can use it too, but we suggest you first think carefully about whether
25this license or the ordinary General Public License is the better
26strategy to use in any particular case, based on the explanations
27below.
28
29 When we speak of free software, we are referring to freedom of use,
30not price. Our General Public Licenses are designed to make sure that
31you have the freedom to distribute copies of free software (and charge
32for this service if you wish); that you receive source code or can get
33it if you want it; that you can change the software and use pieces of
34it in new free programs; and that you are informed that you can do
35these things.
36
37 To protect your rights, we need to make restrictions that forbid
38distributors to deny you these rights or to ask you to surrender these
39rights. These restrictions translate to certain responsibilities for
40you if you distribute copies of the library or if you modify it.
41
42 For example, if you distribute copies of the library, whether gratis
43or for a fee, you must give the recipients all the rights that we gave
44you. You must make sure that they, too, receive or can get the source
45code. If you link other code with the library, you must provide
46complete object files to the recipients, so that they can relink them
47with the library after making changes to the library and recompiling
48it. And you must show them these terms so they know their rights.
49
50 We protect your rights with a two-step method: (1) we copyright the
51library, and (2) we offer you this license, which gives you legal
52permission to copy, distribute and/or modify the library.
53
54 To protect each distributor, we want to make it very clear that
55there is no warranty for the free library. Also, if the library is
56modified by someone else and passed on, the recipients should know
57that what they have is not the original version, so that the original
58author's reputation will not be affected by problems that might be
59introduced by others.
60
061
62 Finally, software patents pose a constant threat to the existence of
63any free program. We wish to make sure that a company cannot
64effectively restrict the users of a free program by obtaining a
65restrictive license from a patent holder. Therefore, we insist that
66any patent license obtained for a version of the library must be
67consistent with the full freedom of use specified in this license.
68
69 Most GNU software, including some libraries, is covered by the
70ordinary GNU General Public License. This license, the GNU Lesser
71General Public License, applies to certain designated libraries, and
72is quite different from the ordinary General Public License. We use
73this license for certain libraries in order to permit linking those
74libraries into non-free programs.
75
76 When a program is linked with a library, whether statically or using
77a shared library, the combination of the two is legally speaking a
78combined work, a derivative of the original library. The ordinary
79General Public License therefore permits such linking only if the
80entire combination fits its criteria of freedom. The Lesser General
81Public License permits more lax criteria for linking other code with
82the library.
83
84 We call this license the "Lesser" General Public License because it
85does Less to protect the user's freedom than the ordinary General
86Public License. It also provides other free software developers Less
87of an advantage over competing non-free programs. These disadvantages
88are the reason we use the ordinary General Public License for many
89libraries. However, the Lesser license provides advantages in certain
90special circumstances.
91
92 For example, on rare occasions, there may be a special need to
93encourage the widest possible use of a certain library, so that it
94becomes a de-facto standard. To achieve this, non-free programs must
95be allowed to use the library. A more frequent case is that a free
96library does the same job as widely used non-free libraries. In this
97case, there is little to gain by limiting the free library to free
98software only, so we use the Lesser General Public License.
99
100 In other cases, permission to use a particular library in non-free
101programs enables a greater number of people to use a large body of
102free software. For example, permission to use the GNU C Library in
103non-free programs enables many more people to use the whole GNU
104operating system, as well as its variant, the GNU/Linux operating
105system.
106
107 Although the Lesser General Public License is Less protective of the
108users' freedom, it does ensure that the user of a program that is
109linked with the Library has the freedom and the wherewithal to run
110that program using a modified version of the Library.
111
112 The precise terms and conditions for copying, distribution and
113modification follow. Pay close attention to the difference between a
114"work based on the library" and a "work that uses the library". The
115former contains code derived from the library, whereas the latter must
116be combined with the library in order to run.
117
1118
119 GNU LESSER GENERAL PUBLIC LICENSE
120 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
121
122 0. This License Agreement applies to any software library or other
123program which contains a notice placed by the copyright holder or
124other authorized party saying it may be distributed under the terms of
125this Lesser General Public License (also called "this License").
126Each licensee is addressed as "you".
127
128 A "library" means a collection of software functions and/or data
129prepared so as to be conveniently linked with application programs
130(which use some of those functions and data) to form executables.
131
132 The "Library", below, refers to any such software library or work
133which has been distributed under these terms. A "work based on the
134Library" means either the Library or any derivative work under
135copyright law: that is to say, a work containing the Library or a
136portion of it, either verbatim or with modifications and/or translated
137straightforwardly into another language. (Hereinafter, translation is
138included without limitation in the term "modification".)
139
140 "Source code" for a work means the preferred form of the work for
141making modifications to it. For a library, complete source code means
142all the source code for all modules it contains, plus any associated
143interface definition files, plus the scripts used to control
144compilation and installation of the library.
145
146 Activities other than copying, distribution and modification are not
147covered by this License; they are outside its scope. The act of
148running a program using the Library is not restricted, and output from
149such a program is covered only if its contents constitute a work based
150on the Library (independent of the use of the Library in a tool for
151writing it). Whether that is true depends on what the Library does
152and what the program that uses the Library does.
153
154 1. You may copy and distribute verbatim copies of the Library's
155complete source code as you receive it, in any medium, provided that
156you conspicuously and appropriately publish on each copy an
157appropriate copyright notice and disclaimer of warranty; keep intact
158all the notices that refer to this License and to the absence of any
159warranty; and distribute a copy of this License along with the
160Library.
161
162 You may charge a fee for the physical act of transferring a copy,
163and you may at your option offer warranty protection in exchange for a
164fee.
165
2166
167 2. You may modify your copy or copies of the Library or any portion
168of it, thus forming a work based on the Library, and copy and
169distribute such modifications or work under the terms of Section 1
170above, provided that you also meet all of these conditions:
171
172 a) The modified work must itself be a software library.
173
174 b) You must cause the files modified to carry prominent notices
175 stating that you changed the files and the date of any change.
176
177 c) You must cause the whole of the work to be licensed at no
178 charge to all third parties under the terms of this License.
179
180 d) If a facility in the modified Library refers to a function or a
181 table of data to be supplied by an application program that uses
182 the facility, other than as an argument passed when the facility
183 is invoked, then you must make a good faith effort to ensure that,
184 in the event an application does not supply such function or
185 table, the facility still operates, and performs whatever part of
186 its purpose remains meaningful.
187
188 (For example, a function in a library to compute square roots has
189 a purpose that is entirely well-defined independent of the
190 application. Therefore, Subsection 2d requires that any
191 application-supplied function or table used by this function must
192 be optional: if the application does not supply it, the square
193 root function must still compute square roots.)
194
195These requirements apply to the modified work as a whole. If
196identifiable sections of that work are not derived from the Library,
197and can be reasonably considered independent and separate works in
198themselves, then this License, and its terms, do not apply to those
199sections when you distribute them as separate works. But when you
200distribute the same sections as part of a whole which is a work based
201on the Library, the distribution of the whole must be on the terms of
202this License, whose permissions for other licensees extend to the
203entire whole, and thus to each and every part regardless of who wrote
204it.
205
206Thus, it is not the intent of this section to claim rights or contest
207your rights to work written entirely by you; rather, the intent is to
208exercise the right to control the distribution of derivative or
209collective works based on the Library.
210
211In addition, mere aggregation of another work not based on the Library
212with the Library (or with a work based on the Library) on a volume of
213a storage or distribution medium does not bring the other work under
214the scope of this License.
215
216 3. You may opt to apply the terms of the ordinary GNU General Public
217License instead of this License to a given copy of the Library. To do
218this, you must alter all the notices that refer to this License, so
219that they refer to the ordinary GNU General Public License, version 2,
220instead of to this License. (If a newer version than version 2 of the
221ordinary GNU General Public License has appeared, then you can specify
222that version instead if you wish.) Do not make any other change in
223these notices.
224
3225
226 Once this change is made in a given copy, it is irreversible for
227that copy, so the ordinary GNU General Public License applies to all
228subsequent copies and derivative works made from that copy.
229
230 This option is useful when you wish to copy part of the code of
231the Library into a program that is not a library.
232
233 4. You may copy and distribute the Library (or a portion or
234derivative of it, under Section 2) in object code or executable form
235under the terms of Sections 1 and 2 above provided that you accompany
236it with the complete corresponding machine-readable source code, which
237must be distributed under the terms of Sections 1 and 2 above on a
238medium customarily used for software interchange.
239
240 If distribution of object code is made by offering access to copy
241from a designated place, then offering equivalent access to copy the
242source code from the same place satisfies the requirement to
243distribute the source code, even though third parties are not
244compelled to copy the source along with the object code.
245
246 5. A program that contains no derivative of any portion of the
247Library, but is designed to work with the Library by being compiled or
248linked with it, is called a "work that uses the Library". Such a
249work, in isolation, is not a derivative work of the Library, and
250therefore falls outside the scope of this License.
251
252 However, linking a "work that uses the Library" with the Library
253creates an executable that is a derivative of the Library (because it
254contains portions of the Library), rather than a "work that uses the
255library". The executable is therefore covered by this License.
256Section 6 states terms for distribution of such executables.
257
258 When a "work that uses the Library" uses material from a header file
259that is part of the Library, the object code for the work may be a
260derivative work of the Library even though the source code is not.
261Whether this is true is especially significant if the work can be
262linked without the Library, or if the work is itself a library. The
263threshold for this to be true is not precisely defined by law.
264
265 If such an object file uses only numerical parameters, data
266structure layouts and accessors, and small macros and small inline
267functions (ten lines or less in length), then the use of the object
268file is unrestricted, regardless of whether it is legally a derivative
269work. (Executables containing this object code plus portions of the
270Library will still fall under Section 6.)
271
272 Otherwise, if the work is a derivative of the Library, you may
273distribute the object code for the work under the terms of Section 6.
274Any executables containing that work also fall under Section 6,
275whether or not they are linked directly with the Library itself.
276
4277
278 6. As an exception to the Sections above, you may also combine or
279link a "work that uses the Library" with the Library to produce a
280work containing portions of the Library, and distribute that work
281under terms of your choice, provided that the terms permit
282modification of the work for the customer's own use and reverse
283engineering for debugging such modifications.
284
285 You must give prominent notice with each copy of the work that the
286Library is used in it and that the Library and its use are covered by
287this License. You must supply a copy of this License. If the work
288during execution displays copyright notices, you must include the
289copyright notice for the Library among them, as well as a reference
290directing the user to the copy of this License. Also, you must do one
291of these things:
292
293 a) Accompany the work with the complete corresponding
294 machine-readable source code for the Library including whatever
295 changes were used in the work (which must be distributed under
296 Sections 1 and 2 above); and, if the work is an executable linked
297 with the Library, with the complete machine-readable "work that
298 uses the Library", as object code and/or source code, so that the
299 user can modify the Library and then relink to produce a modified
300 executable containing the modified Library. (It is understood
301 that the user who changes the contents of definitions files in the
302 Library will not necessarily be able to recompile the application
303 to use the modified definitions.)
304
305 b) Use a suitable shared library mechanism for linking with the
306 Library. A suitable mechanism is one that (1) uses at run time a
307 copy of the library already present on the user's computer system,
308 rather than copying library functions into the executable, and (2)
309 will operate properly with a modified version of the library, if
310 the user installs one, as long as the modified version is
311 interface-compatible with the version that the work was made with.
312
313 c) Accompany the work with a written offer, valid for at least
314 three years, to give the same user the materials specified in
315 Subsection 6a, above, for a charge no more than the cost of
316 performing this distribution.
317
318 d) If distribution of the work is made by offering access to copy
319 from a designated place, offer equivalent access to copy the above
320 specified materials from the same place.
321
322 e) Verify that the user has already received a copy of these
323 materials or that you have already sent this user a copy.
324
325 For an executable, the required form of the "work that uses the
326Library" must include any data and utility programs needed for
327reproducing the executable from it. However, as a special exception,
328the materials to be distributed need not include anything that is
329normally distributed (in either source or binary form) with the major
330components (compiler, kernel, and so on) of the operating system on
331which the executable runs, unless that component itself accompanies
332the executable.
333
334 It may happen that this requirement contradicts the license
335restrictions of other proprietary libraries that do not normally
336accompany the operating system. Such a contradiction means you cannot
337use both them and the Library together in an executable that you
338distribute.
339
5340
341 7. You may place library facilities that are a work based on the
342Library side-by-side in a single library together with other library
343facilities not covered by this License, and distribute such a combined
344library, provided that the separate distribution of the work based on
345the Library and of the other library facilities is otherwise
346permitted, and provided that you do these two things:
347
348 a) Accompany the combined library with a copy of the same work
349 based on the Library, uncombined with any other library
350 facilities. This must be distributed under the terms of the
351 Sections above.
352
353 b) Give prominent notice with the combined library of the fact
354 that part of it is a work based on the Library, and explaining
355 where to find the accompanying uncombined form of the same work.
356
357 8. You may not copy, modify, sublicense, link with, or distribute
358the Library except as expressly provided under this License. Any
359attempt otherwise to copy, modify, sublicense, link with, or
360distribute the Library is void, and will automatically terminate your
361rights under this License. However, parties who have received copies,
362or rights, from you under this License will not have their licenses
363terminated so long as such parties remain in full compliance.
364
365 9. You are not required to accept this License, since you have not
366signed it. However, nothing else grants you permission to modify or
367distribute the Library or its derivative works. These actions are
368prohibited by law if you do not accept this License. Therefore, by
369modifying or distributing the Library (or any work based on the
370Library), you indicate your acceptance of this License to do so, and
371all its terms and conditions for copying, distributing or modifying
372the Library or works based on it.
373
374 10. Each time you redistribute the Library (or any work based on the
375Library), the recipient automatically receives a license from the
376original licensor to copy, distribute, link with or modify the Library
377subject to these terms and conditions. You may not impose any further
378restrictions on the recipients' exercise of the rights granted herein.
379You are not responsible for enforcing compliance by third parties with
380this License.
381
6382
383 11. If, as a consequence of a court judgment or allegation of patent
384infringement or for any other reason (not limited to patent issues),
385conditions are imposed on you (whether by court order, agreement or
386otherwise) that contradict the conditions of this License, they do not
387excuse you from the conditions of this License. If you cannot
388distribute so as to satisfy simultaneously your obligations under this
389License and any other pertinent obligations, then as a consequence you
390may not distribute the Library at all. For example, if a patent
391license would not permit royalty-free redistribution of the Library by
392all those who receive copies directly or indirectly through you, then
393the only way you could satisfy both it and this License would be to
394refrain entirely from distribution of the Library.
395
396If any portion of this section is held invalid or unenforceable under
397any particular circumstance, the balance of the section is intended to
398apply, and the section as a whole is intended to apply in other
399circumstances.
400
401It is not the purpose of this section to induce you to infringe any
402patents or other property right claims or to contest validity of any
403such claims; this section has the sole purpose of protecting the
404integrity of the free software distribution system which is
405implemented by public license practices. Many people have made
406generous contributions to the wide range of software distributed
407through that system in reliance on consistent application of that
408system; it is up to the author/donor to decide if he or she is willing
409to distribute software through any other system and a licensee cannot
410impose that choice.
411
412This section is intended to make thoroughly clear what is believed to
413be a consequence of the rest of this License.
414
415 12. If the distribution and/or use of the Library is restricted in
416certain countries either by patents or by copyrighted interfaces, the
417original copyright holder who places the Library under this License
418may add an explicit geographical distribution limitation excluding those
419countries, so that distribution is permitted only in or among
420countries not thus excluded. In such case, this License incorporates
421the limitation as if written in the body of this License.
422
423 13. The Free Software Foundation may publish revised and/or new
424versions of the Lesser General Public License from time to time.
425Such new versions will be similar in spirit to the present version,
426but may differ in detail to address new problems or concerns.
427
428Each version is given a distinguishing version number. If the Library
429specifies a version number of this License which applies to it and
430"any later version", you have the option of following the terms and
431conditions either of that version or of any later version published by
432the Free Software Foundation. If the Library does not specify a
433license version number, you may choose any version ever published by
434the Free Software Foundation.
435
7436
437 14. If you wish to incorporate parts of the Library into other free
438programs whose distribution conditions are incompatible with these,
439write to the author to ask for permission. For software which is
440copyrighted by the Free Software Foundation, write to the Free
441Software Foundation; we sometimes make exceptions for this. Our
442decision will be guided by the two goals of preserving the free status
443of all derivatives of our free software and of promoting the sharing
444and reuse of software generally.
445
446 NO WARRANTY
447
448 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
449WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
450EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
451OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
452KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
453IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
454PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
455LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
456THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
457
458 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
459WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
460AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
461FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
462CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
463LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
464RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
465FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
466SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
467DAMAGES.
468
469 END OF TERMS AND CONDITIONS
470
8471
472 How to Apply These Terms to Your New Libraries
473
474 If you develop a new library, and you want it to be of the greatest
475possible use to the public, we recommend making it free software that
476everyone can redistribute and change. You can do so by permitting
477redistribution under these terms (or, alternatively, under the terms
478of the ordinary General Public License).
479
480 To apply these terms, attach the following notices to the library.
481It is safest to attach them to the start of each source file to most
482effectively convey the exclusion of warranty; and each file should
483have at least the "copyright" line and a pointer to where the full
484notice is found.
485
486
487 <one line to give the library's name and a brief idea of what it does.>
488 Copyright (C) <year> <name of author>
489
490 This library is free software; you can redistribute it and/or
491 modify it under the terms of the GNU Lesser General Public
492 License as published by the Free Software Foundation; either
493 version 2.1 of the License, or (at your option) any later version.
494
495 This library is distributed in the hope that it will be useful,
496 but WITHOUT ANY WARRANTY; without even the implied warranty of
497 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
498 Lesser General Public License for more details.
499
500 You should have received a copy of the GNU Lesser General Public
501 License along with this library; if not, write to the Free Software
502 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
503
504Also add information on how to contact you by electronic and paper mail.
505
506You should also get your employer (if you work as a programmer) or
507your school, if any, to sign a "copyright disclaimer" for the library,
508if necessary. Here is a sample; alter the names:
509
510 Yoyodyne, Inc., hereby disclaims all copyright interest in the
511 library `Frob' (a library for tweaking knobs) written by James
512 Random Hacker.
513
514 <signature of Ty Coon>, 1 April 1990
515 Ty Coon, President of Vice
516
517That's all there is to it!
518
519
9520
=== added file 'NEWS'
--- NEWS 1970-01-01 00:00:00 +0000
+++ NEWS 2010-03-11 21:15:48 +0000
@@ -0,0 +1,26 @@
1
2
3Sept 29, 2009 - Version 0.1
4===========================
5This is a first draft of the python-launchpadlib-toolkit package. The
6principle motivation is the widespread duplication of effort in
7implementing credential handling across a vast array of launchpadlib
8applications.
9
10At Plumbers' it seems there is strong desire for more collaboration
11between LPL scripters. Since pretty much every LPL script needs to do
12credentials management, standardizing this into a sharable library seems
13like a logical first step.
14
15There's so much similarity from one credentials implementation to
16another that this probably could have started from anyone's code. I
17opted to start with my own implementation from Arsenal since that's the
18one I'm most familiar with. I've integrated some good implementation
19ideas from Markus Korn's work on ilaunchpad-shell and ubuntu-dev-tools,
20such as the nifty DebugStdOut trickery, the use of environment variables
21for configuration, and the essense of his HTTPError exception handling.
22
23One of my major design goals was to keep it simple, so there's been
24several ideas I've left out simply on the grounds that I wasn't sure if
25they'd be that useful in real-world cases. Stuff can always be added
26later as it's proven necessary!
027
=== added file 'README'
--- README 1970-01-01 00:00:00 +0000
+++ README 2010-03-11 21:15:48 +0000
@@ -0,0 +1,116 @@
1LaunchpadLib Toolkit
2====================
3lpltoolkit is a set of classes for interacting with the Launchpad
4service API library. It takes care of certain common chores such as
5obtaining and managing login credentials.
6
7By factoring this common code out of individual launchpadlib projects,
8it makes them more concise and more compatible with one another.
9
10
11Basic Usage
12===========
13For most purposes, simply create the LaunchpadService object, which will
14attend to the credentials automatically. Then retrieve a project object
15(such as "ubuntu") and from there you can use all the regular Launchpad
16API calls. In other words:
17
18 import lpltoolkit
19
20 lp = lpltoolkit.LaunchpadService()
21 prj = lp.load_project("ubuntu")
22
23
24See example-ls-series.py for a complete working example. Also try
25running it with LPDEBUG turned on to see how to get debug info:
26
27 $ ./example-ls-series.py
28
29 $ LPDEBUG=1 ./example-ls-series.py
30
31For more elaborate real-world scripts, refer to the Arsenal project at:
32
33 http://launchpad.net/arsenal
34
35
36Environment Variables
37=====================
38Configuration of the LaunchpadService behavior can be done via
39environmental variables. This is done principly to make it easy to
40debug issues without needing to tweak source code.
41
42The following environment variables are supported:
43
44 LPDEBUG Prints extra debugging messages to stderr if defined.
45 If set to a numerical argument, it sets the httpdlib2
46 debuglevel to that value; the http debug output will be
47 filtered to redact your oauth token and signature, so
48 you can attach debug info to public bugs without
49 revealing anything sensitive.
50
51 LPSTAGING Use the staging service root rather than the live (edge)
52 service. This allows testing of your script without
53 risking actual changes to the official Launchpad.
54
55 LPCONFIG Use this directory path for configuration files, rather
56 than the default of ~/.config/<consumer>. The directory
57 will be created if it does not already exist.
58
59 LPCACHE Use this directory path for cache files (such as credentials),
60 rather than the default of ~/.cache/<consumer>. The
61 directory will be created if it does not already exist.
62
63
64API - LaunchpadService
65======================
66
67lp = LaunchpadService([config_path], [cache_path], [consumer])
68
69 Creates the Launchpad service object and retrieve credentials from
70 Launchpad. LPSTAGING, LPCONFIG, and LPCACHE must be specified
71 prior to instantiating the LaunchpadService object in order to have
72 any effect.
73
74 config_path and cache_path allow the calling script to define the
75 default paths if not specified by the environment variables.
76
77 On any unrecoverable error an exception is thrown.
78
79lp.load_project(project)
80
81 Loads the named project (such as "ubuntu" distro), returning its
82 launchpadapi object.
83
84lp.reset()
85
86 Reloads the credentials and project (if any is specified). This is
87 handy for recovering from Launchpad out-of-service or other such
88 transient errors.
89
90lp.name: The credentialed consumer name (default: lpltoolkit)
91lp.launchpad: The launchpadlib launchpad object
92lp.project: The loaded Launchpad project (default: None)
93
94
95API - Debug
96===========
97dbg(msg), err(msg), die(msg)
98
99 Convenience routines for printing error and debug messages to
100 stderr. dbg() only prints if LPDEBUG is defined.
101
102StdOut, DebugStdOut
103
104 STDOUT overloads for debug output filtering. Set sys.stdout to
105 DebugStdOut to filter out oauth token and signature details.
106
107
108Wishlist
109========
110* Get this package into Universe, then into Main
111* Add a framework for storing config elements beyond just credentials
112* Integrate into existing launchpadlib scripts/applications
113* Wrapper classes for Bugs, SourcePackages, etc.
114* Strengthen the fault handling, provide better diagnostics, and be more
115 robust against Launchpad service failures
116
0117
=== renamed file 'README' => 'README.moved'
=== added directory 'debian'
=== renamed directory 'debian' => 'debian.moved'
=== added file 'debian/changelog'
--- debian/changelog 1970-01-01 00:00:00 +0000
+++ debian/changelog 2010-03-11 21:15:48 +0000
@@ -0,0 +1,21 @@
1python-launchpadlib-toolkit (UNRELEASED) karmic; urgency=low
2
3 * Fix parameter name in debug routine.
4
5 -- Bryce Harrington <bryce@ubuntu.com> Thu, 15 Oct 2009 18:51:22 -0700
6
7python-launchpadlib-toolkit (0.2) karmic; urgency=low
8
9 * Add handling of socket.error exceptions, which can be triggered when
10 the Launchpad service is unreachable (such as from a busted router).
11
12 -- Bryce Harrington <bryce@ubuntu.com> Tue, 06 Oct 2009 11:19:08 -0700
13
14python-launchpadlib-toolkit (0.1) karmic; urgency=low
15
16 * New revision, split off from arsenal, with ideas brazenly thieved from
17 Markus Korn's launchpadlib-shell.
18 * debian packaging borrowed/adapted from python-launchpad-bugs
19
20 -- Bryce Harrington <bryce@ubuntu.com> Tue, 29 Sep 2009 16:16:09 -0700
21
022
=== added file 'debian/compat'
--- debian/compat 1970-01-01 00:00:00 +0000
+++ debian/compat 2010-03-11 21:15:48 +0000
@@ -0,0 +1,1 @@
15
02
=== added file 'debian/control'
--- debian/control 1970-01-01 00:00:00 +0000
+++ debian/control 2010-03-11 21:15:48 +0000
@@ -0,0 +1,20 @@
1Source: python-launchpadlib-toolkit
2Section: python
3Priority: extra
4Maintainer: Arsenal Developers <arsenal-devel@lists.launchpad.net>
5Build-Depends: cdbs (>= 0.4.43), debhelper (>= 5), python-central (>= 0.5), python-all-dev (>= 2.5)
6Standards-Version: 3.8.3
7XS-Vcs-Bzr: https://code.launchpad.net/~arsenal-devel/python-launchpadlib-toolkit/main
8XS-Python-Version: all
9
10Package: python-launchpadlib-toolkit
11Section: python
12Architecture: all
13Depends: ${python:Depends}, ${misc:Depends}, python (>= 2.5), python-launchpadlib
14XB-Python-Version: ${python:Versions}
15Description: convenience library for launchpadlib
16 Classes to manage credentials and access bug information
17 in Launchpad using the Launchpad API.
18 .
19 https://launchpad.net/arsenal/
20
021
=== added file 'debian/copyright'
--- debian/copyright 1970-01-01 00:00:00 +0000
+++ debian/copyright 2010-03-11 21:15:48 +0000
@@ -0,0 +1,34 @@
1This package was debianized by Bryce Harrington <bryce@canonical.com> on
2Mon Sep 28 23:54:18 PDT 2009
3
4It was downloaded from
5#TBD
6
7Upstream Author:
8 Bryce Harrington <bryce@canonical.com>
9
10Copyright:
11 # Written by Bryce Harrington
12 # (C) Canonical, Ltd. Licensed under the GPL
13
14License:
15
16 This package is free software; you can redistribute it and/or modify
17 it under the terms of the GNU General Public License as published by
18 the Free Software Foundation; either version 2 of the License, or
19 (at your option) any later version.
20
21 This package is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 GNU General Public License for more details.
25
26 You should have received a copy of the GNU General Public License
27 along with this package; if not, write to the Free Software
28 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
29
30On Debian systems, the complete text of the GNU General
31Public License can be found in `/usr/share/common-licenses/GPL'.
32
33The Debian packaging is (C) 2006, Daniel Holbach <daniel.holbach@ubuntu.com> and
34is licensed under the GPL, see above.
035
=== added file 'debian/docs'
--- debian/docs 1970-01-01 00:00:00 +0000
+++ debian/docs 2010-03-11 21:15:48 +0000
@@ -0,0 +1,1 @@
1README
02
=== added file 'debian/pycompat'
--- debian/pycompat 1970-01-01 00:00:00 +0000
+++ debian/pycompat 2010-03-11 21:15:48 +0000
@@ -0,0 +1,1 @@
1>= 2.4
02
=== added file 'debian/rules'
--- debian/rules 1970-01-01 00:00:00 +0000
+++ debian/rules 2010-03-11 21:15:48 +0000
@@ -0,0 +1,13 @@
1#!/usr/bin/make -f
2
3DEB_PYTHON_SYSTEM := pycentral
4
5include /usr/share/cdbs/1/rules/debhelper.mk
6include /usr/share/cdbs/1/class/python-distutils.mk
7
8DEB_BUILD_PROG:=debuild --preserve-envvar PATH --preserve-envvar CCACHE_DIR -us -uc $(DEB_BUILD_PROG_OPTS)
9arch-build::
10 rm -rf debian/arch-build
11 mkdir -p debian/arch-build/$(DEB_SOURCE_PACKAGE)-$(DEB_VERSION)
12 tar -c --exclude=arch-build --no-recursion -f - `bzr inventory` | (cd debian/arch-build/$(DEB_SOURCE_PACKAGE)-$(DEB_VERSION);tar xf -)
13 (cd debian/arch-build/$(DEB_SOURCE_PACKAGE)-$(DEB_VERSION) && $(DEB_BUILD_PROG))
014
=== added file 'example-ls-series.py'
--- example-ls-series.py 1970-01-01 00:00:00 +0000
+++ example-ls-series.py 2010-03-11 21:15:48 +0000
@@ -0,0 +1,22 @@
1#!/usr/bin/env python
2
3from lpltoolkit import LaunchpadService
4
5lp = LaunchpadService()
6d = lp.load_project("ubuntu")
7
8next_milestone = None
9for series in d.series:
10 print "%-10s %-20s %-25s" % (series.name,
11 series.status,
12 series.date_created)
13 if series.status == "Active Development" or series.status == "Pre-release Freeze":
14 for milestone in series.active_milestones:
15 print "%10s %-20s %-25s" % ("-->", milestone.name, milestone.date_targeted)
16 if milestone.date_targeted and not next_milestone:
17 next_milestone = milestone
18 elif next_milestone and milestone.date_targeted < next_milestone.date_targeted:
19 next_milestone = milestone
20
21print
22print "The next milestone is ", next_milestone.name
023
=== added directory 'lpltoolkit'
=== added file 'lpltoolkit/LaunchpadService.py'
--- lpltoolkit/LaunchpadService.py 1970-01-01 00:00:00 +0000
+++ lpltoolkit/LaunchpadService.py 2010-03-11 21:15:48 +0000
@@ -0,0 +1,142 @@
1# High level interface to Launchpad API to manage credentials
2# Derived from bits of ubuntutools in ubuntu-dev-tools and Arsenal
3
4import os, sys, socket
5import httplib2
6
7from launchpadlib.credentials import Credentials
8from launchpadlib.launchpad import Launchpad, STAGING_SERVICE_ROOT, EDGE_SERVICE_ROOT
9from launchpadlib.errors import HTTPError
10
11from lpltoolkit.debug import *
12
13class LaunchpadService:
14 ''' High level interface to the launchpad service API '''
15
16 def __init__(self, config_path=None, cache_path=None, consumer='lpltoolkit'):
17 ''' Construct Launchpad object, including obtaining launchpad credentials '''
18 self._project_name = None
19 self._configdir = None
20 self._cachedir = None
21 self._service_root = EDGE_SERVICE_ROOT
22 self.name = consumer
23 self.project = None
24 self.launchpad = None
25
26 ''' Debugging '''
27 if "LPDEBUG" in os.environ:
28 httplib2.debuglevel = os.getenv("LPDEBUG", None)
29 sys.stdout = DebugStdOut()
30
31 ''' Service root '''
32 if "LPSTAGING" in os.environ:
33 self._service_root = STAGING_SERVICE_ROOT
34 elif "LPEDGE" in os.environ:
35 self._service_root = EDGE_SERVICE_ROOT
36
37 home = os.path.expanduser('~')
38
39 ''' Config dir '''
40 if "LPCONFIG" in os.environ:
41 self._confdir = os.getenv("LPCONFIG", None)
42 elif config_path:
43 self._confdir = config_path
44 else:
45 self._confdir = os.path.join(home, '.config', self.name)
46 if not os.path.exists(self._confdir):
47 dbg("Creating config directory %s" %(self._confdir))
48 os.makedirs(self._confdir)
49 assert os.path.exists(self._confdir)
50
51 ''' Cache dir '''
52 if "LPCACHE" in os.environ:
53 self._cachedir = os.getenv("LPCACHE", None)
54 elif cache_path:
55 self._cachedir = cache_path
56 else:
57 self._cachedir = os.path.join(home, '.cache', self.name)
58 if not os.path.exists(self._cachedir):
59 dbg("Creating cache directory %s" %(self._cachedir))
60 os.makedirs(self._cachedir,0700)
61 assert os.path.exists(self._cachedir)
62
63 try:
64 self._get_creds()
65 except:
66 sys.stderr.write("Could not access Launchpad.")
67 sys.exit(1)
68 return None
69
70 def _get_creds(self):
71 ''' Credentials '''
72 retrieve_credentials = False
73 self._credentials_file = os.path.join(self._confdir, "lp-credentials.txt")
74 if not os.path.exists(self._credentials_file):
75 retrieve_credentials = True
76 else:
77 try:
78 credentials = Credentials()
79 dbg("Loading credentials from %s" %(self._credentials_file))
80 credentials.load(open(self._credentials_file))
81 self.launchpad = Launchpad(credentials, self._service_root, self._cachedir)
82 except socket.error:
83 excType, excValue, excTraceback = sys.exc_info()
84 dbg(" %s\n" %(excValue.response))
85 dbg(" %s\n" %(excValue.content))
86 sys.stderr.write("Launchpad service connection timed out")
87 sys.exit(1)
88
89 except HTTPError:
90 # Can I use e.code here?
91 excType, excValue, excTraceback = sys.exc_info()
92 err("Failed to retrieve credentials from Launchpad")
93 dbg(" %s\n" %(excValue.response))
94 dbg(" %s\n" %(excValue.content))
95 retrieve_credentials = True
96
97 if retrieve_credentials:
98 dbg("Retrieving token and login")
99 try:
100 self.launchpad = Launchpad.get_token_and_login(self.name, self._service_root, self._cachedir)
101 credfd = open(self._credentials_file, "w")
102 os.chmod(self._credentials_file, 0600)
103 dbg("Saving retrieved credentials to %s" %(self._credentials_file))
104 self.launchpad.credentials.save(credfd)
105 credfd.close()
106 except:
107 sys.stderr.write("Could not set up Launchpad")
108 sys.exit(1)
109
110 return True
111
112 def reset(self):
113 self._get_creds()
114
115 if self._project_name:
116 dbg("Reloading project %s" %(self._project_name))
117 self.load_project(self._project_name)
118
119 def load_project(self, project):
120 try:
121 if self._service_root == STAGING_SERVICE_ROOT:
122 self.project = self.launchpad.load("https://api.staging.launchpad.net/beta/" + project)
123 else:
124 self.project = self.launchpad.load("https://api.edge.launchpad.net/beta/" + project)
125 except:
126 err("Exception cast loading project %s" % (project))
127 self.project = None
128
129 return self.project
130
131 def load_distro_series(self, distro, series):
132 try:
133 if self._service_root == STAGING_SERVICE_ROOT:
134 self.distro_series = self.launchpad.load("https://api.staging.launchpad.net/beta/%s/%s" % (distro, series))
135 else:
136 self.distro_series = self.launchpad.load("https://api.edge.launchpad.net/beta/%s/%s" % (distro, series))
137 except:
138 err("Exception cast loading distro %s and series %s" % (distro, series))
139 self.distro_series = None
140 sys.exit(1)
141
142 return self.distro_series
0143
=== added file 'lpltoolkit/__init__.py'
--- lpltoolkit/__init__.py 1970-01-01 00:00:00 +0000
+++ lpltoolkit/__init__.py 2010-03-11 21:15:48 +0000
@@ -0,0 +1,3 @@
1from lpltoolkit.LaunchpadService import LaunchpadService
2from lpltoolkit.debug import dbg, err, die, StdOut, DebugStdOut, dump_launchpad_object
3
04
=== added file 'lpltoolkit/debug.py'
--- lpltoolkit/debug.py 1970-01-01 00:00:00 +0000
+++ lpltoolkit/debug.py 2010-03-11 21:15:48 +0000
@@ -0,0 +1,44 @@
1# Utility routines and classes for debugging info
2
3# (C) Copyright 2009, Markus Korn <thekorn@gmx.de>
4# (C) Copyright 2009, Bryce Harrington <bryce@canonical.com>
5
6import re, os, sys
7
8def dbg(msg):
9 if "LPDEBUG" in os.environ:
10 sys.stderr.write("%s\n" %(msg))
11
12def err(msg):
13 sys.stderr.write("Error: %s\n" %(msg))
14
15def die(msg):
16 sys.stderr.write("Fatal: %s\n" %(msg))
17 sys.exit(1)
18
19StdOut = sys.stdout
20class DebugStdOut(object):
21 '''
22 Debug version of STDOUT to redact out the oauth credentials
23 so that if the debug output is posted to a bug, it will not include
24 this sensitive info.
25 '''
26
27 RE_OAUTH_TOKEN = re.compile(r"oauth_token=\"([^\"]{2})[^\"]*")
28 RE_OAUTH_SIGNATURE = re.compile(r"oauth_signature=\"([^\"]{3})[^\"]*")
29
30 def write(self, txt):
31 txt = DebugStdOut.RE_OAUTH_SIGNATURE.sub(r"""oauth_signature="\1YYYYYYY""", txt)
32 txt = DebugStdOut.RE_OAUTH_TOKEN.sub(r"""oauth_token="\1XXXXXXXX""", txt)
33 StdOut.write(txt)
34
35 def __getattr__(self, name):
36 return getattr(StdOut, name)
37
38def dump_launchpad_object(i):
39 print repr(i)
40 print " attr: ", sorted(i.lp_attributes)
41 print " ops: ", sorted(i.lp_operations)
42 print " coll: ", sorted(i.lp_collections)
43 print " entr: ", sorted(i.lp_entries)
44 print
045
=== added file 'setup.py'
--- setup.py 1970-01-01 00:00:00 +0000
+++ setup.py 2010-03-11 21:15:48 +0000
@@ -0,0 +1,20 @@
1#!/usr/bin/env python
2
3# Copyright (C) Canonical, Ltd. Licensed under the GPL
4
5from distutils.core import setup
6import os
7import re
8
9# look/set what version we have
10changelog = "debian/changelog"
11if os.path.exists(changelog):
12 head=open(changelog).readline()
13 match = re.compile(".*\((.*)\).*").match(head)
14 if match:
15 version = match.group(1)
16
17setup(name = 'python-launchpadlib-toolkit',
18 version = version,
19 packages = ['lpltoolkit'],
20)
021
=== renamed file 'setup.py' => 'setup.py.moved'

Subscribers

People subscribed via source and target branches

to status/vote changes: