src/build/html/install.html
changeset 0 d153941bb745
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/build/html/install.html	Sun Jan 14 11:48:51 2018 +0100
@@ -0,0 +1,417 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>Installing PyAMS &#8212; PyAMS User Guide 0.1.0 documentation</title>
+    <link rel="stylesheet" href="_static/pyramid.css" type="text/css" />
+    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    './',
+        VERSION:     '0.1.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true,
+        SOURCELINK_SUFFIX: '.txt'
+      };
+    </script>
+    <script type="text/javascript" src="_static/jquery.js"></script>
+    <script type="text/javascript" src="_static/underscore.js"></script>
+    <script type="text/javascript" src="_static/doctools.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Managing ZCA with PyAMS" href="zca.html" />
+    <link rel="prev" title="Creating ZODB" href="zodb.html" />
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Neuton&amp;subset=latin" type="text/css" media="screen" charset="utf-8" />
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Nobile:regular,italic,bold,bolditalic&amp;subset=latin" type="text/css" media="screen" charset="utf-8" />
+<!--[if lte IE 6]>
+<link rel="stylesheet" href="_static/ie6.css" type="text/css" media="screen" charset="utf-8" />
+<![endif]-->
+
+  </head>
+  <body>
+
+    <div class="related" role="navigation" aria-label="related navigation">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li class="right" >
+          <a href="zca.html" title="Managing ZCA with PyAMS"
+             accesskey="N">next</a> |</li>
+        <li class="right" >
+          <a href="zodb.html" title="Creating ZODB"
+             accesskey="P">previous</a> |</li>
+        <li class="nav-item nav-item-0"><a href="index.html">PyAMS User Guide 0.1.0 documentation</a> &#187;</li> 
+      </ul>
+    </div>  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body" role="main">
+            
+  <div class="section" id="installing-pyams">
+<span id="install"></span><h1>Installing PyAMS<a class="headerlink" href="#installing-pyams" title="Permalink to this headline">¶</a></h1>
+<p>PyAMS default installation is based on <a class="reference external" href="http://www.buildout.org">Buildout</a> utility. It’s not mandatory to use a
+virtual environment, but it allows you to have a better control over your Python resources.</p>
+<p>Current PyAMS version is based and validated for Python 3.5; your Python environment must also include a C
+compiler as well as development headers for Python, <em>libjpeg</em>, <em>libpng</em>, <em>libfreetype</em>, <em>libxml2</em>, <em>libxslt</em> and
+eventually <em>libldap</em>, <em>libffi</em>, <em>libgdal</em> or <em>libzmq</em>.</p>
+<p>PyAMS default components configuration also pre-suppose that the following external tools are available:</p>
+<ul class="simple">
+<li>a <em>Memcached</em> or <em>Redis</em> server, to store sessions and cache (can be changed through Beaker configuration)</li>
+</ul>
+<p>Optional tools also include:</p>
+<ul class="simple">
+<li>an <em>LDAP</em> server for authentication</li>
+<li>an <em>ElasticSearch</em> server for full text indexing (see <em>PyAMS_content_es</em> package)</li>
+<li>a <em>WebSockets</em> server using AsyncIO. This is used to manage notifications (see <em>PyAMS_notify</em> and <em>PyAMS_notify_ws</em>
+packages). An <em>out of the box</em> environment can be built using <em>pyams_notify</em> scaffold.</li>
+</ul>
+<p>PyAMS also needs that you use a ZODB remote server, as several background processes needing a concurrent access to ZODB
+are started by PyAMS main process. Three ZODB storages are already provided through PyAMS: ZEO, RelStorage or Newt.db.
+See <a class="reference internal" href="zodb.html#zodb"><span class="std std-ref">Creating ZODB</span></a> to know how to initialize database with the help of PyAMS tools.</p>
+<div class="section" id="creating-initial-buildout">
+<h2>Creating initial buildout<a class="headerlink" href="#creating-initial-buildout" title="Permalink to this headline">¶</a></h2>
+<p>PyAMS provides a new Pyramid scaffold, called <em>pyams</em>, generated via a <em>cookiecutter</em> template.</p>
+<p>A simple option to install PyAMS is to create a buildout environment including <em>Pyramid</em> and all <em>PyAMS</em> packages:</p>
+<div class="highlight-bash"><div class="highlight"><pre><span></span><span class="c1"># mkdir /var/local/</span>
+<span class="c1"># pip3 install virtualenv</span>
+<span class="c1"># virtualenv --python=python3.5 env</span>
+<span class="c1"># cd env</span>
+<span class="c1"># . bin/activate</span>
+<span class="o">(</span>env<span class="o">)</span> <span class="c1"># pip3.5 install cookiecutter</span>
+<span class="o">(</span>env<span class="o">)</span> <span class="c1"># cookiecutter hg+http://hg.ztfy.org/pyams/scaffolds/pyams</span>
+</pre></div>
+</div>
+<p><em>CookieCutter</em> will ask you for a small set of input variables that you can change or not:</p>
+<ul class="simple">
+<li><strong>pyams_release</strong>: version of PyAMS configuration file to use. “latest” (default value) will point to last release;
+you can also choose to point to a given release (“0.1.4” for example)</li>
+<li><strong>project_name</strong>: current environment name in “human form”</li>
+<li><strong>project_slug</strong>: “technical” package name, based on project name</li>
+<li><strong>virtual_hostname</strong>: Apache virtual-host name</li>
+<li><strong>webapp_name</strong>: web application package name (“webapp” as default)</li>
+<li><strong>webapp_port</strong>: TCP/IP port to use when running application outside Apache (“6543” as default)</li>
+<li><strong>eggs_directory</strong>: relative or absolute path to directory containing downloaded eggs; this directory can be
+shared with other projects (“eggs” as default)</li>
+<li><strong>logs_directory</strong>: absolute path to directory containing Apache’s log files</li>
+<li><strong>run_user</strong>: user name under which Apache process will run (“www-data” as default)</li>
+<li><strong>run_group</strong>: group name under which Apache process will run (“www-data” as default)</li>
+<li><strong>beaker_backend</strong>: name of Beaker backend to use to store sessions and cache data (“redis” as default)</li>
+<li><strong>beaker_server</strong>: IP address and port of Beaker backend server (“127.0.0.1:6379” as default)</li>
+<li><strong>db_type</strong>: ZODB database storage; available options include ZEO, RelStorage and NewtDB</li>
+<li><strong>db_host</strong>: IP address of database server (“127.0.0.1” as default); WARNING: database server installation
+is not part of application installation; another “zeo_server” cookiecutter recipe is available for ZEO</li>
+<li><strong>db_port</strong>: listening port of database server (“8100” is given as default for ZEO)</li>
+<li><strong>db_name</strong>: database or ZEO storage name to use</li>
+<li><strong>db_username</strong>: database user name</li>
+<li><strong>db_password</strong>: database password</li>
+<li><strong>zeo_realm</strong>: ZEO authentication realm</li>
+<li><strong>blobs_dir</strong>: local directory to use to store cache of ZODB blobs; cache size is limited to 10GB as default</li>
+<li><strong>use_postgresql</strong>: specify if PostgreSQL access is required; if so, please check that PostgreSQL development files
+are available to compile PsycoPG2 extension</li>
+<li><strong>use_oracle</strong>: specify if Oracle access is required; if so, please check that Oracle development files are
+available to compile cx_Oracle extension, and that ORACLE_HOME environment variable is correctly defined (see below)</li>
+<li><strong>use_ldap</strong>: specify if LDAP access will be required for authentication</li>
+<li><strong>use_elasticsearch</strong>: specify if an ElasticSearch server will be used for indexation</li>
+<li><strong>elasticsearch_server</strong>: URL used to access Elasticsearch server (“<a class="reference external" href="http://127.0.0.1:9200">http://127.0.0.1:9200</a>” as default); this URL can
+include login and password (“<a class="reference external" href="http://login:password&#64;127.0.0.1:9200">http://login:password&#64;127.0.0.1:9200</a>”), if required…</li>
+<li><strong>elasticsearch_index</strong>: name of Elasticsearch index to use (“pyams” as default)</li>
+<li><strong>create_elasticsearch_index</strong>: specify if Elasticsearch index should be created after installation is complete</li>
+<li><strong>define_elasticsearch_mappings</strong> : specify if Elasticsearch mappings should be defined after installation is complete</li>
+<li><strong>smtp_server</strong>: DNS name of SMTP server (“localhost” as default)</li>
+<li><strong>smtp_server_name</strong>: “human” name given to SMTP server (“pyams” as default)</li>
+<li><strong>pyams_scheduler</strong>: TCP/IP address and port to use to access PyAMS tasks scheduler process (“127.0.0.1:5555” as
+default); see <span class="xref std std-ref">pyams_scheduler</span></li>
+<li><strong>start_scheduler</strong>: boolean value to indicate if scheduler process is started by this application instance</li>
+<li><strong>pyams_medias_converter</strong>: TCP/IP address and port to use to access PyAMS medias converter process (“127.0.0.1:5556”
+as default); see <span class="xref std std-ref">pyams_medias</span></li>
+<li><strong>start_medias_converter</strong>: boolean value to indicate if medias converter process is started by this application
+instance</li>
+<li><strong>pyams_es_indexer</strong>: TCP/IP address and port to use to access PyAMS Elasticsearch indexer process (“127.0.0.1:5557”
+as default); see <span class="xref std std-ref">pyams_content_es</span></li>
+<li><strong>start_es_indexer</strong> boolean value to indicate if Elasticsearch indexer process is started by this application
+instance</li>
+<li><strong>use_notifications</strong>: specify if PyAMS notifications services are to be used (see <a class="reference internal" href="pyams_notify.html#pyams-notify"><span class="std std-ref">PyAMS notification services</span></a>)</li>
+<li><strong>pyams_ws_notify</strong>: TCP/IP address and port of PyAMS websockets server managing notifications service
+(“127.0.0.1:8081” as default)</li>
+<li><strong>lexicon_languages</strong>: NLTK lexicon languages to use (“en:english fr:french” as default)</li>
+<li><strong>extension_package</strong>: name of a PyAMS extension package to include in environment configuration</li>
+<li><strong>need_pyams_gis</strong>: specify if PyAMS GIS features are to be used by given extension package; if so, please check
+that <em>libgdal</em> development files are available; on Debian (and maybe others), you have to specify environment
+variables (see below).</li>
+</ul>
+<p>You can then check, and eventually update, the proposed Buildout configuration file <em>buildout.cfg</em>, to add or remove
+packages or update settings to your needs. Then finalize Bootstrap initialization:</p>
+<div class="highlight-bash"><div class="highlight"><pre><span></span><span class="o">(</span>env<span class="o">)</span> <span class="c1"># python3.5 bootstrap.py</span>
+<span class="o">(</span>env<span class="o">)</span> <span class="c1"># ./bin/buildout</span>
+</pre></div>
+</div>
+<p>This last operation can be quite long, as many packages have to downloaded, compiled and installed in the virtual
+environment. If you encounter any compile error, just install the required dependencies and restart the buildout.</p>
+<p>Some dependencies can require the definition of custom environment variables before running <em>buildout</em>, like:</p>
+<ul class="simple">
+<li>for <em>libgdal</em>, which is required by <strong>PyAMS_gis</strong> package, use:</li>
+</ul>
+<div class="highlight-bash"><div class="highlight"><pre><span></span><span class="o">(</span>env<span class="o">)</span> <span class="c1"># export C_INCLUDE_PATH=/usr/include/gdal</span>
+<span class="o">(</span>env<span class="o">)</span> <span class="c1"># export CPLUS_INCLUDE_PATH=/usr/include/gdal</span>
+</pre></div>
+</div>
+<p><strong>WARNING</strong>: you have to check also that your <em>libgdal</em> release is matching “GDAL” release given in PyAMS
+configuration file (actually 2.1.0).</p>
+<ul class="simple">
+<li>for <em>cx_Oracle</em>, which is required if you use Oracle database connections, use:</li>
+</ul>
+<div class="highlight-bash"><div class="highlight"><pre><span></span><span class="o">(</span>env<span class="o">)</span> <span class="c1"># export ORACLE_HOME=/usr/lib/oracle/12.1/client64</span>
+</pre></div>
+</div>
+<p>These examples are given for Debian GNU/Linux. You may have to adapt configuration based on your own Linux
+distribution and packages versions.</p>
+</div>
+<div class="section" id="environment-settings">
+<h2>Environment settings<a class="headerlink" href="#environment-settings" title="Permalink to this headline">¶</a></h2>
+<p>The project generated from <em>pyams</em> scaffold is based on default Pyramid’s <em>zodb</em> scaffold, but it adds:</p>
+<ul class="simple">
+<li>a custom application factory, in the <em>webapp</em> directory (see <a class="reference internal" href="site.html#site"><span class="std std-ref">PyAMS site management</span></a>)</li>
+<li>a set of directories to store runtime data, in the <em>var</em> directory; each directory contains a <em>README.txt</em> file
+which should be self-explanatory to indicate what this directory should contain, including a ZEO cache</li>
+<li>a set of configuration files, in the <em>etc</em> directory; here are standard <em>development.ini</em> and <em>production.ini</em>
+configuration files, a ZODB configuration files (<em>zodb-zeo.conf</em>) for a ZEO client storage and two Apache
+configurations (for Apache 2.2 and 2.4) using <em>mod_wsgi</em>.</li>
+</ul>
+<p>Once the project have been created from the scaffold, you are free to update all the configuration files.</p>
+<p>If you need to add packages to the environment, you have to add them to the <em>buildout.cfg</em> file <strong>AND</strong> to the INI
+file (in the <em>pyramid.includes</em> section) before running the <em>buildout</em> another time; don’t forget to add the
+requested version at the end of <em>buildout.cfg</em> file, as Buildout is not configured by default to automatically
+download the last release of a given unknown package.</p>
+<p><em>development.ini</em> and <em>production.ini</em> files contain many commented directives related to PyAMS components. Read and
+update them carefully before initializing your application database!</p>
+</div>
+<div class="section" id="initializing-the-database">
+<h2>Initializing the database<a class="headerlink" href="#initializing-the-database" title="Permalink to this headline">¶</a></h2>
+<p>When you have downloaded and installed all required packages, you have to initialize the database so that all
+required components are available.</p>
+<p>From a shell, just type:</p>
+<div class="highlight-bash"><div class="highlight"><pre><span></span><span class="o">(</span>env<span class="o">)</span> <span class="c1"># ./bin/pyams_upgrade etc/development.ini</span>
+</pre></div>
+</div>
+<p>This process requires that every package is correctly included into <em>pyramid.includes</em> directive from selected
+configuration file.</p>
+</div>
+<div class="section" id="initializing-elasticsearch-index">
+<h2>Initializing Elasticsearch index<a class="headerlink" href="#initializing-elasticsearch-index" title="Permalink to this headline">¶</a></h2>
+<p>If you want to use an Elasticsearch index, you have to initialize index settings and mappings; the Ingest attachment
+plug-in is also required to handle attachments correctly.</p>
+<p>Elasticsearch integration is defined through the <em>PyAMS_content_es</em> package. Configuration files are available in this
+package, for attachment pipeline, index settings and mappings:</p>
+<div class="highlight-bash"><div class="highlight"><pre><span></span><span class="o">(</span>env<span class="o">)</span> <span class="c1"># cd /var/local/src/pyams/pyams_content_es</span>
+<span class="o">(</span>env<span class="o">)</span> <span class="c1"># curl --noproxy localhost -XDELETE http://localhost:9200/pyams (1)</span>
+<span class="o">(</span>env<span class="o">)</span> <span class="c1"># curl --noproxy localhost -XPUT    http://localhost:9200/pyams -d @index-settings.json</span>
+
+<span class="o">(</span>env<span class="o">)</span> <span class="c1"># curl --noproxy localhost -XPUT    http://localhost:9200/pyams/WfNewsEvent/_mapping -d @mappings/WfNewsEvent.json</span>
+<span class="o">(</span>env<span class="o">)</span> <span class="c1"># curl --noproxy localhost -XPUT    http://localhost:9200/pyams/WfTopic/_mapping -d @mappings/WfTopic.json</span>
+<span class="o">(</span>env<span class="o">)</span> <span class="c1"># curl --noproxy localhost -XPUT    http://localhost:9200/pyams/WfBlogPost/_mapping -d @mappings/WfBlogPost.json</span>
+</pre></div>
+</div>
+<ol class="arabic simple">
+<li>If ‘pyams’ is defined as Elasticsearch index name.</li>
+</ol>
+</div>
+<div class="section" id="nltk-initialization">
+<h2>NLTK initialization<a class="headerlink" href="#nltk-initialization" title="Permalink to this headline">¶</a></h2>
+<p>Some NLTK (Natural Language Toolkit) tokenizers and stopwords utilities are used to index fulltext contents elements.
+This package requires downloading and configuration of several elements which are done as follow:</p>
+<div class="highlight-bash"><div class="highlight"><pre><span></span><span class="o">(</span>end<span class="o">)</span> <span class="c1"># ./bin/py</span>
+&gt;&gt;&gt; import nltk
+&gt;&gt;&gt; nltk.download<span class="o">()</span>
+NLTK Downloader
+---------------------------------------------------------------------------
+    d<span class="o">)</span> Download   l<span class="o">)</span> List    u<span class="o">)</span> Update   c<span class="o">)</span> Config   h<span class="o">)</span> Help   q<span class="o">)</span> Quit
+---------------------------------------------------------------------------
+Downloader&gt; c
+
+Data Server:
+  - URL: &lt;https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/index.xml&gt;
+  - <span class="m">6</span> Package Collections Available
+  - <span class="m">107</span> Individual Packages Available
+
+Local Machine:
+  - Data directory: /home/tflorac/nltk_data
+
+---------------------------------------------------------------------------
+    s<span class="o">)</span> Show Config   u<span class="o">)</span> Set Server URL   d<span class="o">)</span> Set Data Dir   m<span class="o">)</span> Main Menu
+---------------------------------------------------------------------------
+Config&gt; d
+  New directory&gt; /usr/local/lib/nltk_data <span class="o">(</span><span class="m">1</span><span class="o">)</span>
+Config&gt; m
+
+---------------------------------------------------------------------------
+    d<span class="o">)</span> Download   l<span class="o">)</span> List    u<span class="o">)</span> Update   c<span class="o">)</span> Config   h<span class="o">)</span> Help   q<span class="o">)</span> Quit
+---------------------------------------------------------------------------
+Downloader&gt; d
+
+Download which package <span class="o">(</span><span class="nv">l</span><span class="o">=</span>list<span class="p">;</span> <span class="nv">x</span><span class="o">=</span>cancel<span class="o">)</span>?
+  Identifier&gt; punkt
+    Downloading package punkt to /usr/local/lib/nltk_data...
+
+Downloader&gt; d
+
+Download which package <span class="o">(</span><span class="nv">l</span><span class="o">=</span>list<span class="p">;</span> <span class="nv">x</span><span class="o">=</span>cancel<span class="o">)</span>?
+  Identifier&gt; stopwords
+    Downloading package stopwords to /usr/local/lib/nltk_data...
+</pre></div>
+</div>
+<p>(1) On Debian GNU/Linux, you can choose any directory between ‘<em>~/nltk_data</em>’ (where ‘~’ is the homedir of user running
+Pyramid application), ‘<em>/usr/share/nltk_data</em>’, ‘<em>/usr/local/share/nltk_data</em>’, ‘<em>/usr/lib/nltk_data</em>’ and
+‘<em>/usr/local/lib/nltk_data</em>’.</p>
+</div>
+<div class="section" id="starting-the-application">
+<h2>Starting the application<a class="headerlink" href="#starting-the-application" title="Permalink to this headline">¶</a></h2>
+<p>When database upgrade process has ended, you can start the web application process with the standard Pyramid’s
+<em>pserve</em> command line tool:</p>
+<div class="highlight-bash"><div class="highlight"><pre><span></span><span class="o">(</span>env<span class="o">)</span> <span class="c1"># ./bin/pserve etc/development.ini</span>
+</pre></div>
+</div>
+<p>In standard debug mode, all registered components are displayed in the console, until the final line (here using ZEO):</p>
+<div class="highlight-bash"><div class="highlight"><pre><span></span><span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,339 INFO  <span class="o">[</span>ZEO.ClientStorage<span class="o">][</span>MainThread<span class="o">]</span> <span class="o">[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> ClientStorage <span class="o">(</span><span class="nv">pid</span><span class="o">=</span><span class="m">28695</span><span class="o">)</span> created RW/normal <span class="k">for</span> storage: <span class="s1">&#39;pyams&#39;</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,340 INFO  <span class="o">[</span>ZEO.cache<span class="o">][</span>MainThread<span class="o">]</span> created temporary cache file <span class="m">3</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,345 INFO  <span class="o">[</span>ZODB.blob<span class="o">][</span>MainThread<span class="o">]</span> <span class="o">(</span><span class="m">28695</span><span class="o">)</span> Blob directory <span class="sb">`</span>/var/local/env/pyams/var/db/blobs<span class="sb">`</span> is used but has no layout marker set. Selected <span class="sb">`</span>lawn<span class="sb">`</span> layout.
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,345 WARNI <span class="o">[</span>ZODB.blob<span class="o">][</span>MainThread<span class="o">]</span> <span class="o">(</span><span class="m">28695</span><span class="o">)</span> The <span class="sb">`</span>lawn<span class="sb">`</span> blob directory layout is deprecated due to scalability issues on some file systems, please consider migrating to the <span class="sb">`</span>bushy<span class="sb">`</span> layout.
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,346 DEBUG <span class="o">[</span>asyncio<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client networking thread<span class="o">]</span> Using selector: EpollSelector
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,347 DEBUG <span class="o">[</span>ZEO.asyncio.client<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client networking thread<span class="o">]</span> disconnected &lt;ZEO.asyncio.client.Client object at 0x7feeb1de7390&gt; None
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,348 DEBUG <span class="o">[</span>ZEO.asyncio.client<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client networking thread<span class="o">]</span> try_connecting
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,349 INFO  <span class="o">[</span>ZEO.asyncio.base<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client networking thread<span class="o">]</span> Connected Protocol<span class="o">((</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)</span>, <span class="s1">&#39;pyams&#39;</span>, False<span class="o">)</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,355 INFO  <span class="o">[</span>ZEO.ClientStorage<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client networking thread<span class="o">]</span> <span class="o">[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> Connected to storage: <span class="o">(</span><span class="s1">&#39;localhost&#39;</span>, <span class="m">8100</span><span class="o">)</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,358 DEBUG <span class="o">[</span>txn.140663320073984<span class="o">][</span>MainThread<span class="o">]</span> new transaction
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,360 DEBUG <span class="o">[</span>txn.140663320073984<span class="o">][</span>MainThread<span class="o">]</span> commit
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,484 DEBUG <span class="o">[</span>config<span class="o">][</span>MainThread<span class="o">]</span> include /home/tflorac/Dropbox/src/PyAMS/pyams_template/src/pyams_template/configure.zcml
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,485 DEBUG <span class="o">[</span>config<span class="o">][</span>MainThread<span class="o">]</span> include /var/local/env/pycharm/lib/python3.5/site-packages/pyramid_zcml/configure.zcml
+...
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,833 DEBUG <span class="o">[</span>PyAMS <span class="o">(</span>utils<span class="o">)][</span>MainThread<span class="o">]</span> Registering utility &lt;class <span class="s1">&#39;pyams_utils.timezone.utility.TimezoneGenerationsChecker&#39;</span>&gt; named <span class="s1">&#39;PyAMS timezone&#39;</span> providing &lt;InterfaceClass pyams_utils.interfaces.site.ISiteGenerations&gt;
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,834 DEBUG <span class="o">[</span>PyAMS <span class="o">(</span>utils<span class="o">)][</span>MainThread<span class="o">]</span> Registering class &lt;class <span class="s1">&#39;pyams_utils.timezone.vocabulary.TimezonesVocabulary&#39;</span>&gt; as vocabulary with name <span class="s2">&quot;PyAMS timezones&quot;</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,835 DEBUG <span class="o">[</span>PyAMS <span class="o">(</span>utils<span class="o">)][</span>MainThread<span class="o">]</span> Registering adapter &lt;class <span class="s1">&#39;pyams_utils.traversing.PathElementsAdapter&#39;</span>&gt; <span class="k">for</span> <span class="o">(</span>&lt;InterfaceClass zope.location.interfaces.IContained&gt;,<span class="o">)</span> providing &lt;InterfaceClass pyams_utils.interfaces.traversing.IPathElements&gt;
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,839 DEBUG <span class="o">[</span>PyAMS <span class="o">(</span>utils<span class="o">)][</span>MainThread<span class="o">]</span> Registering adapter &lt;class <span class="s1">&#39;pyams_utils.url.AbsoluteUrlTalesExtension&#39;</span>&gt; <span class="k">for</span> <span class="o">(</span>&lt;InterfaceClass zope.interface.Interface&gt;, &lt;InterfaceClass zope.interface.Interface&gt;, &lt;InterfaceClass zope.interface.Interface&gt;<span class="o">)</span> providing &lt;InterfaceClass pyams_utils.interfaces.tales.ITALESExtension&gt;
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,847 DEBUG <span class="o">[</span>PyAMS <span class="o">(</span>utils<span class="o">)][</span>MainThread<span class="o">]</span> Registering adapter &lt;class <span class="s1">&#39;pyams_utils.widget.decimal.DottedDecimalDataConverter&#39;</span>&gt; <span class="k">for</span> <span class="o">(</span>&lt;InterfaceClass pyams_utils.schema.IDottedDecimalField&gt;, &lt;InterfaceClass z3c.form.interfaces.IWidget&gt;<span class="o">)</span> providing &lt;InterfaceClass z3c.form.interfaces.IDataConverter&gt;
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,942 DEBUG <span class="o">[</span>PyAMS <span class="o">(</span>utils<span class="o">)][</span>MainThread<span class="o">]</span> Registering adapter &lt;class <span class="s1">&#39;pyams_utils.zmi.intids.IntIdsLengthAdapter&#39;</span>&gt; <span class="k">for</span> <span class="o">(</span>&lt;InterfaceClass zope.intid.interfaces.IIntIds&gt;,<span class="o">)</span> providing &lt;InterfaceClass pyams_utils.interfaces.intids.IIndexLength&gt;
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,943 DEBUG <span class="o">[</span>PyAMS <span class="o">(</span>pagelet<span class="o">)][</span>MainThread<span class="o">]</span> Registering pagelet view <span class="s2">&quot;properties.html&quot;</span> <span class="k">for</span> &lt;InterfaceClass zope.intid.interfaces.IIntIds&gt; <span class="o">(</span>&lt;class <span class="s1">&#39;pyams_utils.zmi.intids.IntIdsPropertiesDisplayForm&#39;</span>&gt;<span class="o">)</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,949 DEBUG <span class="o">[</span>PyAMS <span class="o">(</span>pagelet<span class="o">)][</span>MainThread<span class="o">]</span> Registering pagelet view <span class="s2">&quot;properties.html&quot;</span> <span class="k">for</span> &lt;InterfaceClass pyams_utils.interfaces.timezone.IServerTimezone&gt; <span class="o">(</span>&lt;class <span class="s1">&#39;pyams_utils.zmi.timezone.ServerTimezonePropertiesEditForm&#39;</span>&gt;<span class="o">)</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,980 DEBUG <span class="o">[</span>PyAMS <span class="o">(</span>utils<span class="o">)][</span>MainThread<span class="o">]</span> Registering class &lt;class <span class="s1">&#39;pyams_utils.zodb.ZEOConnectionVocabulary&#39;</span>&gt; as vocabulary with name <span class="s2">&quot;PyAMS ZEO connections&quot;</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:54,981 DEBUG <span class="o">[</span>PyAMS <span class="o">(</span>utils<span class="o">)][</span>MainThread<span class="o">]</span> Registering class &lt;class <span class="s1">&#39;pyams_utils.zodb.ZODBConnectionVocabulary&#39;</span>&gt; as vocabulary with name <span class="s2">&quot;PyAMS ZODB connections&quot;</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:55,015 DEBUG <span class="o">[</span>PyAMS <span class="o">(</span>pagelet<span class="o">)][</span>MainThread<span class="o">]</span> Registering pagelet view <span class="s2">&quot;add-zeo-connection.html&quot;</span> <span class="k">for</span> &lt;InterfaceClass zope.component.interfaces.ISite&gt; <span class="o">(</span>&lt;class <span class="s1">&#39;pyams_utils.zmi.zeo.ZEOConnectionAddForm&#39;</span>&gt;<span class="o">)</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:55,016 DEBUG <span class="o">[</span>PyAMS <span class="o">(</span>utils<span class="o">)][</span>MainThread<span class="o">]</span> Registering adapter &lt;class <span class="s1">&#39;pyams_utils.zmi.zeo.ZEOConnectionNameAdapter&#39;</span>&gt; <span class="k">for</span> <span class="o">(</span>&lt;InterfaceClass pyams_utils.interfaces.zeo.IZEOConnection&gt;, &lt;InterfaceClass pyams_zmi.layer.IAdminLayer&gt;<span class="o">)</span> providing &lt;InterfaceClass pyams_skin.interfaces.container.ITableElementName&gt;
+<span class="m">2018</span>-01-14 <span class="m">11</span>:37:55,017 DEBUG <span class="o">[</span>PyAMS <span class="o">(</span>pagelet<span class="o">)][</span>MainThread<span class="o">]</span> Registering pagelet view <span class="s2">&quot;properties.html&quot;</span> <span class="k">for</span> &lt;InterfaceClass pyams_utils.interfaces.zeo.IZEOConnection&gt; <span class="o">(</span>&lt;class <span class="s1">&#39;pyams_utils.zmi.zeo.ZEOConnectionPropertiesEditForm&#39;</span>&gt;<span class="o">)</span>
+...
+<span class="m">2018</span>-01-14 <span class="m">11</span>:41:13,214 DEBUG <span class="o">[</span>PyAMS <span class="o">(</span>utils<span class="o">)][</span>MainThread<span class="o">]</span> Registering adapter &lt;class <span class="s1">&#39;pyams_default_theme.skin.ResourcesAdapter&#39;</span>&gt; <span class="k">for</span> <span class="o">(</span>&lt;InterfaceClass zope.interface.Interface&gt;, &lt;InterfaceClass pyams_default_theme.layer.IPyAMSDefaultLayer&gt;, &lt;InterfaceClass zope.interface.Interface&gt;<span class="o">)</span> providing &lt;InterfaceClass pyams_skin.interfaces.resources.IResources&gt;
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,665 INFO  <span class="o">[</span>ZEO.ClientStorage<span class="o">][</span>MainThread<span class="o">]</span> <span class="o">[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> ClientStorage <span class="o">(</span><span class="nv">pid</span><span class="o">=</span><span class="m">29335</span><span class="o">)</span> created RW/normal <span class="k">for</span> storage: <span class="s1">&#39;pyams&#39;</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,665 INFO  <span class="o">[</span>ZEO.cache<span class="o">][</span>MainThread<span class="o">]</span> created temporary cache file <span class="m">9</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,673 DEBUG <span class="o">[</span>asyncio<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client networking thread<span class="o">]</span> Using selector: EpollSelector
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,674 DEBUG <span class="o">[</span>ZEO.ClientStorage.check_blob_cache<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client check blob size thread<span class="o">]</span> <span class="m">140712483907328</span> Checking blob cache size. <span class="o">(</span>target: <span class="m">966367642</span><span class="o">)</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,674 DEBUG <span class="o">[</span>ZEO.asyncio.client<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client networking thread<span class="o">]</span> disconnected &lt;ZEO.asyncio.client.Client object at 0x7ffa54058860&gt; None
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,675 DEBUG <span class="o">[</span>ZEO.ClientStorage.check_blob_cache<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client check blob size thread<span class="o">]</span> <span class="m">140712483907328</span>   blob cache size: <span class="m">0</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,675 DEBUG <span class="o">[</span>ZEO.asyncio.client<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client networking thread<span class="o">]</span> try_connecting
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,675 DEBUG <span class="o">[</span>ZEO.ClientStorage.check_blob_cache<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client check blob size thread<span class="o">]</span> <span class="m">140712483907328</span>   --&gt;
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,677 INFO  <span class="o">[</span>ZEO.asyncio.base<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client networking thread<span class="o">]</span> Connected Protocol<span class="o">((</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)</span>, <span class="s1">&#39;pyams&#39;</span>, False<span class="o">)</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,679 INFO  <span class="o">[</span>ZEO.ClientStorage<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client networking thread<span class="o">]</span> <span class="o">[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> Connected to storage: <span class="o">(</span><span class="s1">&#39;localhost&#39;</span>, <span class="m">8100</span><span class="o">)</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,682 DEBUG <span class="o">[</span>txn.140713340237568<span class="o">][</span>MainThread<span class="o">]</span> new transaction
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,683 DEBUG <span class="o">[</span>txn.140713340237568<span class="o">][</span>MainThread<span class="o">]</span> commit
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,690 INFO  <span class="o">[</span>PyAMS <span class="o">(</span>scheduler<span class="o">][</span>MainThread<span class="o">]</span> Starting tasks scheduler &lt;SchedulerProcess<span class="o">(</span>SchedulerProcess-1, initial<span class="o">)</span>&gt;...
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,698 INFO  <span class="o">[</span>PyAMS <span class="o">(</span>scheduler<span class="o">][</span>MainThread<span class="o">]</span> Started tasks scheduler with PID <span class="m">29361</span>.
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,701 INFO  <span class="o">[</span>apscheduler.scheduler<span class="o">][</span>MainThread<span class="o">]</span> Scheduler started
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,702 DEBUG <span class="o">[</span>apscheduler.scheduler<span class="o">][</span>APScheduler<span class="o">]</span> Looking <span class="k">for</span> <span class="nb">jobs</span> to run
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,704 DEBUG <span class="o">[</span>apscheduler.scheduler<span class="o">][</span>APScheduler<span class="o">]</span> No jobs<span class="p">;</span> waiting <span class="k">until</span> a job is added
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,719 INFO  <span class="o">[</span>ZEO.ClientStorage<span class="o">][</span>MainThread<span class="o">]</span> <span class="o">[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> ClientStorage <span class="o">(</span><span class="nv">pid</span><span class="o">=</span><span class="m">29335</span><span class="o">)</span> created RW/normal <span class="k">for</span> storage: <span class="s1">&#39;pyams&#39;</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,720 INFO  <span class="o">[</span>ZEO.cache<span class="o">][</span>MainThread<span class="o">]</span> created temporary cache file <span class="m">15</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,724 DEBUG <span class="o">[</span>asyncio<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client networking thread<span class="o">]</span> Using selector: EpollSelector
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,725 DEBUG <span class="o">[</span>ZEO.asyncio.client<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client networking thread<span class="o">]</span> disconnected &lt;ZEO.asyncio.client.Client object at 0x7ffa557e8b00&gt; None
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,726 DEBUG <span class="o">[</span>ZEO.asyncio.client<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client networking thread<span class="o">]</span> try_connecting
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,727 DEBUG <span class="o">[</span>ZEO.ClientStorage.check_blob_cache<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client check blob size thread<span class="o">]</span> <span class="m">140712483907328</span> Checking blob cache size. <span class="o">(</span>target: <span class="m">966367642</span><span class="o">)</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,728 INFO  <span class="o">[</span>ZEO.asyncio.base<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client networking thread<span class="o">]</span> Connected Protocol<span class="o">((</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)</span>, <span class="s1">&#39;pyams&#39;</span>, False<span class="o">)</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,729 DEBUG <span class="o">[</span>ZEO.ClientStorage.check_blob_cache<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client check blob size thread<span class="o">]</span> <span class="m">140712483907328</span>   blob cache size: <span class="m">0</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,729 DEBUG <span class="o">[</span>ZEO.ClientStorage.check_blob_cache<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client check blob size thread<span class="o">]</span> <span class="m">140712483907328</span>   --&gt;
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,732 INFO  <span class="o">[</span>ZEO.ClientStorage<span class="o">][[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> zeo client networking thread<span class="o">]</span> <span class="o">[(</span><span class="s1">&#39;127.0.0.1&#39;</span>, <span class="m">8100</span><span class="o">)]</span> Connected to storage: <span class="o">(</span><span class="s1">&#39;localhost&#39;</span>, <span class="m">8100</span><span class="o">)</span>
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,735 DEBUG <span class="o">[</span>txn.140713340237568<span class="o">][</span>MainThread<span class="o">]</span> new transaction
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,736 DEBUG <span class="o">[</span>txn.140713340237568<span class="o">][</span>MainThread<span class="o">]</span> commit
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,743 INFO  <span class="o">[</span>PyAMS <span class="o">(</span>media<span class="o">)][</span>MainThread<span class="o">]</span> Starting medias converter &lt;MediaConversionProcess<span class="o">(</span>MediaConversionProcess-2, initial<span class="o">)</span>&gt;...
+<span class="m">2018</span>-01-14 <span class="m">11</span>:43:36,751 INFO  <span class="o">[</span>PyAMS <span class="o">(</span>media<span class="o">)][</span>MainThread<span class="o">]</span> Started medias converter with PID <span class="m">29367</span>.
+Starting server in PID <span class="m">29335</span>.
+Serving on http://0.0.0.0:6543
+</pre></div>
+</div>
+<p>From this point, you can launch a browser and open URL <em>http://127.0.0.1:6543/admin</em> to get access to PyAMS
+management interface; default login is “admin/admin”, that you may change as soon as possible (see
+<a class="reference internal" href="pyams_security.html#pyams-security"><span class="std std-ref">PyAMS security</span></a>)!!.</p>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">Installing PyAMS</a><ul>
+<li><a class="reference internal" href="#creating-initial-buildout">Creating initial buildout</a></li>
+<li><a class="reference internal" href="#environment-settings">Environment settings</a></li>
+<li><a class="reference internal" href="#initializing-the-database">Initializing the database</a></li>
+<li><a class="reference internal" href="#initializing-elasticsearch-index">Initializing Elasticsearch index</a></li>
+<li><a class="reference internal" href="#nltk-initialization">NLTK initialization</a></li>
+<li><a class="reference internal" href="#starting-the-application">Starting the application</a></li>
+</ul>
+</li>
+</ul>
+
+  <h4>Previous topic</h4>
+  <p class="topless"><a href="zodb.html"
+                        title="previous chapter">Creating ZODB</a></p>
+  <h4>Next topic</h4>
+  <p class="topless"><a href="zca.html"
+                        title="next chapter">Managing ZCA with PyAMS</a></p>
+<div id="searchbox" style="display: none" role="search">
+  <h3>Quick search</h3>
+    <form class="search" action="search.html" method="get">
+      <div><input type="text" name="q" /></div>
+      <div><input type="submit" value="Go" /></div>
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related" role="navigation" aria-label="related navigation">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li class="right" >
+          <a href="zca.html" title="Managing ZCA with PyAMS"
+             >next</a> |</li>
+        <li class="right" >
+          <a href="zodb.html" title="Creating ZODB"
+             >previous</a> |</li>
+        <li class="nav-item nav-item-0"><a href="index.html">PyAMS User Guide 0.1.0 documentation</a> &#187;</li> 
+      </ul>
+    </div>
+    <div class="footer" role="contentinfo">
+        &#169; Copyright 2017, Thierry Florac.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
+    </div>
+  </body>
+</html>
\ No newline at end of file