summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Joyce <matt.joyce@cloudscaling.com>2012-05-02 22:09:29 -0700
committerMatt Joyce <matt.joyce@cloudscaling.com>2012-05-02 22:09:29 -0700
commitb5a809d8e39e856a4b5e60383f5f35065a48fd12 (patch)
tree2aaa9824beeeac319a46b815476da0f4d9ca29ab
parentee5ebd6be5fd5048836f6404acad19e1ff25c833 (diff)
downloadpython-openstackclient-b5a809d8e39e856a4b5e60383f5f35065a48fd12.tar.gz
Adding HACKING doc to project
Change-Id: I57594c0845def5591a01384be9740089b4722075
-rw-r--r--HACKING115
1 files changed, 115 insertions, 0 deletions
diff --git a/HACKING b/HACKING
new file mode 100644
index 00000000..f131e04a
--- /dev/null
+++ b/HACKING
@@ -0,0 +1,115 @@
+Nova Style Commandments
+=======================
+
+Step 1: Read http://www.python.org/dev/peps/pep-0008/
+Step 2: Read http://www.python.org/dev/peps/pep-0008/ again
+Step 3: Read on
+
+Imports
+-------
+- thou shalt not import objects, only modules
+- thou shalt not import more than one module per line
+- thou shalt not make relative imports
+- thou shalt organize your imports according to the following template
+
+::
+ # vim: tabstop=4 shiftwidth=4 softtabstop=4
+ {{stdlib imports in human alphabetical order}}
+ \n
+ {{nova imports in human alphabetical order}}
+ \n
+ \n
+ {{begin your code}}
+
+
+General
+-------
+- thou shalt put two newlines twixt toplevel code (funcs, classes, etc)
+- thou shalt put one newline twixt methods in classes and anywhere else
+- thou shalt not write "except:", use "except Exception:" at the very least
+- thou shalt include your name with TODOs as in "TODO(termie)"
+- thou shalt not name anything the same name as a builtin or reserved word
+- thou shalt not violate causality in our time cone, or else
+
+
+Human Alphabetical Order Examples
+---------------------------------
+::
+ import httplib
+ import logging
+ import random
+ import StringIO
+ import time
+ import unittest
+
+ from nova import flags
+ from nova import test
+ from nova.auth import users
+ from nova.endpoint import api
+ from nova.endpoint import cloud
+
+Docstrings
+----------
+ """A one line docstring looks like this and ends in a period."""
+
+
+ """A multiline docstring has a one-line summary, less than 80 characters.
+
+ Then a new paragraph after a newline that explains in more detail any
+ general information about the function, class or method. Example usages
+ are also great to have here if it is a complex class for function. After
+ you have finished your descriptions add an extra newline and close the
+ quotations.
+
+ When writing the docstring for a class, an extra line should be placed
+ after the closing quotations. For more in-depth explanations for these
+ decisions see http://www.python.org/dev/peps/pep-0257/
+
+ If you are going to describe parameters and return values, use Sphinx, the
+ appropriate syntax is as follows.
+
+ :param foo: the foo parameter
+ :param bar: the bar parameter
+ :returns: description of the return value
+
+ """
+
+Text encoding
+----------
+- All text within python code should be of type 'unicode'.
+
+ WRONG:
+
+ >>> s = 'foo'
+ >>> s
+ 'foo'
+ >>> type(s)
+ <type 'str'>
+
+ RIGHT:
+
+ >>> u = u'foo'
+ >>> u
+ u'foo'
+ >>> type(u)
+ <type 'unicode'>
+
+- Transitions between internal unicode and external strings should always
+ be immediately and explicitly encoded or decoded.
+
+- All external text that is not explicitly encoded (database storage,
+ commandline arguments, etc.) should be presumed to be encoded as utf-8.
+
+ WRONG:
+
+ mystring = infile.readline()
+ myreturnstring = do_some_magic_with(mystring)
+ outfile.write(myreturnstring)
+
+ RIGHT:
+
+ mystring = infile.readline()
+ mytext = s.decode('utf-8')
+ returntext = do_some_magic_with(mytext)
+ returnstring = returntext.encode('utf-8')
+ outfile.write(returnstring)