X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=bup.git;a=blobdiff_plain;f=CODINGSTYLE;h=0344157516773c0e1709fb07484c9e8b18408217;hp=e28df2f30f29255421f3ceb2dff9a9efe5497b6a;hb=ea0cb087050dc86bae886c0b2605b83aa819b7d3;hpb=6f6a1111ea20316499ad748a1cb118ec5d5c117f diff --git a/CODINGSTYLE b/CODINGSTYLE index e28df2f..0344157 100644 --- a/CODINGSTYLE +++ b/CODINGSTYLE @@ -1,24 +1,71 @@ -Python code follows PEP8 [1] with regard to coding style and PEP257 [2] with -regard to docstring style. Multi-line docstrings should have one short summary -line, followed by a blank line and a series of paragraphs. The last paragraph -should be followed by a line that closes the docstring (no blank line in -between). Here's an example from lib/bup/helpers.py: +.. -*-rst-*- -def unlink(f): - """Delete a file at path 'f' if it currently exists. +C += - Unlike os.unlink(), does not throw an exception if the file didn't already - exist. - """ - #code... +The C implementations should follow the `kernel/git coding style +`_. + + +Python +====== + +Python code follows `PEP8 `_ +with regard to coding style and `PEP257 +`_ with regard to docstring +style. Multi-line docstrings should have one short summary line, +followed by a blank line and a series of paragraphs. The last +paragraph should be followed by a line that closes the docstring (no +blank line in between). Here's an example from +``lib/bup/helpers.py``:: + + def unlink(f): + """Delete a file at path 'f' if it currently exists. + + Unlike os.unlink(), does not throw an exception if the file didn't already + exist. + """ + ... Module-level docstrings follow exactly the same guidelines but without the blank line between the summary and the details. -The C implementations should follow the kernel/git coding style [3]. +Exception Handling +------------------ + +Avoid finally: blocks in favor of explict catches because a throw +from a finally block will lose any pending exception. An explicit +catch can chain it (see below). + +To behave similarly under Python 2 and 3, use add_ex_tb() to +explicitly add stack traces to any exceptions that are going to be +re-raised by anything other than a no-argument raise (otherwise the +stack trace will be lost):: + + + try: + ... + except ... as ex: + add_ex_tb(ex) + pending_ex = ex + ... + raise pending_ex + +If an exception is thrown from an exception handler, the pending +exception should be the `"context" +`_ +of the new exception This can be accomplished via +``add_ex_ctx()``:: + try: + ... + except ... as ex: + add_ex_tb(ex) + try: + ... + except ... as ex2: + add_ex_tb(ex2) + raise add_ex_ctx(ex2, ex) -[1]:http://www.python.org/dev/peps/pep-0008/ -[2]:http://www.python.org/dev/peps/pep-0257/ -[3]:http://www.kernel.org/doc/Documentation/CodingStyle +See the end of ``lib/bup/compat.py`` for a functional example.