From ae8145e5efb866d3eeadb979d5c41116a0d91d71 Mon Sep 17 00:00:00 2001 From: Thomas Perl Date: Thu, 6 Feb 2014 00:28:18 +0100 Subject: [PATCH] Add Sphinx-based Developer Guide documentation --- docs/Makefile | 153 +++++++ docs/conf.py | 242 +++++++++++ docs/images/image_provider_example.png | Bin 0 -> 73073 bytes docs/index.rst | 573 +++++++++++++++++++++++++ 4 files changed, 968 insertions(+) create mode 100644 docs/Makefile create mode 100644 docs/conf.py create mode 100644 docs/images/image_provider_example.png create mode 100644 docs/index.rst diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..7f35794 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,153 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/PyOtherSide.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/PyOtherSide.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/PyOtherSide" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/PyOtherSide" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..9a56141 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,242 @@ +# -*- coding: utf-8 -*- +# +# PyOtherSide documentation build configuration file, created by +# sphinx-quickstart on Wed Feb 5 22:01:34 2014. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys, os + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ----------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = [] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'PyOtherSide' +copyright = u'2014, Thomas Perl' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '0.2.0' +# The full version, including alpha/beta/rc tags. +release = '0.2.0' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + + +# -- Options for HTML output --------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'default' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'PyOtherSidedoc' + + +# -- Options for LaTeX output -------------------------------------------------- + +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +#'papersize': 'letterpaper', + +# The font size ('10pt', '11pt' or '12pt'). +#'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass [howto/manual]). +latex_documents = [ + ('index', 'PyOtherSide.tex', u'PyOtherSide Documentation', + u'Thomas Perl', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output -------------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'pyotherside', u'PyOtherSide Documentation', + [u'Thomas Perl'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------------ + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', 'PyOtherSide', u'PyOtherSide Documentation', + u'Thomas Perl', 'PyOtherSide', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' diff --git a/docs/images/image_provider_example.png b/docs/images/image_provider_example.png new file mode 100644 index 0000000000000000000000000000000000000000..3db2c765e2d51d6783a87c9d33614d2f5cb93cbd GIT binary patch literal 73073 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�QtK!`vI6wEIymYVgFCp# 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⪚R=u%UIJt=>Q~ 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. + +**requested_size** + The source size of the QML ``Image`` as tuple: ``(width, height)``. + ``(-1, -1)`` if the source size is not set. + +The image provider must return a tuple ``(data, size, format)``: + +**data** + A ``bytearray`` object containing the pixel data for the + given size and the given format. + +**size** + A tuple ``(width, height)`` describing the size of the + pixel data in pixels. + +**format** + The pixel format of ``data`` (see `constants`_), or + ``pyotherside.format_data`` if ``data`` contains an + encoded (PNG/JPEG) image instead of raw pixel data. + +In order to register the image provider with PyOtherSide for use +as provider for ``image://python/`` URLs, the image provider function +needs to be passed to PyOtherSide: + +.. code-block:: python + + import pyotherside + + def image_provider(image_id, requested_size): + ... + + pyotherside.set_image_provider(image_provider) + +Because Python modules are usually imported asynchronously, the image +provider will only be registered once the module registering the image +provider is successfully imported. You have to make sure that setting +the ``source`` property on a QML ``Image`` element only happens *after* +the image provider has been set (e.g. by setting the ``source`` property +in the callback function passed to ``importModule``). + +Cookbook +======== + +This section contains code examples and best practices for combining Python and +QML. + +Importing modules and calling functions asynchronously +------------------------------------------------------ + +In this example, we import the Python Standard Library module ``os`` +and - when the module is imported - call the ``os.getcwd()`` function on it. +The result of the ``os.getcwd()`` function is then printed to the console +and ``os.chdir()`` is called with a single argument (``'/'``) - again, after +the ``os.chdir()`` function has returned, a message will be printed. + +In this example, importing modules and calling functions are both done in +an asynchronous way - the QML/GUI thread will not block while these functions +execute. In fact, the ``Component.onCompleted`` code block will probably +finish before the ``os`` module has been imported in Python. + +.. code-block:: javascript + + Python { + Component.onCompleted: { + importModule('os', function() { + call('os.getcwd', [], function (result) { + console.log('Working directory: ' + result); + call('os.chdir', ['/'], function (result) { + console.log('Working directory changed.'); + });); + }); + }); + } + } + +While this `continuation-passing style`_ might look a like a little pyramid +due all the nesting and indentation at first, it makes sure your application's +UI is always responsive. The user will be able to interact with the GUI (e.g. +scroll and move around in the UI) while the Python code can process requests. + +.. _Continuation-passing style: https://en.wikipedia.org/wiki/Continuation-passing_style + +Evaluating Python expressions in QML +```````````````````````````````````` + +The ``evaluate()`` method on the ``Python`` object can be used to evaluate a +simple Python expression and return its result as JavaScript object: + +.. code-block:: javascript + + Python { + Component.onCompleted: { + console.log('Squares: ' + evaluate('[x for x in range(10)]')); + } + } + +Evaluating expressions is done synchronously, so make sure you only use it for +expressions that are not long-running calculations / operations. + + +Error handling in QML +--------------------- + +If an error happens in Python while calling functions, the traceback of the +error (or an error message in case the error happens in the PyOtherSide layer) +will be sent with the ``error`` signal of the ``Python`` element. During early +development, it's probably enough to just log the error to the console: + +.. code-block:: javascript + + Python { + // ... + + onError: console.log('Error: ' + traceback) + } + +Once your application grows, it might make sense to maybe show the error to the +user in a dialog box, message or notification in addition to or instead of using +``console.log()`` to print the error. + + +Handing asynchronous events from Python in QML +---------------------------------------------- + +Your Python code can send asynchronous events with optional data to the QML +layer using the ``pyotherside.send()`` function. You can call this function from +functions called from QML, but also from anywhere else - including threads that +you created in Python. The first parameter is mandatory, and must be a string +that identifies the event. Additional parameters are optional and can be of any +data type that PyOtherSide supports: + +.. code-block:: python + + import pyotherside + + pyotherside.send('new-entries', 100, 123) + +If you do not add a special handler on the ``Python`` object, such events would +be handled by the ``onReceived`` signal in QML - its ``data`` parameter contains +the event name and all arguments in a list: + +.. code-block:: javascript + + Python { + // .. + + onReceived: console.log('Event: ' + data) + } + +Usually, you want to install a handler for such events. If you have e.g. the +``'new-entries'`` event like shown above (with two numeric parameters that we +will call ``first`` and ``last`` for this example), you might want to define a +simple handler function that will process this event: + +.. code-block:: javascript + + Python { + // .. + + Component.onCompleted: { + setHandler('new-entries', function (first, last) { + console.log('New entries from ' + first + ' to ' + last); + }); + } + } + +Once a handler for a given event is defined, the ``onReceived`` signal will not +be emitted anymore. If you need to unset a handler for a given event, you can +use ``setHandler('event', undefined)`` to do so. + +In some cases, it might be useful to not install a handler function directly, but +turn the ``pyotherside.send()`` call into a new signal on the ``Python`` object. +As there is no easy way for PyOtherSide to determine the names of the arguments +of the event, you have to define and hook up these signals manually. The upside +of having to define the signals this way is that all signals will be nicely +documented in your QML file for future reference: + +.. code-block:: javascript + + Python { + signal updated() + signal newEntries(int first, int last) + signal entryRenamed(int index, string name) + + Component.onCompleted: { + setHandler('updated', updated); + setHandler('new-entries', newEntries); + setHandler('entry-renamed', entryRenamed); + } + } + +With this setup, you can now emit these signals from the ``Python`` object by +using ``pyotherside.send()`` in your Python code: + +.. code-block:: python + + pyotherside.send('updated') + pyotherside.send('new-entries', 20, 30) + pyotherside.send('entry-renamed', 11, 'Hello World') + + +Loading ``ListModel`` data from Python +-------------------------------------- + +Most of the time a PyOtherSide QML application will display some data stored +somewhere and retrieved or generated with Python. The easiest way to do this is +to return a list-of-dicts in your Python function: + +**listmodel.py** + +.. code-block:: python + + def get_data(): + return [ + {'name': 'Alpha', 'team': 'red'}, + {'name': 'Beta', 'team': 'blue'}, + {'name': 'Gamma', 'team': 'green'}, + {'name': 'Delta', 'team': 'yellow'}, + {'name': 'Epsilon', 'team': 'orange'}, + ] + +Of course, the function could do other things (such as doing web requests, querying +databases, etc..) - as long as it returns a list-olf-dicts, it will be fine (if you +are using a generator that yields dicts, just wrap the generator with ``list()``). +Using this function from QML is straightforward: + +**listmodel.qml** + +.. code-block:: javascript + + import QtQuick 2.0 + import io.thp.pyotherside 1.0 + + Rectangle { + color: 'black' + width: 400 + height: 400 + + ListView { + anchors.fill: parent + + model: ListModel { + id: listModel + } + + delegate: Text { + // Both "name" and "team" are taken from the model + text: name + color: team + } + } + + Python { + id: py + + Component.onCompleted: { + // Add the directory of this .qml file to the search path + addImportPath(Qt.resolvedUrl('.').substr('file://'.length)); + + // Import the main module and load the data + importModule('listmodel', function () { + py.call('listmodel.get_data', [], function(result) { + // Load the received data into the list model + for (var i=0; i