--- a/appobject.py Wed Aug 12 18:40:52 2009 +0200
+++ b/appobject.py Wed Aug 12 19:09:32 2009 +0200
@@ -465,7 +465,7 @@
"""short cut to get an completed entity instance for a particular
row (all instance's attributes have been fetched)
"""
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
entity.complete(skip_bytes=skip_bytes)
return entity
--- a/common/mixins.py Wed Aug 12 18:40:52 2009 +0200
+++ b/common/mixins.py Wed Aug 12 19:09:32 2009 +0200
@@ -299,7 +299,7 @@
"""handle an infinite recursion safety belt"""
if done is None:
done = set()
- entity = view.entity(row, col)
+ entity = view.rset.get_entity(row, col)
if entity.eid in done:
msg = entity.req._('loop in %(rel)s relation (%(eid)s)') % {
'rel': entity.tree_attribute,
--- a/doc/book/en/development/devweb/views.rst Wed Aug 12 18:40:52 2009 +0200
+++ b/doc/book/en/development/devweb/views.rst Wed Aug 12 19:09:32 2009 +0200
@@ -124,7 +124,7 @@
__select__ =implements('Blog')
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
self.w(u'<h1>%s</h1>' % entity.title)
self.w(u'<p>published on %s in category %s</p>' % \
(entity.publish_date.strftime('%Y-%m-%d'), entity.category))
@@ -155,7 +155,7 @@
__select__ =implements('Blog')
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
self.w(u'<h1>%s</h1>' % entity.title)
self.w(u'<p>%s</p>' % entity.description)
rset = self.req.execute('Any E WHERE E entry_of B, B eid "%s"' % entity.eid)
--- a/doc/book/en/intro/tutorial/create-cube.rst Wed Aug 12 18:40:52 2009 +0200
+++ b/doc/book/en/intro/tutorial/create-cube.rst Wed Aug 12 19:09:32 2009 +0200
@@ -238,7 +238,7 @@
return entity.view('reledit', rtype='content_format')
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
# display entity attributes with prefixes
self.w(u'<h1>%s</h1>' % entity.title)
--- a/doc/book/fr/01-introduction.fr.txt Wed Aug 12 18:40:52 2009 +0200
+++ b/doc/book/fr/01-introduction.fr.txt Wed Aug 12 19:09:32 2009 +0200
@@ -6,13 +6,13 @@
===========================
`CubicWeb` nous permet de développer des instances d'applications web
-basées sur un ou plusieurs `cube`.
+basées sur un ou plusieurs `cube`.
-Ce à quoi nous réferrons en parlant de `cube` est un modèle définissant
-des types de données et des vues. Un `cube` est un composant re-utilisable
+Ce à quoi nous réferrons en parlant de `cube` est un modèle définissant
+des types de données et des vues. Un `cube` est un composant re-utilisable
regroupé avec d'autres cubes sur le système de fichiers.
-Un `instance` réferre à une installation spécifique d'un ou plusieurs cubes
+Un `instance` réferre à une installation spécifique d'un ou plusieurs cubes
où sont regroupés tous les fichiers de configuration de l'application web finale.
Dans ce document, nous allons vous montrer comment créer un cube et l'utiliser
@@ -32,7 +32,7 @@
|
|-- data/
| |-- cubes.blog.css
- | |-- cubes.blog.js
+ | |-- cubes.blog.js
| |-- external_resources
|
|-- debian/
@@ -77,7 +77,7 @@
|-- views.py
Toute modification apportée à votre modele de données devra
-etre effectué dans ce répertoire.
+etre effectué dans ce répertoire.
@@ -102,17 +102,17 @@
title = String(required=True, fulltextindexed=True, maxsize=256)
publish_date = Date(default='TODAY')
content = String(required=True, fulltextindexed=True)
- entry_of = SubjectRelation('Blog', cardinality='?*')
+ entry_of = SubjectRelation('Blog', cardinality='?*')
-Un ``Blog`` a un titre et une description. Le titre est une chaîne
+Un ``Blog`` a un titre et une description. Le titre est une chaîne
de caractères requise par la classe parente EntityType et ne doit
-pas excéder 50 caractères. La description est une chaîne de
+pas excéder 50 caractères. La description est une chaîne de
caractères sans contraintes.
Une ``BlogEntry`` a un titre, une date de publication et du texte
-étant son contenu. Le titre est une chaîne de caractères qui ne
+étant son contenu. Le titre est une chaîne de caractères qui ne
doit pas excéder 100 caractères. La date de publication est de type Date et a
-pour valeur par défaut TODAY, ce qui signifie que lorsqu'une
+pour valeur par défaut TODAY, ce qui signifie que lorsqu'une
``BlogEntry`` sera créée, sa date de publication sera la date
courante a moins de modifier ce champ. Le texte est une chaîne de
caractères qui sera indexée en plein texte et sans contraintes.
@@ -121,7 +121,7 @@
relie à un ``Blog``. La cardinalité ``?*`` signifie que BlogEntry
peut faire partie de zero a un Blog (``?`` signifie `zero ou un`) et
qu'un Blog peut avoir une infinité de BlogEntry (``*`` signifie
-`n'importe quel nombre incluant zero`).
+`n'importe quel nombre incluant zero`).
Par soucis de complétude, nous rappellerons que ``+`` signifie
`un ou plus`.
@@ -130,7 +130,7 @@
--------------------
::
-
+
cubicweb-ctl create blog blogdemo
Cette commande va créer un répertoire ``~/etc/cubicweb.d/blogdemo``
@@ -150,7 +150,7 @@
Vous pouvez à présent accéder à votre application web vous permettant de
créer des blogs et d'y poster des messages en visitant l'URL http://localhost:8080/.
Un premier formulaire d'authentification va vous être proposé. Par défaut,
-l'application n'autorisera pas d'utilisateur anonyme à accéder a votre
+l'application n'autorisera pas d'utilisateur anonyme à accéder a votre
application. Vous devrez donc utiliser l'utilisateur administrateur que
vous aurez crée lors de l'initialisation de votre base de données via
``cubicweb-ctl create``.
@@ -166,7 +166,7 @@
Rappelez-vous que pour le moment, tout a été géré par la plate-forme
`CubicWeb` et que la seule chose qui a été fournie est le schéma de
-données.
+données.
Créons des entités
------------------
@@ -186,7 +186,7 @@
:alt: from to create blog
En cliquant sur le logo situé dans le coin gauche de la fenêtre,
-vous allez être redirigé vers la page d'accueil. Ensuite, si vous allez
+vous allez être redirigé vers la page d'accueil. Ensuite, si vous allez
sur le lien Blog, vous devriez voir la liste des entités Blog, en particulier
celui que vous venez juste de créer ``Tech-Blog``.
@@ -212,7 +212,7 @@
un peut de texte avant de ``Valider``. Vous venez d'ajouter un article
sans avoir précisé à quel Blog il appartenait. Dans la colonne de gauche
se trouve une boite intitulé ``actions``, cliquez sur le menu ``modifier``.
-Vous êtes de retour sur le formulaire d'édition de l'article que vous
+Vous êtes de retour sur le formulaire d'édition de l'article que vous
venez de créer, à ceci près que ce formulaire a maintenant une nouvelle
section intitulée ``ajouter relation``. Choisissez ``entry_of`` dans ce menu,
cela va faire apparaitre une deuxième menu déroulant dans lequel vous
@@ -225,7 +225,7 @@
:alt: editing a blog entry to add a relation to a blog
Validez vos modifications en cliquant sur ``Valider``. L'entité article
-qui est listée contient maintenant un lien vers le Blog auquel il
+qui est listée contient maintenant un lien vers le Blog auquel il
appartient, ``MyLife``.
.. image:: images/cbw-detail-one-blogentry.fr.png
@@ -248,7 +248,7 @@
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Une vue est une classe Python qui inclut:
-
+
- un identifiant (tous les objets dans `CubicWeb` sont listés
dans un registre et cet identifiant est utilisé comme la clé)
@@ -262,32 +262,32 @@
des entités que nous cherchons à appliquer. `CubicWeb` utilise un
sélecteur qui permet de calculer un score et d'identifier la vue
la plus adaptée au `result set` que nous voulons afficher. La librarie
-standard des sélecteurs se trouve dans ``cubicweb.common.selector``
-et une librairie des méthodes utilisées pour calculer les scores
+standard des sélecteurs se trouve dans ``cubicweb.common.selector``
+et une librairie des méthodes utilisées pour calculer les scores
est dans ``cubicweb.vregistry.vreq``.
Il est possible de définir plusieurs vues ayant le meme identifiant
-et d'y associer des sélecteurs et des filtres afin de permettre à
-l'application de s'adapter au mieux aux données que nous avons
+et d'y associer des sélecteurs et des filtres afin de permettre à
+l'application de s'adapter au mieux aux données que nous avons
besoin d'afficher. Nous verrons cela plus en détails dans :ref:`DefinitionVues`.
On peut citer l'exemple de la vue nommée ``primary`` qui est celle utilisée
-pour visualiser une entité seule. Nous allons vous montrer comment modifier
+pour visualiser une entité seule. Nous allons vous montrer comment modifier
cette vue.
Modification des vues
~~~~~~~~~~~~~~~~~~~~~
Si vous souhaitez modifier la manière dont est rendue un article (`Blogentry`),
-vous devez surcharger la vue ``primary`` définie dans le module ``views`` de
+vous devez surcharger la vue ``primary`` définie dans le module ``views`` de
votre cube, ``cubes/blog/views.py``.
Nous pourrions par exemple ajouter devant la date de publication un préfixe
indiquant que la date visualisée est la date de publication.
-Pour cela appliquez les modifications suivantes:
+Pour cela appliquez les modifications suivantes:
-::
+::
from cubicweb.web.views import baseviews
@@ -303,13 +303,13 @@
return entity.view('reledit', rtype='content_format')
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
# display entity attributes with prefixes
self.w(u'<h1>%s</h1>' % entity.title)
self.w(u'<p>published on %s</p>' % entity.publish_date.strftime('%Y-%m-%d'))
self.w(u'<p>%s</p>' % entity.content)
-
+
# display relations
siderelations = []
if self.main_related_section:
@@ -329,10 +329,10 @@
-Le code que nous avons modifié définit une vue primaire pour une entité de
-type `BlogEntry`.
+Le code que nous avons modifié définit une vue primaire pour une entité de
+type `BlogEntry`.
-Etant donné que les vues sont appliquées sur des `result sets` et que
+Etant donné que les vues sont appliquées sur des `result sets` et que
les `result sets` peuvent être des tableaux de données, il est indispensable
de récupérer l'entité selon ses coordonnées (row,col).
--- a/doc/book/fr/05-define-views.fr.txt Wed Aug 12 18:40:52 2009 +0200
+++ b/doc/book/fr/05-define-views.fr.txt Wed Aug 12 19:09:32 2009 +0200
@@ -20,17 +20,17 @@
* `cell_call(row, col, **kwargs)`, appelle la vue pour une cellule donnée d'un
result set
* `url()`, retourne l'url permettant d'obtenir cette vue avec le result set en
- cours
+ cours
* `view(__vid, rset, __fallback_vid=None, **kwargs)`, appelle la vue
d'identificant `__vid` sur le result set donné. Il est possible de données un
identificant de vue de "fallback" qui sera utilisé si la vue demandée n'est
pas applicable au result set
-
+
* `wview(__vid, rset, __fallback_vid=None, **kwargs)`, pareil que `view` mais
passe automatiquement le flux en argument
-
+
* `html_headers()`, retourne une liste d'en-tête HTML à placer par le template
- principal
+ principal
* `page_title()`, retourne le titre à utiliser dans l'en tête HTML `title`
@@ -55,7 +55,7 @@
[FROM-LAX-BOOK]
-Tip: when modifying views, you do not need to restart the local
+Tip: when modifying views, you do not need to restart the local
server. Just save the file in your editor and reload the page in your
browser to see the changes.
@@ -63,7 +63,7 @@
- an identifier (all objects in `LAX` are entered in a registry
and this identifier will be used as a key)
-
+
- a filter to select the resulsets it can be applied to
`LAX` provides a lot of standard views, for a complete list, you
@@ -83,14 +83,14 @@
05. accepts = ('BlogEntry',)
06.
07. def cell_call(self, row, col):
- 08. entity = self.entity(row, col)
+ 08. entity = self.rset.get_entity(row, col)
09. self.w(u'<h1>%s</h1>' % entity.title)
10. self.w(u'<p>published on %s in category %s</p>' % \
11. (entity.publish_date.strftime('%Y-%m-%d'), entity.category))
12. self.w(u'<p>%s</p>' % entity.text)
The above source code defines a new primary view (`line 03`) for
-``BlogEntry`` (`line 05`).
+``BlogEntry`` (`line 05`).
Since views are applied to resultsets and resulsets can be tables of
data, it is needed to recover the entity from its (row,col)
@@ -108,11 +108,11 @@
Let us now improve the primary view of a blog ::
01. class BlogPrimaryView(baseviews.PrimaryView):
- 02.
+ 02.
03. accepts = ('Blog',)
04.
05. def cell_call(self, row, col):
- 06. entity = self.entity(row, col)
+ 06. entity = self.rset.get_entity(row, col)
07. self.w(u'<h1>%s</h1>' % entity.title)
08. self.w(u'<p>%s</p>' % entity.description)
09. rset = self.req.execute('Any E WHERE E entry_of B, B eid "%s"' % entity.eid)
@@ -127,9 +127,9 @@
about the schema and infer that such entities have to be of the
``BlogEntry`` kind and retrieves them.
-The request returns a selection of data called a resultset. At
+The request returns a selection of data called a resultset. At
`line 10` the view 'primary' is applied to this resultset to output
-HTML.
+HTML.
**This is to be compared to interfaces and protocols in object-oriented
languages. Applying a given view to all the entities of a resultset only
@@ -159,7 +159,7 @@
* create view "blogentry table" with title, publish_date, category
-We will show that by default the view that displays
+We will show that by default the view that displays
"Any E,D,C WHERE E publish_date D, E category C" is the table view.
Of course, the same can be obtained by calling
self.wview('table',rset)
@@ -244,4 +244,4 @@
----------------------------------
Certains navigateurs (dont firefox) n'aime pas les `<div>` vides (par vide
j'entend sans contenu dans la balise, il peut y avoir des attributs), faut
-toujours mettre `<div></div>` même s'il n'y a rien dedans, et non `<div/>`.
+toujours mettre `<div></div>` même s'il n'y a rien dedans, et non `<div/>`.
--- a/doc/book/fr/20-01-intro.fr.txt Wed Aug 12 18:40:52 2009 +0200
+++ b/doc/book/fr/20-01-intro.fr.txt Wed Aug 12 19:09:32 2009 +0200
@@ -37,7 +37,7 @@
données manipulées. La syntaxe de la définition est la même que celle
proposée par `Google AppEngine` mais il faut remplacer la ligne
d'import::
-
+
from google.appengine.ext import db
par celle-ci::
@@ -48,7 +48,7 @@
Un exemple de schéma de données pour un ``Blog`` pourrait être::
from ginco.goa import db
-
+
class BlogEntry(db.Model):
# un titre à donner à l'entrée
title = db.StringProperty(required=True)
@@ -57,8 +57,8 @@
# le contenu de l'entrée
content = db.TextProperty()
# une entrée peut en citer une autre
- cites = db.SelfReferenceProperty()
-
+ cites = db.SelfReferenceProperty()
+
Personnalisation des vues
-------------------------
@@ -75,7 +75,7 @@
- un identifiant (tous les objets dans `LAX` sont enregistrés
dans un registre et cet identifiant sert de clé pour y retrouver
la vue)
-
+
- une description des types de données auxquels elle s'applique
Il existe dans `LAX` des vues prédéfinies et utilisées par le moteur
@@ -87,17 +87,17 @@
Par exemple, si on souhaite modifier la page principale d'une entrée de
blog, il faut surcharger la vue ``primary`` des objets ``BlogEntry`` dans
le fichier ``myapp/views.py``::
-
+
from ginco.web.views import baseviews
-
+
class BlogEntryPrimaryView(baseviews.PrimaryView):
accepts = ('BlogEntry',)
-
+
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
self.w(u'<h1>%s</h1>' % entity.title)
self.w(u'<div>%s</div>' entity.content)
-
+
Génération du graphique de schéma
---------------------------------
@@ -105,13 +105,13 @@
Il existe une vue ``schema`` qui permet d'afficher un graphique
représantant les différents types d'entités définis dans le schéma
ainsi que les relations entre ces types. Ce graphique doit être généré
-statiquement. Le script à utiliser pour générer ce schéma est
+statiquement. Le script à utiliser pour générer ce schéma est
dans ``myapp/tools``. Ce script nécessite d'avoir accès aux
bibliothèques fournies par le SDK de ``Google AppEngine``. Il faut
donc modifier son PYTHONPATH::
$ export PYTHONPATH=GAE_ROOT/google:GAE_ROOT/lib/yaml
- $ python tools/generate_schema_img.py
+ $ python tools/generate_schema_img.py
Génération des fichiers de traduction
--- a/doc/book/fr/20-04-develop-views.fr.txt Wed Aug 12 18:40:52 2009 +0200
+++ b/doc/book/fr/20-04-develop-views.fr.txt Wed Aug 12 19:09:32 2009 +0200
@@ -13,7 +13,7 @@
- an identifier (all objects in `LAX` are entered in a registry
and this identifier will be used as a key)
-
+
- a filter to select the resulsets it can be applied to
`LAX` provides a lot of standard views, for a complete list, you
@@ -25,13 +25,13 @@
override the view ``primary`` in ``BlogDemo/views.py`` ::
from ginco.web.views import baseviews
-
+
class BlogEntryPrimaryView(baseviews.PrimaryView):
accepts = ('BlogEntry',)
-
+
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
self.w(u'<h1>%s</h1>' % entity.title)
self.w(u'<div>%s</div>' % entity.publish_date)
self.w(u'<div>%s</div>' % entity.category)
@@ -91,7 +91,7 @@
[WRITE ME]
-* show how urls are mapped to selections and views and explain URLRewriting
+* show how urls are mapped to selections and views and explain URLRewriting
Security
=========
--- a/goa/appobjects/components.py Wed Aug 12 18:40:52 2009 +0200
+++ b/goa/appobjects/components.py Wed Aug 12 19:09:32 2009 +0200
@@ -28,7 +28,7 @@
__select__ = one_line_rset() & match_search_state('linksearch') & accept
def cell_call(self, row, col):
- entity = self.entity(0, 0)
+ entity = self.rset.get_entity(0, 0)
role, eid, rtype, etype = self.req.search_state[1]
assert entity.eid == typed_eid(eid)
rset = entity.unrelated(rtype, etype, role, ordermethod='fetch_order')
--- a/goa/doc/quickstart.txt Wed Aug 12 18:40:52 2009 +0200
+++ b/goa/doc/quickstart.txt Wed Aug 12 19:09:32 2009 +0200
@@ -1,3 +1,5 @@
+.. -*- coding: utf-8 -*-
+
Introduction
=============
@@ -11,7 +13,7 @@
application.
*result set*
- objet qui encaspule les résultats d'une requête adressée à l'entrepôt
+ objet qui encaspule les résultats d'une requête adressée à l'entrepôt
de données et des informations sur cette requête.
*vue*
@@ -23,8 +25,8 @@
Définition d'une application de Blog
====================================
-La première chose à faire est de copier le squelette depuis le répertoire
-``lax/skel`` vers un nouveau répertoire qui sera votre application
+La première chose à faire est de copier le squelette depuis le répertoire
+``lax/skel`` vers un nouveau répertoire qui sera votre application
``Google AppEngine``::
$ cp -r lax/skel myapp
@@ -36,7 +38,7 @@
données manipulées. La syntaxe de la définition est la même que celle
proposée par `Google AppEngine`_ mais il faut remplacer la ligne
d'import::
-
+
from google.appengine.ext import db
par celle-ci::
@@ -47,7 +49,7 @@
Un exemple de schéma de données pour un ``Blog`` pourrait être::
from cubicweb.goa import db
-
+
class Blog(db.Model):
# un titre à donner à l'entrée
title = db.StringProperty(required=True)
@@ -56,15 +58,15 @@
# le contenu de l'entrée
content = db.TextProperty()
# une entrée peut en citer une autre
- cites = db.SelfReferenceProperty()
-
+ cites = db.SelfReferenceProperty()
+
Personnalisation des vues
-------------------------
``LAX`` permet de générer directement, à partir de la définition
-du schéma, des vues de consultation, d'ajout et de modification
-pour tous les types de donées manipulés. Il est toutefois
+du schéma, des vues de consultation, d'ajout et de modification
+pour tous les types de donées manipulés. Il est toutefois
généralement souhaitable de personnaliser les vues de consultations.
Dans ``LAX``, les vues sont représentées par des classes Python.
@@ -74,7 +76,7 @@
- un identifiant (tous les objets dans ``LAX`` sont enregistrés
dans un registre et cet identifiant sert de clé pour y retrouver
la vue)
-
+
- une description des types de données auxquels elle s'applique
Il existe dans ``LAX`` des vues prédéfinies et utilisées par le moteur
@@ -86,17 +88,17 @@
Par exemple, si on souhaite modifier la page principale d'une entrée de
blog, il faut surcharger la vue ``primary`` des objets ``Blog`` dans
le fichier ``myapp/views.py``::
-
+
from cubicweb.web.views import baseviews
-
+
class BlogPrimaryView(baseviews.PrimaryView):
accepts = ('Blog',)
-
+
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
self.w(u'<h1>%s</h1>' % entity.title)
self.w(u'<div>%s</div>' entity.content)
-
+
Génération du graphique de schéma
---------------------------------
@@ -104,13 +106,13 @@
Il existe une vue ``schema`` qui permet d'afficher un graphique
représantant les différents types d'entités définis dans le schéma
ainsi que les relations entre ces types. Ce graphique doit être généré
-statiquement. Le script à utiliser pour générer ce schéma est
+statiquement. Le script à utiliser pour générer ce schéma est
dans ``myapp/tools``. Ce script nécessite d'avoir accès aux
bibliothèques fournies par le SDK de ``Google AppEngine``. Il faut
donc modifier son PYTHONPATH::
$ export PYTHONPATH=GAE_ROOT/google:GAE_ROOT/lib/yaml
- $ python tools/generate_schema_img.py
+ $ python tools/generate_schema_img.py
Génération des fichiers de traduction
--- a/goa/skel/views.py Wed Aug 12 18:40:52 2009 +0200
+++ b/goa/skel/views.py Wed Aug 12 19:09:32 2009 +0200
@@ -19,7 +19,7 @@
accepts = ('BlogEntry',)
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
self.w(u'<h1>%s</h1>' % entity.dc_title())
entity.view('metadata', w=self.w)
self.w(entity.printable_value('text'))
--- a/sobjects/notification.py Wed Aug 12 18:40:52 2009 +0200
+++ b/sobjects/notification.py Wed Aug 12 19:09:32 2009 +0200
@@ -143,7 +143,7 @@
return finder.recipients()
def subject(self):
- entity = self.entity(self.row or 0, self.col or 0)
+ entity = self.rset.get_entity(self.row or 0, self.col or 0)
subject = self.req._(self.message)
etype = entity.dc_type()
eid = entity.eid
@@ -156,7 +156,7 @@
return self.req.actual_session().user.login
def context(self, **kwargs):
- entity = self.entity(self.row or 0, self.col or 0)
+ entity = self.rset.get_entity(self.row or 0, self.col or 0)
for key, val in kwargs.iteritems():
if val and isinstance(val, unicode) and val.strip():
kwargs[key] = self.req._(val)
@@ -187,7 +187,7 @@
lang = self.vreg.property_value('ui.language')
recipients = zip(recipients, repeat(lang))
if self.rset is not None:
- entity = self.entity(self.row or 0, self.col or 0)
+ entity = self.rset.get_entity(self.row or 0, self.col or 0)
# if the view is using timestamp in message ids, no way to reference
# previous email
if not self.msgid_timestamp:
@@ -284,7 +284,7 @@
"""
def context(self, **kwargs):
- entity = self.entity(self.row or 0, self.col or 0)
+ entity = self.rset.get_entity(self.row or 0, self.col or 0)
content = entity.printable_value(self.content_attr, format='text/plain')
if content:
contentformat = getattr(entity, self.content_attr + '_format', 'text/rest')
@@ -292,7 +292,7 @@
return super(ContentAddedView, self).context(content=content, **kwargs)
def subject(self):
- entity = self.entity(self.row or 0, self.col or 0)
+ entity = self.rset.get_entity(self.row or 0, self.col or 0)
return u'%s #%s (%s)' % (self.req.__('New %s' % entity.e_schema),
entity.eid, self.user_login())
--- a/web/box.py Wed Aug 12 18:40:52 2009 +0200
+++ b/web/box.py Wed Aug 12 19:09:32 2009 +0200
@@ -150,7 +150,7 @@
__select__ = EntityBoxTemplate.__select__ & partial_has_related_entities()
def cell_call(self, row, col, **kwargs):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
limit = self.req.property_value('navigation.related-limit') + 1
role = get_role(self)
self.w(u'<div class="sideBox">')
@@ -169,7 +169,7 @@
def cell_call(self, row, col, view=None, **kwargs):
self.req.add_js('cubicweb.ajax.js')
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
box = SideBoxWidget(display_name(self.req, self.rtype), self.id)
related = self.related_boxitems(entity)
unrelated = self.unrelated_boxitems(entity)
--- a/web/views/ajaxedit.py Wed Aug 12 18:40:52 2009 +0200
+++ b/web/views/ajaxedit.py Wed Aug 12 19:09:32 2009 +0200
@@ -31,7 +31,7 @@
self.rtype = rtype or self.req.form['rtype']
self.target = target or self.req.form['target']
self.etype = etype or self.req.form.get('etype')
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
rschema = self.schema.rschema(self.rtype)
if not self.etype:
if self.target == 'object':
--- a/web/views/baseviews.py Wed Aug 12 18:40:52 2009 +0200
+++ b/web/views/baseviews.py Wed Aug 12 19:09:32 2009 +0200
@@ -110,7 +110,7 @@
"""the secondary view for an entity
secondary = icon + view(oneline)
"""
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
self.w(u' ')
self.wview('oneline', self.rset, row=row, col=col)
@@ -122,7 +122,7 @@
def cell_call(self, row, col):
"""the one line view for an entity: linked text view
"""
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
self.w(u'<a href="%s">' % xml_escape(entity.absolute_url()))
self.w(xml_escape(self.view('text', self.rset, row=row, col=col)))
self.w(u'</a>')
@@ -150,7 +150,7 @@
self.w(u"\n")
def cell_call(self, row, col=0, **kwargs):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
self.w(cut(entity.dc_title(),
self.req.property_value('navigation.short-line-size')))
@@ -162,7 +162,7 @@
def cell_call(self, row, col):
_ = self.req._
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
self.w(u'<div class="metadata">')
if self.show_eid:
self.w(u'#%s - ' % entity.eid)
@@ -185,7 +185,7 @@
id = 'textincontext'
title = None # not listed as a possible view
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
self.w(entity.dc_title())
@@ -193,7 +193,7 @@
id = 'textoutofcontext'
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
self.w(entity.dc_long_title())
@@ -201,7 +201,7 @@
id = 'incontext'
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
desc = cut(entity.dc_description(), 50)
self.w(u'<a href="%s" title="%s">' % (
xml_escape(entity.absolute_url()), xml_escape(desc)))
@@ -214,7 +214,7 @@
id = 'outofcontext'
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
desc = cut(entity.dc_description(), 50)
self.w(u'<a href="%s" title="%s">' % (
xml_escape(entity.absolute_url()), xml_escape(desc)))
--- a/web/views/editforms.py Wed Aug 12 18:40:52 2009 +0200
+++ b/web/views/editforms.py Wed Aug 12 19:09:32 2009 +0200
@@ -162,7 +162,7 @@
assert role in ('subject', 'object')
if default is None:
default = xml_escape(self.req._('<no value>'))
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
rschema = entity.schema.rschema(rtype)
lzone = self._build_landing_zone(landing_zone)
# compute value, checking perms, build form
@@ -457,7 +457,7 @@
:param rtype: the relation bridging `etype` and `peid`
:param role: the role played by the `peid` in the relation
"""
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
divonclick = "restoreInlinedEntity('%s', '%s', '%s')" % (peid, rtype,
entity.eid)
self.render_form(entity, peid, rtype, role, divonclick=divonclick)
--- a/web/views/editviews.py Wed Aug 12 18:40:52 2009 +0200
+++ b/web/views/editviews.py Wed Aug 12 19:09:32 2009 +0200
@@ -43,7 +43,7 @@
@cached
def filter_box_context_info(self):
- entity = self.entity(0, 0)
+ entity = self.rset.get_entity(0, 0)
role, eid, rtype, etype = self.req.search_state[1]
assert entity.eid == typed_eid(eid)
# the default behaviour is to fetch all unrelated entities and display
@@ -60,7 +60,7 @@
class OutOfContextSearch(EntityView):
id = 'outofcontext-search'
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
erset = entity.as_rset()
if self.req.match_search_state(erset):
self.w(u'<a href="%s" title="%s">%s</a> <a href="%s" title="%s">[...]</a>' % (
@@ -78,7 +78,7 @@
__select__ = match_form_params('relation')
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
relname, target = self.req.form.get('relation').rsplit('_', 1)
rschema = self.schema.rschema(relname)
hidden = 'hidden' in self.req.form
--- a/web/views/emailaddress.py Wed Aug 12 18:40:52 2009 +0200
+++ b/web/views/emailaddress.py Wed Aug 12 19:09:32 2009 +0200
@@ -76,7 +76,7 @@
__select__ = implements('EmailAddress')
def cell_call(self, row, col, **kwargs):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
if entity.reverse_primary_email:
self.w(u'<b>')
if entity.alias:
@@ -96,7 +96,7 @@
__select__ = implements('EmailAddress')
def cell_call(self, row, col, **kwargs):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
if entity.reverse_primary_email:
self.w(u'<b>')
if entity.alias:
@@ -119,4 +119,4 @@
__select__ = implements('EmailAddress')
def cell_call(self, row, col, **kwargs):
- self.w(self.entity(row, col).display_address())
+ self.w(self.rset.get_entity(row, col).display_address())
--- a/web/views/ibreadcrumbs.py Wed Aug 12 18:40:52 2009 +0200
+++ b/web/views/ibreadcrumbs.py Wed Aug 12 19:09:32 2009 +0200
@@ -36,7 +36,7 @@
separator = u' > '
def call(self, view=None, first_separator=True):
- entity = self.entity(0)
+ entity = self.rset.get_entity(0,0)
path = entity.breadcrumbs(view)
if path:
self.w(u'<span class="pathbar">')
@@ -80,7 +80,7 @@
id = 'breadcrumbs'
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
desc = xml_escape(cut(entity.dc_description(), 50))
self.w(u'<a href="%s" title="%s">%s</a>' % (
xml_escape(entity.absolute_url()), desc, bc_title(entity)))
--- a/web/views/idownloadable.py Wed Aug 12 18:40:52 2009 +0200
+++ b/web/views/idownloadable.py Wed Aug 12 19:09:32 2009 +0200
@@ -50,7 +50,7 @@
order = 10
def cell_call(self, row, col, title=None, label=None, **kwargs):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
download_box(self.w, entity, title, label)
@@ -91,7 +91,7 @@
def cell_call(self, row, col, title=None, **kwargs):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
url = xml_escape(entity.download_url())
self.w(u'<a href="%s">%s</a>' % (url, xml_escape(title or entity.dc_title())))
@@ -123,7 +123,7 @@
def cell_call(self, row, col, title=None, **kwargs):
"""the oneline view is a link to download the file"""
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
url = xml_escape(entity.absolute_url())
name = xml_escape(title or entity.download_file_name())
durl = xml_escape(entity.download_url())
@@ -145,7 +145,7 @@
self.w(u'</div>')
def cell_call(self, row, col, width=None, height=None, link=False):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
#if entity.data_format.startswith('image/'):
imgtag = u'<img src="%s" alt="%s" ' % (xml_escape(entity.download_url()),
xml_escape(entity.download_file_name()))
--- a/web/views/igeocodable.py Wed Aug 12 18:40:52 2009 +0200
+++ b/web/views/igeocodable.py Wed Aug 12 19:09:32 2009 +0200
@@ -40,7 +40,7 @@
self.w(simplejson.dumps(geodata))
def build_marker_data(self, row, extraparams):
- entity = self.entity(row, 0)
+ entity = self.rset.get_entity(row, 0)
return {'latitude': entity.latitude, 'longitude': entity.longitude,
'title': entity.dc_long_title(),
#icon defines : (icon._url, icon.size, icon.iconAncho', icon.shadow)
@@ -55,7 +55,7 @@
__select__ = implements(IGeocodable)
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
self.w(u'<div>%s</div>' % entity.view('oneline'))
# FIXME: we should call something like address-view if available
--- a/web/views/iprogress.py Wed Aug 12 18:40:52 2009 +0200
+++ b/web/views/iprogress.py Wed Aug 12 19:09:32 2009 +0200
@@ -59,7 +59,7 @@
def cell_call(self, row, col):
_ = self.req._
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
infos = {}
for col in self.columns:
meth = getattr(self, 'build_%s_cell' % col, None)
@@ -186,7 +186,7 @@
def cell_call(self, row, col):
self.req.add_css('cubicweb.iprogress.css')
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
widget = ProgressBarWidget(entity.done, entity.todo,
entity.revised_cost)
self.w(widget.render())
--- a/web/views/management.py Wed Aug 12 18:40:52 2009 +0200
+++ b/web/views/management.py Wed Aug 12 19:09:32 2009 +0200
@@ -79,7 +79,7 @@
def cell_call(self, row, col):
self.req.add_js('cubicweb.edition.js')
self.req.add_css('cubicweb.acl.css')
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
w = self.w
_ = self.req._
w(u'<h1><span class="etype">%s</span> <a href="%s">%s</a></h1>'
--- a/web/views/navigation.py Wed Aug 12 18:40:52 2009 +0200
+++ b/web/views/navigation.py Wed Aug 12 19:09:32 2009 +0200
@@ -187,7 +187,7 @@
context = 'navbottom'
order = 10
def call(self, view=None):
- entity = self.entity(0)
+ entity = self.rset.get_entity(0,0)
previous = entity.previous_entity()
next = entity.next_entity()
if previous or next:
--- a/web/views/old_calendar.py Wed Aug 12 18:40:52 2009 +0200
+++ b/web/views/old_calendar.py Wed Aug 12 19:09:32 2009 +0200
@@ -109,7 +109,7 @@
self.req.add_css('cubicweb.calendar.css')
schedule = {}
for row in xrange(len(self.rset.rows)):
- entity = self.entity(row)
+ entity = self.rset.get_entity(row,0)
infos = u'<div class="event">'
infos += self.view(itemvid, self.rset, row=row)
infos += u'</div>'
--- a/web/views/schema.py Wed Aug 12 18:40:52 2009 +0200
+++ b/web/views/schema.py Wed Aug 12 19:09:32 2009 +0200
@@ -199,7 +199,7 @@
__select__ = implements('CWEType')
def cell_call(self, row, col, **kwargs):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
final = entity.final
if final:
self.w(u'<em class="finalentity">')
@@ -227,7 +227,7 @@
__select__ = EntityView.__select__ & implements('CWEType')
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
self.w(u'<h2>%s</h2>' % _('Attributes'))
rset = self.req.execute('Any N,F,D,I,J,DE,A '
'ORDERBY AA WHERE A is CWAttribute, '
@@ -263,7 +263,7 @@
__select__ = EntityView.__select__ & implements('CWEType')
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
url = entity.absolute_url(vid='schemagraph')
self.w(u'<img src="%s" alt="%s"/>' % (
xml_escape(url),
@@ -274,7 +274,7 @@
__select__ = EntityView.__select__ & implements('CWEType')
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
self.w(u'<h2>%s</h2>' % _('Add permissions'))
rset = self.req.execute('Any P WHERE X add_permission P, '
'X eid %(x)s',
@@ -301,7 +301,7 @@
__select__ = EntityView.__select__ & implements('CWEType')
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
if entity.reverse_state_of:
self.w(u'<img src="%s" alt="%s"/>' % (
xml_escape(entity.absolute_url(vid='ewfgraph')),
@@ -377,7 +377,7 @@
def _generate(self, tmpfile):
"""display schema information for an entity"""
- entity = self.entity(self.row, self.col)
+ entity = self.rset.get_entity(self.row, self.col)
eschema = self.vreg.schema.eschema(entity.name)
visitor = OneHopESchemaVisitor(self.req, eschema,
skiptypes=skip_types(self.req))
@@ -389,7 +389,7 @@
def _generate(self, tmpfile):
"""display schema information for an entity"""
- entity = self.entity(self.row, self.col)
+ entity = self.rset.get_entity(self.row, self.col)
rschema = self.vreg.schema.rschema(entity.name)
visitor = OneHopRSchemaVisitor(self.req, rschema)
s2d.schema2dot(outputfile=tmpfile, visitor=visitor)
--- a/web/views/sparql.py Wed Aug 12 18:40:52 2009 +0200
+++ b/web/views/sparql.py Wed Aug 12 19:09:32 2009 +0200
@@ -108,7 +108,7 @@
datatype=xmlschema(celltype)),
name=varname)
else:
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
return E.binding(E.uri(entity.absolute_url()), name=varname)
def set_request_content_type(self):
--- a/web/views/tabs.py Wed Aug 12 18:40:52 2009 +0200
+++ b/web/views/tabs.py Wed Aug 12 19:09:32 2009 +0200
@@ -160,7 +160,7 @@
vid = 'list'
def cell_call(self, row, col):
- rset = self.entity(row, col).related(self.rtype, role(self))
+ rset = self.rset.get_entity(row, col).related(self.rtype, role(self))
self.w(u'<div class="mainInfo">')
if self.title:
self.w(tags.h1(self.req._(self.title)))
--- a/web/views/treeview.py Wed Aug 12 18:40:52 2009 +0200
+++ b/web/views/treeview.py Wed Aug 12 19:09:32 2009 +0200
@@ -63,7 +63,7 @@
id = 'filetree-oneline'
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
if ITree.is_implemented_by(entity.__class__) and not entity.is_leaf():
self.w(u'<div class="folder">%s</div>\n' % entity.view('oneline'))
else:
@@ -77,7 +77,7 @@
def cell_call(self, row, col, vid='oneline', parentvid='treeview', treeid=None):
assert treeid is not None
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
itemview = self.view(vid, self.rset, row=row, col=col)
if row == len(self.rset) - 1:
self.w(u'<li class="last">%s</li>' % itemview)
@@ -102,7 +102,7 @@
def cell_call(self, row, col, treeid, vid='oneline', parentvid='treeview'):
w = self.w
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
liclasses = []
is_last = row == len(self.rset) - 1
is_open = self.open_state(entity.eid, treeid)
--- a/web/views/workflow.py Wed Aug 12 18:40:52 2009 +0200
+++ b/web/views/workflow.py Wed Aug 12 19:09:32 2009 +0200
@@ -47,7 +47,7 @@
__select__ = implements(IWorkflowable) & match_form_params('treid')
def cell_call(self, row, col):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
state = entity.in_state[0]
transition = self.req.entity_from_eid(self.req.form['treid'])
dest = transition.destination()
@@ -118,7 +118,7 @@
__select__ = implements('TrInfo')
def cell_call(self, row, col, cellvid=None):
- self.w(self.entity(row, col).view('reledit', rtype='comment'))
+ self.w(self.rset.get_entity(row, col).view('reledit', rtype='comment'))
class StateInContextView(view.EntityView):
@@ -150,7 +150,7 @@
cache_max_age = 60*60*2 # stay in http cache for 2 hours by default
def cell_call(self, row, col, **kwargs):
- entity = self.entity(row, col)
+ entity = self.rset.get_entity(row, col)
self.w(u'<h1>%s</h1>' % (self.req._('workflow for %s')
% display_name(self.req, entity.name)))
self.w(u'<img src="%s" alt="%s"/>' % (
@@ -217,7 +217,7 @@
def _generate(self, tmpfile):
"""display schema information for an entity"""
- entity = self.entity(self.row, self.col)
+ entity = self.rset.get_entity(self.row, self.col)
visitor = WorkflowVisitor(entity)
prophdlr = WorkflowDotPropsHandler(self.req)
generator = GraphGenerator(DotBackend('workflow', 'LR',
--- a/web/views/xmlrss.py Wed Aug 12 18:40:52 2009 +0200
+++ b/web/views/xmlrss.py Wed Aug 12 19:09:32 2009 +0200
@@ -117,7 +117,7 @@
__select__ = non_final_entity() & one_line_rset()
def feed_url(self):
- return self.entity(0, 0).rss_feed_url()
+ return self.rset.get_entity(0, 0).rss_feed_url()
class RSSIconBox(box.BoxTemplate):