fb2d30a306
Replace URLs for workflow documentation to appropriate parts of the OpenStack Project Infrastructure Manual. Change-Id: I23c3e20ce674f69890f80bd2dba4e70cd768b9ad
145 lines
5.9 KiB
ReStructuredText
145 lines
5.9 KiB
ReStructuredText
CloudCafe Style Guide
|
|
=====================
|
|
|
|
|
|
General Guidelines
|
|
------------------
|
|
1. It is **HIGHLY** encouraged that if you have not already read (and even if
|
|
it's been a while since you have) the Python Enhancement Proposals (PEPs)
|
|
PEP-8 and PEP 20 that you do so.
|
|
2. Guidelines here are intended to help encourage code unity, they are not
|
|
unbreakable rules, but should be adhered to failing a good reason not to.
|
|
3. When in doubt, **ALL** code should conform either directly to or in the
|
|
spirit of Python PEP 20, if you are still in doubt, go with Python PEP-8.
|
|
4. If you really are still in doubt, see Guideline 2.
|
|
5. Base Classes are your friend. Use them when they make sense.
|
|
|
|
|
|
Development Guidelines
|
|
----------------------
|
|
- Always use **SPACES**. **NEVER TABS**. All block indention should be
|
|
four (4) spaces.
|
|
- Avoid single letter variable names except in the case of iterators,
|
|
in which case a descriptive variable name would still be preferable
|
|
if possible.
|
|
- Do not leave trailing whitespace or whitespace in blank lines.
|
|
- Put two newlines between top-level code (funcs, classes, etc).
|
|
- Use only UNIX style newlines ("\n"), not Windows style ("\r\n").
|
|
- Put one newline between methods in classes and anywhere else.
|
|
- Long lines should be wrapped in parentheses in preference to using
|
|
a backslash for line continuation.
|
|
- Do not write "except:", use "except Exception:" at the very least
|
|
- Use try/except where logical. Avoid wrapping large blocks of code in
|
|
in huge try/except blocks.
|
|
- Use Enumerated Types where logical to pass around string constants
|
|
or magic numbers between Functions, Methods, Classes and Packages.
|
|
Python does not provide a default Enumerated Type data type, CloudCafe uses
|
|
Class structs by naming convention in their place.
|
|
|
|
Example::
|
|
class ComputeServerStates(object):
|
|
ACTIVE = "ACTIVE"
|
|
BUILD = "BUILD"
|
|
REBUILD = "REBUILD"
|
|
ERROR = "ERROR"
|
|
DELETING = "DELETING"
|
|
DELETED = "DELETED"
|
|
RESCUE = "RESCUE"
|
|
PREP_RESCUE = "PREP_RESCUE"
|
|
RESIZE = "RESIZE"
|
|
VERIFY_RESIZE = "VERIFY_RESIZE"
|
|
|
|
- Blocks of code should either be self documenting and/or well commented,
|
|
especially in cases of non-standard code.
|
|
- Use Python list comprehensions when possible. They can make large blocks
|
|
of code collapse to a single line.
|
|
- String formatting via the new (as of python 2.4) .format() method is
|
|
preferred over the older %s style encoding and ''.join() methods.
|
|
(Note on ''.join(): This is OK to use and encouraged *if* you're actually
|
|
creating a string from a large list of strings. Otherwise, ''.format()
|
|
is the better choice).
|
|
|
|
|
|
Test Data/Configuration
|
|
-----------------------
|
|
- Tests should make no assumptions on data exists. Test data should either
|
|
be generated in a fixture, or be provided in a configuration file.
|
|
- Tests should be self contained. They should not rely on changes in state
|
|
not performed in the test. The one exception to this rule is ordered tests,
|
|
but even those are discouraged unless absolutely necessary.
|
|
- Each test/test class is responsible for deleting/or removing any resources
|
|
creating during the test.
|
|
|
|
|
|
Imports
|
|
-------
|
|
- Do not use wildcard ``*`` import
|
|
- Do not make relative imports
|
|
- Order your imports by the full module path
|
|
|
|
|
|
Docstrings
|
|
----------
|
|
Example::
|
|
|
|
"""A one line docstring looks like this and ends in a period."""
|
|
|
|
|
|
"""A multi line 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/
|
|
"""
|
|
|
|
|
|
Before Committing
|
|
-----------------
|
|
- Follow the general OpenStack submission workflow
|
|
(http://docs.openstack.org/infra/manual/developers.html#development-workflow). This means all
|
|
all submissions should be squashed into one commit with one commit id
|
|
and be submitted from a feature branch, not master.
|
|
- Always run a PEP8 check on your modified code before committing.
|
|
You can do this with a plethora of tools such as flake8, pylint,
|
|
and pyflakes. **Once gating on PEP-8 rules is enabled, Gerrit will
|
|
immediately reject any submission with PEP-8 issues.**
|
|
- Blocks of commented out code should not be submitted to trunk except
|
|
in extraordinary cases.
|
|
- Tests that either validate nothing or simply have the "pass" statement
|
|
should not be submitted.
|
|
- Only functional, **TESTED CODE** should be committed. There are no
|
|
exceptions. This includes verify that code for other projects has not been
|
|
broken if your changes effect common code. Until a gate job is in place,
|
|
it is not time efficient for reviewers to execute all submitted code.
|
|
|
|
|
|
Commit Messages
|
|
---------------
|
|
Using a common format for commit messages will help keep our git history
|
|
readable. Follow these guidelines:
|
|
|
|
First, provide a brief summary of 50 characters or less.
|
|
|
|
The first line of the commit message should provide an accurate
|
|
description of the change, not just a reference to a bug or
|
|
blueprint. It must be followed by a single blank line.
|
|
|
|
Following your brief summary, provide a more detailed description of
|
|
the patch, manually wrapping the text at 72 characters. This
|
|
description should provide enough detail that one does not have to
|
|
refer to external resources to determine its high-level functionality.
|
|
|
|
Once you use 'git review', two lines will be appended to the commit
|
|
message: a blank line followed by a 'Change-Id'. This is important
|
|
to correlate this commit with a specific review in Gerrit, and it
|
|
should not be modified.
|
|
|
|
For further information on constructing high quality commit messages,
|
|
and how to split up commits into a series of changes, consult the
|
|
project wiki:
|
|
|
|
http://wiki.openstack.org/GitCommitMessages |