mirror of https://github.com/MagicStack/uvloop.git
Add documentation; integrate sphinx
This commit is contained in:
parent
72487f63ae
commit
8511fec1f9
|
@ -26,3 +26,4 @@ __pycache__/
|
||||||
/*.egg-info
|
/*.egg-info
|
||||||
/dist
|
/dist
|
||||||
/.cache
|
/.cache
|
||||||
|
docs/_build
|
||||||
|
|
9
Makefile
9
Makefile
|
@ -1,11 +1,12 @@
|
||||||
.PHONY: compile clean all distclean test debug sdist clean-libuv release sdist-libuv
|
.PHONY: compile clean all distclean test debug sdist clean-libuv
|
||||||
|
.PHONY: release sdist-libuv docs
|
||||||
|
|
||||||
|
|
||||||
all: clean compile
|
all: clean compile
|
||||||
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -fr dist/
|
rm -fr dist/ doc/_build/
|
||||||
rm -fr uvloop/*.c uvloop/*.html uvloop/*.so build *.egg-info
|
rm -fr uvloop/*.c uvloop/*.html uvloop/*.so build *.egg-info
|
||||||
rm -fr uvloop/handles/*.html uvloop/includes/*.html
|
rm -fr uvloop/handles/*.html uvloop/includes/*.html
|
||||||
find . -name '__pycache__' | xargs rm -rf
|
find . -name '__pycache__' | xargs rm -rf
|
||||||
|
@ -34,6 +35,10 @@ debug: clean
|
||||||
python setup.py build_ext --inplace
|
python setup.py build_ext --inplace
|
||||||
|
|
||||||
|
|
||||||
|
docs: compile
|
||||||
|
cd docs && sphinx-build -b html . _build/html
|
||||||
|
|
||||||
|
|
||||||
test:
|
test:
|
||||||
PYTHONASYNCIODEBUG=1 python -m unittest discover -s tests
|
PYTHONASYNCIODEBUG=1 python -m unittest discover -s tests
|
||||||
python -m unittest discover -s tests
|
python -m unittest discover -s tests
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
API
|
||||||
|
===
|
||||||
|
|
||||||
|
If you are looking for information on a specific function, class or method,
|
||||||
|
this part of the documentation is for you.
|
||||||
|
|
||||||
|
|
||||||
|
uvloop
|
||||||
|
------
|
||||||
|
|
||||||
|
.. autoclass:: uvloop.EventLoopPolicy
|
||||||
|
:members:
|
||||||
|
|
||||||
|
.. autoclass:: uvloop.loop.Loop
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
import alabaster
|
||||||
|
|
||||||
|
|
||||||
|
sys.path.insert(0, os.path.abspath('..'))
|
||||||
|
|
||||||
|
|
||||||
|
# -- General configuration ------------------------------------------------
|
||||||
|
|
||||||
|
extensions = [
|
||||||
|
'sphinx.ext.autodoc',
|
||||||
|
'alabaster',
|
||||||
|
]
|
||||||
|
templates_path = ['_templates']
|
||||||
|
source_suffix = '.rst'
|
||||||
|
master_doc = 'index'
|
||||||
|
project = 'uvloop'
|
||||||
|
copyright = '2016, Yury Selivanov'
|
||||||
|
author = 'Yury Selivanov'
|
||||||
|
version = '0.4.14'
|
||||||
|
release = '0.4.14'
|
||||||
|
language = None
|
||||||
|
exclude_patterns = ['_build']
|
||||||
|
pygments_style = 'sphinx'
|
||||||
|
todo_include_todos = False
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for HTML output ----------------------------------------------
|
||||||
|
|
||||||
|
html_theme = 'alabaster'
|
||||||
|
html_theme_options = {
|
||||||
|
'description': 'uvloop is an ultra fast implementation of the '
|
||||||
|
'asyncio event loop on top of libuv.',
|
||||||
|
'show_powered_by': False,
|
||||||
|
}
|
||||||
|
html_theme_path = [alabaster.get_path()]
|
||||||
|
html_title = 'uvloop Documentation'
|
||||||
|
html_short_title = 'uvloop'
|
||||||
|
html_static_path = ['_static']
|
||||||
|
html_sidebars = {
|
||||||
|
'**': [
|
||||||
|
'about.html',
|
||||||
|
'navigation.html',
|
||||||
|
'searchbox.html',
|
||||||
|
]
|
||||||
|
}
|
||||||
|
html_show_sourcelink = False
|
||||||
|
html_show_sphinx = False
|
||||||
|
html_show_copyright = False
|
||||||
|
htmlhelp_basename = 'uvloopdoc'
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for LaTeX output ---------------------------------------------
|
||||||
|
|
||||||
|
latex_elements = {}
|
||||||
|
|
||||||
|
latex_documents = [
|
||||||
|
(master_doc, 'uvloop.tex', 'uvloop Documentation',
|
||||||
|
'Yury Selivanov', 'manual'),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for manual page output ---------------------------------------
|
||||||
|
|
||||||
|
man_pages = [
|
||||||
|
(master_doc, 'uvloop', 'uvloop Documentation',
|
||||||
|
[author], 1)
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for Texinfo output -------------------------------------------
|
||||||
|
|
||||||
|
texinfo_documents = [
|
||||||
|
(master_doc, 'uvloop', 'uvloop Documentation',
|
||||||
|
author, 'uvloop', 'One line description of project.',
|
||||||
|
'Miscellaneous'),
|
||||||
|
]
|
|
@ -0,0 +1,123 @@
|
||||||
|
Developers Guide
|
||||||
|
================
|
||||||
|
|
||||||
|
The project is hosted on `GitHub <https://github.com/MagicStack/uvloop>`_.
|
||||||
|
and uses `Travis <https://travis-ci.org/MagicStack/uvloop>`_ for
|
||||||
|
Continuous Integration.
|
||||||
|
|
||||||
|
A goal for the `uvloop` project is to provide a drop in replacement for the
|
||||||
|
`asyncio` event loop. Any deviation from the behavior of the reference
|
||||||
|
`asyncio` event loop is considered a bug.
|
||||||
|
|
||||||
|
If you have found a bug or have an idea for an enhancement that would
|
||||||
|
improve the library, use the `bug tracker <https://github.com/MagicStack/uvloop/issues>`_.
|
||||||
|
|
||||||
|
|
||||||
|
Get the source
|
||||||
|
--------------
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ git clone --recursive git@github.com:MagicStack/uvloop.git
|
||||||
|
|
||||||
|
The ``--recursive`` argument is important. It will fetch the ``libuv`` source
|
||||||
|
from the `libuv` Github repository.
|
||||||
|
|
||||||
|
|
||||||
|
Build
|
||||||
|
-----
|
||||||
|
|
||||||
|
To build `uvloop`, you'll need ``Cython`` and Python 3.5.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
The best way to work on `uvloop` is to create a virtual env, so that
|
||||||
|
you'll have Cython and Python commands pointing to the correct
|
||||||
|
tools.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ python3 -m venv myvenv
|
||||||
|
$ cd myvenv
|
||||||
|
$ source bin/activate
|
||||||
|
$ cd ..
|
||||||
|
|
||||||
|
Install Cython if not already present.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ pip install Cython
|
||||||
|
|
||||||
|
|
||||||
|
Build `uvloop` by running the ``make`` rule from the top level directory.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ cd uvloop
|
||||||
|
$ make
|
||||||
|
|
||||||
|
|
||||||
|
Test
|
||||||
|
----
|
||||||
|
|
||||||
|
The easiest method to run all of the unit tests is to run the ``make test``
|
||||||
|
rule from the top level directory. This runs the standard library
|
||||||
|
``unittest`` tool which discovers all the unit tests and runs them.
|
||||||
|
It actually runs them twice, once with the `PYTHONASYNCIODEBUG` enabled and
|
||||||
|
once without.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ cd uvloop
|
||||||
|
$ make test
|
||||||
|
|
||||||
|
|
||||||
|
Individual Tests
|
||||||
|
++++++++++++++++
|
||||||
|
|
||||||
|
Individual unit tests can be run using the standard library ``unittest``
|
||||||
|
or ``pytest`` package.
|
||||||
|
|
||||||
|
The easiest approach to ensure that ``uvloop`` can be found by Python is to
|
||||||
|
install the package using ``pip``:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ cd uvloop
|
||||||
|
$ pip install -e .
|
||||||
|
|
||||||
|
You can then run the unit tests individually from the tests directory using
|
||||||
|
``unittest``:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ cd uvloop/tests
|
||||||
|
$ python -m unittest test_tcp
|
||||||
|
|
||||||
|
or using ``pytest``:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ cd uvloop/tests
|
||||||
|
$ py.test -k test_signals_sigint_uvcode
|
||||||
|
|
||||||
|
|
||||||
|
Documentation
|
||||||
|
-------------
|
||||||
|
|
||||||
|
To rebuild the project documentation, developers should run the ``make docs``
|
||||||
|
rule from the top level directory. It performs a number of steps to create
|
||||||
|
a new set of `sphinx <http://sphinx-doc.org/>`_ html content.
|
||||||
|
|
||||||
|
This step requires Sphinx to be installed. Sphinx can be installed using
|
||||||
|
pip:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ pip install sphinx
|
||||||
|
|
||||||
|
Once Sphinx is available you can make the documentation using:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ make docs
|
|
@ -0,0 +1,63 @@
|
||||||
|
|
||||||
|
.. raw:: html
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<img src="https://img.shields.io/pypi/status/uvloop.svg?maxAge=2592000?style=plastic" />
|
||||||
|
<img src="https://img.shields.io/travis/MagicStack/uvloop/master.svg" />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
uvloop
|
||||||
|
======
|
||||||
|
|
||||||
|
`uvloop` is a fast, drop-in replacement of the built-in asyncio event loop.
|
||||||
|
`uvloop` is released under the MIT license.
|
||||||
|
|
||||||
|
`uvloop` and asyncio, combined with the power of async/await in Python 3.5,
|
||||||
|
makes it easier than ever to write high-performance networking code in Python.
|
||||||
|
|
||||||
|
`uvloop` makes asyncio fast. In fact, it is at least 2x faster than nodejs,
|
||||||
|
gevent, as well as any other Python asynchronous framework. The performance of
|
||||||
|
uvloop-based asyncio is close to that of Go programs.
|
||||||
|
|
||||||
|
You can read more about uvloop in this `blog post <http://magic.io/blog/uvloop-blazing-fast-python-networking/>`_.
|
||||||
|
|
||||||
|
Architecture
|
||||||
|
------------
|
||||||
|
|
||||||
|
The asyncio module, introduced by PEP 3156, is a collection of network
|
||||||
|
transports, protocols, and streams abstractions, with a pluggable event loop.
|
||||||
|
The event loop is the heart of asyncio. It provides APIs for:
|
||||||
|
|
||||||
|
- scheduling calls,
|
||||||
|
- transmitting data over the network,
|
||||||
|
- performing DNS queries,
|
||||||
|
- handling OS signals,
|
||||||
|
- convenient abstractions to create servers and connections,
|
||||||
|
- working with subprocesses asynchronously.
|
||||||
|
|
||||||
|
`uvloop` implements the :class:`asyncio.AbstractEventLoop` interface which
|
||||||
|
means that it provides a drop-in replacement of the asyncio event loop.
|
||||||
|
|
||||||
|
`uvloop` is written in Cython and is built on top of libuv.
|
||||||
|
|
||||||
|
libuv is a high performance, multiplatform asynchronous I/O library used by
|
||||||
|
nodejs. Because of how wide-spread and popular nodejs is, libuv is fast and
|
||||||
|
stable.
|
||||||
|
|
||||||
|
`uvloop` implements all asyncio event loop APIs. High-level Python objects
|
||||||
|
wrap low-level libuv structs and functions. Inheritance is used to keep the
|
||||||
|
code DRY and ensure that any manual memory management is in sync with libuv
|
||||||
|
primitives' lifespans.
|
||||||
|
|
||||||
|
|
||||||
|
Contents
|
||||||
|
--------
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
user/index
|
||||||
|
dev/index
|
||||||
|
api/index
|
|
@ -0,0 +1,40 @@
|
||||||
|
User Guide
|
||||||
|
==========
|
||||||
|
|
||||||
|
This section of the documentation provides information about how to use
|
||||||
|
uvloop.
|
||||||
|
|
||||||
|
|
||||||
|
Installation
|
||||||
|
------------
|
||||||
|
|
||||||
|
`uvloop` is available from PyPI. It requires Python 3.5.
|
||||||
|
|
||||||
|
Use pip to install it.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ pip install uvloop
|
||||||
|
|
||||||
|
|
||||||
|
Using uvloop
|
||||||
|
------------
|
||||||
|
|
||||||
|
To make asyncio use the event loop provided by `uvloop`, you install the
|
||||||
|
`uvloop` event loop policy:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
import asyncio
|
||||||
|
import uvloop
|
||||||
|
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
|
||||||
|
|
||||||
|
|
||||||
|
Alternatively, you can create an instance of the loop manually, using:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
import asyncio
|
||||||
|
import uvloop
|
||||||
|
loop = uvloop.new_event_loop()
|
||||||
|
asyncio.set_event_loop(loop)
|
|
@ -0,0 +1,2 @@
|
||||||
|
Cython>=0.24
|
||||||
|
Sphinx>=1.4.1
|
|
@ -1,4 +1,4 @@
|
||||||
# cython: language_level=3
|
# cython: language_level=3, embedsignature=True
|
||||||
|
|
||||||
|
|
||||||
include "__debug.pxi" # Generated by "make"
|
include "__debug.pxi" # Generated by "make"
|
||||||
|
|
Loading…
Reference in New Issue