summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoe Gordon <joe.gordon0@gmail.com>2013-07-08 18:23:45 +0100
committerJoe Gordon <joe.gordon0@gmail.com>2013-07-08 18:23:45 +0100
commit6d10ca09cae7eaaa979e91ed65fb0b3181e4630b (patch)
treec1332df85c3be12e27d2169cad8469dee8da04c6
parent262d6a5f53e1ecfdcf7f605e011b9985fcd62822 (diff)
downloadoslo-6d10ca09cae7eaaa979e91ed65fb0b3181e4630b.tar.gz
oslo-6d10ca09cae7eaaa979e91ed65fb0b3181e4630b.tar.xz
oslo-6d10ca09cae7eaaa979e91ed65fb0b3181e4630b.zip
Clean up and make HACKING.rst point to openstack-dev/hacking
Instead of having a full local copy of HACKING, reference the OpenStack hacking guide (openstack-dev/hacking) and remove duplicate sections. Change-Id: Ief9ed232d03f196647870f7cbc818c9b2528d3d8
-rw-r--r--HACKING.rst233
1 files changed, 10 insertions, 223 deletions
diff --git a/HACKING.rst b/HACKING.rst
index 846c1b1..3b3a0b2 100644
--- a/HACKING.rst
+++ b/HACKING.rst
@@ -1,51 +1,19 @@
-OpenStack Style Commandments
+Oslo 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
+- Step 1: Read the OpenStack Style Commandments
+ https://github.com/openstack-dev/hacking/blob/master/HACKING.rst
+- Step 2: Read on
+
+Oslo Specific Commandments
+--------------------------
+- None So Far
+
General
-------
-- Put two newlines between top-level code (funcs, classes, etc)
-- Put one newline between methods in classes and anywhere else
-- Do not write "except:", use "except Exception:" at the very least
-- Include your name with TODOs as in "#TODO(termie)"
- When defining global constants, define them before functions and classes
-- Do not shadow a built-in or reserved word. Example::
-
- def list():
- return [1, 2, 3]
-
- mylist = list() # BAD, shadows `list` built-in
-
- class Foo(object):
- def list(self):
- return [1, 2, 3]
-
- mylist = Foo().list() # OKAY, does not shadow built-in
-
-- Use the "is not" operator when testing for unequal identities. Example::
-
- if not X is Y: # BAD, intended behavior is ambiguous
- pass
-
- if X is not Y: # OKAY, intuitive
- pass
-
-- Use the "not in" operator for evaluating membership in a collection. Example::
-
- if not X in Y: # BAD, intended behavior is ambiguous
- pass
-
- if X not in Y: # OKAY, intuitive
- pass
-
- if not (X in Y or X in Z): # OKAY, still better than all those 'not's
- pass
-
-
- Use 'raise' instead of 'raise e' to preserve original traceback or exception being reraised::
except Exception as e:
@@ -58,171 +26,14 @@ General
TODO vs FIXME
-------------
-
- TODO(name): implies that something should be done (cleanup, refactoring,
etc), but is expected to be functional.
- FIXME(name): implies that the method/function/etc shouldn't be used until
that code is resolved and bug fixed.
-Imports
--------
-- Do not import objects, only modules
-- Do not import more than one module per line
-- Do not make relative imports
-- Order your imports by the full module path
-- Organize your imports according to the following template
-
-Example::
-
- # vim: tabstop=4 shiftwidth=4 softtabstop=4
- {{stdlib imports in human alphabetical order}}
- \n
- {{third-party lib imports in human alphabetical order}}
- \n
- {{project imports in human alphabetical order}}
- \n
- \n
- {{begin your code}}
-
-
-Human Alphabetical Order Examples
----------------------------------
-Example::
-
- import httplib
- import logging
- import random
- import StringIO
- import time
-
- import eventlet
- import testtools
- import webob.exc
-
- import nova.api.ec2
- from nova.api import openstack
- from nova.auth import users
- from nova.endpoint import cloud
- import nova.flags
- from nova import test
-
-
-Docstrings
-----------
-Example::
-
- """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.
-
- 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/
-
- Do not leave an extra newline before the closing triple-double-quote.
-
- Describe parameters and return values, using the Sphinx format; the
- appropriate syntax is as follows.
-
- :param foo: the foo parameter
- :param bar: the bar parameter
- :type bar: parameter type for 'bar'
- :returns: return_type -- description of the return value
- :returns: description of the return value
- :raises: AttributeError, KeyError
- """
-
-
-Dictionaries/Lists
-------------------
-If a dictionary (dict) or list object is longer than 80 characters, its items
-should be split with newlines. Embedded iterables should have their items
-indented. Additionally, the last item in the dictionary should have a trailing
-comma. This increases readability and simplifies future diffs.
-
-Example::
-
- my_dictionary = {
- "image": {
- "name": "Just a Snapshot",
- "size": 2749573,
- "properties": {
- "user_id": 12,
- "arch": "x86_64",
- },
- "things": [
- "thing_one",
- "thing_two",
- ],
- "status": "ACTIVE",
- },
- }
-
-
-Calling Methods
----------------
-Calls to methods 80 characters or longer should format each argument with
-newlines. This is not a requirement, but a guideline::
-
- unnecessarily_long_function_name('string one',
- 'string two',
- kwarg1=constants.ACTIVE,
- kwarg2=['a', 'b', 'c'])
-
-
-Rather than constructing parameters inline, it is better to break things up::
-
- list_of_strings = [
- 'what_a_long_string',
- 'not as long',
- ]
-
- dict_of_numbers = {
- 'one': 1,
- 'two': 2,
- 'twenty four': 24,
- }
-
- object_one.call_a_method('string three',
- 'string four',
- kwarg1=list_of_strings,
- kwarg2=dict_of_numbers)
-
-
-Internationalization (i18n) Strings
------------------------------------
-In order to support multiple languages, we have a mechanism to support
-automatic translations of exception and log strings.
-
-Example::
-
- msg = _("An error occurred")
- raise HTTPBadRequest(explanation=msg)
-
-If you have a variable to place within the string, first internationalize the
-template string then do the replacement.
-
-Example::
-
- msg = _("Missing parameter: %s") % ("flavor",)
- LOG.error(msg)
-
-If you have multiple variables to place in the string, use keyword parameters.
-This helps our translators reorder parameters when needed.
-
-Example::
-
- msg = _("The server with id %(s_id)s has no key %(m_key)s")
- LOG.error(msg % {"s_id": "1234", "m_key": "imageId"})
-
Text encoding
-----------
+-------------
- All text within python code should be of type 'unicode'.
WRONG:
@@ -260,27 +71,3 @@ Text encoding
returntext = do_some_magic_with(mytext)
returnstring = returntext.encode('utf-8')
outfile.write(returnstring)
-
-
-Creating Unit Tests
--------------------
-For every new feature, unit tests should be created that both test and
-(implicitly) document the usage of said feature. If submitting a patch for a
-bug that had no unit test, a new passing unit test should be added. If a
-submitted bug fix does have a unit test, be sure to add a new one that fails
-without the patch and passes with the patch.
-
-
-openstack-common
-----------------
-
-A number of modules from openstack-common are imported into this project.
-
-These modules are "incubating" in openstack-common and are kept in sync
-with the help of openstack-common's update.py script. See:
-
- http://wiki.openstack.org/CommonLibrary#Incubation
-
-The copy of the code should never be directly modified here. Please
-always update openstack-common first and then run the script to copy
-the changes across.