Add CONTRIBUTING guide with rules for contributors
authorChristian Herdtweck <christian.herdtweck@intra2net.com>
Wed, 24 Oct 2018 14:40:22 +0000 (16:40 +0200)
committerPlamen Dimitrov <pdimitrov@pevogam.com>
Mon, 5 Nov 2018 08:59:00 +0000 (16:59 +0800)
CONTRIBUTING [new file with mode: 0644]

diff --git a/CONTRIBUTING b/CONTRIBUTING
new file mode 100644 (file)
index 0000000..35f0cd5
--- /dev/null
@@ -0,0 +1,78 @@
+How to contribute:
+------------------
+
+Thanks for wanting to contribute. Here are the steps to keep in mind
+
+- Check if your contribution is not already part of some package we already use or
+  might as well import.
+- Check that no-one else is currently implementing the same stuff.
+- (If outside Intra2net): Fork the repo.
+- Create a branch.
+- Develop your code there.
+- Only add functionality that is relevant for more than just your current project.
+- document your code (see below), use descriptive names for variables, functions, classes, ...
+- Run pylint, pep8, pydocstyle and try to minimize complaints.
+  (If code is clearly more easily readable by violating suggestions, then that is ok.)
+- Create commits for each set of changes with well-formatted messages (see below).
+- Create unittests for the new functionality you implemented.
+- Run pylint, pep8, pydocstyle again.
+- Run unittests using the python version currently shipped with Intra2net systems.
+  All tests must pass (or be skipped)
+- Push your branch.
+- (If outside Intra2net): Create pull request.
+- Tell maintainer (christian.herdtweck@intra2net.com) that branch is ready for merge.
+- Discuss changes with maintainer.
+- Accept gratitude.
+
+
+Well-formatted doc strings:
+--------------------------
+- Every module, class, function, relevant constant or global variable needs a doc string.
+- Doc strings must appear in line right after function/class declaration or at start of module.
+  For classes and functions/methods, there are 2 options:
+- Option A: a one-liner with triple """ at start and end without space, e.g.:
+  EG: def set_attribute(self, number):
+  EG:     """Set value of class_attribute to given number."""
+  EG:     self.attribute = number
+  Only to be used if parameters and returns are clear.
+- Option B: a multi-liner that describes more details, side-effects (e.g. exceptions raised),
+  params and return types. Needs tripe """ at start and end in separate line, e.g.:
+  EG:  def filter_items(input_list, name=None, value=None):
+  EG:  """
+  EG:  Find and return all list items that match given criteria.
+  EG:
+  EG:  Searches through all items in list, and returns those that match all of the
+  EG:  criteria specified by params. A None-value for params (default) causes
+  EG:  criterion to be ignored.
+  EG:
+  EG:  :param input_list: List of items to look through
+  EG:  :type input_list: list or tuple or other iterable
+  EG:  :param str name: Only select items whose .name attribute matches this name
+  EG:  :param int value: Only select items whose .value matches this value
+  EG:  :returns: List of items matching criteria
+  EG:  :rtype: [item]
+  EG:  :raises: ValueError if input is not iterable
+  EG:  """
+  EG:  for item in input_list:
+  EG:      ...
+- All docstring contents (also that of one-liners) must be (almost) proper sentences
+  with first word capitablied, proper punctuation, etc.
+- For global variables and constants, doc strings should be in line above the
+  variable or in same line. They must start with "#: ", e.g.:
+  EG:  #: Default value for verbosity, only used if user does not give command
+  EG:  #: line argument '-v'.
+  EG:  DEFAULT_VERBOSITY = 2
+- Really nice would be sphinx-compatible links e.g. to a :py:func:`test_function`
+  or :py:class:`module.TestClass` or a :py:meth:`TestClass.test_method` or some
+  :py:data:`CONSTANT_NAME`.
+- pydocstyle, pylint and pep8 usually give hints here, as well.
+
+
+Well-formatted commit messages:
+-------------------------------
+- One short summary statement (<= 50 characters) in present tense
+- First char upper case, no punctuation at end.
+- Next line must be blank.
+- Add more details on the commit as required.
+- Wrap text at 72 characters.
+- Focus more on the "why" than the "how".