From 50c5a23dec02472bef9fd6fc163079cd1c999619 Mon Sep 17 00:00:00 2001
From: Xavier Morel
Date: Fri, 16 May 2014 16:56:18 +0200
Subject: [PATCH 01/41] [ADD] doc files lost during git conversion
---
doc/Makefile | 154 +++++++++++++++++++++++++++++++
doc/_static/openerp.png | Bin 0 -> 3981 bytes
doc/_templates/sidebarintro.html | 16 ++++
doc/_templates/sidebarlogo.html | 3 +
4 files changed, 173 insertions(+)
create mode 100644 doc/Makefile
create mode 100644 doc/_static/openerp.png
create mode 100644 doc/_templates/sidebarintro.html
create mode 100644 doc/_templates/sidebarlogo.html
diff --git a/doc/Makefile b/doc/Makefile
new file mode 100644
index 00000000000..c1eff186583
--- /dev/null
+++ b/doc/Makefile
@@ -0,0 +1,154 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS = -q
+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
+ sed -i '/-99999/d' _build/dirhtml/_static/flasky.css
+ @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/OpenERPTechnicalDocumentation.qhcp"
+ @echo "To view the help file:"
+ @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/OpenERPTechnicalDocumentation.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/OpenERPTechnicalDocumentation"
+ @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/OpenERPTechnicalDocumentation"
+ @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/doc/_static/openerp.png b/doc/_static/openerp.png
new file mode 100644
index 0000000000000000000000000000000000000000..d6dbd9d83d1f3c3c2568e7ccac4e031e0f5b3806
GIT binary patch
literal 3981
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
literal 0
HcmV?d00001
diff --git a/doc/_templates/sidebarintro.html b/doc/_templates/sidebarintro.html
new file mode 100644
index 00000000000..95b047733e3
--- /dev/null
+++ b/doc/_templates/sidebarintro.html
@@ -0,0 +1,16 @@
+
From c2d5bf1bc35660a2e5d56552e8ab5c9d2ca99a0c Mon Sep 17 00:00:00 2001
From: Xavier Morel
Date: Mon, 20 Jan 2014 14:13:10 +0100
Subject: [PATCH 02/41] [ADD] tutorial beginning
blocked at introducing qweb template, ir.qweb lives in the registry but nodb -> no database
with --db-filter there's a database in the session (kinda) but need to fetch it and manually get the corresponding registry...
---
doc/conf.py | 2 +-
doc/howto/howto_website.rst | 142 +++++++++++++++++++++++
doc/howto/howto_website/basic-controller | 15 +++
doc/howto/howto_website/basic-page | 29 +++++
doc/howto/howto_website/manifest | 11 ++
doc/howto/howto_website/module-init | 8 ++
doc/howto/howto_website/series | 7 ++
doc/howto/howto_website/ta-controller | 57 +++++++++
doc/howto/howto_website/templates-basic | 108 +++++++++++++++++
doc/howto/howto_website/url-pattern | 29 +++++
doc/index.rst | 8 ++
11 files changed, 415 insertions(+), 1 deletion(-)
create mode 100644 doc/howto/howto_website.rst
create mode 100644 doc/howto/howto_website/basic-controller
create mode 100644 doc/howto/howto_website/basic-page
create mode 100644 doc/howto/howto_website/manifest
create mode 100644 doc/howto/howto_website/module-init
create mode 100644 doc/howto/howto_website/series
create mode 100644 doc/howto/howto_website/ta-controller
create mode 100644 doc/howto/howto_website/templates-basic
create mode 100644 doc/howto/howto_website/url-pattern
diff --git a/doc/conf.py b/doc/conf.py
index 19f2c9b727f..051fcde3ccb 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -28,7 +28,7 @@ sys.path.append(os.path.abspath('../openerp'))
# Add any Sphinx extension module names here, as strings. They can be extensions
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.viewcode']
+extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.viewcode', 'patchqueue']
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
diff --git a/doc/howto/howto_website.rst b/doc/howto/howto_website.rst
new file mode 100644
index 00000000000..69486d79734
--- /dev/null
+++ b/doc/howto/howto_website.rst
@@ -0,0 +1,142 @@
+===================================
+Howto: build a website with OpenERP
+===================================
+
+.. queue:: howto_website/series
+
+.. warning::
+
+ This guide assumes `basic knowledge of python
+ `_.
+
+ This guide assumes :ref:`an OpenERP installed and ready for
+ development `.
+
+ For production deployment, see the dedicated guides
+ :ref:`using-gunicorn` and :ref:`using-mod-wsgi`.
+
+Minimal website module
+======================
+
+Hello, world!
+-------------
+
+In OpenERP, doing things takes the form of creating modules, and these
+modules customize the behavior of the OpenERP installation. The first
+step is thus to create a module:
+
+.. todo:: code generator in oe?
+
+ * Create empty module (mandatory name, category)
+ * Create controller (parent class?)
+ * Create model (concrete/abstract? Inherit?)
+ * Add field?
+
+* Create a new folder called :file:`academy` in a module directory,
+ inside it create an empty file called :file:`__openerp__.py` with
+ the following content:
+
+ .. patch::
+
+* Create a second file :file:`controllers.py`. This is where the code
+ interacting directly with your web browser will live. For starters,
+ just include the following in it:
+
+ .. patch::
+
+* Finally, create a third file :file:`__init__.py` containing just:
+
+ .. patch::
+
+ This makes :file:`controllers.py` "visible" to openerp (by running
+ the code it holds).
+
+.. todo::
+
+ * instructions for start & install
+ * db handling
+ - if existing db, automatically selected
+ - if no existing db, nodb -> login -> login of first db
+ - dbfilter
+
+Now start your OpenERP server and install your module in it, open a
+web browser and navigate to http://localhost:8069. A page should
+appear with just the words "Hello, world!" on it.
+
+The default response type is HTML (although we only sent some text,
+browsers are pretty good at finding ways to turn stuff into things
+they can display). Let's prettify things a bit: instead of returning
+just a bit of text, we can return a page, and use a tool/library like
+bootstrap_ to get a nicer rendering than the default.
+
+Change the string returned by the ``index`` method to get a more page-ish
+output:
+
+.. patch::
+
+.. note::
+
+ this example requires internet access at all time, as we're
+ accessing a :abbr:`CDN (Content Delivery Network, large distributed
+ networks hosting static files and trying to provide
+ high-performance and high-availability of these files)`-hosted
+ file.
+
+Data input: URL and query
+-------------------------
+
+Being able to build a static page in code is nice, but makes for limited
+usefulness (you could do that with static files in the first place, after all).
+
+But you can also create controllers which use data provided in the access URL,
+for instance so you have a single controller generating multiple pages. Any
+query parameter (``?name=value``) is passed as a parameter to the controller
+function, and is a string.
+
+.. patch::
+
+No validation is performed on query input values, it could be missing
+altogether (if a user accesses ``/tas/`` directly) or it could be incorrectly
+formatted. For this reason, query parameters are generally used to provide
+"options" to a given page, and "required" data tends (when possible) to be
+inserted directly in the URL.
+
+This can be done by adding `converter patterns`_ to the URL in ``@http.route``:
+
+.. patch::
+
+These patterns can perform conversions directly (in this case the conversion
+from a string URL section to a python integer) and will perform a some
+validation (if the ``id`` is not a valid integer, the converter will return
+a ``404 Not Found`` instead of generating a server error when the conversion
+fails).
+
+Templating: better experience in editing
+----------------------------------------
+
+So far we've created HTML output by munging together Python strings using
+string concatenation and formatting. It works, but is not exactly fun to edit
+(and somewhat unsafe to boot) as even advanced text editors have a hard time
+understanding they're dealing with HTML embedded in Python code.
+
+The usual solution is to use templates_, documents with placeholders which
+can be "rendered" to produce final pages (or others). OpenERP lets you use
+any Python templating system you want, but bundles its own
+:doc:`QWeb 06_ir_qweb>` templating system which we'll later see offers
+some useful features.
+
+Let's move our 2 pseudo-templates from inline strings to actual templates:
+
+.. patch::
+
+.. FIXME how can I access a QWeb template from a auth=none controller?
+ explicitly fetch a registry using request.session.db? That's a bit
+ horrendous now innit?
+
+.. todo:: reload/update of module?
+
+.. _bootstrap: http://getbootstrap.com
+
+.. _converter patterns: http://werkzeug.pocoo.org/docs/routing/#rule-format
+
+.. _templates: http://en.wikipedia.org/wiki/Web_template
diff --git a/doc/howto/howto_website/basic-controller b/doc/howto/howto_website/basic-controller
new file mode 100644
index 00000000000..4415d9516bc
--- /dev/null
+++ b/doc/howto/howto_website/basic-controller
@@ -0,0 +1,15 @@
+# HG changeset patch
+# Parent 458a542843918f6899fe64bfe1cead00972ef68a
+
+diff --git a/controllers.py b/controllers.py
+new file mode 100644
+--- /dev/null
++++ b/controllers.py
+@@ -0,0 +1,7 @@
++from openerp import http
++from openerp.addons.web.controllers import main
++
++class Home(main.Home):
++ @http.route('/', auth='none')
++ def index(self):
++ return "Hello, world!"
diff --git a/doc/howto/howto_website/basic-page b/doc/howto/howto_website/basic-page
new file mode 100644
index 00000000000..5a60c346acf
--- /dev/null
+++ b/doc/howto/howto_website/basic-page
@@ -0,0 +1,29 @@
+# HG changeset patch
+# Parent b377930cec8f9445882bb3268f9f5fac71dd8c15
+
+diff --git a/controllers.py b/controllers.py
+--- a/controllers.py
++++ b/controllers.py
+@@ -4,4 +4,21 @@ from openerp.addons.web.controllers impo
+ class Home(main.Home):
+ @http.route('/', auth='none')
+ def index(self):
+- return "Hello, world!"
++ return """
++
++
++ AcademyAcademy
++
++
++
++
Introduction to a thing
++
Course description
++
++ This course will provide a basic introduction to a thing, for
++ motivated students with no prior experience in things. The course
++ will focus on the discovery of things and the planning and
++ organization necessary to handle things.
++
' % (i, ta['name'])
++ for i, ta in enumerate(teaching_assistants)
++ ]
++
+ return """
+
+
+@@ -19,6 +32,26 @@ class Home(main.Home):
+ will focus on the discovery of things and the planning and
+ organization necessary to handle things.
+
+- This course will provide a basic introduction to a thing, for
+- motivated students with no prior experience in things. The course
+- will focus on the discovery of things and the planning and
+- organization necessary to handle things.
+-
+-
Teaching Assistants
+-
+- %(tas)s
+-
+-
+-
+-""" % {
+- 'tas': '\n'.join(tas)
+- }
++ # how in fuck do I get a db here?
++ return "" % {
++ 'tas': '\n'.join(tas)
++ }
+
+ @http.route('/tas//', auth='none')
+ def ta(self, id):
+- return """
+-
+-
+- AcademyAcademy TA %(name)s
+-
+-
+-
+-
++ This course will provide a basic introduction to a thing, for
++ motivated students with no prior experience in things. The course
++ will focus on the discovery of things and the planning and
++ organization necessary to handle things.
++