merge default doc-dc
authorDamien Correia
Fri, 20 Apr 2018 16:52:49 +0200
branchdoc-dc
changeset 50 6ed429390935
parent 49 a33f67e15345
child 51 5ebe61e3a965
merge default
buildout.cfg
requirements.txt
setup.py
src/source/_static/css/custom.css
src/source/appinstall.rst
src/source/appmanage.rst
src/source/appstart.rst
src/source/conf.py
src/source/config.rst
src/source/developerguide.rst
src/source/index.rst
src/source/install.rst
src/source/manage.rst
src/source/packages.rst
src/source/pyams_skin/pyams_skin.rst
src/source/pyams_utils/pyams_utils.rst
src/source/pyams_zmi/pyams_zmi.zmi.rst
src/source/scripts.rst
src/source/site.rst
src/source/tests.rst
src/source/userguide.rst
src/source/zca.rst
--- a/buildout.cfg	Thu Apr 12 18:01:15 2018 +0200
+++ b/buildout.cfg	Fri Apr 20 16:52:49 2018 +0200
@@ -94,7 +94,6 @@
 eggs =
     ${package:eggs}
     sphinx_rtd_theme
-    repoze.sphinx.autointerface
 source = ${buildout:directory}/src/source
 build = ${buildout:directory}/src/build
 
--- a/requirements.txt	Thu Apr 12 18:01:15 2018 +0200
+++ b/requirements.txt	Fri Apr 20 16:52:49 2018 +0200
@@ -41,5 +41,3 @@
 websockets==3.4
 WebOb==1.7.4
 ZODB==5.3.0
-sphinx_rtd_theme==0.2.4
-repoze.sphinx.autointerface==0.8
--- a/setup.py	Thu Apr 12 18:01:15 2018 +0200
+++ b/setup.py	Fri Apr 20 16:52:49 2018 +0200
@@ -62,8 +62,7 @@
       extras_require=dict(test=tests_require),
       install_requires=[
           'setuptools',
-          'sphinx_rtd_theme',
-          'repoze.sphinx.autointerface',
+          'sphinx_rtd_theme'
           # -*- Extra requirements: -*-
       ],
       entry_points={})
--- a/src/source/_static/css/custom.css	Thu Apr 12 18:01:15 2018 +0200
+++ b/src/source/_static/css/custom.css	Fri Apr 20 16:52:49 2018 +0200
@@ -1,3 +1,7 @@
 .wy-menu .caption-text{
 	color: #2D87C2;
 }
+
+.headerlink::before{
+	color: #2D87C2;
+}
--- a/src/source/appinstall.rst	Thu Apr 12 18:01:15 2018 +0200
+++ b/src/source/appinstall.rst	Fri Apr 20 16:52:49 2018 +0200
@@ -1,5 +1,7 @@
 .. _appinstall:
 
+.. _intall:
+
 Installing PyAMS application
 ============================
 
@@ -186,12 +188,19 @@
 
 **Then finalize Bootstrap initialization:**
 
-
 .. code-block:: bash
 
     (env) $ python3.5 bootstrap.py
     (env) $ ./bin/buildout
 
+
+.. seealso::
+
+    `zc.buildout <https://pypi.python.org/pypi/zc.buildout>`_ is a powerful
+    tool for creating repeatable builds of a given software configuration
+    and environment.
+
+
 Environment settings
 --------------------
 
@@ -217,8 +226,10 @@
 update them carefully before initializing your application database!
 
 
+.. _zodbinit:
+
 Initializing the ZODB database
-=========================
+==============================
 
 After, you have downloaded and installed all required packages, you have to initialize the database so that all
 required components are available.
@@ -308,96 +319,3 @@
 '*/usr/local/lib/nltk_data*'.
 
 
-Starting the application
-========================
-
-When database upgrade process has ended, you can start the web application process with the standard Pyramid's
-*pserve* command line tool:
-
-.. code-block:: bash
-
-    (env) $ ./bin/pserve etc/development.ini
-
-In standard debug mode, all registered components are displayed in the console, until the final line (here using ZEO):
-
-.. code-block:: bash
-
-    2018-01-14 11:37:54,339 INFO  [ZEO.ClientStorage][MainThread] [('127.0.0.1', 8100)] ClientStorage (pid=28695) created RW/normal for storage: 'pyams'
-    2018-01-14 11:37:54,340 INFO  [ZEO.cache][MainThread] created temporary cache file 3
-    2018-01-14 11:37:54,345 INFO  [ZODB.blob][MainThread] (28695) Blob directory `/var/local/env/pyams/var/db/blobs` is used but has no layout marker set. Selected `lawn` layout.
-    2018-01-14 11:37:54,345 WARNI [ZODB.blob][MainThread] (28695) The `lawn` blob directory layout is deprecated due to scalability issues on some file systems, please consider migrating to the `bushy` layout.
-    2018-01-14 11:37:54,346 DEBUG [asyncio][[('127.0.0.1', 8100)] zeo client networking thread] Using selector: EpollSelector
-    2018-01-14 11:37:54,347 DEBUG [ZEO.asyncio.client][[('127.0.0.1', 8100)] zeo client networking thread] disconnected <ZEO.asyncio.client.Client object at 0x7feeb1de7390> None
-    2018-01-14 11:37:54,348 DEBUG [ZEO.asyncio.client][[('127.0.0.1', 8100)] zeo client networking thread] try_connecting
-    2018-01-14 11:37:54,349 INFO  [ZEO.asyncio.base][[('127.0.0.1', 8100)] zeo client networking thread] Connected Protocol(('127.0.0.1', 8100), 'pyams', False)
-    2018-01-14 11:37:54,355 INFO  [ZEO.ClientStorage][[('127.0.0.1', 8100)] zeo client networking thread] [('127.0.0.1', 8100)] Connected to storage: ('localhost', 8100)
-    2018-01-14 11:37:54,358 DEBUG [txn.140663320073984][MainThread] new transaction
-    2018-01-14 11:37:54,360 DEBUG [txn.140663320073984][MainThread] commit
-    2018-01-14 11:37:54,484 DEBUG [config][MainThread] include /home/tflorac/Dropbox/src/PyAMS/pyams_template/src/pyams_template/configure.zcml
-    2018-01-14 11:37:54,485 DEBUG [config][MainThread] include /var/local/env/pycharm/lib/python3.5/site-packages/pyramid_zcml/configure.zcml
-    ...
-    2018-01-14 11:37:54,833 DEBUG [PyAMS (utils)][MainThread] Registering utility <class 'pyams_utils.timezone.utility.TimezoneGenerationsChecker'> named 'PyAMS timezone' providing <InterfaceClass pyams_utils.interfaces.site.ISiteGenerations>
-    2018-01-14 11:37:54,834 DEBUG [PyAMS (utils)][MainThread] Registering class <class 'pyams_utils.timezone.vocabulary.TimezonesVocabulary'> as vocabulary with name "PyAMS timezones"
-    2018-01-14 11:37:54,835 DEBUG [PyAMS (utils)][MainThread] Registering adapter <class 'pyams_utils.traversing.PathElementsAdapter'> for (<InterfaceClass zope.location.interfaces.IContained>,) providing <InterfaceClass pyams_utils.interfaces.traversing.IPathElements>
-    2018-01-14 11:37:54,839 DEBUG [PyAMS (utils)][MainThread] Registering adapter <class 'pyams_utils.url.AbsoluteUrlTalesExtension'> for (<InterfaceClass zope.interface.Interface>, <InterfaceClass zope.interface.Interface>, <InterfaceClass zope.interface.Interface>) providing <InterfaceClass pyams_utils.interfaces.tales.ITALESExtension>
-    2018-01-14 11:37:54,847 DEBUG [PyAMS (utils)][MainThread] Registering adapter <class 'pyams_utils.widget.decimal.DottedDecimalDataConverter'> for (<InterfaceClass pyams_utils.schema.IDottedDecimalField>, <InterfaceClass z3c.form.interfaces.IWidget>) providing <InterfaceClass z3c.form.interfaces.IDataConverter>
-    2018-01-14 11:37:54,942 DEBUG [PyAMS (utils)][MainThread] Registering adapter <class 'pyams_utils.zmi.intids.IntIdsLengthAdapter'> for (<InterfaceClass zope.intid.interfaces.IIntIds>,) providing <InterfaceClass pyams_utils.interfaces.intids.IIndexLength>
-    2018-01-14 11:37:54,943 DEBUG [PyAMS (pagelet)][MainThread] Registering pagelet view "properties.html" for <InterfaceClass zope.intid.interfaces.IIntIds> (<class 'pyams_utils.zmi.intids.IntIdsPropertiesDisplayForm'>)
-    2018-01-14 11:37:54,949 DEBUG [PyAMS (pagelet)][MainThread] Registering pagelet view "properties.html" for <InterfaceClass pyams_utils.interfaces.timezone.IServerTimezone> (<class 'pyams_utils.zmi.timezone.ServerTimezonePropertiesEditForm'>)
-    2018-01-14 11:37:54,980 DEBUG [PyAMS (utils)][MainThread] Registering class <class 'pyams_utils.zodb.ZEOConnectionVocabulary'> as vocabulary with name "PyAMS ZEO connections"
-    2018-01-14 11:37:54,981 DEBUG [PyAMS (utils)][MainThread] Registering class <class 'pyams_utils.zodb.ZODBConnectionVocabulary'> as vocabulary with name "PyAMS ZODB connections"
-    2018-01-14 11:37:55,015 DEBUG [PyAMS (pagelet)][MainThread] Registering pagelet view "add-zeo-connection.html" for <InterfaceClass zope.component.interfaces.ISite> (<class 'pyams_utils.zmi.zeo.ZEOConnectionAddForm'>)
-    2018-01-14 11:37:55,016 DEBUG [PyAMS (utils)][MainThread] Registering adapter <class 'pyams_utils.zmi.zeo.ZEOConnectionNameAdapter'> for (<InterfaceClass pyams_utils.interfaces.zeo.IZEOConnection>, <InterfaceClass pyams_zmi.layer.IAdminLayer>) providing <InterfaceClass pyams_skin.interfaces.container.ITableElementName>
-    2018-01-14 11:37:55,017 DEBUG [PyAMS (pagelet)][MainThread] Registering pagelet view "properties.html" for <InterfaceClass pyams_utils.interfaces.zeo.IZEOConnection> (<class 'pyams_utils.zmi.zeo.ZEOConnectionPropertiesEditForm'>)
-    ...
-    2018-01-14 11:41:13,214 DEBUG [PyAMS (utils)][MainThread] Registering adapter <class 'pyams_default_theme.skin.ResourcesAdapter'> for (<InterfaceClass zope.interface.Interface>, <InterfaceClass pyams_default_theme.layer.IPyAMSDefaultLayer>, <InterfaceClass zope.interface.Interface>) providing <InterfaceClass pyams_skin.interfaces.resources.IResources>
-    2018-01-14 11:43:36,665 INFO  [ZEO.ClientStorage][MainThread] [('127.0.0.1', 8100)] ClientStorage (pid=29335) created RW/normal for storage: 'pyams'
-    2018-01-14 11:43:36,665 INFO  [ZEO.cache][MainThread] created temporary cache file 9
-    2018-01-14 11:43:36,673 DEBUG [asyncio][[('127.0.0.1', 8100)] zeo client networking thread] Using selector: EpollSelector
-    2018-01-14 11:43:36,674 DEBUG [ZEO.ClientStorage.check_blob_cache][[('127.0.0.1', 8100)] zeo client check blob size thread] 140712483907328 Checking blob cache size. (target: 966367642)
-    2018-01-14 11:43:36,674 DEBUG [ZEO.asyncio.client][[('127.0.0.1', 8100)] zeo client networking thread] disconnected <ZEO.asyncio.client.Client object at 0x7ffa54058860> None
-    2018-01-14 11:43:36,675 DEBUG [ZEO.ClientStorage.check_blob_cache][[('127.0.0.1', 8100)] zeo client check blob size thread] 140712483907328   blob cache size: 0
-    2018-01-14 11:43:36,675 DEBUG [ZEO.asyncio.client][[('127.0.0.1', 8100)] zeo client networking thread] try_connecting
-    2018-01-14 11:43:36,675 DEBUG [ZEO.ClientStorage.check_blob_cache][[('127.0.0.1', 8100)] zeo client check blob size thread] 140712483907328   -->
-    2018-01-14 11:43:36,677 INFO  [ZEO.asyncio.base][[('127.0.0.1', 8100)] zeo client networking thread] Connected Protocol(('127.0.0.1', 8100), 'pyams', False)
-    2018-01-14 11:43:36,679 INFO  [ZEO.ClientStorage][[('127.0.0.1', 8100)] zeo client networking thread] [('127.0.0.1', 8100)] Connected to storage: ('localhost', 8100)
-    2018-01-14 11:43:36,682 DEBUG [txn.140713340237568][MainThread] new transaction
-    2018-01-14 11:43:36,683 DEBUG [txn.140713340237568][MainThread] commit
-    2018-01-14 11:43:36,690 INFO  [PyAMS (scheduler][MainThread] Starting tasks scheduler <SchedulerProcess(SchedulerProcess-1, initial)>...
-    2018-01-14 11:43:36,698 INFO  [PyAMS (scheduler][MainThread] Started tasks scheduler with PID 29361.
-    2018-01-14 11:43:36,701 INFO  [apscheduler.scheduler][MainThread] Scheduler started
-    2018-01-14 11:43:36,702 DEBUG [apscheduler.scheduler][APScheduler] Looking for jobs to run
-    2018-01-14 11:43:36,704 DEBUG [apscheduler.scheduler][APScheduler] No jobs; waiting until a job is added
-    2018-01-14 11:43:36,719 INFO  [ZEO.ClientStorage][MainThread] [('127.0.0.1', 8100)] ClientStorage (pid=29335) created RW/normal for storage: 'pyams'
-    2018-01-14 11:43:36,720 INFO  [ZEO.cache][MainThread] created temporary cache file 15
-    2018-01-14 11:43:36,724 DEBUG [asyncio][[('127.0.0.1', 8100)] zeo client networking thread] Using selector: EpollSelector
-    2018-01-14 11:43:36,725 DEBUG [ZEO.asyncio.client][[('127.0.0.1', 8100)] zeo client networking thread] disconnected <ZEO.asyncio.client.Client object at 0x7ffa557e8b00> None
-    2018-01-14 11:43:36,726 DEBUG [ZEO.asyncio.client][[('127.0.0.1', 8100)] zeo client networking thread] try_connecting
-    2018-01-14 11:43:36,727 DEBUG [ZEO.ClientStorage.check_blob_cache][[('127.0.0.1', 8100)] zeo client check blob size thread] 140712483907328 Checking blob cache size. (target: 966367642)
-    2018-01-14 11:43:36,728 INFO  [ZEO.asyncio.base][[('127.0.0.1', 8100)] zeo client networking thread] Connected Protocol(('127.0.0.1', 8100), 'pyams', False)
-    2018-01-14 11:43:36,729 DEBUG [ZEO.ClientStorage.check_blob_cache][[('127.0.0.1', 8100)] zeo client check blob size thread] 140712483907328   blob cache size: 0
-    2018-01-14 11:43:36,729 DEBUG [ZEO.ClientStorage.check_blob_cache][[('127.0.0.1', 8100)] zeo client check blob size thread] 140712483907328   -->
-    2018-01-14 11:43:36,732 INFO  [ZEO.ClientStorage][[('127.0.0.1', 8100)] zeo client networking thread] [('127.0.0.1', 8100)] Connected to storage: ('localhost', 8100)
-    2018-01-14 11:43:36,735 DEBUG [txn.140713340237568][MainThread] new transaction
-    2018-01-14 11:43:36,736 DEBUG [txn.140713340237568][MainThread] commit
-    2018-01-14 11:43:36,743 INFO  [PyAMS (media)][MainThread] Starting medias converter <MediaConversionProcess(MediaConversionProcess-2, initial)>...
-    2018-01-14 11:43:36,751 INFO  [PyAMS (media)][MainThread] Started medias converter with PID 29367.
-    Starting server in PID 29335.
-    Serving on http://0.0.0.0:6543
-
-
-Congrats: PyAMS is running !
-
-Launch a browser and open URL http://127.0.0.1:6543/admin to get access to PyAMS management interface.
-
-.. warning::
-
-    By default:
-
-    - Login: admin
-
-    - Password: admin
-
-    **You must change it as soon as possible!**
-    (see :ref:`pyams_security`)!!.
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/source/appmanage.rst	Fri Apr 20 16:52:49 2018 +0200
@@ -0,0 +1,51 @@
+.. _appmanage:
+
+.. _site:
+
+
+PyAMS site management
+=====================
+
+PyAMS site management is based on the ZODB.
+
+
+When the PyAMS is initialized, it create and register several utilities into the *local registry* and saved into ZODB (see
+:ref:`zca`). These utilities are created with default values which can be modified through **management interface** when
+the application is started.
+
+
+Local registry utilities
+''''''''''''''''''''''''
+
+Some important utilities include:
+
+- a **catalog**: the catalog has the responsibility to index every content properties which are required to make quick
+  and efficient searches. Catalog indexes are automatically created on database upgrade; management interface
+  allows administrator to get indexes properties, to get the number of indexed objects and values for a given index, and
+  to delete an index before recreating it by running the database upgrade script another time (see :ref:`scripts`).
+
+- an **internal IDs** utility:
+
+- a **language negotiator**:
+
+- a **portal templates** container:
+
+- a **security manager**:
+
+- a **sequential IDs** utility:
+
+- a **server timezone** utility:
+
+- a **user profiles** container:
+
+
+Optional utilities can also include:
+
+- an **Elasticsearch content indexer**:
+
+- a **maps manager**:
+
+- a **medias converter**:
+
+- a **tasks scheduler**:
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/source/appstart.rst	Fri Apr 20 16:52:49 2018 +0200
@@ -0,0 +1,95 @@
+.. _appstart:
+
+Starting the application
+========================
+
+When database upgrade process has ended ( :ref:`zodbinit` ) , you can start the web application process with the standard Pyramid's
+*pserve* command line tool:
+
+.. code-block:: bash
+
+    (env) $ ./bin/pserve etc/development.ini
+
+In standard debug mode, all registered components are displayed in the console, until the final line (here using ZEO):
+
+.. code-block:: bash
+
+    2018-01-14 11:37:54,339 INFO  [ZEO.ClientStorage][MainThread] [('127.0.0.1', 8100)] ClientStorage (pid=28695) created RW/normal for storage: 'pyams'
+    2018-01-14 11:37:54,340 INFO  [ZEO.cache][MainThread] created temporary cache file 3
+    2018-01-14 11:37:54,345 INFO  [ZODB.blob][MainThread] (28695) Blob directory `/var/local/env/pyams/var/db/blobs` is used but has no layout marker set. Selected `lawn` layout.
+    2018-01-14 11:37:54,345 WARNI [ZODB.blob][MainThread] (28695) The `lawn` blob directory layout is deprecated due to scalability issues on some file systems, please consider migrating to the `bushy` layout.
+    2018-01-14 11:37:54,346 DEBUG [asyncio][[('127.0.0.1', 8100)] zeo client networking thread] Using selector: EpollSelector
+    2018-01-14 11:37:54,347 DEBUG [ZEO.asyncio.client][[('127.0.0.1', 8100)] zeo client networking thread] disconnected <ZEO.asyncio.client.Client object at 0x7feeb1de7390> None
+    2018-01-14 11:37:54,348 DEBUG [ZEO.asyncio.client][[('127.0.0.1', 8100)] zeo client networking thread] try_connecting
+    2018-01-14 11:37:54,349 INFO  [ZEO.asyncio.base][[('127.0.0.1', 8100)] zeo client networking thread] Connected Protocol(('127.0.0.1', 8100), 'pyams', False)
+    2018-01-14 11:37:54,355 INFO  [ZEO.ClientStorage][[('127.0.0.1', 8100)] zeo client networking thread] [('127.0.0.1', 8100)] Connected to storage: ('localhost', 8100)
+    2018-01-14 11:37:54,358 DEBUG [txn.140663320073984][MainThread] new transaction
+    2018-01-14 11:37:54,360 DEBUG [txn.140663320073984][MainThread] commit
+    2018-01-14 11:37:54,484 DEBUG [config][MainThread] include /home/tflorac/Dropbox/src/PyAMS/pyams_template/src/pyams_template/configure.zcml
+    2018-01-14 11:37:54,485 DEBUG [config][MainThread] include /var/local/env/pycharm/lib/python3.5/site-packages/pyramid_zcml/configure.zcml
+    ...
+    2018-01-14 11:37:54,833 DEBUG [PyAMS (utils)][MainThread] Registering utility <class 'pyams_utils.timezone.utility.TimezoneGenerationsChecker'> named 'PyAMS timezone' providing <InterfaceClass pyams_utils.interfaces.site.ISiteGenerations>
+    2018-01-14 11:37:54,834 DEBUG [PyAMS (utils)][MainThread] Registering class <class 'pyams_utils.timezone.vocabulary.TimezonesVocabulary'> as vocabulary with name "PyAMS timezones"
+    2018-01-14 11:37:54,835 DEBUG [PyAMS (utils)][MainThread] Registering adapter <class 'pyams_utils.traversing.PathElementsAdapter'> for (<InterfaceClass zope.location.interfaces.IContained>,) providing <InterfaceClass pyams_utils.interfaces.traversing.IPathElements>
+    2018-01-14 11:37:54,839 DEBUG [PyAMS (utils)][MainThread] Registering adapter <class 'pyams_utils.url.AbsoluteUrlTalesExtension'> for (<InterfaceClass zope.interface.Interface>, <InterfaceClass zope.interface.Interface>, <InterfaceClass zope.interface.Interface>) providing <InterfaceClass pyams_utils.interfaces.tales.ITALESExtension>
+    2018-01-14 11:37:54,847 DEBUG [PyAMS (utils)][MainThread] Registering adapter <class 'pyams_utils.widget.decimal.DottedDecimalDataConverter'> for (<InterfaceClass pyams_utils.schema.IDottedDecimalField>, <InterfaceClass z3c.form.interfaces.IWidget>) providing <InterfaceClass z3c.form.interfaces.IDataConverter>
+    2018-01-14 11:37:54,942 DEBUG [PyAMS (utils)][MainThread] Registering adapter <class 'pyams_utils.zmi.intids.IntIdsLengthAdapter'> for (<InterfaceClass zope.intid.interfaces.IIntIds>,) providing <InterfaceClass pyams_utils.interfaces.intids.IIndexLength>
+    2018-01-14 11:37:54,943 DEBUG [PyAMS (pagelet)][MainThread] Registering pagelet view "properties.html" for <InterfaceClass zope.intid.interfaces.IIntIds> (<class 'pyams_utils.zmi.intids.IntIdsPropertiesDisplayForm'>)
+    2018-01-14 11:37:54,949 DEBUG [PyAMS (pagelet)][MainThread] Registering pagelet view "properties.html" for <InterfaceClass pyams_utils.interfaces.timezone.IServerTimezone> (<class 'pyams_utils.zmi.timezone.ServerTimezonePropertiesEditForm'>)
+    2018-01-14 11:37:54,980 DEBUG [PyAMS (utils)][MainThread] Registering class <class 'pyams_utils.zodb.ZEOConnectionVocabulary'> as vocabulary with name "PyAMS ZEO connections"
+    2018-01-14 11:37:54,981 DEBUG [PyAMS (utils)][MainThread] Registering class <class 'pyams_utils.zodb.ZODBConnectionVocabulary'> as vocabulary with name "PyAMS ZODB connections"
+    2018-01-14 11:37:55,015 DEBUG [PyAMS (pagelet)][MainThread] Registering pagelet view "add-zeo-connection.html" for <InterfaceClass zope.component.interfaces.ISite> (<class 'pyams_utils.zmi.zeo.ZEOConnectionAddForm'>)
+    2018-01-14 11:37:55,016 DEBUG [PyAMS (utils)][MainThread] Registering adapter <class 'pyams_utils.zmi.zeo.ZEOConnectionNameAdapter'> for (<InterfaceClass pyams_utils.interfaces.zeo.IZEOConnection>, <InterfaceClass pyams_zmi.layer.IAdminLayer>) providing <InterfaceClass pyams_skin.interfaces.container.ITableElementName>
+    2018-01-14 11:37:55,017 DEBUG [PyAMS (pagelet)][MainThread] Registering pagelet view "properties.html" for <InterfaceClass pyams_utils.interfaces.zeo.IZEOConnection> (<class 'pyams_utils.zmi.zeo.ZEOConnectionPropertiesEditForm'>)
+    ...
+    2018-01-14 11:41:13,214 DEBUG [PyAMS (utils)][MainThread] Registering adapter <class 'pyams_default_theme.skin.ResourcesAdapter'> for (<InterfaceClass zope.interface.Interface>, <InterfaceClass pyams_default_theme.layer.IPyAMSDefaultLayer>, <InterfaceClass zope.interface.Interface>) providing <InterfaceClass pyams_skin.interfaces.resources.IResources>
+    2018-01-14 11:43:36,665 INFO  [ZEO.ClientStorage][MainThread] [('127.0.0.1', 8100)] ClientStorage (pid=29335) created RW/normal for storage: 'pyams'
+    2018-01-14 11:43:36,665 INFO  [ZEO.cache][MainThread] created temporary cache file 9
+    2018-01-14 11:43:36,673 DEBUG [asyncio][[('127.0.0.1', 8100)] zeo client networking thread] Using selector: EpollSelector
+    2018-01-14 11:43:36,674 DEBUG [ZEO.ClientStorage.check_blob_cache][[('127.0.0.1', 8100)] zeo client check blob size thread] 140712483907328 Checking blob cache size. (target: 966367642)
+    2018-01-14 11:43:36,674 DEBUG [ZEO.asyncio.client][[('127.0.0.1', 8100)] zeo client networking thread] disconnected <ZEO.asyncio.client.Client object at 0x7ffa54058860> None
+    2018-01-14 11:43:36,675 DEBUG [ZEO.ClientStorage.check_blob_cache][[('127.0.0.1', 8100)] zeo client check blob size thread] 140712483907328   blob cache size: 0
+    2018-01-14 11:43:36,675 DEBUG [ZEO.asyncio.client][[('127.0.0.1', 8100)] zeo client networking thread] try_connecting
+    2018-01-14 11:43:36,675 DEBUG [ZEO.ClientStorage.check_blob_cache][[('127.0.0.1', 8100)] zeo client check blob size thread] 140712483907328   -->
+    2018-01-14 11:43:36,677 INFO  [ZEO.asyncio.base][[('127.0.0.1', 8100)] zeo client networking thread] Connected Protocol(('127.0.0.1', 8100), 'pyams', False)
+    2018-01-14 11:43:36,679 INFO  [ZEO.ClientStorage][[('127.0.0.1', 8100)] zeo client networking thread] [('127.0.0.1', 8100)] Connected to storage: ('localhost', 8100)
+    2018-01-14 11:43:36,682 DEBUG [txn.140713340237568][MainThread] new transaction
+    2018-01-14 11:43:36,683 DEBUG [txn.140713340237568][MainThread] commit
+    2018-01-14 11:43:36,690 INFO  [PyAMS (scheduler][MainThread] Starting tasks scheduler <SchedulerProcess(SchedulerProcess-1, initial)>...
+    2018-01-14 11:43:36,698 INFO  [PyAMS (scheduler][MainThread] Started tasks scheduler with PID 29361.
+    2018-01-14 11:43:36,701 INFO  [apscheduler.scheduler][MainThread] Scheduler started
+    2018-01-14 11:43:36,702 DEBUG [apscheduler.scheduler][APScheduler] Looking for jobs to run
+    2018-01-14 11:43:36,704 DEBUG [apscheduler.scheduler][APScheduler] No jobs; waiting until a job is added
+    2018-01-14 11:43:36,719 INFO  [ZEO.ClientStorage][MainThread] [('127.0.0.1', 8100)] ClientStorage (pid=29335) created RW/normal for storage: 'pyams'
+    2018-01-14 11:43:36,720 INFO  [ZEO.cache][MainThread] created temporary cache file 15
+    2018-01-14 11:43:36,724 DEBUG [asyncio][[('127.0.0.1', 8100)] zeo client networking thread] Using selector: EpollSelector
+    2018-01-14 11:43:36,725 DEBUG [ZEO.asyncio.client][[('127.0.0.1', 8100)] zeo client networking thread] disconnected <ZEO.asyncio.client.Client object at 0x7ffa557e8b00> None
+    2018-01-14 11:43:36,726 DEBUG [ZEO.asyncio.client][[('127.0.0.1', 8100)] zeo client networking thread] try_connecting
+    2018-01-14 11:43:36,727 DEBUG [ZEO.ClientStorage.check_blob_cache][[('127.0.0.1', 8100)] zeo client check blob size thread] 140712483907328 Checking blob cache size. (target: 966367642)
+    2018-01-14 11:43:36,728 INFO  [ZEO.asyncio.base][[('127.0.0.1', 8100)] zeo client networking thread] Connected Protocol(('127.0.0.1', 8100), 'pyams', False)
+    2018-01-14 11:43:36,729 DEBUG [ZEO.ClientStorage.check_blob_cache][[('127.0.0.1', 8100)] zeo client check blob size thread] 140712483907328   blob cache size: 0
+    2018-01-14 11:43:36,729 DEBUG [ZEO.ClientStorage.check_blob_cache][[('127.0.0.1', 8100)] zeo client check blob size thread] 140712483907328   -->
+    2018-01-14 11:43:36,732 INFO  [ZEO.ClientStorage][[('127.0.0.1', 8100)] zeo client networking thread] [('127.0.0.1', 8100)] Connected to storage: ('localhost', 8100)
+    2018-01-14 11:43:36,735 DEBUG [txn.140713340237568][MainThread] new transaction
+    2018-01-14 11:43:36,736 DEBUG [txn.140713340237568][MainThread] commit
+    2018-01-14 11:43:36,743 INFO  [PyAMS (media)][MainThread] Starting medias converter <MediaConversionProcess(MediaConversionProcess-2, initial)>...
+    2018-01-14 11:43:36,751 INFO  [PyAMS (media)][MainThread] Started medias converter with PID 29367.
+    Starting server in PID 29335.
+    Serving on http://0.0.0.0:6543
+
+
+Congrats: PyAMS is running !
+
+Launch a browser and open URL http://127.0.0.1:6543/admin to get access to PyAMS management interface.
+
+.. warning::
+
+    By default:
+
+    - Login: admin
+
+    - Password: admin
+
+    **You must change it as soon as possible!**
+    (see :ref:`pyams_security`)!!.
+
--- a/src/source/conf.py	Thu Apr 12 18:01:15 2018 +0200
+++ b/src/source/conf.py	Fri Apr 20 16:52:49 2018 +0200
@@ -69,7 +69,7 @@
 extensions = [
     'sphinx.ext.autodoc',
     'sphinx.ext.todo',
-    'sphinx.ext.coverage',
+    #'sphinx.ext.coverage',
     'sphinx.ext.viewcode',
     'repoze.sphinx.autointerface',
 ]
@@ -242,3 +242,4 @@
 
 def setup(app):
     app.add_stylesheet('css/custom.css')
+
--- a/src/source/config.rst	Thu Apr 12 18:01:15 2018 +0200
+++ b/src/source/config.rst	Fri Apr 20 16:52:49 2018 +0200
@@ -3,76 +3,73 @@
 PyAMS configuration
 ===================
 
-PyAMS application configuration is done via several complementary ways:
+.. Note::
 
-- via Pyramid's configuration files located in 'etc/' folder
+    PyAMS application configuration is done via several complementary ways:
 
-- via settings applied to local utilities defined into ZODB
+        - via **Pyramid's configuration** files located in 'etc/' folder
 
-- via ZCML files.
+        - via **ZCML files** .
+
+        - via **Site Management** to setup Local utilities defined into ZODB (see :ref:`appmanage`)
 
 
 Pyramid's configuration files
 -----------------------------
 
-PyAMS is using default Pyramid's configuration files to define settings. When using default PyAMS scaffold, these
+PyAMS is using default Pyramid's ini_ configuration files to define settings. When using default PyAMS scaffold, these
 INI files are stored into *etc* folder. Two files are created by scaffold: a development file (*development.ini*) and
 a production file (*production.ini*) which contain nearly the same directives, except for debug toolbar (activated only
 in development), Fanstatic configuration and logging.
 
+.. _ini: https://docs.pylonsproject.org/projects/pyramid/en/latest/narr/project.html#development-ini
+
 These files are actually documented, but here are a few important directives:
 
-- **zodbconn.uri**:
+- **zodbconn.uri**: (ex: zconfig:/zodb-relstorage.conf)
 
-- **pyams.application_factory**:
-
-- **pyams.application_name**:
+- **pyams.application_name**: Name of your own application
+- **pyams.application_factory**: Configuration module path to your custom application.
 
-- **pyams_xxx.tcp_handler** and **pyams_xxx.start_handler**:
+- **pyams_xxx.tcp_handler** :  Adress of the tcp handler for the service associated to the pyams package
+- **pyams_xxx.start_handler**: True / False
 
-- **pyams_content.config.tools_name**:
+- **pyams_content.config.xxx_tool_factory** and **pyams_content.config.xxx_tool_name**: You can override default factory by defining these settings or by providing your own adapters.
 
-- **pyams_content.config.xxx_tool_factory** and **pyams_content.config.xxx_tool_name**:
 
 
-Local registry utilities
-------------------------
+Pyramid's configuration files powered by PyAMS_utils
+----------------------------------------------------
 
-When the ZODB is created, PyAMS automatically create and register several utilities into the *local registry* (see
-:ref:`zca`). These utilities are created with default values which can be modified through management interface when
-the application is started.
+On application startup, if PyAMS_utils package is included into Pyramid configuration, several operations take
+place:
 
-Some important utilities include:
+ - a custom **site factory** is defined
 
-- a **catalog**: the catalog has the responsibility to index every content properties which are required to make quick
-  and efficient searches. Catalog indexes are automatically created on database upgrade; management interface
-  allows administrator to get indexes properties, to get the number of indexed objects and values for a given index, and
-  to delete an index before recreating it by running the database upgrade script another time (see :ref:`scripts`).
+ - custom request methods are defined
+
+ - a custom **traverser** handling **namespaces** is defined
 
-- an **internal IDs** utility:
+ - a custom subscribers predicate based on interfaces support is defined
 
-- a **language negotiator**:
+ - several adapters are registered, to handle annotations and key references
 
-- a **portal templates** container:
-
-- a **security manager**:
+ - custom TALES extensions are registered.
 
-- a **sequential IDs** utility:
+The site factory is an important component in this process. It is this factory which will define the application root
+and create a **local site manager**.
 
-- a **server timezone** utility:
-
-- a **user profiles** container:
+Pyramid application is loaded from ZODB's root via a key defined in Pyramid's configuration file; the key is named
+*pyams.application_name* and it's default value is *application*.
 
-
-Optional utilities can also include:
-
-- an **Elasticsearch content indexer**:
+If the application can't be found, PyAMS is looking for an application class name in Pyramid's configuration file; the
+class name configuration key is called *pyams.application_factory* and defined by default as
+*pyams_utils.site.BaseSiteRoot*. PyAMS default site factory will then create the application, and add a local site
+manager to it (see :ref:`zca`).
 
-- a **maps manager**:
+After application creation, a :py:class:`NewLocalSiteCreatedEvent <pyams_utils.site.NewLocalSiteCreatedEvent>` is
+notified. Custom packages can subscribe to this event to register custom components.
 
-- a **medias converter**:
-
-- a **tasks scheduler**:
 
 
 ZCML configuration files
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/source/developerguide.rst	Fri Apr 20 16:52:49 2018 +0200
@@ -0,0 +1,31 @@
+.. _developerguide:
+
+
+PyAMS Developer's Guide
+=======================
+
+PyAMS package are developed based on ZCA
+
+
+
+.. seealso::
+
+
+Interfaces
+----------
+
+Interfaces are objects that specify (document) the external behavior
+of objects that "provide" them.  An interface specifies behavior
+through:
+
+- Informal documentation in a doc string
+
+- Attribute definitions
+
+- Invariants, which are conditions that must hold for objects that
+  provide the interface
+
+Attribute definitions specify specific attributes. They define the
+attribute name and provide documentation and constraints of attribute
+values.  Attribute definitions can take a number of forms, as we'll
+
--- a/src/source/index.rst	Thu Apr 12 18:01:15 2018 +0200
+++ b/src/source/index.rst	Fri Apr 20 16:52:49 2018 +0200
@@ -24,7 +24,7 @@
    :maxdepth: 2
    :caption: Tutorial
 
-   User’s Guide <manage>
+   User’s Guide <userguide>
    screenshots
 
 .. toctree::
@@ -34,31 +34,31 @@
    ZODB Server <zodb>
    PyAMS Installation <install>
    PyAMS Configuration <config>
-   site
-   scripts
+   PyAMS Run Server <appstart>
+   PyAMS Site management <manage>
 
 
 
 
-PyAMS external packages
------------------------
+.. toctree::
+   :maxdepth: 2
+   :caption:  Technical documentation
 
-PyAMS is built on many external packages, and provides a whole set of extensions. Here is a list of them:
-
+   developerguide
+   packages
+   extend
+   tests
 
 .. toctree::
    :maxdepth: 2
-   :caption:  API documentation
+   :caption:  Toolkit
 
-   extend
-   packages
-
+   scripts
 
 
 Indices and tables
 ------------------
 
 * :ref:`genindex`
-* :ref:`modules`
 * :ref:`modindex`
 * :ref:`search`
--- a/src/source/install.rst	Thu Apr 12 18:01:15 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-.. _install:
-
-Installing PyAMS
-================
-
-.. toctree::
-   :maxdepth: 2
-
-   appinstall
-
--- a/src/source/manage.rst	Thu Apr 12 18:01:15 2018 +0200
+++ b/src/source/manage.rst	Fri Apr 20 16:52:49 2018 +0200
@@ -6,5 +6,7 @@
 .. toctree::
    :maxdepth: 2
 
+   appmanage
    utilities
 
+
--- a/src/source/packages.rst	Thu Apr 12 18:01:15 2018 +0200
+++ b/src/source/packages.rst	Fri Apr 20 16:52:49 2018 +0200
@@ -3,33 +3,46 @@
 PyAMS packages
 ==============
 
+PyAMS core
+----------
+
+.. toctree::
+   :maxdepth: 1
+
+   PyAMS ZMI <pyams_zmi/pyams_zmi>
+   PyAMS Content <pyams_content/pyams_content>
+   PyAMS Skin <pyams_skin/pyams_skin>
+   PyAMS Catalog <pyams_catalog/pyams_catalog>
+   PyAMS Form <pyams_form/pyams_form>
+   PyAMS Portal <pyams_portal/pyams_portal>
+   PyAMS Template <pyams_template/pyams_template>
+   PyAMS Pagelet <pyams_pagelet/pyams_pagelet>
+   PyAMS Viewlet <pyams_viewlet/pyams_viewlet>
+   PyAMS Utils <pyams_utils/pyams_utils>
+
+
+PyAMS additional packages
+-------------------------
+
+PyAMS is built on many additional packages, and provides a whole set of extensions. Here is a list of them:
+
 .. toctree::
    :maxdepth: 1
 
    PyAMS Alchemy  <pyams_alchemy/pyams_alchemy>
    PyAMS Cache <pyams_cache/pyams_cache>
-   PyAMS Catalog <pyams_catalog/pyams_catalog>
-   PyAMS Content <pyams_content/pyams_content>
    PyAMS Content_es <pyams_content_es/pyams_content_es>
    PyAMS File <pyams_file/pyams_file>
-   PyAMS Form <pyams_form/pyams_form>
    PyAMS GIS <pyams_gis/pyams_gis>
    PyAMS I18N <pyams_i18n/pyams_i18n>
    PyAMS LDAP <pyams_ldap/pyams_ldap>
    PyAMS Mail <pyams_mail/pyams_mail>
    PyAMS Media <pyams_media/pyams_media>
    PyAMS Notify <pyams_notify/pyams_notify>
-   PyAMS Pagelet <pyams_pagelet/pyams_pagelet>
-   PyAMS Portal <pyams_portal/pyams_portal>
    PyAMS Scheduler <pyams_scheduler/pyams_scheduler>
+   PyAMS Thesaurus <pyams_thesaurus/pyams_thesaurus>
    PyAMS Security <pyams_security/pyams_security>
    PyAMS Sequence <pyams_sequence/pyams_sequence>
-   PyAMS Skin <pyams_skin/pyams_skin>
-   PyAMS Template <pyams_template/pyams_template>
-   PyAMS Thesaurus <pyams_thesaurus/pyams_thesaurus>
-   PyAMS Utils <pyams_utils/pyams_utils>
-   PyAMS Viewlet <pyams_viewlet/pyams_viewlet>
    PyAMS Workflow <pyams_workflow/pyams_workflow>
-   PyAMS ZMI <pyams_zmi/pyams_zmi>
    PyAMS ZMQ <pyams_zmq/pyams_zmq>
    PyAMS ZODBbrowser <pyams_zodbbrowser/pyams_zodbbrowser>
--- a/src/source/pyams_skin/pyams_skin.rst	Thu Apr 12 18:01:15 2018 +0200
+++ b/src/source/pyams_skin/pyams_skin.rst	Fri Apr 20 16:52:49 2018 +0200
@@ -27,6 +27,14 @@
     :undoc-members:
     :show-inheritance:
 
+pyams\_skin\.event module
+-------------------------
+
+.. automodule:: pyams_skin.event
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
 pyams\_skin\.extension module
 -----------------------------
 
--- a/src/source/pyams_utils/pyams_utils.rst	Thu Apr 12 18:01:15 2018 +0200
+++ b/src/source/pyams_utils/pyams_utils.rst	Fri Apr 20 16:52:49 2018 +0200
@@ -27,6 +27,14 @@
     :undoc-members:
     :show-inheritance:
 
+pyams\_utils\.cache module
+--------------------------
+
+.. automodule:: pyams_utils.cache
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
 pyams\_utils\.container module
 ------------------------------
 
--- a/src/source/pyams_zmi/pyams_zmi.zmi.rst	Thu Apr 12 18:01:15 2018 +0200
+++ b/src/source/pyams_zmi/pyams_zmi.zmi.rst	Fri Apr 20 16:52:49 2018 +0200
@@ -51,4 +51,12 @@
     :undoc-members:
     :show-inheritance:
 
+pyams\_zmi\.zmi\.table module
+-----------------------------
 
+.. automodule:: pyams_zmi.zmi.table
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
--- a/src/source/scripts.rst	Thu Apr 12 18:01:15 2018 +0200
+++ b/src/source/scripts.rst	Fri Apr 20 16:52:49 2018 +0200
@@ -3,3 +3,42 @@
 PyAMS maintenance scripts
 =========================
 
+
+pyams_upgrade
+-------------
+
+
+Pyramid allows to define custom command line scripts for application management. A script called *pyams_upgrade* is
+provided by PyAMS_utils package; this script apply the same process as PyAMS site factory, but can also be used to
+manage **database generations**. The idea behind this is just to allow custom packages to provide a way to check and
+upgrade database configuration away from application startup process:
+
+.. code-block:: bash
+
+    # ./bin/pyams_upgrade webapp/development.ini
+
+
+A **site generation checker** is just a named utility providing :py:class:`pyams_utils.interfaces.site.ISiteGenerations`
+interface. For example, **pyams_security** package provides such utility, to make sure that local site manager
+contains a PyAMS security manager and a principal annotation utility:
+
+.. code-block:: python
+
+    from pyams_utils.site import check_required_utilities
+
+    REQUIRED_UTILITIES = ((ISecurityManager, '', SecurityManager, 'Security manager'),
+                          (IPrincipalAnnotationUtility, '', PrincipalAnnotationUtility, 'User profiles'))
+
+    @utility_config(name='PyAMS security', provides=ISiteGenerations)
+    class SecurityGenerationsChecker(object):
+    """I18n generations checker"""
+
+        generation = 1
+
+        def evolve(self, site, current=None):
+            """Check for required utilities"""
+            check_required_utilities(site, REQUIRED_UTILITIES)
+
+:py:func:`check_required_utilities <pyams_utils.site.check_required_utilities>` is a PyAMS_utils utility function which
+can to used to verify that a set of local utilities are correctly registered with the given names and interfaces.
+
--- a/src/source/site.rst	Thu Apr 12 18:01:15 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-.. _site:
-
-PyAMS site management
-=====================
-
-PyAMS site management is based on the ZODB.
-
-On application startup, if PyAMS_utils package is included into Pyramid configuration, several operations take
-place:
-
- - a custom **site factory** is defined
-
- - custom request methods are defined
-
- - a custom **traverser** handling **namespaces** is defined
-
- - a custom subscribers predicate based on interfaces support is defined
-
- - several adapters are registered, to handle annotations and key references
-
- - custom TALES extensions are registered.
-
-The site factory is an important component in this process. It is this factory which will define the application root
-and create a **local site manager**.
-
-Pyramid application is loaded from ZODB's root via a key defined in Pyramid's configuration file; the key is named
-*pyams.application_name* and it's default value is *application*.
-
-If the application can't be found, PyAMS is looking for an application class name in Pyramid's configuration file; the
-class name configuration key is called *pyams.application_factory* and defined by default as
-*pyams_utils.site.BaseSiteRoot*. PyAMS default site factory will then create the application, and add a local site
-manager to it (see :ref:`zca`).
-
-After application creation, a :py:class:`NewLocalSiteCreatedEvent <pyams_utils.site.NewLocalSiteCreatedEvent>` is
-notified. Custom packages can subscribe to this event to register custom components.
-
-
-*pyams_upgrade* command line script
------------------------------------
-
-Pyramid allows to define custom command line scripts for application management. A script called *pyams_upgrade* is
-provided by PyAMS_utils package; this script apply the same process as PyAMS site factory, but can also be used to
-manage **database generations**. The idea behind this is just to allow custom packages to provide a way to check and
-upgrade database configuration away from application startup process:
-
-.. code-block:: bash
-
-    # ./bin/pyams_upgrade webapp/development.ini
-
-
-A **site generation checker** is just a named utility providing :py:class:`pyams_utils.interfaces.site.ISiteGenerations`
-interface. For example, **pyams_security** package provides such utility, to make sure that local site manager
-contains a PyAMS security manager and a principal annotation utility:
-
-.. code-block:: python
-
-    from pyams_utils.site import check_required_utilities
-
-    REQUIRED_UTILITIES = ((ISecurityManager, '', SecurityManager, 'Security manager'),
-                          (IPrincipalAnnotationUtility, '', PrincipalAnnotationUtility, 'User profiles'))
-
-    @utility_config(name='PyAMS security', provides=ISiteGenerations)
-    class SecurityGenerationsChecker(object):
-    """I18n generations checker"""
-
-        generation = 1
-
-        def evolve(self, site, current=None):
-            """Check for required utilities"""
-            check_required_utilities(site, REQUIRED_UTILITIES)
-
-:py:func:`check_required_utilities <pyams_utils.site.check_required_utilities>` is a PyAMS_utils utility function which
-can to used to verify that a set of local utilities are correctly registered with the given names and interfaces.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/source/tests.rst	Fri Apr 20 16:52:49 2018 +0200
@@ -0,0 +1,35 @@
+.. _tests:
+
+PyAMS tests
+===========
+
+.. toctree::
+   :maxdepth: 1
+
+   PyAMS Alchemy tests <pyams_alchemy/pyams_alchemy.tests.rst>
+   PyAMS Cache tests <pyams_cache/pyams_cache.tests.rst>
+   PyAMS Catalog tests <pyams_catalog/pyams_catalog.tests.rst>
+   PyAMS Content tests <pyams_content/pyams_content.tests.rst>
+   PyAMS Content_es tests <pyams_content_es/pyams_content_es.tests.rst>
+   PyAMS File tests <pyams_file/pyams_file.tests.rst>
+   PyAMS Form tests <pyams_form/pyams_form.tests.rst>
+   PyAMS GIS tests <pyams_gis/pyams_gis.tests.rst>
+   PyAMS I18N tests <pyams_i18n/pyams_i18n.tests.rst>
+   PyAMS LDAP tests <pyams_ldap/pyams_ldap.tests.rst>
+   PyAMS Mail tests <pyams_mail/pyams_mail.tests.rst>
+   PyAMS Media tests <pyams_media/pyams_media.tests.rst>
+   PyAMS Notify tests <pyams_notify/pyams_notify.tests.rst>
+   PyAMS Pagelet tests <pyams_pagelet/pyams_pagelet.tests.rst>
+   PyAMS Portal tests <pyams_portal/pyams_portal.tests.rst>
+   PyAMS Scheduler tests <pyams_scheduler/pyams_scheduler.tests.rst>
+   PyAMS Security tests <pyams_security/pyams_security.tests.rst>
+   PyAMS Sequence tests <pyams_sequence/pyams_sequence.tests.rst>
+   PyAMS Skin tests <pyams_skin/pyams_skin.tests.rst>
+   PyAMS Template tests <pyams_template/pyams_template.tests.rst>
+   PyAMS Thesaurus tests <pyams_thesaurus/pyams_thesaurus.tests.rst>
+   PyAMS Utils tests <pyams_utils/pyams_utils.tests.rst>
+   PyAMS Viewlet tests <pyams_viewlet/pyams_viewlet.tests.rst>
+   PyAMS Workflow tests <pyams_workflow/pyams_workflow.tests.rst>
+   PyAMS ZMI tests <pyams_zmi/pyams_zmi.tests.rst>
+   PyAMS ZMQ tests <pyams_zmq/pyams_zmq.tests.rst>
+   PyAMS ZODBbrowser tests <pyams_zodbbrowser/pyams_zodbbrowser.tests.rst>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/source/userguide.rst	Fri Apr 20 16:52:49 2018 +0200
@@ -0,0 +1,23 @@
+.. _userguide:
+
+PyAMS User's Guide
+==================
+
+Creating content
+----------------
+
+How to create a Site
+''''''''''''''''''''
+
+How to create a Modele
+''''''''''''''''''''''
+
+How to create a News
+''''''''''''''''''''
+
+How to create a Topic
+'''''''''''''''''''''
+
+
+Publishing content
+------------------
--- a/src/source/zca.rst	Thu Apr 12 18:01:15 2018 +0200
+++ b/src/source/zca.rst	Fri Apr 20 16:52:49 2018 +0200
@@ -1,9 +1,9 @@
 .. _zca:
 
-Managing ZCA with PyAMS
-=======================
+Zope Component Architecture with PyAMS
+======================================
 
-The **Zope Component Architecture** (aka ZCA) is used by the Pyramid framework "under the hood" to handle interfaces,
+The **Zope Component Architecture** (aka **ZCA**) is used by the Pyramid framework "under the hood" to handle interfaces,
 adapters and utilities. You don't **have to** use it in your own applications. But you can.
 
 The ZCA is mainly adding elements like **interfaces**, **adapters** and **utilities** to the Python language. It
@@ -12,6 +12,13 @@
 You will find several useful resources about ZCA concepts on the internet.
 
 
+.. seealso::
+    Zope Documentations:
+    - `Components and Interfaces <http://zope.readthedocs.io/en/latest/zdgbook/ComponentsAndInterfaces.html>`_
+    - `Zope component <http://zopecomponent.readthedocs.io/en/latest/narr.html>`_
+    - `Zope interface <https://docs.zope.org/zope.interface/README.html>`_
+
+
 Local utilities
 ---------------