[F] views: fix 2 unicode errors
1. You can now use valid unicode strings in ValidationError exception.
Previously, if 'err' contains unicode, UnicodeDecodeError was raised by format_errors()
>>> templstr = '<li>%s</li>\n'
>>> e = ValidationError(None, {None: u'oué, une exception en unicode!'})
>>> templstr % e
'<li>None (None): ou\xc3\xa9, une exception en unicode!</li>\n'
>>> templstr = u'<li>%s</li>\n'
>>> templstr % e
u'<li>None (None): ou\xe9, une exception en unicode!</li>\n'
2. The message of an Exception can contains unicode. But it now properly managed by “informal” string representation.
We can easily fix the problem by using the Exception.message attribute that still contains the original message.
>>> a = AssertionError(u'séfdsdf')
>>> a.message
u's\xe9fdsdf'
>>> str(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 1: ordinal not in range(128)
>>> a = ValueError(u'fsdfsdéfsdfs')
>>> str(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 6: ordinal not in range(128)
>>> a
ValueError(u'fsdfsd\xe9fsdfs',)
>>> unicode(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 6: ordinal not in range(128)
>>> a.message
u'fsdfsd\xe9fsdfs'
Mise en place d'un environnement de dveloppement CubicWeb
=======================================================
.. include:: sect_mercurial.txt
.. include:: sect_installation.txt
.. include:: sect_cubicweb-ctl.txt
Cration d'un composant
-----------------------
Commenons par crer un squelette qui nous servira de base au dveloppement de
notre composant ou application ::
cd ~/hg
cubicweb-ctl newtemplate moncomposant
# rpondre aux questions
hg init moncomposant
cd moncomposant
hg add .
hg ci
A partir de l si tout va bien, votre composant devrait tre affich par
`cubicweb-ctl list` dans la section *Avaible components*, si ce n'est pas le cas
revoir la section `Configuration de l'environnement`_.
Cration d'une instance de dveloppement
----------------------------------------
Maintenant que nous avons notre squelette de modle, on peut en crer une
instance afin de voir ce que tout a donne dans un simple navigateur web.
Nous allons utiliser une configuration `all-in-one` afin de simplifier les
choses ::
cubicweb-ctl create all-in-one moncomposant moninstance
Une srie de questions vont tre poses, la rponse par dfaut est gnralement
suffisante. Vous pourrez de toute faon modifier la configuration par la suite
en ditant les fichiers gnrs. Lorsqu'un login/mot de passe d'accs au sgbd
vous est demand, il est recommand d'utilis l'utilisateur cr lors de la
`Configuration Postgres`_.
Il est important de distinguer ici l'utilisateur utilis pour accder au sgbd,
et l'utilisateur utilis pour s'authentifier dans l'application cubicweb. Lorsque
l'application cubicweb dmarre, elle utilise le login/mot de passe sgdb pour
rcuprer le schma et grer les transactions bas-niveau. En revanche, lorsque
`cubicweb-ctl create` vous demande un login/mot de passe `manager` pour cubicweb, il
s'agit d'un utilisateur qui sera cr dans l'application `cubicweb` pour pouvoir
s'y connecter dans un premier temps et l'administrer. Il sera par la suite possible
de crer des utilisateurs diffrents pour l'application.
A l'issue de cette commande, la dfinition de votre instance se trouve dans
*~/etc/cubicweb.d/moninstance/*. Pour la lancer, il suffit de taper ::
cubicweb-ctl start -D moninstance
L'option `-D` indique le *debug mode* : l'instance ne passe pas en mode serveur
et ne se dconnecte pas du terminal, ce qui simplifie le dpannage en cas de non
dmarrage de l'instance. Vous pouvez ensuite allez voir ce que a donne en
pointant votre navigateur sur l'url `http://localhost:8080` (le n de port
dpend de votre configuration). Pour vous authentifier vous pouvez utiliser le
login/mot de passe administrateur que vous avez spcifi lors de la cration de
l'instance.
Pour arrter l'instance, un Ctrl-C dans la fentre o vous l'avez lanc
suffit. Si l'option `-D` a t omise, il faut taper ::
cubicweb-ctl stop moninstance
Voil, tout est en place pour dmarrer le dveloppement du modle...
Utilisation de cubicweb-liveserver
-------------------------------
Afin de tester rapidement un nouveau composant, on peut galement
utiliser le script `cubicweb-liveserver` qui permet de crer une
application en mmoire (utilisant une base de donnes SQLite par
dfaut) et la rendre accessible via un serveur web::
cubicweb-liveserver moncomposant
ou bien, pour utiliser une base de donnes existante (SQLite ou postgres)::
cubicweb-liveserver -s monfichier_sources moncomposant