python-cinderclient/HACKING.rst
Mike Perez 4a741587b4 Updating HACKING file
Using OpenStack HACKING file for common stuff and mentioning locals()
disallowed now like Cinder.

Change-Id: I05b1706eb52c13b9eb89fe5cbcce005c3cc75caf
2013-07-25 12:52:34 -07:00

1.6 KiB

Cinder Client Style Commandments =========================

Cinder Client Specific Commandments ----------------------------

General

  • Do not use locals(). Example:

    LOG.debug(_("volume %(vol_name)s: creating size %(vol_size)sG") %
              locals()) # BAD
    
    LOG.debug(_("volume %(vol_name)s: creating size %(vol_size)sG") %
              {'vol_name': vol_name,
               'vol_size': vol_size}) # OKAY
  • Use 'raise' instead of 'raise e' to preserve original traceback or exception being reraised:

    except Exception as e:
        ...
        raise e  # BAD
    
    except Exception:
        ...
        raise  # OKAY

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)