Merge lp:~lifeless/python-timeline/backtrace into lp:python-timeline

Proposed by Robert Collins
Status: Merged
Merged at revision: 10
Proposed branch: lp:~lifeless/python-timeline/backtrace
Merge into: lp:python-timeline
Diff against target: 1376 lines (+283/-745)
17 files modified
.bzrignore (+1/-0)
.testr.conf (+4/-0)
LICENSE (+160/-661)
NEWS (+16/-2)
README (+12/-9)
buildout.cfg (+1/-1)
setup.py (+6/-7)
timeline/__init__.py (+5/-6)
timeline/nestingtimedaction.py (+4/-6)
timeline/tests/__init__.py (+4/-6)
timeline/tests/test_nestingtimedaction.py (+4/-6)
timeline/tests/test_timedaction.py (+20/-9)
timeline/tests/test_timeline.py (+16/-6)
timeline/tests/test_wsgi.py (+4/-6)
timeline/timedaction.py (+10/-7)
timeline/timeline.py (+12/-7)
timeline/wsgi.py (+4/-6)
To merge this branch: bzr merge lp:~lifeless/python-timeline/backtrace
Reviewer Review Type Date Requested Status
Steve Kowalik (community) code Approve
Review via email: mp+82348@code.launchpad.net

Description of the change

LGPL and backtrace support for better info in OOPSes.

To post a comment you must log in.
10. By Robert Collins

Delete a spurious line which snuck into the LGPL statement headers.

Revision history for this message
Steve Kowalik (stevenk) wrote :

As already pointed out on IRC, the README mentions LGPL one too many times. Otherwise, this looks good, except for interspersing code changes with a re-licensing. BAD lifeless!

review: Approve (code)
Revision history for this message
Robert Collins (lifeless) wrote :

Sorry! And thanks for the review.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '.bzrignore'
2--- .bzrignore 2011-08-09 22:47:47 +0000
3+++ .bzrignore 2011-11-16 04:35:26 +0000
4@@ -8,3 +8,4 @@
5 ./download-cache
6 ./dist
7 ./MANIFEST
8+./.testrepository
9
10=== added file '.testr.conf'
11--- .testr.conf 1970-01-01 00:00:00 +0000
12+++ .testr.conf 2011-11-16 04:35:26 +0000
13@@ -0,0 +1,4 @@
14+[DEFAULT]
15+test_command=PYTHONPATH=. bin/py -m subunit.run $LISTOPT $IDOPTION timeline.tests.test_suite
16+test_id_option=--load-list $IDFILE
17+test_list_option=--list
18
19=== modified file 'LICENSE'
20--- LICENSE 2011-08-09 22:47:47 +0000
21+++ LICENSE 2011-11-16 04:35:26 +0000
22@@ -1,666 +1,165 @@
23-=========================================================================
24-
25- GNU AFFERO GENERAL PUBLIC LICENSE
26- Version 3, 19 November 2007
27- (http://www.gnu.org/licenses/agpl.html)
28+ GNU LESSER GENERAL PUBLIC LICENSE
29+ Version 3, 29 June 2007
30
31 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
32 Everyone is permitted to copy and distribute verbatim copies
33 of this license document, but changing it is not allowed.
34
35- Preamble
36-
37- The GNU Affero General Public License is a free, copyleft license for
38-software and other kinds of works, specifically designed to ensure
39-cooperation with the community in the case of network server software.
40-
41- The licenses for most software and other practical works are designed
42-to take away your freedom to share and change the works. By contrast,
43-our General Public Licenses are intended to guarantee your freedom to
44-share and change all versions of a program--to make sure it remains free
45-software for all its users.
46-
47- When we speak of free software, we are referring to freedom, not
48-price. Our General Public Licenses are designed to make sure that you
49-have the freedom to distribute copies of free software (and charge for
50-them if you wish), that you receive source code or can get it if you
51-want it, that you can change the software or use pieces of it in new
52-free programs, and that you know you can do these things.
53-
54- Developers that use our General Public Licenses protect your rights
55-with two steps: (1) assert copyright on the software, and (2) offer
56-you this License which gives you legal permission to copy, distribute
57-and/or modify the software.
58-
59- A secondary benefit of defending all users' freedom is that
60-improvements made in alternate versions of the program, if they
61-receive widespread use, become available for other developers to
62-incorporate. Many developers of free software are heartened and
63-encouraged by the resulting cooperation. However, in the case of
64-software used on network servers, this result may fail to come about.
65-The GNU General Public License permits making a modified version and
66-letting the public access it on a server without ever releasing its
67-source code to the public.
68-
69- The GNU Affero General Public License is designed specifically to
70-ensure that, in such cases, the modified source code becomes available
71-to the community. It requires the operator of a network server to
72-provide the source code of the modified version running there to the
73-users of that server. Therefore, public use of a modified version, on
74-a publicly accessible server, gives the public access to the source
75-code of the modified version.
76-
77- An older license, called the Affero General Public License and
78-published by Affero, was designed to accomplish similar goals. This is
79-a different license, not a version of the Affero GPL, but Affero has
80-released a new version of the Affero GPL which permits relicensing under
81-this license.
82-
83- The precise terms and conditions for copying, distribution and
84-modification follow.
85-
86- TERMS AND CONDITIONS
87-
88- 0. Definitions.
89-
90- "This License" refers to version 3 of the GNU Affero General Public License.
91-
92- "Copyright" also means copyright-like laws that apply to other kinds of
93-works, such as semiconductor masks.
94-
95- "The Program" refers to any copyrightable work licensed under this
96-License. Each licensee is addressed as "you". "Licensees" and
97-"recipients" may be individuals or organizations.
98-
99- To "modify" a work means to copy from or adapt all or part of the work
100-in a fashion requiring copyright permission, other than the making of an
101-exact copy. The resulting work is called a "modified version" of the
102-earlier work or a work "based on" the earlier work.
103-
104- A "covered work" means either the unmodified Program or a work based
105-on the Program.
106-
107- To "propagate" a work means to do anything with it that, without
108-permission, would make you directly or secondarily liable for
109-infringement under applicable copyright law, except executing it on a
110-computer or modifying a private copy. Propagation includes copying,
111-distribution (with or without modification), making available to the
112-public, and in some countries other activities as well.
113-
114- To "convey" a work means any kind of propagation that enables other
115-parties to make or receive copies. Mere interaction with a user through
116-a computer network, with no transfer of a copy, is not conveying.
117-
118- An interactive user interface displays "Appropriate Legal Notices"
119-to the extent that it includes a convenient and prominently visible
120-feature that (1) displays an appropriate copyright notice, and (2)
121-tells the user that there is no warranty for the work (except to the
122-extent that warranties are provided), that licensees may convey the
123-work under this License, and how to view a copy of this License. If
124-the interface presents a list of user commands or options, such as a
125-menu, a prominent item in the list meets this criterion.
126-
127- 1. Source Code.
128-
129- The "source code" for a work means the preferred form of the work
130-for making modifications to it. "Object code" means any non-source
131-form of a work.
132-
133- A "Standard Interface" means an interface that either is an official
134-standard defined by a recognized standards body, or, in the case of
135-interfaces specified for a particular programming language, one that
136-is widely used among developers working in that language.
137-
138- The "System Libraries" of an executable work include anything, other
139-than the work as a whole, that (a) is included in the normal form of
140-packaging a Major Component, but which is not part of that Major
141-Component, and (b) serves only to enable use of the work with that
142-Major Component, or to implement a Standard Interface for which an
143-implementation is available to the public in source code form. A
144-"Major Component", in this context, means a major essential component
145-(kernel, window system, and so on) of the specific operating system
146-(if any) on which the executable work runs, or a compiler used to
147-produce the work, or an object code interpreter used to run it.
148-
149- The "Corresponding Source" for a work in object code form means all
150-the source code needed to generate, install, and (for an executable
151-work) run the object code and to modify the work, including scripts to
152-control those activities. However, it does not include the work's
153-System Libraries, or general-purpose tools or generally available free
154-programs which are used unmodified in performing those activities but
155-which are not part of the work. For example, Corresponding Source
156-includes interface definition files associated with source files for
157-the work, and the source code for shared libraries and dynamically
158-linked subprograms that the work is specifically designed to require,
159-such as by intimate data communication or control flow between those
160-subprograms and other parts of the work.
161-
162- The Corresponding Source need not include anything that users
163-can regenerate automatically from other parts of the Corresponding
164-Source.
165-
166- The Corresponding Source for a work in source code form is that
167-same work.
168-
169- 2. Basic Permissions.
170-
171- All rights granted under this License are granted for the term of
172-copyright on the Program, and are irrevocable provided the stated
173-conditions are met. This License explicitly affirms your unlimited
174-permission to run the unmodified Program. The output from running a
175-covered work is covered by this License only if the output, given its
176-content, constitutes a covered work. This License acknowledges your
177-rights of fair use or other equivalent, as provided by copyright law.
178-
179- You may make, run and propagate covered works that you do not
180-convey, without conditions so long as your license otherwise remains
181-in force. You may convey covered works to others for the sole purpose
182-of having them make modifications exclusively for you, or provide you
183-with facilities for running those works, provided that you comply with
184-the terms of this License in conveying all material for which you do
185-not control copyright. Those thus making or running the covered works
186-for you must do so exclusively on your behalf, under your direction
187-and control, on terms that prohibit them from making any copies of
188-your copyrighted material outside their relationship with you.
189-
190- Conveying under any other circumstances is permitted solely under
191-the conditions stated below. Sublicensing is not allowed; section 10
192-makes it unnecessary.
193-
194- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
195-
196- No covered work shall be deemed part of an effective technological
197-measure under any applicable law fulfilling obligations under article
198-11 of the WIPO copyright treaty adopted on 20 December 1996, or
199-similar laws prohibiting or restricting circumvention of such
200-measures.
201-
202- When you convey a covered work, you waive any legal power to forbid
203-circumvention of technological measures to the extent such circumvention
204-is effected by exercising rights under this License with respect to
205-the covered work, and you disclaim any intention to limit operation or
206-modification of the work as a means of enforcing, against the work's
207-users, your or third parties' legal rights to forbid circumvention of
208-technological measures.
209-
210- 4. Conveying Verbatim Copies.
211-
212- You may convey verbatim copies of the Program's source code as you
213-receive it, in any medium, provided that you conspicuously and
214-appropriately publish on each copy an appropriate copyright notice;
215-keep intact all notices stating that this License and any
216-non-permissive terms added in accord with section 7 apply to the code;
217-keep intact all notices of the absence of any warranty; and give all
218-recipients a copy of this License along with the Program.
219-
220- You may charge any price or no price for each copy that you convey,
221-and you may offer support or warranty protection for a fee.
222-
223- 5. Conveying Modified Source Versions.
224-
225- You may convey a work based on the Program, or the modifications to
226-produce it from the Program, in the form of source code under the
227-terms of section 4, provided that you also meet all of these conditions:
228-
229- a) The work must carry prominent notices stating that you modified
230- it, and giving a relevant date.
231-
232- b) The work must carry prominent notices stating that it is
233- released under this License and any conditions added under section
234- 7. This requirement modifies the requirement in section 4 to
235- "keep intact all notices".
236-
237- c) You must license the entire work, as a whole, under this
238- License to anyone who comes into possession of a copy. This
239- License will therefore apply, along with any applicable section 7
240- additional terms, to the whole of the work, and all its parts,
241- regardless of how they are packaged. This License gives no
242- permission to license the work in any other way, but it does not
243- invalidate such permission if you have separately received it.
244-
245- d) If the work has interactive user interfaces, each must display
246- Appropriate Legal Notices; however, if the Program has interactive
247- interfaces that do not display Appropriate Legal Notices, your
248- work need not make them do so.
249-
250- A compilation of a covered work with other separate and independent
251-works, which are not by their nature extensions of the covered work,
252-and which are not combined with it such as to form a larger program,
253-in or on a volume of a storage or distribution medium, is called an
254-"aggregate" if the compilation and its resulting copyright are not
255-used to limit the access or legal rights of the compilation's users
256-beyond what the individual works permit. Inclusion of a covered work
257-in an aggregate does not cause this License to apply to the other
258-parts of the aggregate.
259-
260- 6. Conveying Non-Source Forms.
261-
262- You may convey a covered work in object code form under the terms
263-of sections 4 and 5, provided that you also convey the
264-machine-readable Corresponding Source under the terms of this License,
265-in one of these ways:
266-
267- a) Convey the object code in, or embodied in, a physical product
268- (including a physical distribution medium), accompanied by the
269- Corresponding Source fixed on a durable physical medium
270- customarily used for software interchange.
271-
272- b) Convey the object code in, or embodied in, a physical product
273- (including a physical distribution medium), accompanied by a
274- written offer, valid for at least three years and valid for as
275- long as you offer spare parts or customer support for that product
276- model, to give anyone who possesses the object code either (1) a
277- copy of the Corresponding Source for all the software in the
278- product that is covered by this License, on a durable physical
279- medium customarily used for software interchange, for a price no
280- more than your reasonable cost of physically performing this
281- conveying of source, or (2) access to copy the
282- Corresponding Source from a network server at no charge.
283-
284- c) Convey individual copies of the object code with a copy of the
285- written offer to provide the Corresponding Source. This
286- alternative is allowed only occasionally and noncommercially, and
287- only if you received the object code with such an offer, in accord
288- with subsection 6b.
289-
290- d) Convey the object code by offering access from a designated
291- place (gratis or for a charge), and offer equivalent access to the
292- Corresponding Source in the same way through the same place at no
293- further charge. You need not require recipients to copy the
294- Corresponding Source along with the object code. If the place to
295- copy the object code is a network server, the Corresponding Source
296- may be on a different server (operated by you or a third party)
297- that supports equivalent copying facilities, provided you maintain
298- clear directions next to the object code saying where to find the
299- Corresponding Source. Regardless of what server hosts the
300- Corresponding Source, you remain obligated to ensure that it is
301- available for as long as needed to satisfy these requirements.
302-
303- e) Convey the object code using peer-to-peer transmission, provided
304- you inform other peers where the object code and Corresponding
305- Source of the work are being offered to the general public at no
306- charge under subsection 6d.
307-
308- A separable portion of the object code, whose source code is excluded
309-from the Corresponding Source as a System Library, need not be
310-included in conveying the object code work.
311-
312- A "User Product" is either (1) a "consumer product", which means any
313-tangible personal property which is normally used for personal, family,
314-or household purposes, or (2) anything designed or sold for incorporation
315-into a dwelling. In determining whether a product is a consumer product,
316-doubtful cases shall be resolved in favor of coverage. For a particular
317-product received by a particular user, "normally used" refers to a
318-typical or common use of that class of product, regardless of the status
319-of the particular user or of the way in which the particular user
320-actually uses, or expects or is expected to use, the product. A product
321-is a consumer product regardless of whether the product has substantial
322-commercial, industrial or non-consumer uses, unless such uses represent
323-the only significant mode of use of the product.
324-
325- "Installation Information" for a User Product means any methods,
326-procedures, authorization keys, or other information required to install
327-and execute modified versions of a covered work in that User Product from
328-a modified version of its Corresponding Source. The information must
329-suffice to ensure that the continued functioning of the modified object
330-code is in no case prevented or interfered with solely because
331-modification has been made.
332-
333- If you convey an object code work under this section in, or with, or
334-specifically for use in, a User Product, and the conveying occurs as
335-part of a transaction in which the right of possession and use of the
336-User Product is transferred to the recipient in perpetuity or for a
337-fixed term (regardless of how the transaction is characterized), the
338-Corresponding Source conveyed under this section must be accompanied
339-by the Installation Information. But this requirement does not apply
340-if neither you nor any third party retains the ability to install
341-modified object code on the User Product (for example, the work has
342-been installed in ROM).
343-
344- The requirement to provide Installation Information does not include a
345-requirement to continue to provide support service, warranty, or updates
346-for a work that has been modified or installed by the recipient, or for
347-the User Product in which it has been modified or installed. Access to a
348-network may be denied when the modification itself materially and
349-adversely affects the operation of the network or violates the rules and
350-protocols for communication across the network.
351-
352- Corresponding Source conveyed, and Installation Information provided,
353-in accord with this section must be in a format that is publicly
354-documented (and with an implementation available to the public in
355-source code form), and must require no special password or key for
356-unpacking, reading or copying.
357-
358- 7. Additional Terms.
359-
360- "Additional permissions" are terms that supplement the terms of this
361-License by making exceptions from one or more of its conditions.
362-Additional permissions that are applicable to the entire Program shall
363-be treated as though they were included in this License, to the extent
364-that they are valid under applicable law. If additional permissions
365-apply only to part of the Program, that part may be used separately
366-under those permissions, but the entire Program remains governed by
367-this License without regard to the additional permissions.
368-
369- When you convey a copy of a covered work, you may at your option
370-remove any additional permissions from that copy, or from any part of
371-it. (Additional permissions may be written to require their own
372-removal in certain cases when you modify the work.) You may place
373-additional permissions on material, added by you to a covered work,
374-for which you have or can give appropriate copyright permission.
375-
376- Notwithstanding any other provision of this License, for material you
377-add to a covered work, you may (if authorized by the copyright holders of
378-that material) supplement the terms of this License with terms:
379-
380- a) Disclaiming warranty or limiting liability differently from the
381- terms of sections 15 and 16 of this License; or
382-
383- b) Requiring preservation of specified reasonable legal notices or
384- author attributions in that material or in the Appropriate Legal
385- Notices displayed by works containing it; or
386-
387- c) Prohibiting misrepresentation of the origin of that material, or
388- requiring that modified versions of such material be marked in
389- reasonable ways as different from the original version; or
390-
391- d) Limiting the use for publicity purposes of names of licensors or
392- authors of the material; or
393-
394- e) Declining to grant rights under trademark law for use of some
395- trade names, trademarks, or service marks; or
396-
397- f) Requiring indemnification of licensors and authors of that
398- material by anyone who conveys the material (or modified versions of
399- it) with contractual assumptions of liability to the recipient, for
400- any liability that these contractual assumptions directly impose on
401- those licensors and authors.
402-
403- All other non-permissive additional terms are considered "further
404-restrictions" within the meaning of section 10. If the Program as you
405-received it, or any part of it, contains a notice stating that it is
406-governed by this License along with a term that is a further
407-restriction, you may remove that term. If a license document contains
408-a further restriction but permits relicensing or conveying under this
409-License, you may add to a covered work material governed by the terms
410-of that license document, provided that the further restriction does
411-not survive such relicensing or conveying.
412-
413- If you add terms to a covered work in accord with this section, you
414-must place, in the relevant source files, a statement of the
415-additional terms that apply to those files, or a notice indicating
416-where to find the applicable terms.
417-
418- Additional terms, permissive or non-permissive, may be stated in the
419-form of a separately written license, or stated as exceptions;
420-the above requirements apply either way.
421-
422- 8. Termination.
423-
424- You may not propagate or modify a covered work except as expressly
425-provided under this License. Any attempt otherwise to propagate or
426-modify it is void, and will automatically terminate your rights under
427-this License (including any patent licenses granted under the third
428-paragraph of section 11).
429-
430- However, if you cease all violation of this License, then your
431-license from a particular copyright holder is reinstated (a)
432-provisionally, unless and until the copyright holder explicitly and
433-finally terminates your license, and (b) permanently, if the copyright
434-holder fails to notify you of the violation by some reasonable means
435-prior to 60 days after the cessation.
436-
437- Moreover, your license from a particular copyright holder is
438-reinstated permanently if the copyright holder notifies you of the
439-violation by some reasonable means, this is the first time you have
440-received notice of violation of this License (for any work) from that
441-copyright holder, and you cure the violation prior to 30 days after
442-your receipt of the notice.
443-
444- Termination of your rights under this section does not terminate the
445-licenses of parties who have received copies or rights from you under
446-this License. If your rights have been terminated and not permanently
447-reinstated, you do not qualify to receive new licenses for the same
448-material under section 10.
449-
450- 9. Acceptance Not Required for Having Copies.
451-
452- You are not required to accept this License in order to receive or
453-run a copy of the Program. Ancillary propagation of a covered work
454-occurring solely as a consequence of using peer-to-peer transmission
455-to receive a copy likewise does not require acceptance. However,
456-nothing other than this License grants you permission to propagate or
457-modify any covered work. These actions infringe copyright if you do
458-not accept this License. Therefore, by modifying or propagating a
459-covered work, you indicate your acceptance of this License to do so.
460-
461- 10. Automatic Licensing of Downstream Recipients.
462-
463- Each time you convey a covered work, the recipient automatically
464-receives a license from the original licensors, to run, modify and
465-propagate that work, subject to this License. You are not responsible
466-for enforcing compliance by third parties with this License.
467-
468- An "entity transaction" is a transaction transferring control of an
469-organization, or substantially all assets of one, or subdividing an
470-organization, or merging organizations. If propagation of a covered
471-work results from an entity transaction, each party to that
472-transaction who receives a copy of the work also receives whatever
473-licenses to the work the party's predecessor in interest had or could
474-give under the previous paragraph, plus a right to possession of the
475-Corresponding Source of the work from the predecessor in interest, if
476-the predecessor has it or can get it with reasonable efforts.
477-
478- You may not impose any further restrictions on the exercise of the
479-rights granted or affirmed under this License. For example, you may
480-not impose a license fee, royalty, or other charge for exercise of
481-rights granted under this License, and you may not initiate litigation
482-(including a cross-claim or counterclaim in a lawsuit) alleging that
483-any patent claim is infringed by making, using, selling, offering for
484-sale, or importing the Program or any portion of it.
485-
486- 11. Patents.
487-
488- A "contributor" is a copyright holder who authorizes use under this
489-License of the Program or a work on which the Program is based. The
490-work thus licensed is called the contributor's "contributor version".
491-
492- A contributor's "essential patent claims" are all patent claims
493-owned or controlled by the contributor, whether already acquired or
494-hereafter acquired, that would be infringed by some manner, permitted
495-by this License, of making, using, or selling its contributor version,
496-but do not include claims that would be infringed only as a
497-consequence of further modification of the contributor version. For
498-purposes of this definition, "control" includes the right to grant
499-patent sublicenses in a manner consistent with the requirements of
500-this License.
501-
502- Each contributor grants you a non-exclusive, worldwide, royalty-free
503-patent license under the contributor's essential patent claims, to
504-make, use, sell, offer for sale, import and otherwise run, modify and
505-propagate the contents of its contributor version.
506-
507- In the following three paragraphs, a "patent license" is any express
508-agreement or commitment, however denominated, not to enforce a patent
509-(such as an express permission to practice a patent or covenant not to
510-sue for patent infringement). To "grant" such a patent license to a
511-party means to make such an agreement or commitment not to enforce a
512-patent against the party.
513-
514- If you convey a covered work, knowingly relying on a patent license,
515-and the Corresponding Source of the work is not available for anyone
516-to copy, free of charge and under the terms of this License, through a
517-publicly available network server or other readily accessible means,
518-then you must either (1) cause the Corresponding Source to be so
519-available, or (2) arrange to deprive yourself of the benefit of the
520-patent license for this particular work, or (3) arrange, in a manner
521-consistent with the requirements of this License, to extend the patent
522-license to downstream recipients. "Knowingly relying" means you have
523-actual knowledge that, but for the patent license, your conveying the
524-covered work in a country, or your recipient's use of the covered work
525-in a country, would infringe one or more identifiable patents in that
526-country that you have reason to believe are valid.
527-
528- If, pursuant to or in connection with a single transaction or
529-arrangement, you convey, or propagate by procuring conveyance of, a
530-covered work, and grant a patent license to some of the parties
531-receiving the covered work authorizing them to use, propagate, modify
532-or convey a specific copy of the covered work, then the patent license
533-you grant is automatically extended to all recipients of the covered
534-work and works based on it.
535-
536- A patent license is "discriminatory" if it does not include within
537-the scope of its coverage, prohibits the exercise of, or is
538-conditioned on the non-exercise of one or more of the rights that are
539-specifically granted under this License. You may not convey a covered
540-work if you are a party to an arrangement with a third party that is
541-in the business of distributing software, under which you make payment
542-to the third party based on the extent of your activity of conveying
543-the work, and under which the third party grants, to any of the
544-parties who would receive the covered work from you, a discriminatory
545-patent license (a) in connection with copies of the covered work
546-conveyed by you (or copies made from those copies), or (b) primarily
547-for and in connection with specific products or compilations that
548-contain the covered work, unless you entered into that arrangement,
549-or that patent license was granted, prior to 28 March 2007.
550-
551- Nothing in this License shall be construed as excluding or limiting
552-any implied license or other defenses to infringement that may
553-otherwise be available to you under applicable patent law.
554-
555- 12. No Surrender of Others' Freedom.
556-
557- If conditions are imposed on you (whether by court order, agreement or
558-otherwise) that contradict the conditions of this License, they do not
559-excuse you from the conditions of this License. If you cannot convey a
560-covered work so as to satisfy simultaneously your obligations under this
561-License and any other pertinent obligations, then as a consequence you may
562-not convey it at all. For example, if you agree to terms that obligate you
563-to collect a royalty for further conveying from those to whom you convey
564-the Program, the only way you could satisfy both those terms and this
565-License would be to refrain entirely from conveying the Program.
566-
567- 13. Remote Network Interaction; Use with the GNU General Public License.
568-
569- Notwithstanding any other provision of this License, if you modify the
570-Program, your modified version must prominently offer all users
571-interacting with it remotely through a computer network (if your version
572-supports such interaction) an opportunity to receive the Corresponding
573-Source of your version by providing access to the Corresponding Source
574-from a network server at no charge, through some standard or customary
575-means of facilitating copying of software. This Corresponding Source
576-shall include the Corresponding Source for any work covered by version 3
577-of the GNU General Public License that is incorporated pursuant to the
578-following paragraph.
579-
580- Notwithstanding any other provision of this License, you have
581-permission to link or combine any covered work with a work licensed
582-under version 3 of the GNU General Public License into a single
583-combined work, and to convey the resulting work. The terms of this
584-License will continue to apply to the part which is the covered work,
585-but the work with which it is combined will remain governed by version
586-3 of the GNU General Public License.
587-
588- 14. Revised Versions of this License.
589-
590- The Free Software Foundation may publish revised and/or new versions of
591-the GNU Affero General Public License from time to time. Such new versions
592-will be similar in spirit to the present version, but may differ in detail to
593-address new problems or concerns.
594-
595- Each version is given a distinguishing version number. If the
596-Program specifies that a certain numbered version of the GNU Affero General
597-Public License "or any later version" applies to it, you have the
598-option of following the terms and conditions either of that numbered
599-version or of any later version published by the Free Software
600-Foundation. If the Program does not specify a version number of the
601-GNU Affero General Public License, you may choose any version ever published
602-by the Free Software Foundation.
603-
604- If the Program specifies that a proxy can decide which future
605-versions of the GNU Affero General Public License can be used, that proxy's
606-public statement of acceptance of a version permanently authorizes you
607-to choose that version for the Program.
608-
609- Later license versions may give you additional or different
610-permissions. However, no additional obligations are imposed on any
611-author or copyright holder as a result of your choosing to follow a
612-later version.
613-
614- 15. Disclaimer of Warranty.
615-
616- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
617-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
618-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
619-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
620-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
621-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
622-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
623-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
624-
625- 16. Limitation of Liability.
626-
627- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
628-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
629-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
630-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
631-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
632-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
633-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
634-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
635-SUCH DAMAGES.
636-
637- 17. Interpretation of Sections 15 and 16.
638-
639- If the disclaimer of warranty and limitation of liability provided
640-above cannot be given local legal effect according to their terms,
641-reviewing courts shall apply local law that most closely approximates
642-an absolute waiver of all civil liability in connection with the
643-Program, unless a warranty or assumption of liability accompanies a
644-copy of the Program in return for a fee.
645-
646- END OF TERMS AND CONDITIONS
647-
648- How to Apply These Terms to Your New Programs
649-
650- If you develop a new program, and you want it to be of the greatest
651-possible use to the public, the best way to achieve this is to make it
652-free software which everyone can redistribute and change under these terms.
653-
654- To do so, attach the following notices to the program. It is safest
655-to attach them to the start of each source file to most effectively
656-state the exclusion of warranty; and each file should have at least
657-the "copyright" line and a pointer to where the full notice is found.
658-
659- <one line to give the program's name and a brief idea of what it does.>
660- Copyright (C) <year> <name of author>
661-
662- This program is free software: you can redistribute it and/or modify
663- it under the terms of the GNU Affero General Public License as published by
664- the Free Software Foundation, either version 3 of the License, or
665- (at your option) any later version.
666-
667- This program is distributed in the hope that it will be useful,
668- but WITHOUT ANY WARRANTY; without even the implied warranty of
669- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
670- GNU Affero General Public License for more details.
671-
672- You should have received a copy of the GNU Affero General Public License
673- along with this program. If not, see <http://www.gnu.org/licenses/>.
674-
675-Also add information on how to contact you by electronic and paper mail.
676-
677- If your software can interact with users remotely through a computer
678-network, you should also make sure that it provides a way for users to
679-get its source. For example, if your program is a web application, its
680-interface could display a "Source" link that leads users to an archive
681-of the code. There are many ways you could offer source, and different
682-solutions will be better for different programs; see section 13 for the
683-specific requirements.
684-
685- You should also get your employer (if you work as a programmer) or school,
686-if any, to sign a "copyright disclaimer" for the program, if necessary.
687-For more information on this, and how to apply and follow the GNU AGPL, see
688-<http://www.gnu.org/licenses/>.
689-
690-=========================================================================
691+
692+ This version of the GNU Lesser General Public License incorporates
693+the terms and conditions of version 3 of the GNU General Public
694+License, supplemented by the additional permissions listed below.
695+
696+ 0. Additional Definitions.
697+
698+ As used herein, "this License" refers to version 3 of the GNU Lesser
699+General Public License, and the "GNU GPL" refers to version 3 of the GNU
700+General Public License.
701+
702+ "The Library" refers to a covered work governed by this License,
703+other than an Application or a Combined Work as defined below.
704+
705+ An "Application" is any work that makes use of an interface provided
706+by the Library, but which is not otherwise based on the Library.
707+Defining a subclass of a class defined by the Library is deemed a mode
708+of using an interface provided by the Library.
709+
710+ A "Combined Work" is a work produced by combining or linking an
711+Application with the Library. The particular version of the Library
712+with which the Combined Work was made is also called the "Linked
713+Version".
714+
715+ The "Minimal Corresponding Source" for a Combined Work means the
716+Corresponding Source for the Combined Work, excluding any source code
717+for portions of the Combined Work that, considered in isolation, are
718+based on the Application, and not on the Linked Version.
719+
720+ The "Corresponding Application Code" for a Combined Work means the
721+object code and/or source code for the Application, including any data
722+and utility programs needed for reproducing the Combined Work from the
723+Application, but excluding the System Libraries of the Combined Work.
724+
725+ 1. Exception to Section 3 of the GNU GPL.
726+
727+ You may convey a covered work under sections 3 and 4 of this License
728+without being bound by section 3 of the GNU GPL.
729+
730+ 2. Conveying Modified Versions.
731+
732+ If you modify a copy of the Library, and, in your modifications, a
733+facility refers to a function or data to be supplied by an Application
734+that uses the facility (other than as an argument passed when the
735+facility is invoked), then you may convey a copy of the modified
736+version:
737+
738+ a) under this License, provided that you make a good faith effort to
739+ ensure that, in the event an Application does not supply the
740+ function or data, the facility still operates, and performs
741+ whatever part of its purpose remains meaningful, or
742+
743+ b) under the GNU GPL, with none of the additional permissions of
744+ this License applicable to that copy.
745+
746+ 3. Object Code Incorporating Material from Library Header Files.
747+
748+ The object code form of an Application may incorporate material from
749+a header file that is part of the Library. You may convey such object
750+code under terms of your choice, provided that, if the incorporated
751+material is not limited to numerical parameters, data structure
752+layouts and accessors, or small macros, inline functions and templates
753+(ten or fewer lines in length), you do both of the following:
754+
755+ a) Give prominent notice with each copy of the object code that the
756+ Library is used in it and that the Library and its use are
757+ covered by this License.
758+
759+ b) Accompany the object code with a copy of the GNU GPL and this license
760+ document.
761+
762+ 4. Combined Works.
763+
764+ You may convey a Combined Work under terms of your choice that,
765+taken together, effectively do not restrict modification of the
766+portions of the Library contained in the Combined Work and reverse
767+engineering for debugging such modifications, if you also do each of
768+the following:
769+
770+ a) Give prominent notice with each copy of the Combined Work that
771+ the Library is used in it and that the Library and its use are
772+ covered by this License.
773+
774+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
775+ document.
776+
777+ c) For a Combined Work that displays copyright notices during
778+ execution, include the copyright notice for the Library among
779+ these notices, as well as a reference directing the user to the
780+ copies of the GNU GPL and this license document.
781+
782+ d) Do one of the following:
783+
784+ 0) Convey the Minimal Corresponding Source under the terms of this
785+ License, and the Corresponding Application Code in a form
786+ suitable for, and under terms that permit, the user to
787+ recombine or relink the Application with a modified version of
788+ the Linked Version to produce a modified Combined Work, in the
789+ manner specified by section 6 of the GNU GPL for conveying
790+ Corresponding Source.
791+
792+ 1) Use a suitable shared library mechanism for linking with the
793+ Library. A suitable mechanism is one that (a) uses at run time
794+ a copy of the Library already present on the user's computer
795+ system, and (b) will operate properly with a modified version
796+ of the Library that is interface-compatible with the Linked
797+ Version.
798+
799+ e) Provide Installation Information, but only if you would otherwise
800+ be required to provide such information under section 6 of the
801+ GNU GPL, and only to the extent that such information is
802+ necessary to install and execute a modified version of the
803+ Combined Work produced by recombining or relinking the
804+ Application with a modified version of the Linked Version. (If
805+ you use option 4d0, the Installation Information must accompany
806+ the Minimal Corresponding Source and Corresponding Application
807+ Code. If you use option 4d1, you must provide the Installation
808+ Information in the manner specified by section 6 of the GNU GPL
809+ for conveying Corresponding Source.)
810+
811+ 5. Combined Libraries.
812+
813+ You may place library facilities that are a work based on the
814+Library side by side in a single library together with other library
815+facilities that are not Applications and are not covered by this
816+License, and convey such a combined library under terms of your
817+choice, if you do both of the following:
818+
819+ a) Accompany the combined library with a copy of the same work based
820+ on the Library, uncombined with any other library facilities,
821+ conveyed under the terms of this License.
822+
823+ b) Give prominent notice with the combined library that part of it
824+ is a work based on the Library, and explaining where to find the
825+ accompanying uncombined form of the same work.
826+
827+ 6. Revised Versions of the GNU Lesser General Public License.
828+
829+ The Free Software Foundation may publish revised and/or new versions
830+of the GNU Lesser General Public License from time to time. Such new
831+versions will be similar in spirit to the present version, but may
832+differ in detail to address new problems or concerns.
833+
834+ Each version is given a distinguishing version number. If the
835+Library as you received it specifies that a certain numbered version
836+of the GNU Lesser General Public License "or any later version"
837+applies to it, you have the option of following the terms and
838+conditions either of that published version or of any later version
839+published by the Free Software Foundation. If the Library as you
840+received it does not specify a version number of the GNU Lesser
841+General Public License, you may choose any version of the GNU Lesser
842+General Public License ever published by the Free Software Foundation.
843+
844+ If the Library as you received it specifies that a proxy can decide
845+whether future versions of the GNU Lesser General Public License shall
846+apply, that proxy's public statement of acceptance of any version is
847+permanent authorization for you to choose that version for the
848+Library.
849
850=== modified file 'NEWS'
851--- NEWS 2011-09-19 06:11:17 +0000
852+++ NEWS 2011-11-16 04:35:26 +0000
853@@ -6,8 +6,22 @@
854 NEXT
855 ----
856
857+0.0.3
858+-----
859+
860+* Added a .testr.conf to support easy testing. (Robert Collins)
861+
862+* Relicensed under LGPL 3. (Robert Collins)
863+
864+* TimedAction.logTuple() now returns 5-tuples with the last element the
865+ backtrace for the action, or None if none was set. (Robert Collins)
866+
867+* Timeline now gathers backtraces by default. This can be disabled by
868+ passing format_stack=None, or customised by passing a replacement
869+ callable. (Robert Collins)
870+
871 0.0.2
872 -----
873
874-Added a WSGI integration module - very simple, just injects a Timeline into
875-environ as 'timeline.timeline'.
876+* Added a WSGI integration module - very simple, just injects a Timeline into
877+ environ as 'timeline.timeline'.
878
879=== modified file 'README'
880--- README 2011-09-19 06:11:17 +0000
881+++ README 2011-11-16 04:35:26 +0000
882@@ -5,16 +5,15 @@
883 Copyright (c) 2011, Canonical Ltd
884
885 This program is free software: you can redistribute it and/or modify
886- it under the terms of the GNU Affero General Public License as published by
887- the Free Software Foundation, either version 3 of the License, or
888- (at your option) any later version.
889-
890+ it under the terms of the GNU Lesser General Public License as published by
891+ the Free Software Foundation, version 3 only.
892+
893 This program is distributed in the hope that it will be useful,
894 but WITHOUT ANY WARRANTY; without even the implied warranty of
895 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
896- GNU Affero General Public License for more details.
897-
898- You should have received a copy of the GNU Affero General Public License
899+ GNU Lesser General Public License for more details.
900+
901+ You should have received a copy of the GNU Lesser General Public License
902 along with this program. If not, see <http://www.gnu.org/licenses/>.
903
904 The timeline package provides a way to model a series of actions. For instance,
905@@ -61,8 +60,8 @@
906 >>> from timeline import wsgi
907 >>> app = wsgi.make_app(inner_app)
908
909-Calls to app will now inject a 'timeline.timeline' variable which can be used
910-by inner_app to record actions.
911+Calls to app will now inject a 'timeline.timeline' variable into the wsgi
912+environwhich can be used by inner_app to record actions.
913
914
915 Installation
916@@ -86,3 +85,7 @@
917 For instance::
918
919 $ bin/py -m testtools.run timeline.tests.test_suite
920+
921+If you have testrepository you can run the tests with testr::
922+
923+ $ testr run
924
925=== modified file 'buildout.cfg'
926--- buildout.cfg 2011-08-09 22:47:47 +0000
927+++ buildout.cfg 2011-11-16 04:35:26 +0000
928@@ -1,5 +1,5 @@
929 # Copyright 2011 Canonical Ltd. This software is licensed under the
930-# GNU Affero General Public License version 3 (see the file LICENSE).
931+# GNU Lesser General Public License version 3 (see the file LICENSE).
932
933 [buildout]
934 parts =
935
936=== modified file 'setup.py'
937--- setup.py 2011-09-19 06:11:17 +0000
938+++ setup.py 2011-11-16 04:35:26 +0000
939@@ -3,16 +3,15 @@
940 # Copyright (c) 2011, Canonical Ltd
941 #
942 # This program is free software: you can redistribute it and/or modify
943-# it under the terms of the GNU Affero General Public License as published by
944-# the Free Software Foundation, either version 3 of the License, or
945-# (at your option) any later version.
946+# it under the terms of the GNU Lesser General Public License as published by
947+# the Free Software Foundation, version 3 only.
948 #
949 # This program is distributed in the hope that it will be useful,
950 # but WITHOUT ANY WARRANTY; without even the implied warranty of
951 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
952-# GNU Affero General Public License for more details.
953+# GNU Lesser General Public License for more details.
954 #
955-# You should have received a copy of the GNU Affero General Public License
956+# You should have received a copy of the GNU Lesser General Public License
957 # along with this program. If not, see <http://www.gnu.org/licenses/>.
958
959
960@@ -22,7 +21,7 @@
961 description = file(os.path.join(os.path.dirname(__file__), 'README'), 'rb').read()
962
963 setup(name="timeline",
964- version="0.0.2",
965+ version="0.0.3",
966 description="Timeline module for modelling a series of actions.",
967 long_description=description,
968 maintainer="Launchpad Developers",
969@@ -33,7 +32,7 @@
970 classifiers = [
971 'Development Status :: 2 - Pre-Alpha',
972 'Intended Audience :: Developers',
973- 'License :: OSI Approved :: GNU Affero General Public License v3',
974+ 'License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)',
975 'Operating System :: OS Independent',
976 'Programming Language :: Python',
977 ],
978
979=== modified file 'timeline/__init__.py'
980--- timeline/__init__.py 2011-09-19 06:11:17 +0000
981+++ timeline/__init__.py 2011-11-16 04:35:26 +0000
982@@ -2,16 +2,15 @@
983 # Copyright (c) 2011, Canonical Ltd
984 #
985 # This program is free software: you can redistribute it and/or modify
986-# it under the terms of the GNU Affero General Public License as published by
987-# the Free Software Foundation, either version 3 of the License, or
988-# (at your option) any later version.
989+# it under the terms of the GNU Lesser General Public License as published by
990+# the Free Software Foundation, version 3 only.
991 #
992 # This program is distributed in the hope that it will be useful,
993 # but WITHOUT ANY WARRANTY; without even the implied warranty of
994 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
995-# GNU Affero General Public License for more details.
996+# GNU Lesser General Public License for more details.
997 #
998-# You should have received a copy of the GNU Affero General Public License
999+# You should have received a copy of the GNU Lesser General Public License
1000 # along with this program. If not, see <http://www.gnu.org/licenses/>.
1001
1002 # same format as sys.version_info: "A tuple containing the five components of
1003@@ -25,7 +24,7 @@
1004 # established at this point, and setup.py will use a version of next-$(revno).
1005 # If the releaselevel is 'final', then the tarball will be major.minor.micro.
1006 # Otherwise it is major.minor.micro~$(revno).
1007-__version__ = (0, 0, 2, 'beta', 0)
1008+__version__ = (0, 0, 3, 'beta', 0)
1009
1010 __all__ = [
1011 'Timeline',
1012
1013=== modified file 'timeline/nestingtimedaction.py'
1014--- timeline/nestingtimedaction.py 2011-08-09 22:47:47 +0000
1015+++ timeline/nestingtimedaction.py 2011-11-16 04:35:26 +0000
1016@@ -1,18 +1,16 @@
1017 # Copyright (c) 2010, 2011, Canonical Ltd
1018 #
1019 # This program is free software: you can redistribute it and/or modify
1020-# it under the terms of the GNU Affero General Public License as published by
1021-# the Free Software Foundation, either version 3 of the License, or
1022-# (at your option) any later version.
1023+# it under the terms of the GNU Lesser General Public License as published by
1024+# the Free Software Foundation, version 3 only.
1025 #
1026 # This program is distributed in the hope that it will be useful,
1027 # but WITHOUT ANY WARRANTY; without even the implied warranty of
1028 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1029-# GNU Affero General Public License for more details.
1030+# GNU Lesser General Public License for more details.
1031 #
1032-# You should have received a copy of the GNU Affero General Public License
1033+# You should have received a copy of the GNU Lesser General Public License
1034 # along with this program. If not, see <http://www.gnu.org/licenses/>.
1035-# GNU Affero General Public License version 3 (see the file LICENSE).
1036
1037 """Time an action which calls other timed actions."""
1038
1039
1040=== modified file 'timeline/tests/__init__.py'
1041--- timeline/tests/__init__.py 2011-09-19 06:11:17 +0000
1042+++ timeline/tests/__init__.py 2011-11-16 04:35:26 +0000
1043@@ -1,18 +1,16 @@
1044 # Copyright (c) 2010, 2011, Canonical Ltd
1045 #
1046 # This program is free software: you can redistribute it and/or modify
1047-# it under the terms of the GNU Affero General Public License as published by
1048-# the Free Software Foundation, either version 3 of the License, or
1049-# (at your option) any later version.
1050+# it under the terms of the GNU Lesser General Public License as published by
1051+# the Free Software Foundation, version 3 only.
1052 #
1053 # This program is distributed in the hope that it will be useful,
1054 # but WITHOUT ANY WARRANTY; without even the implied warranty of
1055 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1056-# GNU Affero General Public License for more details.
1057+# GNU Lesser General Public License for more details.
1058 #
1059-# You should have received a copy of the GNU Affero General Public License
1060+# You should have received a copy of the GNU Lesser General Public License
1061 # along with this program. If not, see <http://www.gnu.org/licenses/>.
1062-# GNU Affero General Public License version 3 (see the file LICENSE).
1063
1064 """Tests for timeline."""
1065
1066
1067=== modified file 'timeline/tests/test_nestingtimedaction.py'
1068--- timeline/tests/test_nestingtimedaction.py 2011-08-09 22:47:47 +0000
1069+++ timeline/tests/test_nestingtimedaction.py 2011-11-16 04:35:26 +0000
1070@@ -1,18 +1,16 @@
1071 # Copyright (c) 2010, 2011, Canonical Ltd
1072 #
1073 # This program is free software: you can redistribute it and/or modify
1074-# it under the terms of the GNU Affero General Public License as published by
1075-# the Free Software Foundation, either version 3 of the License, or
1076-# (at your option) any later version.
1077+# it under the terms of the GNU Lesser General Public License as published by
1078+# the Free Software Foundation, version 3 only.
1079 #
1080 # This program is distributed in the hope that it will be useful,
1081 # but WITHOUT ANY WARRANTY; without even the implied warranty of
1082 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1083-# GNU Affero General Public License for more details.
1084+# GNU Lesser General Public License for more details.
1085 #
1086-# You should have received a copy of the GNU Affero General Public License
1087+# You should have received a copy of the GNU Lesser General Public License
1088 # along with this program. If not, see <http://www.gnu.org/licenses/>.
1089-# GNU Affero General Public License version 3 (see the file LICENSE).
1090
1091 """Tests of the TimedAction class."""
1092
1093
1094=== modified file 'timeline/tests/test_timedaction.py'
1095--- timeline/tests/test_timedaction.py 2011-08-09 22:47:47 +0000
1096+++ timeline/tests/test_timedaction.py 2011-11-16 04:35:26 +0000
1097@@ -1,18 +1,16 @@
1098 # Copyright (c) 2010, 2011, Canonical Ltd
1099 #
1100 # This program is free software: you can redistribute it and/or modify
1101-# it under the terms of the GNU Affero General Public License as published by
1102-# the Free Software Foundation, either version 3 of the License, or
1103-# (at your option) any later version.
1104+# it under the terms of the GNU Lesser General Public License as published by
1105+# the Free Software Foundation, version 3 only.
1106 #
1107 # This program is distributed in the hope that it will be useful,
1108 # but WITHOUT ANY WARRANTY; without even the implied warranty of
1109 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1110-# GNU Affero General Public License for more details.
1111+# GNU Lesser General Public License for more details.
1112 #
1113-# You should have received a copy of the GNU Affero General Public License
1114+# You should have received a copy of the GNU Lesser General Public License
1115 # along with this program. If not, see <http://www.gnu.org/licenses/>.
1116-# GNU Affero General Public License version 3 (see the file LICENSE).
1117
1118 """Tests of the TimedAction class."""
1119
1120@@ -53,25 +51,38 @@
1121 action.start = timeline.baseline + datetime.timedelta(0, 0, 0, 2)
1122 action.duration = datetime.timedelta(0, 0, 0, 4)
1123 log_tuple = action.logTuple()
1124- self.assertEqual(4, len(log_tuple), "!= 4 elements %s" % (log_tuple,))
1125+ self.assertEqual(5, len(log_tuple), "!= 5 elements %s" % (log_tuple,))
1126 # The first element is the start offset in ms.
1127 self.assertAlmostEqual(2, log_tuple[0])
1128 # The second element is the end offset in ms.
1129 self.assertAlmostEqual(6, log_tuple[1])
1130 self.assertEqual("foo", log_tuple[2])
1131 self.assertEqual("bar", log_tuple[3])
1132+ # The fifth element defaults to None:
1133+ self.assertEqual(None, log_tuple[4])
1134
1135 def test_logTupleIncomplete(self):
1136 # Things that start and hit a timeout *may* not get recorded as
1137- # finishing in normal operation.
1138+ # finishing in normal operation - they still need to generate a
1139+ # logTuple, using now as the end point.
1140 timeline = Timeline()
1141 action = TimedAction("foo", "bar", timeline)
1142 # Set variable for deterministic results
1143 action.start = timeline.baseline + datetime.timedelta(0, 0, 0, 2)
1144 action._interval_to_now = lambda: datetime.timedelta(0, 0, 0, 3)
1145 log_tuple = action.logTuple()
1146- self.assertEqual(4, len(log_tuple), "!= 4 elements %s" % (log_tuple,))
1147+ self.assertEqual(5, len(log_tuple), "!= 5 elements %s" % (log_tuple,))
1148 self.assertAlmostEqual(2, log_tuple[0])
1149 self.assertAlmostEqual(5, log_tuple[1])
1150 self.assertEqual("foo", log_tuple[2])
1151 self.assertEqual("bar", log_tuple[3])
1152+
1153+ def test_logTupleBacktrace(self):
1154+ # If the action has a backtrace attribute, that is placed into the
1155+ # fifth element of logTuple.
1156+ timeline = Timeline()
1157+ action = TimedAction("foo", "bar", timeline)
1158+ action.finish()
1159+ action.backtrace = "Foo Bar"
1160+ log_tuple = action.logTuple()
1161+ self.assertEqual("Foo Bar", log_tuple[4])
1162
1163=== modified file 'timeline/tests/test_timeline.py'
1164--- timeline/tests/test_timeline.py 2011-08-09 22:47:47 +0000
1165+++ timeline/tests/test_timeline.py 2011-11-16 04:35:26 +0000
1166@@ -1,18 +1,16 @@
1167 # Copyright (c) 2010, 2011, Canonical Ltd
1168 #
1169 # This program is free software: you can redistribute it and/or modify
1170-# it under the terms of the GNU Affero General Public License as published by
1171-# the Free Software Foundation, either version 3 of the License, or
1172-# (at your option) any later version.
1173+# it under the terms of the GNU Lesser General Public License as published by
1174+# the Free Software Foundation, version 3 only.
1175 #
1176 # This program is distributed in the hope that it will be useful,
1177 # but WITHOUT ANY WARRANTY; without even the implied warranty of
1178 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1179-# GNU Affero General Public License for more details.
1180+# GNU Lesser General Public License for more details.
1181 #
1182-# You should have received a copy of the GNU Affero General Public License
1183+# You should have received a copy of the GNU Lesser General Public License
1184 # along with this program. If not, see <http://www.gnu.org/licenses/>.
1185-# GNU Affero General Public License version 3 (see the file LICENSE).
1186
1187 """Tests of the Timeline class."""
1188
1189@@ -124,3 +122,15 @@
1190 def test_baseline(self):
1191 timeline = Timeline()
1192 self.assertIsInstance(timeline.baseline, datetime.datetime)
1193+
1194+ def test_start_sets_backtrace_by_default(self):
1195+ timeline = Timeline()
1196+ action = timeline.start("Sending mail", "Noone")
1197+ self.assertNotEqual(None, action.backtrace)
1198+ self.assertIsInstance(action.backtrace, basestring)
1199+
1200+ def test_backtraces_can_be_disabled(self):
1201+ # Passing format_stack=None to Timeline prevents backtrace gathering.
1202+ timeline = Timeline(format_stack=None)
1203+ action = timeline.start("Sending mail", "Noone")
1204+ self.assertEqual(None, action.backtrace)
1205
1206=== modified file 'timeline/tests/test_wsgi.py'
1207--- timeline/tests/test_wsgi.py 2011-09-19 06:11:17 +0000
1208+++ timeline/tests/test_wsgi.py 2011-11-16 04:35:26 +0000
1209@@ -1,18 +1,16 @@
1210 # Copyright (c) 2010, 2011, Canonical Ltd
1211 #
1212 # This program is free software: you can redistribute it and/or modify
1213-# it under the terms of the GNU Affero General Public License as published by
1214-# the Free Software Foundation, either version 3 of the License, or
1215-# (at your option) any later version.
1216+# it under the terms of the GNU Lesser General Public License as published by
1217+# the Free Software Foundation, version 3 only.
1218 #
1219 # This program is distributed in the hope that it will be useful,
1220 # but WITHOUT ANY WARRANTY; without even the implied warranty of
1221 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1222-# GNU Affero General Public License for more details.
1223+# GNU Lesser General Public License for more details.
1224 #
1225-# You should have received a copy of the GNU Affero General Public License
1226+# You should have received a copy of the GNU Lesser General Public License
1227 # along with this program. If not, see <http://www.gnu.org/licenses/>.
1228-# GNU Affero General Public License version 3 (see the file LICENSE).
1229
1230 """Tests of the WSGI integration."""
1231
1232
1233=== modified file 'timeline/timedaction.py'
1234--- timeline/timedaction.py 2011-08-09 22:47:47 +0000
1235+++ timeline/timedaction.py 2011-11-16 04:35:26 +0000
1236@@ -1,18 +1,16 @@
1237 # Copyright (c) 2010, 2011, Canonical Ltd
1238 #
1239 # This program is free software: you can redistribute it and/or modify
1240-# it under the terms of the GNU Affero General Public License as published by
1241-# the Free Software Foundation, either version 3 of the License, or
1242-# (at your option) any later version.
1243+# it under the terms of the GNU Lesser General Public License as published by
1244+# the Free Software Foundation, version 3 only.
1245 #
1246 # This program is distributed in the hope that it will be useful,
1247 # but WITHOUT ANY WARRANTY; without even the implied warranty of
1248 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1249-# GNU Affero General Public License for more details.
1250+# GNU Lesser General Public License for more details.
1251 #
1252-# You should have received a copy of the GNU Affero General Public License
1253+# You should have received a copy of the GNU Lesser General Public License
1254 # along with this program. If not, see <http://www.gnu.org/licenses/>.
1255-# GNU Affero General Public License version 3 (see the file LICENSE).
1256
1257 """Time a single categorised action."""
1258
1259@@ -39,6 +37,9 @@
1260 actions which have not completed.
1261 :ivar category: The category of the action. E.g. "sql".
1262 :ivar detail: The detail about the action. E.g. "SELECT COUNT(*) ..."
1263+ :ivar backtrace: A backtrace for when the action was started. Useful for
1264+ detecting code paths that cause lots of actions (usually a bad thing
1265+ from a performance perspective).
1266 """
1267
1268 def __init__(self, category, detail, timeline=None):
1269@@ -55,6 +56,7 @@
1270 self.category = category
1271 self.detail = detail
1272 self.timeline = timeline
1273+ self.backtrace = None
1274 self._init()
1275
1276 def _init(self):
1277@@ -79,7 +81,8 @@
1278 length = self._td_to_ms(self._interval_to_now())
1279 else:
1280 length = self._td_to_ms(self.duration)
1281- return (offset, offset + length, self.category, self.detail)
1282+ return (offset, offset + length, self.category, self.detail,
1283+ self.backtrace)
1284
1285 def _td_to_ms(self, td):
1286 """Tweak on a backport from python 2.7"""
1287
1288=== modified file 'timeline/timeline.py'
1289--- timeline/timeline.py 2011-08-09 22:47:47 +0000
1290+++ timeline/timeline.py 2011-11-16 04:35:26 +0000
1291@@ -1,18 +1,16 @@
1292 # Copyright (c) 2010, 2011, Canonical Ltd
1293 #
1294 # This program is free software: you can redistribute it and/or modify
1295-# it under the terms of the GNU Affero General Public License as published by
1296-# the Free Software Foundation, either version 3 of the License, or
1297-# (at your option) any later version.
1298+# it under the terms of the GNU Lesser General Public License as published by
1299+# the Free Software Foundation, version 3 only.
1300 #
1301 # This program is distributed in the hope that it will be useful,
1302 # but WITHOUT ANY WARRANTY; without even the implied warranty of
1303 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1304-# GNU Affero General Public License for more details.
1305+# GNU Lesser General Public License for more details.
1306 #
1307-# You should have received a copy of the GNU Affero General Public License
1308+# You should have received a copy of the GNU Lesser General Public License
1309 # along with this program. If not, see <http://www.gnu.org/licenses/>.
1310-# GNU Affero General Public License version 3 (see the file LICENSE).
1311
1312 """Coordinate a sequence of non overlapping TimedActionss."""
1313
1314@@ -21,6 +19,7 @@
1315 __metaclass__ = type
1316
1317 import datetime
1318+import traceback
1319
1320 from pytz import utc as UTC
1321
1322@@ -56,16 +55,20 @@
1323 :ivar baseline: The point the timeline starts at.
1324 """
1325
1326- def __init__(self, actions=None):
1327+ def __init__(self, actions=None, format_stack=traceback.format_stack):
1328 """Create a Timeline.
1329
1330 :param actions: An optional object to use to store the timeline. This
1331 must implement the list protocol.
1332+ :param format_stack: The helper to use when gathering tracebacks. If
1333+ None tracebacks are not gathered. Must return a list of strings
1334+ for concatenation.
1335 """
1336 if actions is None:
1337 actions = []
1338 self.actions = actions
1339 self.baseline = datetime.datetime.now(UTC)
1340+ self.format_stack = format_stack
1341
1342 def start(self, category, detail, allow_nested=False):
1343 """Create a new TimedAction at the end of the timeline.
1344@@ -84,4 +87,6 @@
1345 if self.actions and self.actions[-1].duration is None:
1346 raise OverlappingActionError(self.actions[-1], result)
1347 self.actions.append(result)
1348+ if self.format_stack is not None:
1349+ result.backtrace = ''.join(self.format_stack())
1350 return result
1351
1352=== modified file 'timeline/wsgi.py'
1353--- timeline/wsgi.py 2011-09-19 06:11:17 +0000
1354+++ timeline/wsgi.py 2011-11-16 04:35:26 +0000
1355@@ -1,18 +1,16 @@
1356 # Copyright (c) 2010, 2011, Canonical Ltd
1357 #
1358 # This program is free software: you can redistribute it and/or modify
1359-# it under the terms of the GNU Affero General Public License as published by
1360-# the Free Software Foundation, either version 3 of the License, or
1361-# (at your option) any later version.
1362+# it under the terms of the GNU Lesser General Public License as published by
1363+# the Free Software Foundation, version 3 only.
1364 #
1365 # This program is distributed in the hope that it will be useful,
1366 # but WITHOUT ANY WARRANTY; without even the implied warranty of
1367 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1368-# GNU Affero General Public License for more details.
1369+# GNU Lesser General Public License for more details.
1370 #
1371-# You should have received a copy of the GNU Affero General Public License
1372+# You should have received a copy of the GNU Lesser General Public License
1373 # along with this program. If not, see <http://www.gnu.org/licenses/>.
1374-# GNU Affero General Public License version 3 (see the file LICENSE).
1375
1376 """WSGI integration."""
1377

Subscribers

People subscribed via source and target branches

to all changes: