--- a/doc/administration.rst Tue Oct 01 02:53:54 2013 +0200
+++ b/doc/administration.rst Wed Oct 02 05:23:00 2013 +0200
@@ -2,24 +2,258 @@
administration
**************
-commandes à passer lors d'un upgrade de version
+Django et ses modules d'extensions propose de nombreuses commande d'administration. Le but est ici d'en lister les plus utiles pour l'administration de l'application.
+L`accès à ces commandes se fait par le script ``manage.py`` situee dans le répertoire ``src`` de l'application.
+Il est bien sur indispensable d'activer l'environement virtuel de l'application (cf. :ref:`deployment-virtualenv`) avant de lancer ce script.
+Le reste des commandes est documenté soit à l'adresse suivante : https://docs.djangoproject.com/en/1.5/ref/django-admin/, soit directement en invoquant la commande avec l'option ``--help`` i.e.::
+
+ cd src
+ python manage.py <commande> --help
+
+
+Commandes à passer lors d'un upgrade de version
===============================================
-syncdb --migrate
-collectstatic
+Lors d'une mise à jour de l'application les commandes suivantes sont systématiquement à lancer :
+::
+
+ python manage.py syncdb --migrate
+ python manage.py collectstatic
-commande d'administration
+La première permet la mise à jour du schéma de la base de donnée et de lancer les éventuelles migration de données.
+La deuxième sert à mettre à jour les resources statiques.
+
+
+Commande d'administration
=========================
-import_record
+Voici une liste des commandes ser vant à gérer l'import et l'export des notices (``Record``).
+
+``import_record``
+-----------------
+
+.. code-block:: bash
+
+ $ python manage.py import_record --help
+ Usage: manage.py import_record [options] record_url ...
+
+ Import p4l record rdf format
+
+ Options:
+ -v VERBOSITY, --verbosity=VERBOSITY
+ Verbosity level; 0=minimal output, 1=normal output,
+ 2=verbose output, 3=very verbose output
+ --settings=SETTINGS The Python path to a settings module, e.g.
+ "myproject.settings.main". If this is not provided, the
+ DJANGO_SETTINGS_MODULE environment variable will be
+ used.
+ --pythonpath=PYTHONPATH
+ A directory to add to the Python path, e.g.
+ "/home/djangoprojects/myproject".
+ --traceback Print traceback on exception
+ -b BATCH_SIZE, --batch-size=BATCH_SIZE
+ number of object to import in bulk operations
+ -p, --preserve preserve existing record
+ -i, --index index while importing
+ --version show program version number and exit
+ -h, --help show this help message and exit
+
+
+Cette commande importe des notices en format rdf speecifique au projet dans l'application. Elle prend comme argument une liste de chemin vers les fichiers à importer.
+Les options suivantes sont disponibles:
+
+ * ``-b BATCH_SIZE`` : contrôle la taille des lots lors de l'import.
+ Augmenter la taille des lots peut améliorer les performances lors de l'import mais augmente la consomation mémoire.
+ (valeur par défaut: 50)
+
+ * ``-p`` : ne tente pas d'effacer les notices lors de l'import.
+ L'import d'une notice existante (même identifiant) proviquera une erreur et l'arrêt de l'import
+
+ * ``-i`` : met à jour l'index des notices lors de l'import.
+
+Les points suivants sont à noter:
+
+ #. Toute erreur interrompt l'import des notices.
+
+ #. L'import d'un fichier n'estr pas transactionnel: i.e. un fichier peut être partiellement importé.
+
+ #. À un lot (option `b`) correspond une transaction de base de donnée.
+ Donc en cas d'erreur lors d'un l'import, le lot courant complet est annulé.
+
+ #. L'indexation n'est pas transactionnelle.
+ Donc en cas d'erreur d'import il est possible que certaine notice ait été indexée mais ne se retrouve pas finalement en base.
+ Il est à noté que dans ce cas, ces notices apparaîtrons dans la page de liste des notices.
-dump_record
+
+``dump_record``
+---------------
+
+.. code-block:: bash
+
+ $ python manage.py dump_record --help
+ Usage: manage.py dump_record [options] file_path...
-rebuild_index
+ Export p4l record rdf format
+
+ Options:
+ -v VERBOSITY, --verbosity=VERBOSITY
+ Verbosity level; 0=minimal output, 1=normal output,
+ 2=verbose output, 3=very verbose output
+ --settings=SETTINGS The Python path to a settings module, e.g.
+ "myproject.settings.main". If this is not provided, the
+ DJANGO_SETTINGS_MODULE environment variable will be
+ used.
+ --pythonpath=PYTHONPATH
+ A directory to add to the Python path, e.g.
+ "/home/djangoprojects/myproject".
+ --traceback Print traceback on exception
+ -l LIMIT, --limit=LIMIT
+ number of record to export. -1 is all (default)
+ -s SKIP, --skip=SKIP number of record to skip before export. default 0.
+ -b BATCH, --batch=BATCH
+ query batch default 100.
+ -j, --bzip2 bz2 compress
+ -z, --gzip gzip compress
+ --version show program version number and exit
+ -h, --help show this help message and exit
+
+
+Cette commande exporte des notices en format rdf. Elle prend comme argument le chemin d'un fichier. Si le fichier existe, celui-ci sera écrasé sans aucune confirmation.
+Lors de l'export les notices sont classées par leur identifiant (tri syntaxique ascendant).
+
+Les options suivantes sont disponibles:
+
+ * ``-b BATCH`` : tailles des lots de notices par requête de base de données. La valeur de ce paramêtre dépend des performances et capacité du serveur de base de données et de la machine d'export.
+ * ``-l LIMIT`` : nombre maximum de notices à exporter. -1 (le défaut) exporte toute les notices.
+ * ``-s SKIP`` : nombre de notice à ignorer avant de commencer l'export. O par défaut. Rappel: Lors de l'export les notices sont classées par leur identifiant (tri syntaxique ascendant).
+ Avec l'option ``-l``, cette option permet l'export des notices en lots.
+ * ``-j``, ``-z`` : permet la compression à la volée des données. La compression se fait au fur et à mesure de l'export.
+
+Les points suivants sont à noter:
+
+ #. Toute erreur interompt immédiatement l'export.
+ #. En cas d'erreur, l'export est immédiatement interrompu et le fichier produit ne sera pas valide.
+ En particulier, dans le cas où une option de compression a été activé, l'archive partielle crée peut s'avérer illisible.
+
+
+``rebuild_index``
+-----------------
+
+.. code-block:: bash
-update_index
+ $ python manage.py rebuild_index --help
+ Usage: manage.py rebuild_index [options]
+
+ Completely rebuilds the search index by removing the old data and then updating.
+
+ Options:
+ -v VERBOSITY, --verbosity=VERBOSITY
+ Verbosity level; 0=minimal output, 1=normal output,
+ 2=verbose output, 3=very verbose output
+ --settings=SETTINGS The Python path to a settings module, e.g.
+ "myproject.settings.main". If this isn't provided, the
+ DJANGO_SETTINGS_MODULE environment variable will be
+ used.
+ --pythonpath=PYTHONPATH
+ A directory to add to the Python path, e.g.
+ "/home/djangoprojects/myproject".
+ --traceback Print traceback on exception
+ -a AGE, --age=AGE Number of hours back to consider objects new.
+ -s START_DATE, --start=START_DATE
+ The start date for indexing within. Can be any
+ dateutil-parsable string, recommended to be YYYY-MM-
+ DDTHH:MM:SS.
+ -e END_DATE, --end=END_DATE
+ The end date for indexing within. Can be any dateutil-
+ parsable string, recommended to be YYYY-MM-
+ DDTHH:MM:SS.
+ -b BATCHSIZE, --batch-size=BATCHSIZE
+ Number of items to index at once.
+ -r, --remove Remove objects from the index that are no longer
+ present in the database.
+ -u USING, --using=USING
+ Update only the named backend (can be used multiple
+ times). By default all backends will be updated.
+ -k WORKERS, --workers=WORKERS
+ Allows for the use multiple workers to parallelize
+ indexing. Requires multiprocessing.
+ --noinput If provided, no prompts will be issued to the user and
+ the data will be wiped out.
+ --version show program's version number and exit
+ -h, --help show this help message and exit
+
+Commande utilisée pour reconstruire l'index Elasticsearch. L'age d'une notice est calculé à partir de sa date de mise à jour.
+Cette date est la date d'import de la notice si elle n'a pas été mise à jour dans l'application, et sa date de création si elle a été créée dans l'application.
+Cette commande est fournie par le module Django ``Haystack``. Sa documentation se trouve à l'adresse suivante : http://django-haystack.readthedocs.org/en/v2.1.0/management_commands.html
+
+``update_index``
+----------------
+
+.. code-block:: bash
-console d'administration
-========================
+ $ python manage.py update_index --help
+ Usage: manage.py update_index [options] <label label ...>
+
+ Freshens the index for the given app(s).
+
+ Options:
+ -v VERBOSITY, --verbosity=VERBOSITY
+ Verbosity level; 0=minimal output, 1=normal output,
+ 2=verbose output, 3=very verbose output
+ --settings=SETTINGS The Python path to a settings module, e.g.
+ "myproject.settings.main". If this isn't provided, the
+ DJANGO_SETTINGS_MODULE environment variable will be
+ used.
+ --pythonpath=PYTHONPATH
+ A directory to add to the Python path, e.g.
+ "/home/djangoprojects/myproject".
+ --traceback Print traceback on exception
+ -a AGE, --age=AGE Number of hours back to consider objects new.
+ -s START_DATE, --start=START_DATE
+ The start date for indexing within. Can be any
+ dateutil-parsable string, recommended to be YYYY-MM-
+ DDTHH:MM:SS.
+ -e END_DATE, --end=END_DATE
+ The end date for indexing within. Can be any dateutil-
+ parsable string, recommended to be YYYY-MM-
+ DDTHH:MM:SS.
+ -b BATCHSIZE, --batch-size=BATCHSIZE
+ Number of items to index at once.
+ -r, --remove Remove objects from the index that are no longer
+ present in the database.
+ -u USING, --using=USING
+ Update only the named backend (can be used multiple
+ times). By default all backends will be updated.
+ -k WORKERS, --workers=WORKERS
+ Allows for the use multiple workers to parallelize
+ indexing. Requires multiprocessing.
+ --version show program's version number and exit
+ -h, --help show this help message and exit
-creation des groupes/utilisateur
\ No newline at end of file
+Commande utilisée pour mettre à jour l'index Elasticsearch. L'age d'une notice est calculé à partir de sa date de mise à jour.
+Cette date est la date d'import de la notice si elle n'a pas été mise à jour dans l'application, et sa date de création si elle a été créée dans l'application.
+Cette commande est fournie par le module Django ``Haystack``. Sa documentation se trouve à l'adresse suivante : http://django-haystack.readthedocs.org/en/v2.1.0/management_commands.html
+
+
+console d'administration / gestion des utilisateurs
+===================================================
+
+Le back-office offre une console d'administration donnant accès en particulier à la gestion des utilisateurs.
+On y accède par le lien ``admin`` dans l'en-tête des pages si on est connecté en tant qu'administrateur ou bien en allant directement à l'adresse ``<racine du site>/p4l/admin/``.
+
+
+L'administration des utilisateurs se fait à l'adresse suivante : ``<racine du site>/p4l/admin/p4l/user/``.
+
+L'administration des groupes d'utilisateurs se fait à l'adresse suivante: ``<racine du site>/p4l/admin/auth/group/``.
+
+
+L'interface de gestion est assez classique et ne présente pas de difficulté particulière.
+
+
+Pour qu'un utilisateur puisse créer et mettre à jour des enregistrements (``Records``), il faut qu'il ait les permissions d'ajout, de modification et d'effacement de tous les objets de l'application ``p4l``.
+Le champ ``Permission de l'utilisateur`` doit donc comporter toutes les entrées de la forme ``p4l | <object> | <permission>``.
+
+
+Pour faciliter la gestion de ces permissions, le plus simple est de créer un groupe ``utilisateurs``. On affectera à ce groupe toutes les permissions sur les objects de l'application ``p4l``.
+il suffira ensuite de mettre les utilisateurs dans ce groupe (champ ``Groupes`` dans l'interface d'édition des utilisateurs). L'utilisateur héritera alors des parmissions du groupe.
+
--- a/doc/deploiement.rst Tue Oct 01 02:53:54 2013 +0200
+++ b/doc/deploiement.rst Wed Oct 02 05:23:00 2013 +0200
@@ -5,7 +5,7 @@
La documentation de déploiement suivante est sur la base d'une Debian 7.0 (Wheezy).
-options de déployement
+options de déploiement
======================
De nombreuses options de déploiement existe. Les plus populaires sont décrite sur le site Django à l'adresse suivante : https://docs.djangoproject.com/en/1.5/howto/deployment/.
@@ -33,7 +33,11 @@
C'est la version par défaut de la distribution debian 7. Si python n'est pas déjà installé::
- apt-get install python
+ apt-get install python
+
+Dans tous les cas, il faut installer les outils de développement python::
+
+ apt-get install python-dev
Apache et mod-wsgi
@@ -53,6 +57,7 @@
::
apt-get install postgresql
+ apt-get install postgresql-server-dev-9.1
Elasticsearch
@@ -88,9 +93,12 @@
- ``run`` : répertoire contenant les logs de l'application
Django fournit un utilitaire en ligne de commande permettant l'execution de tâche d'administration. La documentation se trouve à l'adresse suivante : https://docs.djangoproject.com/en/1.5/ref/django-admin/ .
-cet
+
+Les resources statiques sont tous les fichiers additionnels qui constituent un site web : images, javascript, css,... .
+.. _deployment-virtualenv:
+
Virtualenv
----------
@@ -126,7 +134,7 @@
CREATE DATABASE p4l
WITH ENCODING='UTF8'
- OWNER=iri
+ OWNER=<db user>
TEMPLATE=template0
LC_COLLATE='en_US.UTF-8'
LC_CTYPE='en_US.UTF-8'
@@ -143,7 +151,7 @@
python manage.py createsuperuser
-deployement des resources statiques
+Déploiement des resources statiques
-----------------------------------
Le déploiement des resources statiques du site se font à l'aide de la commande suivante:
--- a/src/p4l/management/commands/dump_record.py Tue Oct 01 02:53:54 2013 +0200
+++ b/src/p4l/management/commands/dump_record.py Wed Oct 02 05:23:00 2013 +0200
@@ -76,7 +76,7 @@
dest= 'batch',
type='int',
default=100,
- help= 'query batch default 500.'
+ help= 'query batch default 100.'
),
make_option('-j', '--bzip2',
dest= 'bzip2',
@@ -130,16 +130,18 @@
open_method = None
open_args = []
+ decode_method = lambda s: s
if bzip2:
open_method = bz2.BZ2File
- open_args = [filepath, 'wb', 9]
+ open_args = [filepath, 'wb', 9]
elif gzip_opt:
open_method = gzip.GzipFile
open_args = [filepath, 'wb', 9]
else:
open_method = codecs.open
open_args = [filepath, 'wb', "utf-8"]
+ decode_method = lambda s: s.decode("utf-8")
total_records = qs.count()
@@ -162,7 +164,7 @@
if "<iiep:Record" in line:
do_write = True
if do_write:
- dest_file.write(line.decode("utf-8"))
+ dest_file.write(decode_method(line))
if "</iiep:Record>" in line:
break
--- a/src/p4l/mapping/constants.py Tue Oct 01 02:53:54 2013 +0200
+++ b/src/p4l/mapping/constants.py Wed Oct 02 05:23:00 2013 +0200
@@ -33,7 +33,7 @@
from rdflib.graph import Graph
-from rdflib.namespace import Namespace, RDF
+from rdflib.namespace import Namespace, RDF, RDFS
DCT = Namespace("http://purl.org/dc/terms/")
@@ -43,7 +43,8 @@
GRAPH_NAMESPACES = {
'iiep': IIEP,
'dct': DCT,
- 'rdf': RDF
+ 'rdf': RDF,
+ 'rdfs': RDFS
}
def get_empty_graph():