******************************* How to Get Your Change Into Ryu ******************************* Submitting a change =================== Send patches to ryu-devel@lists.sourceforge.net. Please don't use "Pull Request" on GitHub. We expect you to send patches in "git-format-patch" style. .. code-block:: bash # "N" means the number of commits to be included $ git format-patch -s HEAD~N # To add cover (e.g., [PATCH 0/X]), specify "--cover-letter" option $ git format-patch -s --cover-letter HEAD~N # You can send patches by "git send-email" command $ git send-email --to="ryu-devel@lists.sourceforge.net" *.patch Please check your changes with autopep8, pycodestyle(pep8) and running unit tests to make sure that they don't break the existing features. The following command does all for you. .. code-block:: bash # Install dependencies of tests $ pip install -r tools/test-requires # Execute autopep8 # Also, it is convenient to add settings of your editor or IDE for # applying autopep8 automatically. $ autopep8 --recursive --in-place ryu/ # Execute unit tests and pycodestyle(pep8) $ ./run_tests.sh Of course, you are encouraged to add unit tests when you add new features (it's not a must though). Python version and libraries ============================ * Python 2.7, 3.4, 3.5: Ryu supports multiple Python version. CI tests on Travis-CI is running on these versions. * standard library + widely used library: Basically widely used == OpenStack adopted. As usual there are exceptions. Or python binding library for other component. Coding style guide ================== * pep8: As python is used, PEP8 is would be hopefully mandatory for https://www.python.org/dev/peps/pep-0008/ * pylint: Although pylint is useful for finding bugs, but pylint score not very important for now because we're still at early development stage. https://www.pylint.org/ * Google python style guide is very helpful: http://google.github.io/styleguide/pyguide.html * Guidelines derived from Guido's Recommendations: ============================= ================= ======== Type Public Internal ============================= ================= ======== Packages lower_with_under Modules lower_with_under _lower_with_under Classes CapWords _CapWords Exceptions CapWords Functions lower_with_under() _lower_with_under() Global/Class Constants CAPS_WITH_UNDER _CAPS_WITH_UNDER Global/Class Variables lower_with_under _lower_with_under Instance Variables lower_with_under _lower_with_under (protected) or __lower_with_under (private) Method Names lower_with_under() _lower_with_under() (protected) or __lower_with_under() (private) Function/Method Parameters lower_with_under Local Variables lower_with_under ============================= ================= ======== * OpenStack Nova style guide: https://github.com/openstack/nova/blob/master/HACKING.rst * JSON files: Ryu source tree has JSON files under ryu/tests/unit/ofproto/json. They are used by unit tests. To make patches easier to read, they are normalized using tools/normalize_json.py. Please re-run the script before committing changes to these JSON files. Reference ========= * Python Essential Reference, 4th Edition [Amazon] * Paperback: 717 pages * Publisher: Addison-Wesley Professional; 4 edition (July 19, 2009) * Language: English * ISBN-10: 0672329786 * ISBN-13: 978-0672329784 * The Python Standard Library by Example (Developer's Library) * Paperback: 1344 pages * Publisher: Addison-Wesley Professional; 1 edition (June 11, 2011) * Language: English * ISBN-10: 0321767349 * ISBN-13: 978-0321767349