From c1d72de01cec3ebdafbffb18b99b38ec771d02bf Mon Sep 17 00:00:00 2001 From: Ziad Sawalha Date: Tue, 28 Jan 2014 16:15:10 -0600 Subject: [PATCH] Add HACKING.rst --- HACKING.rst | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 HACKING.rst diff --git a/HACKING.rst b/HACKING.rst new file mode 100644 index 0000000..8744a93 --- /dev/null +++ b/HACKING.rst @@ -0,0 +1,106 @@ +OpenStack Style Commandments +============================ + +- Step 1: Read the OpenStack Style Commandments + http://docs.openstack.org/developer/hacking/ +- Step 2: Read on + +General +------- +- thou shalt not violate causality in our time cone, or else + +Docstrings +---------- + +Docstrings should ONLY use triple-double-quotes (``"""``) + +Single-line docstrings should NEVER have extraneous whitespace +between enclosing triple-double-quotes. + +Deviation! Sentence fragments do not have punctuation. Specifically in the +command classes the one line docstring is also the help string for that +command and those do not have periods. + + """A one line docstring looks like this""" + +Calling Methods +--------------- + +Deviation! When breaking up method calls due to the 79 char line length limit, +use the alternate 4 space indent. With the first argument on the succeeding +line all arguments will then be vertically aligned. Use the same convention +used with other data structure literals and terminate the method call with +the last argument line ending with a comma and the closing paren on its own +line indented to the starting line level. + + unnecessarily_long_function_name( + 'string one', + 'string two', + kwarg1=constants.ACTIVE, + kwarg2=['a', 'b', 'c'], + ) + +Text encoding +------------- + +Note: this section clearly has not been implemented in this project yet, it is +the intention to do so. + +All text within python code should be of type 'unicode'. + + WRONG: + + >>> s = 'foo' + >>> s + 'foo' + >>> type(s) + + + RIGHT: + + >>> u = u'foo' + >>> u + u'foo' + >>> type(u) + + +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) + +Python 3.x Compatibility +------------------------ + +OpenStackClient strives to be Python 3.3 compatible. Common guidelines: + +* Convert print statements to functions: print statements should be converted + to an appropriate log or other output mechanism. +* Use six where applicable: x.iteritems is converted to six.iteritems(x) + for example. + +Running Tests +------------- + +Note: Oh boy, are we behind on writing tests. But they are coming! + +The testing system is based on a combination of tox and testr. If you just +want to run the whole suite, run `tox` and all will be fine. However, if +you'd like to dig in a bit more, you might want to learn some things about +testr itself. A basic walkthrough for OpenStack can be found at +http://wiki.openstack.org/testr